diff --git a/.gitignore b/.gitignore index af48864ed87..11cfefed5f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ node_modules/ -built/ +built/* tests/cases/*.js tests/cases/*/*.js tests/cases/*/*/*.js @@ -23,6 +23,7 @@ tests/services/baselines/prototyping/local/* tests/services/browser/typescriptServices.js scripts/processDiagnosticMessages.d.ts scripts/processDiagnosticMessages.js +scripts/importDefinitelyTypedTests.js src/harness/*.js rwc-report.html *.swp @@ -35,4 +36,4 @@ tests/*.d.ts *.config scripts/debug.bat scripts/run.bat -coverage/ \ No newline at end of file +coverage/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 890ec4349da..a6ab80a408d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,7 +32,7 @@ To run all tests, invoke the runtests target using jake: `jake runtests` -This will all tests; to run only a specific subset of tests, use: +This run will all tests; to run only a specific subset of tests, use: `jake runtests tests=` diff --git a/Jakefile b/Jakefile index 060690589b6..79907e8a63a 100644 --- a/Jakefile +++ b/Jakefile @@ -43,7 +43,6 @@ var compilerSources = [ var servicesSources = [ "core.ts", - "sys.ts", "types.ts", "scanner.ts", "parser.ts", @@ -71,6 +70,7 @@ var harnessSources = [ "fourslashRunner.ts", "projectsRunner.ts", "unittestrunner.ts", + "loggedIO.ts", "rwcRunner.ts", "runner.ts" ].map(function (f) { @@ -123,6 +123,8 @@ function concatenateFiles(destinationFile, sourceFiles) { } var useDebugMode = false; +var host = (process.env.host || process.env.TYPESCRIPT_HOST || "node"); +var compilerFilename = "tsc.js"; /* Compiles a file from a list of sources * @param outFile: the target file name * @param sources: an array of the names of the source files @@ -134,10 +136,9 @@ var useDebugMode = false; function compileFile(outFile, sources, prereqs, prefixes, useBuiltCompiler, noOutFile) { file(outFile, prereqs, function() { var dir = useBuiltCompiler ? builtLocalDirectory : LKGDirectory; - var compilerFilename = "tsc.js"; var options = "-removeComments --module commonjs -noImplicitAny "; //" -propagateEnumConstants " - var cmd = (process.env.host || process.env.TYPESCRIPT_HOST || "node") + " " + dir + compilerFilename + " " + options + " "; + var cmd = host + " " + dir + compilerFilename + " " + options + " "; if (useDebugMode) { cmd = cmd + " " + path.join(harnessDirectory, "external/es5compat.ts") + " " + path.join(harnessDirectory, "external/json2.ts") + " "; } @@ -230,7 +231,7 @@ task("generate-diagnostics", [diagnosticInfoMapTs]) // Local target to build the compiler and services -var tscFile = path.join(builtLocalDirectory, "tsc.js"); +var tscFile = path.join(builtLocalDirectory, compilerFilename); compileFile(tscFile, compilerSources, [builtLocalDirectory, copyright].concat(compilerSources), [copyright], /*useBuiltCompiler:*/ false); var servicesFile = path.join(builtLocalDirectory, "typescriptServices.js"); @@ -312,9 +313,9 @@ function exec(cmd, completeHandler) { complete(); }); ex.addListener("error", function(e, status) { - process.stderr.write(status); - process.stderr.write(e); - complete(); + process.stderr.write(status); + process.stderr.write(e); + complete(); }) try{ ex.run(); @@ -360,10 +361,15 @@ task("runtests", ["tests", builtLocalDirectory], function() { if(fs.existsSync(testConfigFile)) { fs.unlinkSync(testConfigFile); } + if(tests) { writeTestConfigFile(tests, testConfigFile); } + if (tests && tests.toLocaleLowerCase() === "rwc") { + testTimeout = 50000; + } + colors = process.env.colors || process.env.color colors = colors ? ' --no-colors ' : '' tests = tests ? ' -g ' + tests : ''; @@ -377,9 +383,9 @@ task("runtests", ["tests", builtLocalDirectory], function() { desc("Generates code coverage data via instanbul") task("generate-code-coverage", ["tests", builtLocalDirectory], function () { - var cmd = 'istanbul cover node_modules/mocha/bin/_mocha -- -R min -t ' + testTimeout + ' ' + run; - console.log(cmd); - exec(cmd); + var cmd = 'istanbul cover node_modules/mocha/bin/_mocha -- -R min -t ' + testTimeout + ' ' + run; + console.log(cmd); + exec(cmd); }, { async: true }); // Browser tests @@ -464,7 +470,7 @@ compileFile(webhostJsPath, [webhostPath], [tscFile, webhostPath].concat(libraryT desc("Builds the tsc web host"); task("webhost", [webhostJsPath], function() { - jake.cpR(path.join(builtLocalDirectory, "lib.d.ts"), "tests/webhost/", {silent: true}); + jake.cpR(path.join(builtLocalDirectory, "lib.d.ts"), "tests/webhost/", {silent: true}); }); // Perf compiler @@ -473,3 +479,36 @@ var perftscJsPath = "built/local/perftsc.js"; compileFile(perftscJsPath, [perftscPath], [tscFile, perftscPath, "tests/perfsys.ts"].concat(libraryTargets), [], true); desc("Builds augmented version of the compiler for perf tests"); task("perftsc", [perftscJsPath]); + +// Instrumented compiler +var loggedIOpath = harnessDirectory + 'loggedIO.ts'; +var loggedIOJsPath = builtLocalDirectory + 'loggedIO.js'; +file(loggedIOJsPath, [builtLocalDirectory, loggedIOpath], function() { + var temp = builtLocalDirectory + 'temp'; + jake.mkdirP(temp); + var options = "--outdir " + temp + ' ' + loggedIOpath; + var cmd = host + " " + LKGDirectory + compilerFilename + " " + options + " "; + console.log(cmd + "\n"); + var ex = jake.createExec([cmd]); + ex.addListener("cmdEnd", function() { + fs.renameSync(temp + '/harness/loggedIO.js', loggedIOJsPath); + jake.rmRf(temp); + complete(); + }); + ex.run(); +}, {async: true}); + +var instrumenterPath = harnessDirectory + 'instrumenter.ts'; +var instrumenterJsPath = builtLocalDirectory + 'instrumenter.js'; +compileFile(instrumenterJsPath, [instrumenterPath], [tscFile, instrumenterPath], [], true); + +desc("Builds an instrumented tsc.js"); +task('tsc-instrumented', [loggedIOJsPath, instrumenterJsPath, tscFile], function() { + var cmd = host + ' ' + instrumenterJsPath + ' record iocapture ' + builtLocalDirectory + compilerFilename; + console.log(cmd); + var ex = jake.createExec([cmd]); + ex.addListener("cmdEnd", function() { + complete(); + }); + ex.run(); +}, { async: true }); diff --git a/bin/lib.core.d.ts b/bin/lib.core.d.ts index b3bd2ae8e55..1d3ed6dca4c 100644 --- a/bin/lib.core.d.ts +++ b/bin/lib.core.d.ts @@ -956,11 +956,24 @@ declare var JSON: JSON; ///////////////////////////// interface Array { + /** + * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array. + */ + length: number; /** * Returns a string representation of an array. */ toString(): string; toLocaleString(): string; + /** + * Appends new elements to an array, and returns the new length of the array. + * @param items New elements of the Array. + */ + push(...items: T[]): number; + /** + * Removes the last element from an array and returns it. + */ + pop(): T; /** * Combines two or more arrays. * @param items Additional items to add to the end of array1. @@ -976,15 +989,6 @@ interface Array { * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; - /** - * Removes the last element from an array and returns it. - */ - pop(): T; - /** - * Appends new elements to an array, and returns the new length of the array. - * @param items New elements of the Array. - */ - push(...items: T[]): number; /** * Reverses the elements in an Array. */ @@ -1101,11 +1105,6 @@ interface Array { */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - /** - * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array. - */ - length: number; - [n: number]: T; } declare var Array: { diff --git a/bin/lib.d.ts b/bin/lib.d.ts index 6aea1ab65f6..a3081f2c8d7 100644 --- a/bin/lib.d.ts +++ b/bin/lib.d.ts @@ -956,11 +956,24 @@ declare var JSON: JSON; ///////////////////////////// interface Array { + /** + * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array. + */ + length: number; /** * Returns a string representation of an array. */ toString(): string; toLocaleString(): string; + /** + * Appends new elements to an array, and returns the new length of the array. + * @param items New elements of the Array. + */ + push(...items: T[]): number; + /** + * Removes the last element from an array and returns it. + */ + pop(): T; /** * Combines two or more arrays. * @param items Additional items to add to the end of array1. @@ -976,15 +989,6 @@ interface Array { * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; - /** - * Removes the last element from an array and returns it. - */ - pop(): T; - /** - * Appends new elements to an array, and returns the new length of the array. - * @param items New elements of the Array. - */ - push(...items: T[]): number; /** * Reverses the elements in an Array. */ @@ -1101,11 +1105,6 @@ interface Array { */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - /** - * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array. - */ - length: number; - [n: number]: T; } declare var Array: { diff --git a/bin/services.js b/bin/services.js deleted file mode 100644 index 0d632bd77ea..00000000000 --- a/bin/services.js +++ /dev/null @@ -1,13134 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ - -var ts; -(function (ts) { - ts.Diagnostics = { - Unknown_compiler_option_0: { code: 6001, category: 1 /* Error */, key: "Unknown compiler option '{0}'." }, - File_0_not_found: { code: 6002, category: 1 /* Error */, key: "File '{0}' not found." }, - File_0_must_have_extension_ts_or_d_ts: { code: 6003, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, - Unrecognized_escape_sequence: { code: 1000, category: 1 /* Error */, key: "Unrecognized escape sequence." }, - Unexpected_character_0: { code: 1001, category: 1 /* Error */, key: "Unexpected character {0}." }, - Missing_close_quote_character: { code: 1002, category: 1 /* Error */, key: "Missing close quote character." }, - Identifier_expected: { code: -9999999, category: 1 /* Error */, key: "Identifier expected." }, - _0_keyword_expected: { code: 1004, category: 1 /* Error */, key: "'{0}' keyword expected." }, - _0_expected: { code: -9999999, category: 1 /* Error */, key: "'{0}' expected." }, - Identifier_expected_0_is_a_keyword: { code: 1006, category: 1 /* Error */, key: "Identifier expected; '{0}' is a keyword." }, - Automatic_semicolon_insertion_not_allowed: { code: 1007, category: 1 /* Error */, key: "Automatic semicolon insertion not allowed." }, - Trailing_comma_not_allowed: { code: 1009, category: 1 /* Error */, key: "Trailing comma not allowed." }, - Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." }, - public_or_private_modifier_must_precede_static: { code: 1011, category: 1 /* Error */, key: "'public' or 'private' modifier must precede 'static'." }, - Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." }, - Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation." }, - A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list." }, - Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1 /* Error */, key: "Parameter cannot have question mark and initializer." }, - A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1 /* Error */, key: "A required parameter cannot follow an optional parameter." }, - An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1 /* Error */, key: "An index signature cannot have a rest parameter." }, - An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1 /* Error */, key: "An index signature parameter cannot have an accessibility modifier." }, - An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1 /* Error */, key: "An index signature parameter cannot have a question mark." }, - An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1 /* Error */, key: "An index signature parameter cannot have an initializer." }, - An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation." }, - An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation." }, - An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'." }, - extends_clause_already_seen: { code: 1024, category: 1 /* Error */, key: "'extends' clause already seen." }, - extends_clause_must_precede_implements_clause: { code: 1025, category: 1 /* Error */, key: "'extends' clause must precede 'implements' clause." }, - Classes_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "Classes can only extend a single class." }, - implements_clause_already_seen: { code: 1027, category: 1 /* Error */, key: "'implements' clause already seen." }, - Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen." }, - _0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier." }, - _0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen." }, - _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element." }, - Interface_declaration_cannot_have_implements_clause: { code: 1032, category: 1 /* Error */, key: "Interface declaration cannot have 'implements' clause." }, - super_invocation_cannot_have_type_arguments: { code: 1034, category: 1 /* Error */, key: "'super' invocation cannot have type arguments." }, - Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names." }, - Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts." }, - A_function_implementation_cannot_be_declared_in_an_ambient_context: { code: 1037, category: 1 /* Error */, key: "A function implementation cannot be declared in an ambient context." }, - A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1 /* Error */, key: "A 'declare' modifier cannot be used in an already ambient context." }, - Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1 /* Error */, key: "Initializers are not allowed in ambient contexts." }, - _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a module element." }, - A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an interface declaration." }, - A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: 1 /* Error */, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, - A_rest_parameter_cannot_be_optional: { code: 1047, category: 1 /* Error */, key: "A rest parameter cannot be optional." }, - A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1 /* Error */, key: "A rest parameter cannot have an initializer." }, - A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1 /* Error */, key: "A 'set' accessor must have exactly one parameter." }, - A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1 /* Error */, key: "A 'set' accessor cannot have an optional parameter." }, - A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer." }, - A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter." }, - A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters." }, - Modifiers_cannot_appear_here: { code: 1055, category: 1 /* Error */, key: "Modifiers cannot appear here." }, - Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher." }, - Enum_member_must_have_initializer: { code: -9999999, category: 1 /* Error */, key: "Enum member must have initializer." }, - An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module." }, - Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers." }, - module_class_interface_enum_import_or_statement: { code: 1067, category: 3 /* NoPrefix */, key: "module, class, interface, enum, import or statement" }, - Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1 /* Error */, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, - statement: { code: 1069, category: 3 /* NoPrefix */, key: "statement" }, - case_or_default_clause: { code: 1070, category: 3 /* NoPrefix */, key: "case or default clause" }, - identifier: { code: 1071, category: 3 /* NoPrefix */, key: "identifier" }, - call_construct_index_property_or_function_signature: { code: 1072, category: 3 /* NoPrefix */, key: "call, construct, index, property or function signature" }, - expression: { code: 1073, category: 3 /* NoPrefix */, key: "expression" }, - type_name: { code: 1074, category: 3 /* NoPrefix */, key: "type name" }, - property_or_accessor: { code: 1075, category: 3 /* NoPrefix */, key: "property or accessor" }, - parameter: { code: 1076, category: 3 /* NoPrefix */, key: "parameter" }, - type: { code: 1077, category: 3 /* NoPrefix */, key: "type" }, - type_parameter: { code: 1078, category: 3 /* NoPrefix */, key: "type parameter" }, - A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration." }, - Invalid_reference_directive_syntax: { code: 1084, category: 1 /* Error */, key: "Invalid 'reference' directive syntax." }, - Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher." }, - An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1 /* Error */, key: "An accessor cannot be declared in an ambient context." }, - _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a constructor declaration." }, - _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a parameter." }, - Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1 /* Error */, key: "Only a single variable declaration is allowed in a 'for...in' statement." }, - Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1 /* Error */, key: "Type parameters cannot appear on a constructor declaration." }, - Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1 /* Error */, key: "Type annotation cannot appear on a constructor declaration." }, - An_accessor_cannot_have_type_parameters: { code: 1094, category: 1 /* Error */, key: "An accessor cannot have type parameters." }, - A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1 /* Error */, key: "A 'set' accessor cannot have a return type annotation." }, - An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1 /* Error */, key: "An index signature must have exactly one parameter." }, - _0_list_cannot_be_empty: { code: 1097, category: 1 /* Error */, key: "'{0}' list cannot be empty." }, - Type_parameter_list_cannot_be_empty: { code: 1098, category: 1 /* Error */, key: "Type parameter list cannot be empty." }, - Type_argument_list_cannot_be_empty: { code: 1099, category: 1 /* Error */, key: "Type argument list cannot be empty." }, - Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode." }, - with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode." }, - delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode." }, - Invalid_left_hand_side_in_for_in_statement: { code: 1103, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." }, - A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement." }, - A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, - Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary." }, - A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body." }, - Expression_expected: { code: -9999999, category: 1 /* Error */, key: "Expression expected." }, - Type_expected: { code: -9999999, category: 1 /* Error */, key: "Type expected." }, - A_constructor_implementation_cannot_be_declared_in_an_ambient_context: { code: 1111, category: 1 /* Error */, key: "A constructor implementation cannot be declared in an ambient context." }, - A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional." }, - A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement." }, - Duplicate_label_0: { code: 1114, category: 1 /* Error */, key: "Duplicate label '{0}'" }, - A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1 /* Error */, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, - A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1 /* Error */, key: "A 'break' statement can only jump to a label of an enclosing statement." }, - An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1 /* Error */, key: "An object literal cannot have multiple properties with the same name in strict mode." }, - An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1 /* Error */, key: "An object literal cannot have multiple get/set accessors with the same name." }, - An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name." }, - An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers." }, - Duplicate_identifier_0: { code: 2000, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, - new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 2068, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, - Multiple_constructor_implementations_are_not_allowed: { code: 2070, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." }, - A_class_may_only_implement_another_class_or_interface: { code: 2074, category: 1 /* Error */, key: "A class may only implement another class or interface." }, - get_and_set_accessor_must_have_the_same_type: { code: 2096, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." }, - Static_members_cannot_reference_class_type_parameters: { code: 2099, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, - super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2102, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, - The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2112, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2113, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2114, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, - The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2115, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, - The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2116, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, - The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2117, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, - The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2118, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, - The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2119, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, - A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2126, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, - Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2127, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." }, - A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2131, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, - Untyped_function_calls_may_not_accept_type_arguments: { code: 2158, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." }, - The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2120, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2121, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, - Setters_cannot_return_a_value: { code: 2122, category: 1 /* Error */, key: "Setters cannot return a value." }, - Invalid_left_hand_side_of_assignment_expression: { code: 2130, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." }, - Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2134, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, - All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2135, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." }, - The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2139, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, - Overload_signatures_must_all_be_public_or_private: { code: 2150, category: 1 /* Error */, key: "Overload signatures must all be public or private." }, - Overload_signatures_must_all_be_exported_or_not_exported: { code: 2151, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." }, - Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2152, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." }, - Overload_signatures_must_all_be_optional_or_required: { code: 2153, category: 1 /* Error */, key: "Overload signatures must all be optional or required." }, - this_cannot_be_referenced_in_constructor_arguments: { code: 2155, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." }, - Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2161, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, - A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2163, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." }, - Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2189, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, - Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2190, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, - Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2192, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, - super_cannot_be_referenced_in_constructor_arguments: { code: 2193, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." }, - Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2194, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" }, - Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2196, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." }, - Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2197, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, - Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2200, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, - Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2205, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, - Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2206, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, - Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2207, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, - Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2224, category: 1 /* Error */, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, - Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2225, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, - Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2229, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, - Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2230, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, - Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2231, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." }, - Duplicate_string_index_signature: { code: 2232, category: 1 /* Error */, key: "Duplicate string index signature." }, - Duplicate_number_index_signature: { code: 2233, category: 1 /* Error */, key: "Duplicate number index signature." }, - All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2234, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, - Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2235, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, - Constructor_implementation_expected: { code: 2240, category: 1 /* Error */, key: "Constructor implementation expected." }, - An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2245, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, - A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2246, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, - Circular_definition_of_import_alias_0: { code: 3000, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, - Cannot_find_name_0: { code: 3001, category: 1 /* Error */, key: "Cannot find name '{0}'." }, - Module_0_has_no_exported_member_1: { code: 3002, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, - Cannot_find_external_module_0: { code: 3003, category: 1 /* Error */, key: "Cannot find external module '{0}'." }, - A_module_cannot_have_more_than_one_export_assignment: { code: 3004, category: 1 /* Error */, key: "A module cannot have more than one export assignment." }, - Type_0_recursively_references_itself_as_a_base_type: { code: 3005, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." }, - A_class_may_only_extend_another_class: { code: 3006, category: 1 /* Error */, key: "A class may only extend another class." }, - An_interface_may_only_extend_a_class_or_another_interface: { code: 3007, category: 1 /* Error */, key: "An interface may only extend a class or another interface." }, - Generic_type_0_requires_1_type_argument_s: { code: 3008, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." }, - Type_0_is_not_generic: { code: 3009, category: 1 /* Error */, key: "Type '{0}' is not generic." }, - Cannot_find_global_type_0: { code: 3010, category: 1 /* Error */, key: "Cannot find global type '{0}'." }, - Global_type_0_must_be_a_class_or_interface_type: { code: 3011, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." }, - Global_type_0_must_have_1_type_parameter_s: { code: 3012, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." }, - this_cannot_be_referenced_in_a_module_body: { code: 3013, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." }, - this_cannot_be_referenced_in_a_static_property_initializer: { code: 3014, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." }, - this_cannot_be_referenced_in_current_location: { code: -9999999, category: 1 /* Error */, key: "'this' cannot be referenced in current location." }, - super_can_only_be_referenced_in_a_derived_class: { code: 3015, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." }, - Property_0_does_not_exist_on_type_1: { code: 3017, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." }, - An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 3018, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, - Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 3019, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}':" }, - Type_0_does_not_satisfy_the_constraint_1: { code: 3019, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." }, - Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 3020, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." }, - Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 3021, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." }, - Only_a_void_function_can_be_called_with_the_new_keyword: { code: 3022, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." }, - Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 3023, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, - Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 3024, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, - Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 3024, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, - No_best_common_type_exists_among_return_expressions: { code: 3027, category: 1 /* Error */, key: "No best common type exists among return expressions." }, - Operator_0_cannot_be_applied_to_types_1_and_2: { code: 3028, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, - No_best_common_type_exists_between_0_and_1: { code: 3029, category: 1 /* Error */, key: "No best common type exists between '{0}' and '{1}'." }, - No_best_common_type_exists_between_0_1_and_2: { code: 3030, category: 1 /* Error */, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, - A_rest_parameter_must_be_of_an_array_type: { code: 3031, category: 1 /* Error */, key: "A rest parameter must be of an array type." }, - A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 3032, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." }, - Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 3033, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." }, - Duplicate_function_implementation: { code: 3034, category: 1 /* Error */, key: "Duplicate function implementation." }, - Overload_signature_is_not_compatible_with_function_implementation: { code: 3035, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." }, - Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 3036, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, - Index_signature_is_missing_in_type_0: { code: 4003, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." }, - Index_signatures_are_incompatible_Colon: { code: 4004, category: 1 /* Error */, key: "Index signatures are incompatible:" }, - Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4016, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4017, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 4018, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 4019, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, - In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 4024, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, - Named_properties_0_of_types_1_and_2_are_not_identical: { code: 4032, category: 3 /* NoPrefix */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, - Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1 /* Error */, key: "Cannot find the common subdirectory path for the input files." }, - Cannot_read_file_0_Colon_1: { code: 5012, category: 1 /* Error */, key: "Cannot read file '{0}': {1}" }, - Unsupported_file_encoding: { code: 5013, category: 3 /* NoPrefix */, key: "Unsupported file encoding." }, - Could_not_write_file_0_Colon_1: { code: 5033, category: 1 /* Error */, key: "Could not write file '{0}': {1}" }, - Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1 /* Error */, key: "Option mapRoot cannot be specified without specifying sourcemap option." }, - Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1 /* Error */, key: "Option sourceRoot cannot be specified without specifying sourcemap option." }, - Version_0: { code: 6029, category: 2 /* Message */, key: "Version {0}" }, - Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1 /* Error */, key: "Variable '{0}' implicitly has an '{1}' type." }, - Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1 /* Error */, key: "Parameter '{0}' implicitly has an '{1}' type." }, - Member_0_implicitly_has_an_1_type: { code: 7008, category: 1 /* Error */, key: "Member '{0}' implicitly has an '{1}' type." }, - new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: 1 /* Error */, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." }, - _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1 /* Error */, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, - Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1 /* Error */, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, - Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1 /* Error */, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Lambda_function_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7014, category: 1 /* Error */, key: "Lambda function, which lacks return-type annotation, implicitly has an '{0}' return type." }, - Array_literal_implicitly_has_an_0_type: { code: 7015, category: 1 /* Error */, key: "Array literal implicitly has an '{0}' type." }, - Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1 /* Error */, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, - Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1 /* Error */, key: "Index signature of object type implicitly has an 'any' type." }, - Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1 /* Error */, key: "Object literal's property '{0}' implicitly has an '{1}' type." }, - Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1 /* Error */, key: "Rest parameter '{0}' implicitly has an 'any[]' type." }, - Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1 /* Error */, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Variable_declaration_list_cannot_be_empty: { code: -9999999, category: 1 /* Error */, key: "Variable declaration list cannot be empty." }, - Digit_expected: { code: -9999999, category: 1 /* Error */, key: "Digit expected." }, - Hexadecimal_digit_expected: { code: -9999999, category: 1 /* Error */, key: "Hexadecimal digit expected." }, - Unexpected_end_of_text: { code: -9999999, category: 1 /* Error */, key: "Unexpected end of text." }, - Unterminated_string_constant: { code: -9999999, category: 1 /* Error */, key: "Unterminated string constant." }, - Invalid_character: { code: -9999999, category: 1 /* Error */, key: "Invalid character." }, - Declaration_or_statement_expected: { code: -9999999, category: 1 /* Error */, key: "Declaration or statement expected." }, - Statement_expected: { code: -9999999, category: 1 /* Error */, key: "Statement expected." }, - case_or_default_expected: { code: -9999999, category: 1 /* Error */, key: "'case' or 'default' expected." }, - Property_or_signature_expected: { code: -9999999, category: 1 /* Error */, key: "Property or signature expected." }, - Enum_member_expected: { code: -9999999, category: 1 /* Error */, key: "Enum member expected." }, - Type_reference_expected: { code: -9999999, category: 1 /* Error */, key: "Type reference expected." }, - Variable_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Variable declaration expected." }, - Argument_expression_expected: { code: -9999999, category: 1 /* Error */, key: "Argument expression expected." }, - Property_assignment_expected: { code: -9999999, category: 1 /* Error */, key: "Property assignment expected." }, - Expression_or_comma_expected: { code: -9999999, category: 1 /* Error */, key: "Expression or comma expected." }, - Parameter_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Parameter declaration expected." }, - Type_parameter_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Type parameter declaration expected." }, - Type_argument_expected: { code: -9999999, category: 1 /* Error */, key: "Type argument expected." }, - String_literal_expected: { code: -9999999, category: 1 /* Error */, key: "String literal expected." }, - not_preceded_by_parameter_list: { code: -9999999, category: 1 /* Error */, key: "'=>' not preceded by parameter list." }, - Invalid_assignment_target: { code: -9999999, category: 1 /* Error */, key: "Invalid assignment target." }, - super_must_be_followed_by_argument_list_or_member_access: { code: -9999999, category: 1 /* Error */, key: "'super' must be followed by argument list or member access." }, - Line_break_not_permitted_here: { code: -9999999, category: 1 /* Error */, key: "Line break not permitted here." }, - catch_or_finally_expected: { code: -9999999, category: 1 /* Error */, key: "'catch' or 'finally' expected." }, - Block_or_expected: { code: -9999999, category: 1 /* Error */, key: "Block or ';' expected." }, - Modifiers_not_permitted_on_index_signature_members: { code: -9999999, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." }, - Class_member_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Class member declaration expected." }, - Declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Declaration expected." }, - Invalid_reference_comment: { code: -9999999, category: 1 /* Error */, key: "Invalid reference comment." }, - File_0_is_not_an_external_module: { code: -9999999, category: 1 /* Error */, key: "File '{0}' is not an external module." }, - Excessive_stack_depth_comparing_types_0_and_1: { code: -9999999, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, - Type_0_is_not_assignable_to_type_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}':" }, - Type_0_is_not_assignable_to_type_1: { code: -9999999, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." }, - Property_0_is_missing_in_type_1: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." }, - Private_property_0_cannot_be_reimplemented: { code: -9999999, category: 1 /* Error */, key: "Private property '{0}' cannot be reimplemented." }, - Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2012, category: 1 /* Error */, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, - Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: -9999999, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, - Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: -9999999, category: 1 /* Error */, key: "Only public methods of the base class are accessible via the 'super' keyword" }, - A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: -9999999, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, - Constructors_for_derived_classes_must_contain_a_super_call: { code: -9999999, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." }, - Import_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Import name cannot be '{0}'" }, - Type_parameter_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" }, - Class_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Class name cannot be '{0}'" }, - Interface_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Interface name cannot be '{0}'" }, - Enum_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Enum name cannot be '{0}'" }, - Types_of_property_0_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of property '{0}' are incompatible:" }, - Types_of_parameters_0_and_1_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, - Unknown_identifier_0: { code: -9999999, category: 1 /* Error */, key: "Unknown identifier '{0}'." }, - Property_0_is_inaccessible: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is inaccessible." }, - Function_implementation_expected: { code: -9999999, category: 1 /* Error */, key: "Function implementation expected." }, - Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, - Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, - Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: -9999999, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, - Class_0_incorrectly_extends_base_class_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}':" }, - Class_0_incorrectly_extends_base_class_1: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: -9999999, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, - Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: -9999999, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, - Class_0_incorrectly_implements_interface_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}':" }, - Class_0_incorrectly_implements_interface_1: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." }, - Interface_0_incorrectly_extends_interface_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}':" }, - Interface_0_incorrectly_extends_interface_1: { code: -9999999, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." }, - Ambient_external_modules_cannot_be_nested_in_other_modules: { code: -9999999, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." }, - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: -9999999, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." }, - A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, - A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, - Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: -9999999, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, - Import_declaration_conflicts_with_local_declaration_of_0: { code: -9999999, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" }, - Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: -9999999, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" }, - Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: -9999999, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, - Argument_for_module_option_must_be_commonjs_or_amd: { code: -9999999, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, - Argument_for_target_option_must_be_es3_or_es5: { code: -9999999, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3' or 'es5'." }, - Compiler_option_0_expects_an_argument: { code: -9999999, category: 1 /* Error */, key: "Compiler option '{0}' expects an argument." }, - Unterminated_quoted_string_in_response_file_0: { code: -9999999, category: 1 /* Error */, key: "Unterminated quoted string in response file '{0}'." }, - Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: -9999999, category: 1 /* Error */, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, - Unsupported_locale_0: { code: -9999999, category: 1 /* Error */, key: "Unsupported locale {0}." }, - Unable_to_open_file_0: { code: -9999999, category: 1 /* Error */, key: "Unable to open file {0}." }, - Corrupted_locale_file_0: { code: -9999999, category: 1 /* Error */, key: "Corrupted locale file {0}." }, - No_input_files_specified: { code: -9999999, category: 1 /* Error */, key: "No input files specified." } - }; -})(ts || (ts = {})); -var ts; -(function (ts) { - var textToToken = { - "any": 101 /* AnyKeyword */, - "boolean": 102 /* BooleanKeyword */, - "break": 56 /* BreakKeyword */, - "case": 57 /* CaseKeyword */, - "catch": 58 /* CatchKeyword */, - "class": 59 /* ClassKeyword */, - "continue": 61 /* ContinueKeyword */, - "const": 60 /* ConstKeyword */, - "constructor": 103 /* ConstructorKeyword */, - "debugger": 62 /* DebuggerKeyword */, - "declare": 104 /* DeclareKeyword */, - "default": 63 /* DefaultKeyword */, - "delete": 64 /* DeleteKeyword */, - "do": 65 /* DoKeyword */, - "else": 66 /* ElseKeyword */, - "enum": 67 /* EnumKeyword */, - "export": 68 /* ExportKeyword */, - "extends": 69 /* ExtendsKeyword */, - "false": 70 /* FalseKeyword */, - "finally": 71 /* FinallyKeyword */, - "for": 72 /* ForKeyword */, - "function": 73 /* FunctionKeyword */, - "get": 105 /* GetKeyword */, - "if": 74 /* IfKeyword */, - "implements": 92 /* ImplementsKeyword */, - "import": 75 /* ImportKeyword */, - "in": 76 /* InKeyword */, - "instanceof": 77 /* InstanceOfKeyword */, - "interface": 93 /* InterfaceKeyword */, - "let": 94 /* LetKeyword */, - "module": 106 /* ModuleKeyword */, - "new": 78 /* NewKeyword */, - "null": 79 /* NullKeyword */, - "number": 108 /* NumberKeyword */, - "package": 95 /* PackageKeyword */, - "private": 96 /* PrivateKeyword */, - "protected": 97 /* ProtectedKeyword */, - "public": 98 /* PublicKeyword */, - "require": 107 /* RequireKeyword */, - "return": 80 /* ReturnKeyword */, - "set": 109 /* SetKeyword */, - "static": 99 /* StaticKeyword */, - "string": 110 /* StringKeyword */, - "super": 81 /* SuperKeyword */, - "switch": 82 /* SwitchKeyword */, - "this": 83 /* ThisKeyword */, - "throw": 84 /* ThrowKeyword */, - "true": 85 /* TrueKeyword */, - "try": 86 /* TryKeyword */, - "typeof": 87 /* TypeOfKeyword */, - "var": 88 /* VarKeyword */, - "void": 89 /* VoidKeyword */, - "while": 90 /* WhileKeyword */, - "with": 91 /* WithKeyword */, - "yield": 100 /* YieldKeyword */, - "{": 5 /* OpenBraceToken */, - "}": 6 /* CloseBraceToken */, - "(": 7 /* OpenParenToken */, - ")": 8 /* CloseParenToken */, - "[": 9 /* OpenBracketToken */, - "]": 10 /* CloseBracketToken */, - ".": 11 /* DotToken */, - "...": 12 /* DotDotDotToken */, - ";": 13 /* SemicolonToken */, - ",": 14 /* CommaToken */, - "<": 15 /* LessThanToken */, - ">": 16 /* GreaterThanToken */, - "<=": 17 /* LessThanEqualsToken */, - ">=": 18 /* GreaterThanEqualsToken */, - "==": 19 /* EqualsEqualsToken */, - "!=": 20 /* ExclamationEqualsToken */, - "===": 21 /* EqualsEqualsEqualsToken */, - "!==": 22 /* ExclamationEqualsEqualsToken */, - "=>": 23 /* EqualsGreaterThanToken */, - "+": 24 /* PlusToken */, - "-": 25 /* MinusToken */, - "*": 26 /* AsteriskToken */, - "/": 27 /* SlashToken */, - "%": 28 /* PercentToken */, - "++": 29 /* PlusPlusToken */, - "--": 30 /* MinusMinusToken */, - "<<": 31 /* LessThanLessThanToken */, - ">>": 32 /* GreaterThanGreaterThanToken */, - ">>>": 33 /* GreaterThanGreaterThanGreaterThanToken */, - "&": 34 /* AmpersandToken */, - "|": 35 /* BarToken */, - "^": 36 /* CaretToken */, - "!": 37 /* ExclamationToken */, - "~": 38 /* TildeToken */, - "&&": 39 /* AmpersandAmpersandToken */, - "||": 40 /* BarBarToken */, - "?": 41 /* QuestionToken */, - ":": 42 /* ColonToken */, - "=": 43 /* EqualsToken */, - "+=": 44 /* PlusEqualsToken */, - "-=": 45 /* MinusEqualsToken */, - "*=": 46 /* AsteriskEqualsToken */, - "/=": 47 /* SlashEqualsToken */, - "%=": 48 /* PercentEqualsToken */, - "<<=": 49 /* LessThanLessThanEqualsToken */, - ">>=": 50 /* GreaterThanGreaterThanEqualsToken */, - ">>>=": 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */, - "&=": 52 /* AmpersandEqualsToken */, - "|=": 53 /* BarEqualsToken */, - "^=": 54 /* CaretEqualsToken */ - }; - var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - function lookupInUnicodeMap(code, map) { - if (code < map[0]) { - return false; - } - var lo = 0; - var hi = map.length; - var mid; - while (lo + 1 < hi) { - mid = lo + (hi - lo) / 2; - mid -= mid % 2; - if (map[mid] <= code && code <= map[mid + 1]) { - return true; - } - if (code < map[mid]) { - hi = mid; - } - else { - lo = mid + 2; - } - } - return false; - } - function isUnicodeIdentifierStart(code, languageVersion) { - return languageVersion === 0 /* ES3 */ ? lookupInUnicodeMap(code, unicodeES3IdentifierStart) : lookupInUnicodeMap(code, unicodeES5IdentifierStart); - } - function isUnicodeIdentifierPart(code, languageVersion) { - return languageVersion === 0 /* ES3 */ ? lookupInUnicodeMap(code, unicodeES3IdentifierPart) : lookupInUnicodeMap(code, unicodeES5IdentifierPart); - } - function makeReverseMap(source) { - var result = []; - for (var name in source) { - if (source.hasOwnProperty(name)) { - result[source[name]] = name; - } - } - return result; - } - var tokenStrings = makeReverseMap(textToToken); - function tokenToString(t) { - return tokenStrings[t]; - } - ts.tokenToString = tokenToString; - function getLineStarts(text) { - var result = new Array(); - var pos = 0; - var lineStart = 0; - while (pos < text.length) { - switch (text.charCodeAt(pos++)) { - case 13 /* carriageReturn */: - if (text.charCodeAt(pos) === 10 /* lineFeed */) { - pos++; - } - case 10 /* lineFeed */: - result.push(lineStart); - lineStart = pos; - break; - } - } - result.push(lineStart); - return result; - } - ts.getLineStarts = getLineStarts; - function getLineAndCharacterOfPosition(lineStarts, position) { - var lineNumber = ts.binarySearch(lineStarts, position); - if (lineNumber < 0) { - lineNumber = (~lineNumber) - 1; - } - return { - line: lineNumber + 1, - character: position - lineStarts[lineNumber] + 1 - }; - } - ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; - function positionToLineAndCharacter(text, pos) { - var lineStarts = getLineStarts(text); - return getLineAndCharacterOfPosition(lineStarts, pos); - } - ts.positionToLineAndCharacter = positionToLineAndCharacter; - var hasOwnProperty = Object.prototype.hasOwnProperty; - function isWhiteSpace(ch) { - return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; - } - function isLineBreak(ch) { - return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */; - } - function isDigit(ch) { - return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; - } - function skipTrivia(text, pos, stopAfterLineBreak) { - while (true) { - var ch = text.charCodeAt(pos); - switch (ch) { - case 13 /* carriageReturn */: - if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) - pos++; - case 10 /* lineFeed */: - pos++; - if (stopAfterLineBreak) - return pos; - continue; - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: - pos++; - continue; - case 47 /* slash */: - if (text.charCodeAt(pos + 1) === 47 /* slash */) { - pos += 2; - while (pos < text.length) { - if (isLineBreak(text.charCodeAt(pos))) { - break; - } - pos++; - } - continue; - } - if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { - pos += 2; - while (pos < text.length) { - if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { - pos += 2; - break; - } - pos++; - } - continue; - } - break; - default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { - pos++; - continue; - } - break; - } - return pos; - } - } - ts.skipTrivia = skipTrivia; - function createScanner(languageVersion, text, onError, onComment) { - var pos; - var len; - var startPos; - var tokenPos; - var token; - var tokenValue; - var precedingLineBreak; - function error(message) { - if (onError) - onError(message); - } - function isIdentifierStart(ch) { - return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion); - } - function isIdentifierPart(ch) { - return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion); - } - function scanNumber() { - var start = pos; - while (isDigit(text.charCodeAt(pos))) - pos++; - if (text.charCodeAt(pos) === 46 /* dot */) { - pos++; - while (isDigit(text.charCodeAt(pos))) - pos++; - } - var end = pos; - if (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */) { - pos++; - if (text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */) - pos++; - if (isDigit(text.charCodeAt(pos))) { - pos++; - while (isDigit(text.charCodeAt(pos))) - pos++; - end = pos; - } - else { - error(ts.Diagnostics.Digit_expected); - } - } - return +(text.substring(start, end)); - } - function scanHexDigits(count, exact) { - var digits = 0; - var value = 0; - while (digits < count || !exact) { - var ch = text.charCodeAt(pos); - if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) { - value = value * 16 + ch - 48 /* _0 */; - } - else if (ch >= 65 /* A */ && ch <= 70 /* F */) { - value = value * 16 + ch - 65 /* A */ + 10; - } - else if (ch >= 97 /* a */ && ch <= 102 /* f */) { - value = value * 16 + ch - 97 /* a */ + 10; - } - else { - break; - } - pos++; - digits++; - } - if (digits < count) { - value = -1; - } - return value; - } - function scanString() { - var quote = text.charCodeAt(pos++); - var result = ""; - var start = pos; - while (true) { - if (pos >= len) { - result += text.substring(start, pos); - error(ts.Diagnostics.Unexpected_end_of_text); - break; - } - var ch = text.charCodeAt(pos); - if (ch === quote) { - result += text.substring(start, pos); - pos++; - break; - } - if (ch === 92 /* backslash */) { - result += text.substring(start, pos); - pos++; - if (pos >= len) { - error(ts.Diagnostics.Unexpected_end_of_text); - break; - } - ch = text.charCodeAt(pos++); - switch (ch) { - case 48 /* _0 */: - result += "\0"; - break; - case 98 /* b */: - result += "\b"; - break; - case 116 /* t */: - result += "\t"; - break; - case 110 /* n */: - result += "\n"; - break; - case 118 /* v */: - result += "\v"; - break; - case 102 /* f */: - result += "\f"; - break; - case 114 /* r */: - result += "\r"; - break; - case 39 /* singleQuote */: - result += "\'"; - break; - case 34 /* doubleQuote */: - result += "\""; - break; - case 120 /* x */: - case 117 /* u */: - var ch = scanHexDigits(ch === 120 /* x */ ? 2 : 4, true); - if (ch >= 0) { - result += String.fromCharCode(ch); - } - else { - error(ts.Diagnostics.Hexadecimal_digit_expected); - } - break; - case 13 /* carriageReturn */: - if (pos < len && text.charCodeAt(pos) === 10 /* lineFeed */) - pos++; - break; - case 10 /* lineFeed */: - case 8232 /* lineSeparator */: - case 8233 /* paragraphSeparator */: - break; - default: - result += String.fromCharCode(ch); - } - start = pos; - continue; - } - if (isLineBreak(ch)) { - result += text.substring(start, pos); - error(ts.Diagnostics.Unterminated_string_constant); - break; - } - pos++; - } - return result; - } - function peekUnicodeEscape() { - if (pos + 5 < len && text.charCodeAt(pos + 1) === 117 /* u */) { - var start = pos; - pos += 2; - var value = scanHexDigits(4, true); - pos = start; - return value; - } - return -1; - } - function scanIdentifierParts() { - var result = ""; - var start = pos; - while (pos < len) { - var ch = text.charCodeAt(pos); - if (isIdentifierPart(ch)) { - pos++; - } - else if (ch === 92 /* backslash */) { - ch = peekUnicodeEscape(); - if (!(ch >= 0 && isIdentifierPart(ch))) { - break; - } - result += text.substring(start, pos); - result += String.fromCharCode(ch); - pos += 6; - start = pos; - } - else { - break; - } - } - result += text.substring(start, pos); - return result; - } - function getIdentifierToken() { - var len = tokenValue.length; - if (len >= 2 && len <= 11) { - var ch = tokenValue.charCodeAt(0); - if (ch >= 97 /* a */ && ch <= 122 /* z */ && hasOwnProperty.call(textToToken, tokenValue)) { - return token = textToToken[tokenValue]; - } - } - return token = 55 /* Identifier */; - } - function scan() { - startPos = pos; - precedingLineBreak = false; - while (true) { - tokenPos = pos; - if (pos >= len) { - return token = 1 /* EndOfFileToken */; - } - var ch = text.charCodeAt(pos); - switch (ch) { - case 10 /* lineFeed */: - case 13 /* carriageReturn */: - precedingLineBreak = true; - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: - pos++; - continue; - case 33 /* exclamation */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 22 /* ExclamationEqualsEqualsToken */; - } - return pos += 2, token = 20 /* ExclamationEqualsToken */; - } - return pos++, token = 37 /* ExclamationToken */; - case 34 /* doubleQuote */: - case 39 /* singleQuote */: - tokenValue = scanString(); - return token = 3 /* StringLiteral */; - case 37 /* percent */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 48 /* PercentEqualsToken */; - } - return pos++, token = 28 /* PercentToken */; - case 38 /* ampersand */: - if (text.charCodeAt(pos + 1) === 38 /* ampersand */) { - return pos += 2, token = 39 /* AmpersandAmpersandToken */; - } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 52 /* AmpersandEqualsToken */; - } - return pos++, token = 34 /* AmpersandToken */; - case 40 /* openParen */: - return pos++, token = 7 /* OpenParenToken */; - case 41 /* closeParen */: - return pos++, token = 8 /* CloseParenToken */; - case 42 /* asterisk */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 46 /* AsteriskEqualsToken */; - } - return pos++, token = 26 /* AsteriskToken */; - case 43 /* plus */: - if (text.charCodeAt(pos + 1) === 43 /* plus */) { - return pos += 2, token = 29 /* PlusPlusToken */; - } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 44 /* PlusEqualsToken */; - } - return pos++, token = 24 /* PlusToken */; - case 44 /* comma */: - return pos++, token = 14 /* CommaToken */; - case 45 /* minus */: - if (text.charCodeAt(pos + 1) === 45 /* minus */) { - return pos += 2, token = 30 /* MinusMinusToken */; - } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 45 /* MinusEqualsToken */; - } - return pos++, token = 25 /* MinusToken */; - case 46 /* dot */: - if (isDigit(text.charCodeAt(pos + 1))) { - tokenValue = "" + scanNumber(); - return token = 2 /* NumericLiteral */; - } - if (text.charCodeAt(pos + 1) === 46 /* dot */ && text.charCodeAt(pos + 2) === 46 /* dot */) { - return pos += 3, token = 12 /* DotDotDotToken */; - } - return pos++, token = 11 /* DotToken */; - case 47 /* slash */: - if (text.charCodeAt(pos + 1) === 47 /* slash */) { - pos += 2; - while (pos < len) { - if (isLineBreak(text.charCodeAt(pos))) { - break; - } - pos++; - } - if (onComment) { - onComment(tokenPos, pos); - } - continue; - } - if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { - pos += 2; - var safeLength = len - 1; - var commentClosed = false; - while (pos < safeLength) { - var ch = text.charCodeAt(pos); - if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { - pos += 2; - commentClosed = true; - break; - } - if (isLineBreak(ch)) { - precedingLineBreak = true; - } - pos++; - } - if (!commentClosed) { - pos++; - onError(ts.Diagnostics.Asterisk_Slash_expected); - } - if (onComment) { - onComment(tokenPos, pos); - } - continue; - } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 47 /* SlashEqualsToken */; - } - return pos++, token = 27 /* SlashToken */; - case 48 /* _0 */: - if (pos + 2 < len && (text.charCodeAt(pos + 1) === 88 /* X */ || text.charCodeAt(pos + 1) === 120 /* x */)) { - pos += 2; - var value = scanHexDigits(1, false); - if (value < 0) { - error(ts.Diagnostics.Hexadecimal_digit_expected); - value = 0; - } - tokenValue = "" + value; - return 2 /* NumericLiteral */; - } - case 49 /* _1 */: - case 50 /* _2 */: - case 51 /* _3 */: - case 52 /* _4 */: - case 53 /* _5 */: - case 54 /* _6 */: - case 55 /* _7 */: - case 56 /* _8 */: - case 57 /* _9 */: - tokenValue = "" + scanNumber(); - return token = 2 /* NumericLiteral */; - case 58 /* colon */: - return pos++, token = 42 /* ColonToken */; - case 59 /* semicolon */: - return pos++, token = 13 /* SemicolonToken */; - case 60 /* lessThan */: - if (text.charCodeAt(pos + 1) === 60 /* lessThan */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 49 /* LessThanLessThanEqualsToken */; - } - return pos += 2, token = 31 /* LessThanLessThanToken */; - } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 17 /* LessThanEqualsToken */; - } - return pos++, token = 15 /* LessThanToken */; - case 61 /* equals */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 21 /* EqualsEqualsEqualsToken */; - } - return pos += 2, token = 19 /* EqualsEqualsToken */; - } - if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { - return pos += 2, token = 23 /* EqualsGreaterThanToken */; - } - return pos++, token = 43 /* EqualsToken */; - case 62 /* greaterThan */: - return pos++, token = 16 /* GreaterThanToken */; - case 63 /* question */: - return pos++, token = 41 /* QuestionToken */; - case 91 /* openBracket */: - return pos++, token = 9 /* OpenBracketToken */; - case 93 /* closeBracket */: - return pos++, token = 10 /* CloseBracketToken */; - case 94 /* caret */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 54 /* CaretEqualsToken */; - } - return pos++, token = 36 /* CaretToken */; - case 123 /* openBrace */: - return pos++, token = 5 /* OpenBraceToken */; - case 124 /* bar */: - if (text.charCodeAt(pos + 1) === 124 /* bar */) { - return pos += 2, token = 40 /* BarBarToken */; - } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 53 /* BarEqualsToken */; - } - return pos++, token = 35 /* BarToken */; - case 125 /* closeBrace */: - return pos++, token = 6 /* CloseBraceToken */; - case 126 /* tilde */: - return pos++, token = 38 /* TildeToken */; - case 92 /* backslash */: - var ch = peekUnicodeEscape(); - if (ch >= 0 && isIdentifierStart(ch)) { - pos += 6; - tokenValue = String.fromCharCode(ch) + scanIdentifierParts(); - return token = getIdentifierToken(); - } - error(ts.Diagnostics.Invalid_character); - return pos++, token = 0 /* Unknown */; - default: - if (isIdentifierStart(ch)) { - pos++; - while (pos < len && isIdentifierPart(ch = text.charCodeAt(pos))) - pos++; - tokenValue = text.substring(tokenPos, pos); - if (ch === 92 /* backslash */) { - tokenValue += scanIdentifierParts(); - } - return token = getIdentifierToken(); - } - else if (isWhiteSpace(ch)) { - pos++; - continue; - } - else if (isLineBreak(ch)) { - precedingLineBreak = true; - pos++; - continue; - } - error(ts.Diagnostics.Invalid_character); - return pos++, token = 0 /* Unknown */; - } - } - } - function reScanGreaterToken() { - if (token === 16 /* GreaterThanToken */) { - if (text.charCodeAt(pos) === 62 /* greaterThan */) { - if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */; - } - return pos += 2, token = 33 /* GreaterThanGreaterThanGreaterThanToken */; - } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 50 /* GreaterThanGreaterThanEqualsToken */; - } - return pos++, token = 32 /* GreaterThanGreaterThanToken */; - } - if (text.charCodeAt(pos) === 61 /* equals */) { - return pos++, token = 18 /* GreaterThanEqualsToken */; - } - } - return token; - } - function reScanSlashToken() { - if (token === 27 /* SlashToken */ || token === 47 /* SlashEqualsToken */) { - var p = tokenPos + 1; - var inEscape = false; - var inClass = false; - while (true) { - if (p >= len) { - return token; - } - var ch = text.charCodeAt(p); - if (isLineBreak(ch)) { - return token; - } - if (inEscape) { - inEscape = false; - } - else if (ch === 47 /* slash */) { - break; - } - else if (ch === 91 /* openBracket */) { - inClass = true; - } - else if (ch === 92 /* backslash */) { - inEscape = true; - } - else if (ch === 93 /* closeBracket */) { - inClass = false; - } - p++; - } - p++; - while (isIdentifierPart(text.charCodeAt(p))) - p++; - pos = p; - tokenValue = text.substring(tokenPos, pos); - token = 4 /* RegularExpressionLiteral */; - } - return token; - } - function tryScan(callback) { - var savePos = pos; - var saveStartPos = startPos; - var saveTokenPos = tokenPos; - var saveToken = token; - var saveTokenValue = tokenValue; - var savePrecedingLineBreak = precedingLineBreak; - var result = callback(); - if (!result) { - pos = savePos; - startPos = saveStartPos; - tokenPos = saveTokenPos; - token = saveToken; - tokenValue = saveTokenValue; - precedingLineBreak = savePrecedingLineBreak; - } - return result; - } - function setText(newText) { - text = newText || ""; - len = text.length; - setTextPos(0); - } - function setTextPos(textPos) { - pos = textPos; - startPos = textPos; - tokenPos = textPos; - token = 0 /* Unknown */; - precedingLineBreak = false; - } - setText(text); - return { - getStartPos: function () { return startPos; }, - getTextPos: function () { return pos; }, - getToken: function () { return token; }, - getTokenPos: function () { return tokenPos; }, - getTokenText: function () { return text.substring(tokenPos, pos); }, - getTokenValue: function () { return tokenValue; }, - hasPrecedingLineBreak: function () { return precedingLineBreak; }, - isIdentifier: function () { return token === 55 /* Identifier */ || token > ts.SyntaxKind.LastReservedWord; }, - isReservedWord: function () { return token >= ts.SyntaxKind.FirstReservedWord && token <= ts.SyntaxKind.LastReservedWord; }, - reScanGreaterToken: reScanGreaterToken, - reScanSlashToken: reScanSlashToken, - scan: scan, - setText: setText, - setTextPos: setTextPos, - tryScan: tryScan - }; - } - ts.createScanner = createScanner; -})(ts || (ts = {})); -var ts; -(function (ts) { - (function (SyntaxKind) { - SyntaxKind[SyntaxKind["Unknown"] = 0] = "Unknown"; - SyntaxKind[SyntaxKind["EndOfFileToken"] = 1] = "EndOfFileToken"; - SyntaxKind[SyntaxKind["NumericLiteral"] = 2] = "NumericLiteral"; - SyntaxKind[SyntaxKind["StringLiteral"] = 3] = "StringLiteral"; - SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 4] = "RegularExpressionLiteral"; - SyntaxKind[SyntaxKind["OpenBraceToken"] = 5] = "OpenBraceToken"; - SyntaxKind[SyntaxKind["CloseBraceToken"] = 6] = "CloseBraceToken"; - SyntaxKind[SyntaxKind["OpenParenToken"] = 7] = "OpenParenToken"; - SyntaxKind[SyntaxKind["CloseParenToken"] = 8] = "CloseParenToken"; - SyntaxKind[SyntaxKind["OpenBracketToken"] = 9] = "OpenBracketToken"; - SyntaxKind[SyntaxKind["CloseBracketToken"] = 10] = "CloseBracketToken"; - SyntaxKind[SyntaxKind["DotToken"] = 11] = "DotToken"; - SyntaxKind[SyntaxKind["DotDotDotToken"] = 12] = "DotDotDotToken"; - SyntaxKind[SyntaxKind["SemicolonToken"] = 13] = "SemicolonToken"; - SyntaxKind[SyntaxKind["CommaToken"] = 14] = "CommaToken"; - SyntaxKind[SyntaxKind["LessThanToken"] = 15] = "LessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanToken"] = 16] = "GreaterThanToken"; - SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 17] = "LessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 18] = "GreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 19] = "EqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 20] = "ExclamationEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 21] = "EqualsEqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 22] = "ExclamationEqualsEqualsToken"; - SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 23] = "EqualsGreaterThanToken"; - SyntaxKind[SyntaxKind["PlusToken"] = 24] = "PlusToken"; - SyntaxKind[SyntaxKind["MinusToken"] = 25] = "MinusToken"; - SyntaxKind[SyntaxKind["AsteriskToken"] = 26] = "AsteriskToken"; - SyntaxKind[SyntaxKind["SlashToken"] = 27] = "SlashToken"; - SyntaxKind[SyntaxKind["PercentToken"] = 28] = "PercentToken"; - SyntaxKind[SyntaxKind["PlusPlusToken"] = 29] = "PlusPlusToken"; - SyntaxKind[SyntaxKind["MinusMinusToken"] = 30] = "MinusMinusToken"; - SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 31] = "LessThanLessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 32] = "GreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 33] = "GreaterThanGreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["AmpersandToken"] = 34] = "AmpersandToken"; - SyntaxKind[SyntaxKind["BarToken"] = 35] = "BarToken"; - SyntaxKind[SyntaxKind["CaretToken"] = 36] = "CaretToken"; - SyntaxKind[SyntaxKind["ExclamationToken"] = 37] = "ExclamationToken"; - SyntaxKind[SyntaxKind["TildeToken"] = 38] = "TildeToken"; - SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 39] = "AmpersandAmpersandToken"; - SyntaxKind[SyntaxKind["BarBarToken"] = 40] = "BarBarToken"; - SyntaxKind[SyntaxKind["QuestionToken"] = 41] = "QuestionToken"; - SyntaxKind[SyntaxKind["ColonToken"] = 42] = "ColonToken"; - SyntaxKind[SyntaxKind["EqualsToken"] = 43] = "EqualsToken"; - SyntaxKind[SyntaxKind["PlusEqualsToken"] = 44] = "PlusEqualsToken"; - SyntaxKind[SyntaxKind["MinusEqualsToken"] = 45] = "MinusEqualsToken"; - SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 46] = "AsteriskEqualsToken"; - SyntaxKind[SyntaxKind["SlashEqualsToken"] = 47] = "SlashEqualsToken"; - SyntaxKind[SyntaxKind["PercentEqualsToken"] = 48] = "PercentEqualsToken"; - SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 49] = "LessThanLessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 50] = "GreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 51] = "GreaterThanGreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 52] = "AmpersandEqualsToken"; - SyntaxKind[SyntaxKind["BarEqualsToken"] = 53] = "BarEqualsToken"; - SyntaxKind[SyntaxKind["CaretEqualsToken"] = 54] = "CaretEqualsToken"; - SyntaxKind[SyntaxKind["Identifier"] = 55] = "Identifier"; - SyntaxKind[SyntaxKind["BreakKeyword"] = 56] = "BreakKeyword"; - SyntaxKind[SyntaxKind["CaseKeyword"] = 57] = "CaseKeyword"; - SyntaxKind[SyntaxKind["CatchKeyword"] = 58] = "CatchKeyword"; - SyntaxKind[SyntaxKind["ClassKeyword"] = 59] = "ClassKeyword"; - SyntaxKind[SyntaxKind["ConstKeyword"] = 60] = "ConstKeyword"; - SyntaxKind[SyntaxKind["ContinueKeyword"] = 61] = "ContinueKeyword"; - SyntaxKind[SyntaxKind["DebuggerKeyword"] = 62] = "DebuggerKeyword"; - SyntaxKind[SyntaxKind["DefaultKeyword"] = 63] = "DefaultKeyword"; - SyntaxKind[SyntaxKind["DeleteKeyword"] = 64] = "DeleteKeyword"; - SyntaxKind[SyntaxKind["DoKeyword"] = 65] = "DoKeyword"; - SyntaxKind[SyntaxKind["ElseKeyword"] = 66] = "ElseKeyword"; - SyntaxKind[SyntaxKind["EnumKeyword"] = 67] = "EnumKeyword"; - SyntaxKind[SyntaxKind["ExportKeyword"] = 68] = "ExportKeyword"; - SyntaxKind[SyntaxKind["ExtendsKeyword"] = 69] = "ExtendsKeyword"; - SyntaxKind[SyntaxKind["FalseKeyword"] = 70] = "FalseKeyword"; - SyntaxKind[SyntaxKind["FinallyKeyword"] = 71] = "FinallyKeyword"; - SyntaxKind[SyntaxKind["ForKeyword"] = 72] = "ForKeyword"; - SyntaxKind[SyntaxKind["FunctionKeyword"] = 73] = "FunctionKeyword"; - SyntaxKind[SyntaxKind["IfKeyword"] = 74] = "IfKeyword"; - SyntaxKind[SyntaxKind["ImportKeyword"] = 75] = "ImportKeyword"; - SyntaxKind[SyntaxKind["InKeyword"] = 76] = "InKeyword"; - SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 77] = "InstanceOfKeyword"; - SyntaxKind[SyntaxKind["NewKeyword"] = 78] = "NewKeyword"; - SyntaxKind[SyntaxKind["NullKeyword"] = 79] = "NullKeyword"; - SyntaxKind[SyntaxKind["ReturnKeyword"] = 80] = "ReturnKeyword"; - SyntaxKind[SyntaxKind["SuperKeyword"] = 81] = "SuperKeyword"; - SyntaxKind[SyntaxKind["SwitchKeyword"] = 82] = "SwitchKeyword"; - SyntaxKind[SyntaxKind["ThisKeyword"] = 83] = "ThisKeyword"; - SyntaxKind[SyntaxKind["ThrowKeyword"] = 84] = "ThrowKeyword"; - SyntaxKind[SyntaxKind["TrueKeyword"] = 85] = "TrueKeyword"; - SyntaxKind[SyntaxKind["TryKeyword"] = 86] = "TryKeyword"; - SyntaxKind[SyntaxKind["TypeOfKeyword"] = 87] = "TypeOfKeyword"; - SyntaxKind[SyntaxKind["VarKeyword"] = 88] = "VarKeyword"; - SyntaxKind[SyntaxKind["VoidKeyword"] = 89] = "VoidKeyword"; - SyntaxKind[SyntaxKind["WhileKeyword"] = 90] = "WhileKeyword"; - SyntaxKind[SyntaxKind["WithKeyword"] = 91] = "WithKeyword"; - SyntaxKind[SyntaxKind["ImplementsKeyword"] = 92] = "ImplementsKeyword"; - SyntaxKind[SyntaxKind["InterfaceKeyword"] = 93] = "InterfaceKeyword"; - SyntaxKind[SyntaxKind["LetKeyword"] = 94] = "LetKeyword"; - SyntaxKind[SyntaxKind["PackageKeyword"] = 95] = "PackageKeyword"; - SyntaxKind[SyntaxKind["PrivateKeyword"] = 96] = "PrivateKeyword"; - SyntaxKind[SyntaxKind["ProtectedKeyword"] = 97] = "ProtectedKeyword"; - SyntaxKind[SyntaxKind["PublicKeyword"] = 98] = "PublicKeyword"; - SyntaxKind[SyntaxKind["StaticKeyword"] = 99] = "StaticKeyword"; - SyntaxKind[SyntaxKind["YieldKeyword"] = 100] = "YieldKeyword"; - SyntaxKind[SyntaxKind["AnyKeyword"] = 101] = "AnyKeyword"; - SyntaxKind[SyntaxKind["BooleanKeyword"] = 102] = "BooleanKeyword"; - SyntaxKind[SyntaxKind["ConstructorKeyword"] = 103] = "ConstructorKeyword"; - SyntaxKind[SyntaxKind["DeclareKeyword"] = 104] = "DeclareKeyword"; - SyntaxKind[SyntaxKind["GetKeyword"] = 105] = "GetKeyword"; - SyntaxKind[SyntaxKind["ModuleKeyword"] = 106] = "ModuleKeyword"; - SyntaxKind[SyntaxKind["RequireKeyword"] = 107] = "RequireKeyword"; - SyntaxKind[SyntaxKind["NumberKeyword"] = 108] = "NumberKeyword"; - SyntaxKind[SyntaxKind["SetKeyword"] = 109] = "SetKeyword"; - SyntaxKind[SyntaxKind["StringKeyword"] = 110] = "StringKeyword"; - SyntaxKind[SyntaxKind["Missing"] = 111] = "Missing"; - SyntaxKind[SyntaxKind["QualifiedName"] = 112] = "QualifiedName"; - SyntaxKind[SyntaxKind["TypeParameter"] = 113] = "TypeParameter"; - SyntaxKind[SyntaxKind["Parameter"] = 114] = "Parameter"; - SyntaxKind[SyntaxKind["Property"] = 115] = "Property"; - SyntaxKind[SyntaxKind["Method"] = 116] = "Method"; - SyntaxKind[SyntaxKind["Constructor"] = 117] = "Constructor"; - SyntaxKind[SyntaxKind["GetAccessor"] = 118] = "GetAccessor"; - SyntaxKind[SyntaxKind["SetAccessor"] = 119] = "SetAccessor"; - SyntaxKind[SyntaxKind["CallSignature"] = 120] = "CallSignature"; - SyntaxKind[SyntaxKind["ConstructSignature"] = 121] = "ConstructSignature"; - SyntaxKind[SyntaxKind["IndexSignature"] = 122] = "IndexSignature"; - SyntaxKind[SyntaxKind["TypeReference"] = 123] = "TypeReference"; - SyntaxKind[SyntaxKind["TypeQuery"] = 124] = "TypeQuery"; - SyntaxKind[SyntaxKind["TypeLiteral"] = 125] = "TypeLiteral"; - SyntaxKind[SyntaxKind["ArrayType"] = 126] = "ArrayType"; - SyntaxKind[SyntaxKind["ArrayLiteral"] = 127] = "ArrayLiteral"; - SyntaxKind[SyntaxKind["ObjectLiteral"] = 128] = "ObjectLiteral"; - SyntaxKind[SyntaxKind["PropertyAssignment"] = 129] = "PropertyAssignment"; - SyntaxKind[SyntaxKind["PropertyAccess"] = 130] = "PropertyAccess"; - SyntaxKind[SyntaxKind["IndexedAccess"] = 131] = "IndexedAccess"; - SyntaxKind[SyntaxKind["CallExpression"] = 132] = "CallExpression"; - SyntaxKind[SyntaxKind["NewExpression"] = 133] = "NewExpression"; - SyntaxKind[SyntaxKind["TypeAssertion"] = 134] = "TypeAssertion"; - SyntaxKind[SyntaxKind["ParenExpression"] = 135] = "ParenExpression"; - SyntaxKind[SyntaxKind["FunctionExpression"] = 136] = "FunctionExpression"; - SyntaxKind[SyntaxKind["ArrowFunction"] = 137] = "ArrowFunction"; - SyntaxKind[SyntaxKind["PrefixOperator"] = 138] = "PrefixOperator"; - SyntaxKind[SyntaxKind["PostfixOperator"] = 139] = "PostfixOperator"; - SyntaxKind[SyntaxKind["BinaryExpression"] = 140] = "BinaryExpression"; - SyntaxKind[SyntaxKind["ConditionalExpression"] = 141] = "ConditionalExpression"; - SyntaxKind[SyntaxKind["OmittedExpression"] = 142] = "OmittedExpression"; - SyntaxKind[SyntaxKind["Block"] = 143] = "Block"; - SyntaxKind[SyntaxKind["VariableStatement"] = 144] = "VariableStatement"; - SyntaxKind[SyntaxKind["EmptyStatement"] = 145] = "EmptyStatement"; - SyntaxKind[SyntaxKind["ExpressionStatement"] = 146] = "ExpressionStatement"; - SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement"; - SyntaxKind[SyntaxKind["DoStatement"] = 148] = "DoStatement"; - SyntaxKind[SyntaxKind["WhileStatement"] = 149] = "WhileStatement"; - SyntaxKind[SyntaxKind["ForStatement"] = 150] = "ForStatement"; - SyntaxKind[SyntaxKind["ForInStatement"] = 151] = "ForInStatement"; - SyntaxKind[SyntaxKind["ContinueStatement"] = 152] = "ContinueStatement"; - SyntaxKind[SyntaxKind["BreakStatement"] = 153] = "BreakStatement"; - SyntaxKind[SyntaxKind["ReturnStatement"] = 154] = "ReturnStatement"; - SyntaxKind[SyntaxKind["WithStatement"] = 155] = "WithStatement"; - SyntaxKind[SyntaxKind["SwitchStatement"] = 156] = "SwitchStatement"; - SyntaxKind[SyntaxKind["CaseClause"] = 157] = "CaseClause"; - SyntaxKind[SyntaxKind["DefaultClause"] = 158] = "DefaultClause"; - SyntaxKind[SyntaxKind["LabelledStatement"] = 159] = "LabelledStatement"; - SyntaxKind[SyntaxKind["ThrowStatement"] = 160] = "ThrowStatement"; - SyntaxKind[SyntaxKind["TryStatement"] = 161] = "TryStatement"; - SyntaxKind[SyntaxKind["TryBlock"] = 162] = "TryBlock"; - SyntaxKind[SyntaxKind["CatchBlock"] = 163] = "CatchBlock"; - SyntaxKind[SyntaxKind["FinallyBlock"] = 164] = "FinallyBlock"; - SyntaxKind[SyntaxKind["DebuggerStatement"] = 165] = "DebuggerStatement"; - SyntaxKind[SyntaxKind["VariableDeclaration"] = 166] = "VariableDeclaration"; - SyntaxKind[SyntaxKind["FunctionDeclaration"] = 167] = "FunctionDeclaration"; - SyntaxKind[SyntaxKind["FunctionBlock"] = 168] = "FunctionBlock"; - SyntaxKind[SyntaxKind["ClassDeclaration"] = 169] = "ClassDeclaration"; - SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 170] = "InterfaceDeclaration"; - SyntaxKind[SyntaxKind["EnumDeclaration"] = 171] = "EnumDeclaration"; - SyntaxKind[SyntaxKind["ModuleDeclaration"] = 172] = "ModuleDeclaration"; - SyntaxKind[SyntaxKind["ModuleBlock"] = 173] = "ModuleBlock"; - SyntaxKind[SyntaxKind["ImportDeclaration"] = 174] = "ImportDeclaration"; - SyntaxKind[SyntaxKind["ExportAssignment"] = 175] = "ExportAssignment"; - SyntaxKind[SyntaxKind["EnumMember"] = 176] = "EnumMember"; - SyntaxKind[SyntaxKind["SourceFile"] = 177] = "SourceFile"; - SyntaxKind[SyntaxKind["Program"] = 178] = "Program"; - SyntaxKind[SyntaxKind["SyntaxList"] = 179] = "SyntaxList"; - SyntaxKind[SyntaxKind["Count"] = 180] = "Count"; - SyntaxKind[SyntaxKind["FirstAssignment"] = SyntaxKind.EqualsToken] = "FirstAssignment"; - SyntaxKind[SyntaxKind["LastAssignment"] = SyntaxKind.CaretEqualsToken] = "LastAssignment"; - SyntaxKind[SyntaxKind["FirstReservedWord"] = SyntaxKind.BreakKeyword] = "FirstReservedWord"; - SyntaxKind[SyntaxKind["LastReservedWord"] = SyntaxKind.WithKeyword] = "LastReservedWord"; - SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.BreakKeyword] = "FirstKeyword"; - SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.StringKeyword] = "LastKeyword"; - SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedWord"; - SyntaxKind[SyntaxKind["LastFutureReservedWord"] = SyntaxKind.YieldKeyword] = "LastFutureReservedWord"; - })(ts.SyntaxKind || (ts.SyntaxKind = {})); - var SyntaxKind = ts.SyntaxKind; - (function (NodeFlags) { - NodeFlags[NodeFlags["Export"] = 0x00000001] = "Export"; - NodeFlags[NodeFlags["Ambient"] = 0x00000002] = "Ambient"; - NodeFlags[NodeFlags["QuestionMark"] = 0x00000004] = "QuestionMark"; - NodeFlags[NodeFlags["Rest"] = 0x00000008] = "Rest"; - NodeFlags[NodeFlags["Public"] = 0x00000010] = "Public"; - NodeFlags[NodeFlags["Private"] = 0x00000020] = "Private"; - NodeFlags[NodeFlags["Static"] = 0x00000040] = "Static"; - NodeFlags[NodeFlags["MultiLine"] = 0x00000080] = "MultiLine"; - NodeFlags[NodeFlags["Synthetic"] = 0x00000100] = "Synthetic"; - NodeFlags[NodeFlags["DeclarationFile"] = 0x00000200] = "DeclarationFile"; - NodeFlags[NodeFlags["Modifier"] = NodeFlags.Export | NodeFlags.Ambient | NodeFlags.Public | NodeFlags.Private | NodeFlags.Static] = "Modifier"; - })(ts.NodeFlags || (ts.NodeFlags = {})); - var NodeFlags = ts.NodeFlags; - (function (TypeFormatFlags) { - TypeFormatFlags[TypeFormatFlags["None"] = 0x00000000] = "None"; - TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 0x00000001] = "WriteArrayAsGenericType"; - })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); - var TypeFormatFlags = ts.TypeFormatFlags; - (function (SymbolFlags) { - SymbolFlags[SymbolFlags["Variable"] = 0x00000001] = "Variable"; - SymbolFlags[SymbolFlags["Property"] = 0x00000002] = "Property"; - SymbolFlags[SymbolFlags["EnumMember"] = 0x00000004] = "EnumMember"; - SymbolFlags[SymbolFlags["Function"] = 0x00000008] = "Function"; - SymbolFlags[SymbolFlags["Class"] = 0x00000010] = "Class"; - SymbolFlags[SymbolFlags["Interface"] = 0x00000020] = "Interface"; - SymbolFlags[SymbolFlags["Enum"] = 0x00000040] = "Enum"; - SymbolFlags[SymbolFlags["ValueModule"] = 0x00000080] = "ValueModule"; - SymbolFlags[SymbolFlags["NamespaceModule"] = 0x00000100] = "NamespaceModule"; - SymbolFlags[SymbolFlags["TypeLiteral"] = 0x00000200] = "TypeLiteral"; - SymbolFlags[SymbolFlags["ObjectLiteral"] = 0x00000400] = "ObjectLiteral"; - SymbolFlags[SymbolFlags["Method"] = 0x00000800] = "Method"; - SymbolFlags[SymbolFlags["Constructor"] = 0x00001000] = "Constructor"; - SymbolFlags[SymbolFlags["GetAccessor"] = 0x00002000] = "GetAccessor"; - SymbolFlags[SymbolFlags["SetAccessor"] = 0x00004000] = "SetAccessor"; - SymbolFlags[SymbolFlags["CallSignature"] = 0x00008000] = "CallSignature"; - SymbolFlags[SymbolFlags["ConstructSignature"] = 0x00010000] = "ConstructSignature"; - SymbolFlags[SymbolFlags["IndexSignature"] = 0x00020000] = "IndexSignature"; - SymbolFlags[SymbolFlags["TypeParameter"] = 0x00040000] = "TypeParameter"; - SymbolFlags[SymbolFlags["ExportValue"] = 0x00080000] = "ExportValue"; - SymbolFlags[SymbolFlags["ExportType"] = 0x00100000] = "ExportType"; - SymbolFlags[SymbolFlags["ExportNamespace"] = 0x00200000] = "ExportNamespace"; - SymbolFlags[SymbolFlags["Import"] = 0x00400000] = "Import"; - SymbolFlags[SymbolFlags["Instantiated"] = 0x00800000] = "Instantiated"; - SymbolFlags[SymbolFlags["Merged"] = 0x01000000] = "Merged"; - SymbolFlags[SymbolFlags["Transient"] = 0x02000000] = "Transient"; - SymbolFlags[SymbolFlags["Prototype"] = 0x04000000] = "Prototype"; - SymbolFlags[SymbolFlags["Value"] = SymbolFlags.Variable | SymbolFlags.Property | SymbolFlags.EnumMember | SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule | SymbolFlags.Method | SymbolFlags.GetAccessor | SymbolFlags.SetAccessor] = "Value"; - SymbolFlags[SymbolFlags["Type"] = SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.Enum | SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral | SymbolFlags.TypeParameter] = "Type"; - SymbolFlags[SymbolFlags["Namespace"] = SymbolFlags.ValueModule | SymbolFlags.NamespaceModule] = "Namespace"; - SymbolFlags[SymbolFlags["Module"] = SymbolFlags.ValueModule | SymbolFlags.NamespaceModule] = "Module"; - SymbolFlags[SymbolFlags["Accessor"] = SymbolFlags.GetAccessor | SymbolFlags.SetAccessor] = "Accessor"; - SymbolFlags[SymbolFlags["Signature"] = SymbolFlags.CallSignature | SymbolFlags.ConstructSignature | SymbolFlags.IndexSignature] = "Signature"; - SymbolFlags[SymbolFlags["ParameterExcludes"] = SymbolFlags.Value] = "ParameterExcludes"; - SymbolFlags[SymbolFlags["VariableExcludes"] = SymbolFlags.Value & ~SymbolFlags.Variable] = "VariableExcludes"; - SymbolFlags[SymbolFlags["PropertyExcludes"] = SymbolFlags.Value] = "PropertyExcludes"; - SymbolFlags[SymbolFlags["EnumMemberExcludes"] = SymbolFlags.Value] = "EnumMemberExcludes"; - SymbolFlags[SymbolFlags["FunctionExcludes"] = SymbolFlags.Value & ~(SymbolFlags.Function | SymbolFlags.ValueModule)] = "FunctionExcludes"; - SymbolFlags[SymbolFlags["ClassExcludes"] = (SymbolFlags.Value | SymbolFlags.Type) & ~SymbolFlags.ValueModule] = "ClassExcludes"; - SymbolFlags[SymbolFlags["InterfaceExcludes"] = SymbolFlags.Type & ~SymbolFlags.Interface] = "InterfaceExcludes"; - SymbolFlags[SymbolFlags["EnumExcludes"] = (SymbolFlags.Value | SymbolFlags.Type) & ~(SymbolFlags.Enum | SymbolFlags.ValueModule)] = "EnumExcludes"; - SymbolFlags[SymbolFlags["ValueModuleExcludes"] = SymbolFlags.Value & ~(SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule)] = "ValueModuleExcludes"; - SymbolFlags[SymbolFlags["NamespaceModuleExcludes"] = 0] = "NamespaceModuleExcludes"; - SymbolFlags[SymbolFlags["MethodExcludes"] = SymbolFlags.Value & ~SymbolFlags.Method] = "MethodExcludes"; - SymbolFlags[SymbolFlags["GetAccessorExcludes"] = SymbolFlags.Value & ~SymbolFlags.SetAccessor] = "GetAccessorExcludes"; - SymbolFlags[SymbolFlags["SetAccessorExcludes"] = SymbolFlags.Value & ~SymbolFlags.GetAccessor] = "SetAccessorExcludes"; - SymbolFlags[SymbolFlags["TypeParameterExcludes"] = SymbolFlags.Type & ~SymbolFlags.TypeParameter] = "TypeParameterExcludes"; - SymbolFlags[SymbolFlags["ImportExcludes"] = SymbolFlags.Import] = "ImportExcludes"; - SymbolFlags[SymbolFlags["ModuleMember"] = SymbolFlags.Variable | SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.Enum | SymbolFlags.Module | SymbolFlags.Import] = "ModuleMember"; - SymbolFlags[SymbolFlags["ExportHasLocal"] = SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule] = "ExportHasLocal"; - SymbolFlags[SymbolFlags["HasLocals"] = SymbolFlags.Function | SymbolFlags.Module | SymbolFlags.Method | SymbolFlags.Constructor | SymbolFlags.Accessor | SymbolFlags.Signature] = "HasLocals"; - SymbolFlags[SymbolFlags["HasExports"] = SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.Module] = "HasExports"; - SymbolFlags[SymbolFlags["HasMembers"] = SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral] = "HasMembers"; - SymbolFlags[SymbolFlags["IsContainer"] = SymbolFlags.HasLocals | SymbolFlags.HasExports | SymbolFlags.HasMembers] = "IsContainer"; - SymbolFlags[SymbolFlags["PropertyOrAccessor"] = SymbolFlags.Property | SymbolFlags.Accessor] = "PropertyOrAccessor"; - SymbolFlags[SymbolFlags["Export"] = SymbolFlags.ExportNamespace | SymbolFlags.ExportType | SymbolFlags.ExportValue] = "Export"; - })(ts.SymbolFlags || (ts.SymbolFlags = {})); - var SymbolFlags = ts.SymbolFlags; - (function (NodeCheckFlags) { - NodeCheckFlags[NodeCheckFlags["TypeChecked"] = 0x00000001] = "TypeChecked"; - NodeCheckFlags[NodeCheckFlags["LexicalThis"] = 0x00000002] = "LexicalThis"; - NodeCheckFlags[NodeCheckFlags["CaptureThis"] = 0x00000004] = "CaptureThis"; - NodeCheckFlags[NodeCheckFlags["EmitExtends"] = 0x00000008] = "EmitExtends"; - NodeCheckFlags[NodeCheckFlags["SuperInstance"] = 0x00000010] = "SuperInstance"; - NodeCheckFlags[NodeCheckFlags["SuperStatic"] = 0x00000020] = "SuperStatic"; - })(ts.NodeCheckFlags || (ts.NodeCheckFlags = {})); - var NodeCheckFlags = ts.NodeCheckFlags; - (function (TypeFlags) { - TypeFlags[TypeFlags["Any"] = 0x00000001] = "Any"; - TypeFlags[TypeFlags["String"] = 0x00000002] = "String"; - TypeFlags[TypeFlags["Number"] = 0x00000004] = "Number"; - TypeFlags[TypeFlags["Boolean"] = 0x00000008] = "Boolean"; - TypeFlags[TypeFlags["Void"] = 0x00000010] = "Void"; - TypeFlags[TypeFlags["Undefined"] = 0x00000020] = "Undefined"; - TypeFlags[TypeFlags["Null"] = 0x00000040] = "Null"; - TypeFlags[TypeFlags["Enum"] = 0x00000080] = "Enum"; - TypeFlags[TypeFlags["StringLiteral"] = 0x00000100] = "StringLiteral"; - TypeFlags[TypeFlags["TypeParameter"] = 0x00000200] = "TypeParameter"; - TypeFlags[TypeFlags["Class"] = 0x00000400] = "Class"; - TypeFlags[TypeFlags["Interface"] = 0x00000800] = "Interface"; - TypeFlags[TypeFlags["Reference"] = 0x00001000] = "Reference"; - TypeFlags[TypeFlags["Anonymous"] = 0x00002000] = "Anonymous"; - TypeFlags[TypeFlags["FromSignature"] = 0x00004000] = "FromSignature"; - TypeFlags[TypeFlags["Intrinsic"] = TypeFlags.Any | TypeFlags.String | TypeFlags.Number | TypeFlags.Boolean | TypeFlags.Void | TypeFlags.Undefined | TypeFlags.Null] = "Intrinsic"; - TypeFlags[TypeFlags["StringLike"] = TypeFlags.String | TypeFlags.StringLiteral] = "StringLike"; - TypeFlags[TypeFlags["NumberLike"] = TypeFlags.Number | TypeFlags.Enum] = "NumberLike"; - TypeFlags[TypeFlags["ObjectType"] = TypeFlags.Class | TypeFlags.Interface | TypeFlags.Reference | TypeFlags.Anonymous] = "ObjectType"; - })(ts.TypeFlags || (ts.TypeFlags = {})); - var TypeFlags = ts.TypeFlags; - (function (SignatureKind) { - SignatureKind[SignatureKind["Call"] = 0] = "Call"; - SignatureKind[SignatureKind["Construct"] = 1] = "Construct"; - })(ts.SignatureKind || (ts.SignatureKind = {})); - var SignatureKind = ts.SignatureKind; - (function (IndexKind) { - IndexKind[IndexKind["String"] = 0] = "String"; - IndexKind[IndexKind["Number"] = 1] = "Number"; - })(ts.IndexKind || (ts.IndexKind = {})); - var IndexKind = ts.IndexKind; - (function (DiagnosticCategory) { - DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; - DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; - DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; - DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; - })(ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); - var DiagnosticCategory = ts.DiagnosticCategory; - (function (ModuleKind) { - ModuleKind[ModuleKind["None"] = 0] = "None"; - ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS"; - ModuleKind[ModuleKind["AMD"] = 2] = "AMD"; - })(ts.ModuleKind || (ts.ModuleKind = {})); - var ModuleKind = ts.ModuleKind; - (function (ScriptTarget) { - ScriptTarget[ScriptTarget["ES3"] = 0] = "ES3"; - ScriptTarget[ScriptTarget["ES5"] = 1] = "ES5"; - })(ts.ScriptTarget || (ts.ScriptTarget = {})); - var ScriptTarget = ts.ScriptTarget; - (function (CharacterCodes) { - CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; - CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 0x7F] = "maxAsciiCharacter"; - CharacterCodes[CharacterCodes["lineFeed"] = 0x0A] = "lineFeed"; - CharacterCodes[CharacterCodes["carriageReturn"] = 0x0D] = "carriageReturn"; - CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator"; - CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator"; - CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine"; - CharacterCodes[CharacterCodes["space"] = 0x0020] = "space"; - CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace"; - CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad"; - CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad"; - CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace"; - CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace"; - CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace"; - CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace"; - CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace"; - CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace"; - CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace"; - CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace"; - CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace"; - CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace"; - CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace"; - CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace"; - CharacterCodes[CharacterCodes["mathematicalSpace"] = 0x205F] = "mathematicalSpace"; - CharacterCodes[CharacterCodes["ogham"] = 0x1680] = "ogham"; - CharacterCodes[CharacterCodes["_"] = 0x5F] = "_"; - CharacterCodes[CharacterCodes["$"] = 0x24] = "$"; - CharacterCodes[CharacterCodes["_0"] = 0x30] = "_0"; - CharacterCodes[CharacterCodes["_1"] = 0x31] = "_1"; - CharacterCodes[CharacterCodes["_2"] = 0x32] = "_2"; - CharacterCodes[CharacterCodes["_3"] = 0x33] = "_3"; - CharacterCodes[CharacterCodes["_4"] = 0x34] = "_4"; - CharacterCodes[CharacterCodes["_5"] = 0x35] = "_5"; - CharacterCodes[CharacterCodes["_6"] = 0x36] = "_6"; - CharacterCodes[CharacterCodes["_7"] = 0x37] = "_7"; - CharacterCodes[CharacterCodes["_8"] = 0x38] = "_8"; - CharacterCodes[CharacterCodes["_9"] = 0x39] = "_9"; - CharacterCodes[CharacterCodes["a"] = 0x61] = "a"; - CharacterCodes[CharacterCodes["b"] = 0x62] = "b"; - CharacterCodes[CharacterCodes["c"] = 0x63] = "c"; - CharacterCodes[CharacterCodes["d"] = 0x64] = "d"; - CharacterCodes[CharacterCodes["e"] = 0x65] = "e"; - CharacterCodes[CharacterCodes["f"] = 0x66] = "f"; - CharacterCodes[CharacterCodes["g"] = 0x67] = "g"; - CharacterCodes[CharacterCodes["h"] = 0x68] = "h"; - CharacterCodes[CharacterCodes["i"] = 0x69] = "i"; - CharacterCodes[CharacterCodes["j"] = 0x6A] = "j"; - CharacterCodes[CharacterCodes["k"] = 0x6B] = "k"; - CharacterCodes[CharacterCodes["l"] = 0x6C] = "l"; - CharacterCodes[CharacterCodes["m"] = 0x6D] = "m"; - CharacterCodes[CharacterCodes["n"] = 0x6E] = "n"; - CharacterCodes[CharacterCodes["o"] = 0x6F] = "o"; - CharacterCodes[CharacterCodes["p"] = 0x70] = "p"; - CharacterCodes[CharacterCodes["q"] = 0x71] = "q"; - CharacterCodes[CharacterCodes["r"] = 0x72] = "r"; - CharacterCodes[CharacterCodes["s"] = 0x73] = "s"; - CharacterCodes[CharacterCodes["t"] = 0x74] = "t"; - CharacterCodes[CharacterCodes["u"] = 0x75] = "u"; - CharacterCodes[CharacterCodes["v"] = 0x76] = "v"; - CharacterCodes[CharacterCodes["w"] = 0x77] = "w"; - CharacterCodes[CharacterCodes["x"] = 0x78] = "x"; - CharacterCodes[CharacterCodes["y"] = 0x79] = "y"; - CharacterCodes[CharacterCodes["z"] = 0x7A] = "z"; - CharacterCodes[CharacterCodes["A"] = 0x41] = "A"; - CharacterCodes[CharacterCodes["B"] = 0x42] = "B"; - CharacterCodes[CharacterCodes["C"] = 0x43] = "C"; - CharacterCodes[CharacterCodes["D"] = 0x44] = "D"; - CharacterCodes[CharacterCodes["E"] = 0x45] = "E"; - CharacterCodes[CharacterCodes["F"] = 0x46] = "F"; - CharacterCodes[CharacterCodes["G"] = 0x47] = "G"; - CharacterCodes[CharacterCodes["H"] = 0x48] = "H"; - CharacterCodes[CharacterCodes["I"] = 0x49] = "I"; - CharacterCodes[CharacterCodes["J"] = 0x4A] = "J"; - CharacterCodes[CharacterCodes["K"] = 0x4B] = "K"; - CharacterCodes[CharacterCodes["L"] = 0x4C] = "L"; - CharacterCodes[CharacterCodes["M"] = 0x4D] = "M"; - CharacterCodes[CharacterCodes["N"] = 0x4E] = "N"; - CharacterCodes[CharacterCodes["O"] = 0x4F] = "O"; - CharacterCodes[CharacterCodes["P"] = 0x50] = "P"; - CharacterCodes[CharacterCodes["Q"] = 0x51] = "Q"; - CharacterCodes[CharacterCodes["R"] = 0x52] = "R"; - CharacterCodes[CharacterCodes["S"] = 0x53] = "S"; - CharacterCodes[CharacterCodes["T"] = 0x54] = "T"; - CharacterCodes[CharacterCodes["U"] = 0x55] = "U"; - CharacterCodes[CharacterCodes["V"] = 0x56] = "V"; - CharacterCodes[CharacterCodes["W"] = 0x57] = "W"; - CharacterCodes[CharacterCodes["X"] = 0x58] = "X"; - CharacterCodes[CharacterCodes["Y"] = 0x59] = "Y"; - CharacterCodes[CharacterCodes["Z"] = 0x5a] = "Z"; - CharacterCodes[CharacterCodes["ampersand"] = 0x26] = "ampersand"; - CharacterCodes[CharacterCodes["asterisk"] = 0x2A] = "asterisk"; - CharacterCodes[CharacterCodes["at"] = 0x40] = "at"; - CharacterCodes[CharacterCodes["backslash"] = 0x5C] = "backslash"; - CharacterCodes[CharacterCodes["bar"] = 0x7C] = "bar"; - CharacterCodes[CharacterCodes["caret"] = 0x5E] = "caret"; - CharacterCodes[CharacterCodes["closeBrace"] = 0x7D] = "closeBrace"; - CharacterCodes[CharacterCodes["closeBracket"] = 0x5D] = "closeBracket"; - CharacterCodes[CharacterCodes["closeParen"] = 0x29] = "closeParen"; - CharacterCodes[CharacterCodes["colon"] = 0x3A] = "colon"; - CharacterCodes[CharacterCodes["comma"] = 0x2C] = "comma"; - CharacterCodes[CharacterCodes["dot"] = 0x2E] = "dot"; - CharacterCodes[CharacterCodes["doubleQuote"] = 0x22] = "doubleQuote"; - CharacterCodes[CharacterCodes["equals"] = 0x3D] = "equals"; - CharacterCodes[CharacterCodes["exclamation"] = 0x21] = "exclamation"; - CharacterCodes[CharacterCodes["greaterThan"] = 0x3E] = "greaterThan"; - CharacterCodes[CharacterCodes["lessThan"] = 0x3C] = "lessThan"; - CharacterCodes[CharacterCodes["minus"] = 0x2D] = "minus"; - CharacterCodes[CharacterCodes["openBrace"] = 0x7B] = "openBrace"; - CharacterCodes[CharacterCodes["openBracket"] = 0x5B] = "openBracket"; - CharacterCodes[CharacterCodes["openParen"] = 0x28] = "openParen"; - CharacterCodes[CharacterCodes["percent"] = 0x25] = "percent"; - CharacterCodes[CharacterCodes["plus"] = 0x2B] = "plus"; - CharacterCodes[CharacterCodes["question"] = 0x3F] = "question"; - CharacterCodes[CharacterCodes["semicolon"] = 0x3B] = "semicolon"; - CharacterCodes[CharacterCodes["singleQuote"] = 0x27] = "singleQuote"; - CharacterCodes[CharacterCodes["slash"] = 0x2F] = "slash"; - CharacterCodes[CharacterCodes["tilde"] = 0x7E] = "tilde"; - CharacterCodes[CharacterCodes["backspace"] = 0x08] = "backspace"; - CharacterCodes[CharacterCodes["formFeed"] = 0x0C] = "formFeed"; - CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark"; - CharacterCodes[CharacterCodes["tab"] = 0x09] = "tab"; - CharacterCodes[CharacterCodes["verticalTab"] = 0x0B] = "verticalTab"; - })(ts.CharacterCodes || (ts.CharacterCodes = {})); - var CharacterCodes = ts.CharacterCodes; -})(ts || (ts = {})); -var ts; -(function (ts) { - function forEach(array, callback) { - var result; - if (array) { - for (var i = 0, len = array.length; i < len; i++) { - if (result = callback(array[i])) - break; - } - } - return result; - } - ts.forEach = forEach; - function contains(array, value) { - if (array) { - var len = array.length; - for (var i = 0; i < len; i++) { - if (array[i] === value) { - return true; - } - } - } - return false; - } - ts.contains = contains; - function indexOf(array, value) { - if (array) { - var len = array.length; - for (var i = 0; i < len; i++) { - if (array[i] === value) { - return i; - } - } - } - return -1; - } - ts.indexOf = indexOf; - function filter(array, f) { - var result; - if (array) { - result = []; - for (var i = 0, len = array.length; i < len; i++) { - var item = array[i]; - if (f(item)) { - result.push(item); - } - } - } - return result; - } - ts.filter = filter; - function map(array, f) { - var result; - if (array) { - result = []; - var len = array.length; - for (var i = 0; i < len; i++) { - result.push(f(array[i])); - } - } - return result; - } - ts.map = map; - function concatenate(array1, array2) { - if (!array2.length) - return array1; - if (!array1.length) - return array2; - return array1.concat(array2); - } - ts.concatenate = concatenate; - function sum(array, prop) { - var result = 0; - for (var i = 0; i < array.length; i++) { - result += array[i][prop]; - } - return result; - } - ts.sum = sum; - function binarySearch(array, value) { - var low = 0; - var high = array.length - 1; - while (low <= high) { - var middle = low + ((high - low) >> 1); - var midValue = array[middle]; - if (midValue === value) { - return middle; - } - else if (midValue > value) { - high = middle - 1; - } - else { - low = middle + 1; - } - } - return ~low; - } - ts.binarySearch = binarySearch; - var hasOwnProperty = Object.prototype.hasOwnProperty; - function hasProperty(map, key) { - return hasOwnProperty.call(map, key); - } - ts.hasProperty = hasProperty; - function getProperty(map, key) { - return hasOwnProperty.call(map, key) ? map[key] : undefined; - } - ts.getProperty = getProperty; - function isEmpty(map) { - for (var id in map) - return false; - return true; - } - ts.isEmpty = isEmpty; - function clone(object) { - var result = {}; - for (var id in object) { - result[id] = object[id]; - } - return result; - } - ts.clone = clone; - function forEachValue(map, callback) { - var result; - for (var id in map) { - if (result = callback(map[id])) - break; - } - return result; - } - ts.forEachValue = forEachValue; - function mapToArray(map) { - var result = []; - for (var id in map) - result.push(map[id]); - return result; - } - ts.mapToArray = mapToArray; - function formatStringFromArgs(text, args, baseIndex) { - baseIndex = baseIndex || 0; - return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; }); - } - ts.localizedDiagnosticMessages = undefined; - function getLocaleSpecificMessage(message) { - if (ts.localizedDiagnosticMessages) { - message = ts.localizedDiagnosticMessages[message]; - } - Debug.assert(message, "Diagnostic message does not exist in locale map."); - return message; - } - function createFileDiagnostic(file, start, length, message) { - var text = getLocaleSpecificMessage(message.key); - if (arguments.length > 4) { - text = formatStringFromArgs(text, arguments, 4); - } - return { - file: file, - start: start, - length: length, - messageText: text, - category: message.category, - code: message.code - }; - } - ts.createFileDiagnostic = createFileDiagnostic; - function createCompilerDiagnostic(message) { - var text = getLocaleSpecificMessage(message.key); - if (arguments.length > 1) { - text = formatStringFromArgs(text, arguments, 1); - } - return { - file: undefined, - start: undefined, - length: undefined, - messageText: text, - category: message.category, - code: message.code - }; - } - ts.createCompilerDiagnostic = createCompilerDiagnostic; - function chainDiagnosticMessages(details, message) { - var text = getLocaleSpecificMessage(message.key); - if (arguments.length > 2) { - text = formatStringFromArgs(text, arguments, 2); - } - return { - messageText: text, - category: message.category, - code: message.code, - next: details - }; - } - ts.chainDiagnosticMessages = chainDiagnosticMessages; - function flattenDiagnosticChain(file, start, length, diagnosticChain) { - var code = diagnosticChain.code; - var category = diagnosticChain.category; - var messageText = ""; - var indent = 0; - while (diagnosticChain) { - if (indent) { - messageText += sys.newLine; - for (var i = 0; i < indent; i++) { - messageText += " "; - } - } - messageText += diagnosticChain.messageText; - indent++; - diagnosticChain = diagnosticChain.next; - } - return { - file: file, - start: start, - length: length, - code: code, - category: category, - messageText: messageText - }; - } - ts.flattenDiagnosticChain = flattenDiagnosticChain; - function compareValues(a, b) { - if (a === b) - return 0; - if (a === undefined) - return -1; - if (b === undefined) - return 1; - return a < b ? -1 : 1; - } - function getDiagnosticFilename(diagnostic) { - return diagnostic.file ? diagnostic.file.filename : undefined; - } - function compareDiagnostics(d1, d2) { - return compareValues(getDiagnosticFilename(d1), getDiagnosticFilename(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareValues(d1.messageText, d2.messageText) || 0; - } - ts.compareDiagnostics = compareDiagnostics; - function deduplicateSortedDiagnostics(diagnostics) { - if (diagnostics.length < 2) { - return diagnostics; - } - var newDiagnostics = [diagnostics[0]]; - var previousDiagnostic = diagnostics[0]; - for (var i = 1; i < diagnostics.length; i++) { - var currentDiagnostic = diagnostics[i]; - var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0; - if (!isDupe) { - newDiagnostics.push(currentDiagnostic); - previousDiagnostic = currentDiagnostic; - } - } - return newDiagnostics; - } - ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics; - function normalizeSlashes(path) { - return path.replace(/\\/g, "/"); - } - ts.normalizeSlashes = normalizeSlashes; - function getRootLength(path) { - if (path.charCodeAt(0) === 47 /* slash */) { - if (path.charCodeAt(1) !== 47 /* slash */) - return 1; - var p1 = path.indexOf("/", 2); - if (p1 < 0) - return 2; - var p2 = path.indexOf("/", p1 + 1); - if (p2 < 0) - return p1 + 1; - return p2 + 1; - } - if (path.charCodeAt(1) === 58 /* colon */) { - if (path.charCodeAt(2) === 47 /* slash */) - return 3; - return 2; - } - return 0; - } - ts.getRootLength = getRootLength; - ts.directorySeparator = "/"; - function getNormalizedParts(normalizedSlashedPath, rootLength) { - var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator); - var normalized = []; - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - if (part !== ".") { - if (part === ".." && normalized.length > 0 && normalized[normalized.length - 1] !== "..") { - normalized.pop(); - } - else { - normalized.push(part); - } - } - } - return normalized; - } - function normalizePath(path) { - var path = normalizeSlashes(path); - var rootLength = getRootLength(path); - var normalized = getNormalizedParts(path, rootLength); - return path.substr(0, rootLength) + normalized.join(ts.directorySeparator); - } - ts.normalizePath = normalizePath; - function getDirectoryPath(path) { - return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator))); - } - ts.getDirectoryPath = getDirectoryPath; - function isUrl(path) { - return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1; - } - ts.isUrl = isUrl; - function isRootedDiskPath(path) { - return getRootLength(path) !== 0; - } - ts.isRootedDiskPath = isRootedDiskPath; - function normalizedPathComponents(path, rootLength) { - var normalizedParts = getNormalizedParts(path, rootLength); - return [path.substr(0, rootLength)].concat(normalizedParts); - } - function getNormalizedPathComponents(path, currentDirectory) { - var path = normalizeSlashes(path); - var rootLength = getRootLength(path); - if (rootLength == 0) { - path = combinePaths(normalizeSlashes(currentDirectory), path); - rootLength = getRootLength(path); - } - return normalizedPathComponents(path, rootLength); - } - ts.getNormalizedPathComponents = getNormalizedPathComponents; - function getNormalizedPathFromPathCompoments(pathComponents) { - if (pathComponents && pathComponents.length) { - return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator); - } - } - ts.getNormalizedPathFromPathCompoments = getNormalizedPathFromPathCompoments; - function getNormalizedPathComponentsOfUrl(url) { - var urlLength = url.length; - var rootLength = url.indexOf("://") + "://".length; - while (rootLength < urlLength) { - if (url.charCodeAt(rootLength) === 47 /* slash */) { - rootLength++; - } - else { - break; - } - } - if (rootLength === urlLength) { - return [url]; - } - var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength); - if (indexOfNextSlash !== -1) { - rootLength = indexOfNextSlash + 1; - return normalizedPathComponents(url, rootLength); - } - else { - return [url + ts.directorySeparator]; - } - } - function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) { - if (isUrl(pathOrUrl)) { - return getNormalizedPathComponentsOfUrl(pathOrUrl); - } - else { - return getNormalizedPathComponents(pathOrUrl, currentDirectory); - } - } - function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, isAbsolutePathAnUrl) { - var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); - var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); - if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") { - directoryComponents.length--; - } - for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { - if (directoryComponents[joinStartIndex] !== pathComponents[joinStartIndex]) { - break; - } - } - if (joinStartIndex) { - var relativePath = ""; - var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length); - for (; joinStartIndex < directoryComponents.length; joinStartIndex++) { - if (directoryComponents[joinStartIndex] !== "") { - relativePath = relativePath + ".." + ts.directorySeparator; - } - } - return relativePath + relativePathComponents.join(ts.directorySeparator); - } - var absolutePath = getNormalizedPathFromPathCompoments(pathComponents); - if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) { - absolutePath = "file:///" + absolutePath; - } - return absolutePath; - } - ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; - function getBaseFilename(path) { - var i = path.lastIndexOf(ts.directorySeparator); - return i < 0 ? path : path.substring(i + 1); - } - ts.getBaseFilename = getBaseFilename; - function combinePaths(path1, path2) { - if (!(path1 && path1.length)) - return path2; - if (!(path2 && path2.length)) - return path1; - if (path2.charAt(0) === ts.directorySeparator) - return path2; - if (path1.charAt(path1.length - 1) === ts.directorySeparator) - return path1 + path2; - return path1 + ts.directorySeparator + path2; - } - ts.combinePaths = combinePaths; - function fileExtensionIs(path, extension) { - var pathLen = path.length; - var extLen = extension.length; - return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; - } - ts.fileExtensionIs = fileExtensionIs; - function getCanonicalFileName(fileName) { - return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); - } - ts.getCanonicalFileName = getCanonicalFileName; - function Symbol(flags, name) { - this.flags = flags; - this.name = name; - this.declarations = undefined; - } - function Type(checker, flags) { - this.flags = flags; - } - function Signature(checker) { - } - ts.objectAllocator = { - getNodeConstructor: function (kind) { - function Node() { - } - Node.prototype = { - kind: kind, - pos: 0, - end: 0, - flags: 0, - parent: undefined - }; - return Node; - }, - getSymbolConstructor: function () { return Symbol; }, - getTypeConstructor: function () { return Type; }, - getSignatureConstructor: function () { return Signature; } - }; - (function (AssertionLevel) { - AssertionLevel[AssertionLevel["None"] = 0] = "None"; - AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; - AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; - AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; - })(ts.AssertionLevel || (ts.AssertionLevel = {})); - var AssertionLevel = ts.AssertionLevel; - (function (Debug) { - var currentAssertionLevel = 0 /* None */; - function shouldAssert(level) { - return this.currentAssertionLevel >= level; - } - Debug.shouldAssert = shouldAssert; - function assert(expression, message, verboseDebugInfo) { - if (!expression) { - var verboseDebugString = ""; - if (verboseDebugInfo) { - verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo(); - } - throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString); - } - } - Debug.assert = assert; - function fail(message) { - Debug.assert(false, message); - } - Debug.fail = fail; - })(ts.Debug || (ts.Debug = {})); - var Debug = ts.Debug; -})(ts || (ts = {})); -var sys = (function () { - function getWScriptSystem() { - var fso = new ActiveXObject("Scripting.FileSystemObject"); - var fileStream = new ActiveXObject("ADODB.Stream"); - fileStream.Type = 2; - var binaryStream = new ActiveXObject("ADODB.Stream"); - binaryStream.Type = 1; - var args = []; - for (var i = 0; i < WScript.Arguments.length; i++) { - args[i] = WScript.Arguments.Item(i); - } - function readFile(fileName, encoding) { - if (!fso.FileExists(fileName)) { - return undefined; - } - fileStream.Open(); - try { - if (encoding) { - fileStream.Charset = encoding; - fileStream.LoadFromFile(fileName); - } - else { - fileStream.Charset = "x-ansi"; - fileStream.LoadFromFile(fileName); - var bom = fileStream.ReadText(2) || ""; - fileStream.Position = 0; - fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8"; - } - return fileStream.ReadText(); - } - catch (e) { - throw e.number === -2147024809 ? new Error(ts.Diagnostics.Unsupported_file_encoding.key) : e; - } - finally { - fileStream.Close(); - } - } - function writeFile(fileName, data) { - fileStream.Open(); - binaryStream.Open(); - try { - fileStream.Charset = "utf-8"; - fileStream.WriteText(data); - fileStream.Position = 3; - fileStream.CopyTo(binaryStream); - binaryStream.SaveToFile(fileName, 2); - } - finally { - binaryStream.Close(); - fileStream.Close(); - } - } - return { - args: args, - newLine: "\r\n", - useCaseSensitiveFileNames: false, - write: function (s) { - WScript.StdOut.Write(s); - }, - writeErr: function (s) { - WScript.StdErr.Write(s); - }, - readFile: readFile, - writeFile: writeFile, - resolvePath: function (path) { - return fso.GetAbsolutePathName(path); - }, - fileExists: function (path) { - return fso.FileExists(path); - }, - directoryExists: function (path) { - return fso.FolderExists(path); - }, - createDirectory: function (directoryName) { - if (!this.directoryExists(directoryName)) { - fso.CreateFolder(directoryName); - } - }, - getExecutingFilePath: function () { - return WScript.ScriptFullName; - }, - getCurrentDirectory: function () { - return new ActiveXObject("WScript.Shell").CurrentDirectory; - }, - getMemoryUsage: function () { - return 0; - }, - exit: function (exitCode) { - try { - WScript.Quit(exitCode); - } - catch (e) { - } - } - }; - } - function getNodeSystem() { - var _fs = require("fs"); - var _path = require("path"); - var _os = require('os'); - var platform = _os.platform(); - var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin"; - function readFile(fileName, encoding) { - if (!_fs.existsSync(fileName)) { - return undefined; - } - var buffer = _fs.readFileSync(fileName); - var len = buffer.length; - if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) { - len &= ~1; - for (var i = 0; i < len; i += 2) { - var temp = buffer[i]; - buffer[i] = buffer[i + 1]; - buffer[i + 1] = temp; - } - return buffer.toString("utf16le", 2); - } - if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) { - return buffer.toString("utf16le", 2); - } - if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { - return buffer.toString("utf8", 3); - } - return buffer.toString("utf8"); - } - function writeFile(fileName, data) { - _fs.writeFileSync(fileName, data, "utf8"); - } - return { - args: process.argv.slice(2), - newLine: _os.EOL, - useCaseSensitiveFileNames: useCaseSensitiveFileNames, - write: function (s) { - process.stdout.write(s); - }, - writeErr: function (s) { - process.stderr.write(s); - }, - readFile: readFile, - writeFile: writeFile, - resolvePath: function (path) { - return _path.resolve(path); - }, - fileExists: function (path) { - return _fs.existsSync(path); - }, - directoryExists: function (path) { - return _fs.existsSync(path) && _fs.statSync(path).isDirectory(); - }, - createDirectory: function (directoryName) { - if (!this.directoryExists(directoryName)) { - _fs.mkdirSync(directoryName); - } - }, - getExecutingFilePath: function () { - return process.mainModule.filename; - }, - getCurrentDirectory: function () { - return process.cwd(); - }, - getMemoryUsage: function () { - global.gc(); - return process.memoryUsage().heapUsed; - }, - exit: function (exitCode) { - process.exit(exitCode); - } - }; - } - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { - return getWScriptSystem(); - } - else if (typeof module !== "undefined" && module.exports) { - return getNodeSystem(); - } - else { - return undefined; - } -})(); -var ts; -(function (ts) { - var nodeConstructors = new Array(180 /* Count */); - function getNodeConstructor(kind) { - return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)); - } - ts.getNodeConstructor = getNodeConstructor; - function createRootNode(kind, pos, end, flags) { - var node = new (getNodeConstructor(kind))(); - node.pos = pos; - node.end = end; - node.flags = flags; - return node; - } - var moduleExtensions = [".d.ts", ".ts", ".js"]; - function getModuleNameFromFilename(filename) { - for (var i = 0; i < moduleExtensions.length; i++) { - var ext = moduleExtensions[i]; - var len = filename.length - ext.length; - if (len > 0 && filename.substr(len) === ext) - return filename.substr(0, len); - } - return filename; - } - ts.getModuleNameFromFilename = getModuleNameFromFilename; - function getSourceFileOfNode(node) { - while (node && node.kind !== 177 /* SourceFile */) - node = node.parent; - return node; - } - ts.getSourceFileOfNode = getSourceFileOfNode; - function nodePosToString(node) { - var file = getSourceFileOfNode(node); - var loc = file.getLineAndCharacterFromPosition(node.pos); - return file.filename + "(" + loc.line + "," + loc.character + ")"; - } - ts.nodePosToString = nodePosToString; - function getStartPosOfNode(node) { - return node.pos; - } - ts.getStartPosOfNode = getStartPosOfNode; - function getTokenPosOfNode(node) { - return ts.skipTrivia(getSourceFileOfNode(node).text, node.pos); - } - ts.getTokenPosOfNode = getTokenPosOfNode; - function getSourceTextOfNodeFromSourceText(sourceText, node) { - return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); - } - ts.getSourceTextOfNodeFromSourceText = getSourceTextOfNodeFromSourceText; - function getSourceTextOfNode(node) { - var text = getSourceFileOfNode(node).text; - return text.substring(ts.skipTrivia(text, node.pos), node.end); - } - ts.getSourceTextOfNode = getSourceTextOfNode; - function escapeIdentifier(identifier) { - return identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier; - } - ts.escapeIdentifier = escapeIdentifier; - function unescapeIdentifier(identifier) { - return identifier.length >= 3 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ && identifier.charCodeAt(2) === 95 /* _ */ ? identifier.substr(1) : identifier; - } - ts.unescapeIdentifier = unescapeIdentifier; - function identifierToString(identifier) { - return identifier.kind === 111 /* Missing */ ? "(Missing)" : getSourceTextOfNode(identifier); - } - ts.identifierToString = identifierToString; - function createDiagnosticForNode(node, message, arg0, arg1, arg2) { - node = getErrorSpanForNode(node); - var file = getSourceFileOfNode(node); - var start = ts.skipTrivia(file.text, node.pos); - var length = node.end - start; - return ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); - } - ts.createDiagnosticForNode = createDiagnosticForNode; - function createDiagnosticForNodeFromMessageChain(node, messageChain) { - node = getErrorSpanForNode(node); - var file = getSourceFileOfNode(node); - var start = ts.skipTrivia(file.text, node.pos); - var length = node.end - start; - return ts.flattenDiagnosticChain(file, start, length, messageChain); - } - ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; - function getErrorSpanForNode(node) { - var errorSpan; - switch (node.kind) { - case 166 /* VariableDeclaration */: - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - case 172 /* ModuleDeclaration */: - case 171 /* EnumDeclaration */: - case 176 /* EnumMember */: - errorSpan = node.name; - break; - } - return errorSpan && errorSpan.pos < errorSpan.end ? errorSpan : node; - } - ts.getErrorSpanForNode = getErrorSpanForNode; - function isExternalModule(file) { - return file.externalModuleIndicator !== undefined; - } - ts.isExternalModule = isExternalModule; - function isPrologueDirective(node) { - return node.kind === 146 /* ExpressionStatement */ && node.expression.kind === 3 /* StringLiteral */; - } - ts.isPrologueDirective = isPrologueDirective; - function isEvalOrArgumentsIdentifier(node) { - return node.kind === 55 /* Identifier */ && node.text && (node.text === "eval" || node.text === "arguments"); - } - function isUseStrictPrologueDirective(node) { - ts.Debug.assert(isPrologueDirective(node)); - return node.expression.text === "use strict"; - } - function forEachChild(node, cbNode, cbNodes) { - function child(node) { - if (node) - return cbNode(node); - } - function children(nodes) { - if (nodes) { - if (cbNodes) - return cbNodes(nodes); - var result; - for (var i = 0, len = nodes.length; i < len; i++) { - if (result = cbNode(nodes[i])) - break; - } - return result; - } - } - if (!node) - return; - switch (node.kind) { - case 112 /* QualifiedName */: - return child(node.left) || child(node.right); - case 113 /* TypeParameter */: - return child(node.name) || child(node.constraint); - case 114 /* Parameter */: - return child(node.name) || child(node.type) || child(node.initializer); - case 115 /* Property */: - case 129 /* PropertyAssignment */: - return child(node.name) || child(node.type) || child(node.initializer); - case 120 /* CallSignature */: - case 121 /* ConstructSignature */: - case 122 /* IndexSignature */: - return children(node.typeParameters) || children(node.parameters) || child(node.type); - case 116 /* Method */: - case 117 /* Constructor */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 136 /* FunctionExpression */: - case 167 /* FunctionDeclaration */: - case 137 /* ArrowFunction */: - return child(node.name) || children(node.typeParameters) || children(node.parameters) || child(node.type) || child(node.body); - case 123 /* TypeReference */: - return child(node.typeName) || children(node.typeArguments); - case 124 /* TypeQuery */: - return child(node.exprName); - case 125 /* TypeLiteral */: - return children(node.members); - case 126 /* ArrayType */: - return child(node.elementType); - case 127 /* ArrayLiteral */: - return children(node.elements); - case 128 /* ObjectLiteral */: - return children(node.properties); - case 130 /* PropertyAccess */: - return child(node.left) || child(node.right); - case 131 /* IndexedAccess */: - return child(node.object) || child(node.index); - case 132 /* CallExpression */: - case 133 /* NewExpression */: - return child(node.func) || children(node.typeArguments) || children(node.arguments); - case 134 /* TypeAssertion */: - return child(node.type) || child(node.operand); - case 135 /* ParenExpression */: - return child(node.expression); - case 138 /* PrefixOperator */: - case 139 /* PostfixOperator */: - return child(node.operand); - case 140 /* BinaryExpression */: - return child(node.left) || child(node.right); - case 141 /* ConditionalExpression */: - return child(node.condition) || child(node.whenTrue) || child(node.whenFalse); - case 143 /* Block */: - case 162 /* TryBlock */: - case 164 /* FinallyBlock */: - case 168 /* FunctionBlock */: - case 173 /* ModuleBlock */: - case 177 /* SourceFile */: - return children(node.statements); - case 144 /* VariableStatement */: - return children(node.declarations); - case 146 /* ExpressionStatement */: - return child(node.expression); - case 147 /* IfStatement */: - return child(node.expression) || child(node.thenStatement) || child(node.elseStatement); - case 148 /* DoStatement */: - return child(node.statement) || child(node.expression); - case 149 /* WhileStatement */: - return child(node.expression) || child(node.statement); - case 150 /* ForStatement */: - return children(node.declarations) || child(node.initializer) || child(node.condition) || child(node.iterator) || child(node.statement); - case 151 /* ForInStatement */: - return child(node.declaration) || child(node.variable) || child(node.expression) || child(node.statement); - case 152 /* ContinueStatement */: - case 153 /* BreakStatement */: - return child(node.label); - case 154 /* ReturnStatement */: - return child(node.expression); - case 155 /* WithStatement */: - return child(node.expression) || child(node.statement); - case 156 /* SwitchStatement */: - return child(node.expression) || children(node.clauses); - case 157 /* CaseClause */: - case 158 /* DefaultClause */: - return child(node.expression) || children(node.statements); - case 159 /* LabelledStatement */: - return child(node.label) || child(node.statement); - case 160 /* ThrowStatement */: - return child(node.expression); - case 161 /* TryStatement */: - return child(node.tryBlock) || child(node.catchBlock) || child(node.finallyBlock); - case 163 /* CatchBlock */: - return child(node.variable) || children(node.statements); - case 166 /* VariableDeclaration */: - return child(node.name) || child(node.type) || child(node.initializer); - case 169 /* ClassDeclaration */: - return child(node.name) || children(node.typeParameters) || child(node.baseType) || children(node.implementedTypes) || children(node.members); - case 170 /* InterfaceDeclaration */: - return child(node.name) || children(node.typeParameters) || children(node.baseTypes) || children(node.members); - case 171 /* EnumDeclaration */: - return child(node.name) || children(node.members); - case 176 /* EnumMember */: - return child(node.name) || child(node.initializer); - case 172 /* ModuleDeclaration */: - return child(node.name) || child(node.body); - case 174 /* ImportDeclaration */: - return child(node.name) || child(node.entityName) || child(node.externalModuleName); - case 175 /* ExportAssignment */: - return child(node.exportName); - } - } - ts.forEachChild = forEachChild; - function hasRestParameters(s) { - return s.parameters.length > 0 && (s.parameters[s.parameters.length - 1].flags & 8 /* Rest */) !== 0; - } - ts.hasRestParameters = hasRestParameters; - var ParsingContext; - (function (ParsingContext) { - ParsingContext[ParsingContext["SourceElements"] = 0] = "SourceElements"; - ParsingContext[ParsingContext["ModuleElements"] = 1] = "ModuleElements"; - ParsingContext[ParsingContext["BlockStatements"] = 2] = "BlockStatements"; - ParsingContext[ParsingContext["SwitchClauses"] = 3] = "SwitchClauses"; - ParsingContext[ParsingContext["SwitchClauseStatements"] = 4] = "SwitchClauseStatements"; - ParsingContext[ParsingContext["TypeMembers"] = 5] = "TypeMembers"; - ParsingContext[ParsingContext["ClassMembers"] = 6] = "ClassMembers"; - ParsingContext[ParsingContext["EnumMembers"] = 7] = "EnumMembers"; - ParsingContext[ParsingContext["BaseTypeReferences"] = 8] = "BaseTypeReferences"; - ParsingContext[ParsingContext["VariableDeclarations"] = 9] = "VariableDeclarations"; - ParsingContext[ParsingContext["ArgumentExpressions"] = 10] = "ArgumentExpressions"; - ParsingContext[ParsingContext["ObjectLiteralMembers"] = 11] = "ObjectLiteralMembers"; - ParsingContext[ParsingContext["ArrayLiteralMembers"] = 12] = "ArrayLiteralMembers"; - ParsingContext[ParsingContext["Parameters"] = 13] = "Parameters"; - ParsingContext[ParsingContext["TypeParameters"] = 14] = "TypeParameters"; - ParsingContext[ParsingContext["TypeArguments"] = 15] = "TypeArguments"; - ParsingContext[ParsingContext["Count"] = 16] = "Count"; - })(ParsingContext || (ParsingContext = {})); - var Tristate; - (function (Tristate) { - Tristate[Tristate["False"] = 0] = "False"; - Tristate[Tristate["True"] = 1] = "True"; - Tristate[Tristate["Unknown"] = 2] = "Unknown"; - })(Tristate || (Tristate = {})); - function parsingContextErrors(context) { - switch (context) { - case 0 /* SourceElements */: - return ts.Diagnostics.Declaration_or_statement_expected; - case 1 /* ModuleElements */: - return ts.Diagnostics.Declaration_or_statement_expected; - case 2 /* BlockStatements */: - return ts.Diagnostics.Statement_expected; - case 3 /* SwitchClauses */: - return ts.Diagnostics.case_or_default_expected; - case 4 /* SwitchClauseStatements */: - return ts.Diagnostics.Statement_expected; - case 5 /* TypeMembers */: - return ts.Diagnostics.Property_or_signature_expected; - case 6 /* ClassMembers */: - return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected; - case 7 /* EnumMembers */: - return ts.Diagnostics.Enum_member_expected; - case 8 /* BaseTypeReferences */: - return ts.Diagnostics.Type_reference_expected; - case 9 /* VariableDeclarations */: - return ts.Diagnostics.Variable_declaration_expected; - case 10 /* ArgumentExpressions */: - return ts.Diagnostics.Argument_expression_expected; - case 11 /* ObjectLiteralMembers */: - return ts.Diagnostics.Property_assignment_expected; - case 12 /* ArrayLiteralMembers */: - return ts.Diagnostics.Expression_or_comma_expected; - case 13 /* Parameters */: - return ts.Diagnostics.Parameter_declaration_expected; - case 14 /* TypeParameters */: - return ts.Diagnostics.Type_parameter_declaration_expected; - case 15 /* TypeArguments */: - return ts.Diagnostics.Type_argument_expected; - } - } - ; - var LookAheadMode; - (function (LookAheadMode) { - LookAheadMode[LookAheadMode["NotLookingAhead"] = 0] = "NotLookingAhead"; - LookAheadMode[LookAheadMode["NoErrorYet"] = 1] = "NoErrorYet"; - LookAheadMode[LookAheadMode["Error"] = 2] = "Error"; - })(LookAheadMode || (LookAheadMode = {})); - var ModifierContext; - (function (ModifierContext) { - ModifierContext[ModifierContext["SourceElements"] = 0] = "SourceElements"; - ModifierContext[ModifierContext["ModuleElements"] = 1] = "ModuleElements"; - ModifierContext[ModifierContext["ClassMembers"] = 2] = "ClassMembers"; - ModifierContext[ModifierContext["Parameters"] = 3] = "Parameters"; - })(ModifierContext || (ModifierContext = {})); - var TrailingCommaBehavior; - (function (TrailingCommaBehavior) { - TrailingCommaBehavior[TrailingCommaBehavior["Disallow"] = 0] = "Disallow"; - TrailingCommaBehavior[TrailingCommaBehavior["Allow"] = 1] = "Allow"; - TrailingCommaBehavior[TrailingCommaBehavior["Preserve"] = 2] = "Preserve"; - })(TrailingCommaBehavior || (TrailingCommaBehavior = {})); - var ControlBlockContext; - (function (ControlBlockContext) { - ControlBlockContext[ControlBlockContext["NotNested"] = 0] = "NotNested"; - ControlBlockContext[ControlBlockContext["Nested"] = 1] = "Nested"; - ControlBlockContext[ControlBlockContext["CrossingFunctionBoundary"] = 2] = "CrossingFunctionBoundary"; - })(ControlBlockContext || (ControlBlockContext = {})); - function createSourceFile(filename, sourceText, languageVersion) { - var file; - var scanner; - var token; - var parsingContext; - var commentRanges; - var identifiers = {}; - var identifierCount = 0; - var nodeCount = 0; - var lineStarts; - var isInStrictMode = false; - var lookAheadMode = 0 /* NotLookingAhead */; - var inAmbientContext = false; - var inFunctionBody = false; - var inSwitchStatement = 0 /* NotNested */; - var inIterationStatement = 0 /* NotNested */; - var labelledStatementInfo = (function () { - var functionBoundarySentinel; - var currentLabelSet; - var labelSetStack; - var isIterationStack; - function addLabel(label) { - if (!currentLabelSet) { - currentLabelSet = {}; - } - currentLabelSet[label.text] = true; - } - function pushCurrentLabelSet(isIterationStatement) { - if (!labelSetStack && !isIterationStack) { - labelSetStack = []; - isIterationStack = []; - } - ts.Debug.assert(currentLabelSet !== undefined); - labelSetStack.push(currentLabelSet); - isIterationStack.push(isIterationStatement); - currentLabelSet = undefined; - } - function pushFunctionBoundary() { - if (!functionBoundarySentinel) { - functionBoundarySentinel = {}; - if (!labelSetStack && !isIterationStack) { - labelSetStack = []; - isIterationStack = []; - } - } - ts.Debug.assert(currentLabelSet === undefined); - labelSetStack.push(functionBoundarySentinel); - isIterationStack.push(false); - } - function pop() { - ts.Debug.assert(labelSetStack.length && isIterationStack.length && currentLabelSet === undefined); - labelSetStack.pop(); - isIterationStack.pop(); - } - function nodeIsNestedInLabel(label, requireIterationStatement, stopAtFunctionBoundary) { - if (!requireIterationStatement && currentLabelSet && ts.hasProperty(currentLabelSet, label.text)) { - return 1 /* Nested */; - } - if (!labelSetStack) { - return 0 /* NotNested */; - } - var crossedFunctionBoundary = false; - for (var i = labelSetStack.length - 1; i >= 0; i--) { - var labelSet = labelSetStack[i]; - if (labelSet === functionBoundarySentinel) { - if (stopAtFunctionBoundary) { - break; - } - else { - crossedFunctionBoundary = true; - continue; - } - } - if (requireIterationStatement && isIterationStack[i] === false) { - continue; - } - if (ts.hasProperty(labelSet, label.text)) { - return crossedFunctionBoundary ? 2 /* CrossingFunctionBoundary */ : 1 /* Nested */; - } - } - return 0 /* NotNested */; - } - return { - addLabel: addLabel, - pushCurrentLabelSet: pushCurrentLabelSet, - pushFunctionBoundary: pushFunctionBoundary, - pop: pop, - nodeIsNestedInLabel: nodeIsNestedInLabel - }; - })(); - function getLineAndCharacterlFromSourcePosition(position) { - if (!lineStarts) { - lineStarts = ts.getLineStarts(sourceText); - } - return ts.getLineAndCharacterOfPosition(lineStarts, position); - } - function error(message, arg0, arg1, arg2) { - var start = scanner.getTokenPos(); - var length = scanner.getTextPos() - start; - errorAtPos(start, length, message, arg0, arg1, arg2); - } - function grammarErrorOnNode(node, message, arg0, arg1, arg2) { - var span = getErrorSpanForNode(node); - var start = ts.skipTrivia(file.text, span.pos); - var length = span.end - start; - file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } - function reportInvalidUseInStrictMode(node) { - var name = sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); - grammarErrorOnNode(node, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name); - } - function grammarErrorAtPos(start, length, message, arg0, arg1, arg2) { - file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } - function errorAtPos(start, length, message, arg0, arg1, arg2) { - var lastErrorPos = file.syntacticErrors.length ? file.syntacticErrors[file.syntacticErrors.length - 1].start : -1; - if (start !== lastErrorPos) { - file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } - if (lookAheadMode === 1 /* NoErrorYet */) { - lookAheadMode = 2 /* Error */; - } - } - function scanError(message) { - var pos = scanner.getTextPos(); - errorAtPos(pos, 0, message); - } - function onComment(pos, end) { - if (commentRanges) - commentRanges.push({ pos: pos, end: end }); - } - function getNodePos() { - return scanner.getStartPos(); - } - function getNodeEnd() { - return scanner.getStartPos(); - } - function nextToken() { - return token = scanner.scan(); - } - function getTokenPos(pos) { - return ts.skipTrivia(sourceText, pos); - } - function reScanGreaterToken() { - return token = scanner.reScanGreaterToken(); - } - function reScanSlashToken() { - return token = scanner.reScanSlashToken(); - } - function lookAheadHelper(callback, alwaysResetState) { - var saveToken = token; - var saveSyntacticErrorsLength = file.syntacticErrors.length; - var saveLookAheadMode = lookAheadMode; - lookAheadMode = 1 /* NoErrorYet */; - var result = callback(); - ts.Debug.assert(lookAheadMode === 2 /* Error */ || lookAheadMode === 1 /* NoErrorYet */); - if (lookAheadMode === 2 /* Error */) { - result = undefined; - } - lookAheadMode = saveLookAheadMode; - if (!result || alwaysResetState) { - token = saveToken; - file.syntacticErrors.length = saveSyntacticErrorsLength; - } - return result; - } - function lookAhead(callback) { - var result; - scanner.tryScan(function () { - result = lookAheadHelper(callback, true); - return false; - }); - return result; - } - function tryParse(callback) { - return scanner.tryScan(function () { return lookAheadHelper(callback, false); }); - } - function isIdentifier() { - return token === 55 /* Identifier */ || (isInStrictMode ? token > ts.SyntaxKind.LastFutureReservedWord : token > ts.SyntaxKind.LastReservedWord); - } - function parseExpected(t) { - if (token === t) { - nextToken(); - return true; - } - error(ts.Diagnostics._0_expected, ts.tokenToString(t)); - return false; - } - function parseOptional(t) { - if (token === t) { - nextToken(); - return true; - } - return false; - } - function canParseSemicolon() { - if (token === 13 /* SemicolonToken */) { - return true; - } - return token === 6 /* CloseBraceToken */ || token === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak(); - } - function parseSemicolon() { - if (canParseSemicolon()) { - if (token === 13 /* SemicolonToken */) { - nextToken(); - } - } - else { - error(ts.Diagnostics._0_expected, ";"); - } - } - function createNode(kind, pos) { - nodeCount++; - var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))(); - if (!(pos >= 0)) - pos = scanner.getStartPos(); - node.pos = pos; - node.end = pos; - return node; - } - function finishNode(node) { - node.end = scanner.getStartPos(); - return node; - } - function createMissingNode() { - return createNode(111 /* Missing */); - } - function createIdentifier(isIdentifier) { - identifierCount++; - if (isIdentifier) { - var node = createNode(55 /* Identifier */); - var text = escapeIdentifier(scanner.getTokenValue()); - node.text = ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text); - nextToken(); - return finishNode(node); - } - error(ts.Diagnostics.Identifier_expected); - return createMissingNode(); - } - function parseIdentifier() { - return createIdentifier(isIdentifier()); - } - function parseIdentifierName() { - return createIdentifier(token >= 55 /* Identifier */); - } - function isPropertyName() { - return token >= 55 /* Identifier */ || token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */; - } - function parsePropertyName() { - if (token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */) { - return parsePrimaryExpression(); - } - return parseIdentifierName(); - } - function isKeyword(token) { - return ts.SyntaxKind.FirstKeyword <= token && token <= ts.SyntaxKind.LastKeyword; - } - function isModifier(token) { - switch (token) { - case 98 /* PublicKeyword */: - case 96 /* PrivateKeyword */: - case 99 /* StaticKeyword */: - case 68 /* ExportKeyword */: - case 104 /* DeclareKeyword */: - return true; - } - return false; - } - function parseContextualModifier(t) { - return token === t && tryParse(function () { - nextToken(); - return token === 9 /* OpenBracketToken */ || isPropertyName(); - }); - } - function parseAnyContextualModifier() { - return isModifier(token) && tryParse(function () { - nextToken(); - return token === 9 /* OpenBracketToken */ || isPropertyName(); - }); - } - function isListElement(kind, inErrorRecovery) { - switch (kind) { - case 0 /* SourceElements */: - case 1 /* ModuleElements */: - return isSourceElement(inErrorRecovery); - case 2 /* BlockStatements */: - case 4 /* SwitchClauseStatements */: - return isStatement(inErrorRecovery); - case 3 /* SwitchClauses */: - return token === 57 /* CaseKeyword */ || token === 63 /* DefaultKeyword */; - case 5 /* TypeMembers */: - return isTypeMember(); - case 6 /* ClassMembers */: - return lookAhead(isClassMemberStart); - case 7 /* EnumMembers */: - case 11 /* ObjectLiteralMembers */: - return isPropertyName(); - case 8 /* BaseTypeReferences */: - return isIdentifier() && ((token !== 69 /* ExtendsKeyword */ && token !== 92 /* ImplementsKeyword */) || !lookAhead(function () { return (nextToken(), isIdentifier()); })); - case 9 /* VariableDeclarations */: - case 14 /* TypeParameters */: - return isIdentifier(); - case 10 /* ArgumentExpressions */: - return isExpression(); - case 12 /* ArrayLiteralMembers */: - return token === 14 /* CommaToken */ || isExpression(); - case 13 /* Parameters */: - return isParameter(); - case 15 /* TypeArguments */: - return isType(); - } - ts.Debug.fail("Non-exhaustive case in 'isListElement'."); - } - function isListTerminator(kind) { - if (token === 1 /* EndOfFileToken */) { - return true; - } - switch (kind) { - case 1 /* ModuleElements */: - case 2 /* BlockStatements */: - case 3 /* SwitchClauses */: - case 5 /* TypeMembers */: - case 6 /* ClassMembers */: - case 7 /* EnumMembers */: - case 11 /* ObjectLiteralMembers */: - return token === 6 /* CloseBraceToken */; - case 4 /* SwitchClauseStatements */: - return token === 6 /* CloseBraceToken */ || token === 57 /* CaseKeyword */ || token === 63 /* DefaultKeyword */; - case 8 /* BaseTypeReferences */: - return token === 5 /* OpenBraceToken */ || token === 69 /* ExtendsKeyword */ || token === 92 /* ImplementsKeyword */; - case 9 /* VariableDeclarations */: - return isVariableDeclaratorListTerminator(); - case 14 /* TypeParameters */: - return token === 16 /* GreaterThanToken */ || token === 7 /* OpenParenToken */ || token === 5 /* OpenBraceToken */ || token === 69 /* ExtendsKeyword */ || token === 92 /* ImplementsKeyword */; - case 10 /* ArgumentExpressions */: - return token === 8 /* CloseParenToken */ || token === 13 /* SemicolonToken */; - case 12 /* ArrayLiteralMembers */: - return token === 10 /* CloseBracketToken */; - case 13 /* Parameters */: - return token === 8 /* CloseParenToken */ || token === 10 /* CloseBracketToken */ || token === 5 /* OpenBraceToken */; - case 15 /* TypeArguments */: - return token === 16 /* GreaterThanToken */ || token === 7 /* OpenParenToken */; - } - } - function isVariableDeclaratorListTerminator() { - if (canParseSemicolon()) { - return true; - } - if (token === 76 /* InKeyword */) { - return true; - } - if (token === 23 /* EqualsGreaterThanToken */) { - return true; - } - return false; - } - function isInSomeParsingContext() { - for (var kind = 0; kind < 16 /* Count */; kind++) { - if (parsingContext & (1 << kind)) { - if (isListElement(kind, true) || isListTerminator(kind)) { - return true; - } - } - } - return false; - } - function parseList(kind, checkForStrictMode, parseElement) { - var saveParsingContext = parsingContext; - parsingContext |= 1 << kind; - var result = []; - result.pos = getNodePos(); - var saveIsInStrictMode = isInStrictMode; - while (!isListTerminator(kind)) { - if (isListElement(kind, false)) { - var element = parseElement(); - result.push(element); - if (!isInStrictMode && checkForStrictMode) { - if (isPrologueDirective(element)) { - if (isUseStrictPrologueDirective(element)) { - isInStrictMode = true; - checkForStrictMode = false; - } - } - else { - checkForStrictMode = false; - } - } - } - else { - error(parsingContextErrors(kind)); - if (isInSomeParsingContext()) { - break; - } - nextToken(); - } - } - isInStrictMode = saveIsInStrictMode; - result.end = getNodeEnd(); - parsingContext = saveParsingContext; - return result; - } - function parseDelimitedList(kind, parseElement, trailingCommaBehavior) { - var saveParsingContext = parsingContext; - parsingContext |= 1 << kind; - var result = []; - result.pos = getNodePos(); - var errorCountBeforeParsingList = file.syntacticErrors.length; - var commaStart = -1; - while (true) { - if (isListElement(kind, false)) { - result.push(parseElement()); - commaStart = scanner.getTokenPos(); - if (parseOptional(14 /* CommaToken */)) { - continue; - } - commaStart = -1; - if (isListTerminator(kind)) { - break; - } - error(ts.Diagnostics._0_expected, ","); - } - else if (isListTerminator(kind)) { - if (commaStart >= 0) { - if (trailingCommaBehavior === 0 /* Disallow */) { - if (file.syntacticErrors.length === errorCountBeforeParsingList) { - grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); - } - } - else if (trailingCommaBehavior === 2 /* Preserve */) { - result.push(createNode(142 /* OmittedExpression */)); - } - } - break; - } - else { - error(parsingContextErrors(kind)); - if (isInSomeParsingContext()) { - break; - } - nextToken(); - } - } - result.end = getNodeEnd(); - parsingContext = saveParsingContext; - return result; - } - function createMissingList() { - var pos = getNodePos(); - var result = []; - result.pos = pos; - result.end = pos; - return result; - } - function createNodeArray(node) { - var result = [node]; - result.pos = node.pos; - result.end = node.end; - return result; - } - function parseBracketedList(kind, parseElement, startToken, endToken) { - if (parseExpected(startToken)) { - var result = parseDelimitedList(kind, parseElement, 0 /* Disallow */); - parseExpected(endToken); - return result; - } - return createMissingList(); - } - function parseEntityName(allowReservedWords) { - var entity = parseIdentifier(); - while (parseOptional(11 /* DotToken */)) { - var node = createNode(112 /* QualifiedName */, entity.pos); - node.left = entity; - node.right = allowReservedWords ? parseIdentifierName() : parseIdentifier(); - entity = finishNode(node); - } - return entity; - } - function parseTokenNode() { - var node = createNode(token); - nextToken(); - return finishNode(node); - } - function parseLiteralNode() { - var node = createNode(token); - node.text = scanner.getTokenValue(); - nextToken(); - return finishNode(node); - } - function parseStringLiteral() { - if (token === 3 /* StringLiteral */) - return parseLiteralNode(); - error(ts.Diagnostics.String_literal_expected); - return createMissingNode(); - } - function parseTypeReference() { - var node = createNode(123 /* TypeReference */); - node.typeName = parseEntityName(false); - if (!scanner.hasPrecedingLineBreak() && token === 15 /* LessThanToken */) { - node.typeArguments = parseTypeArguments(); - } - return finishNode(node); - } - function parseTypeQuery() { - var node = createNode(124 /* TypeQuery */); - parseExpected(87 /* TypeOfKeyword */); - node.exprName = parseEntityName(true); - return finishNode(node); - } - function parseTypeParameter() { - var node = createNode(113 /* TypeParameter */); - node.name = parseIdentifier(); - if (parseOptional(69 /* ExtendsKeyword */)) { - if (isType() || !isExpression()) { - node.constraint = parseType(); - } - else { - var expr = parseUnaryExpression(); - grammarErrorOnNode(expr, ts.Diagnostics.Type_expected); - } - } - return finishNode(node); - } - function parseTypeParameters() { - if (token === 15 /* LessThanToken */) { - var pos = getNodePos(); - var result = parseBracketedList(14 /* TypeParameters */, parseTypeParameter, 15 /* LessThanToken */, 16 /* GreaterThanToken */); - if (!result.length) { - var start = getTokenPos(pos); - var length = getNodePos() - start; - errorAtPos(start, length, ts.Diagnostics.Type_parameter_list_cannot_be_empty); - } - return result; - } - } - function parseParameterType() { - return parseOptional(42 /* ColonToken */) ? token === 3 /* StringLiteral */ ? parseStringLiteral() : parseType() : undefined; - } - function isParameter() { - return token === 12 /* DotDotDotToken */ || isIdentifier() || isModifier(token); - } - function parseParameter(flags) { - if (flags === void 0) { flags = 0; } - var node = createNode(114 /* Parameter */); - node.flags |= parseAndCheckModifiers(3 /* Parameters */); - if (parseOptional(12 /* DotDotDotToken */)) { - node.flags |= 8 /* Rest */; - } - node.name = parseIdentifier(); - if (node.name.kind === 111 /* Missing */ && node.flags === 0 && isModifier(token)) { - nextToken(); - } - if (parseOptional(41 /* QuestionToken */)) { - node.flags |= 4 /* QuestionMark */; - } - node.type = parseParameterType(); - node.initializer = parseInitializer(true); - return finishNode(node); - } - function parseSignature(kind, returnToken) { - if (kind === 121 /* ConstructSignature */) { - parseExpected(78 /* NewKeyword */); - } - var typeParameters = parseTypeParameters(); - var parameters = parseParameterList(7 /* OpenParenToken */, 8 /* CloseParenToken */); - checkParameterList(parameters); - var type = parseOptional(returnToken) ? parseType() : undefined; - return { - typeParameters: typeParameters, - parameters: parameters, - type: type - }; - } - function parseParameterList(startDelimiter, endDelimiter) { - return parseBracketedList(13 /* Parameters */, parseParameter, startDelimiter, endDelimiter); - } - function checkParameterList(parameters) { - var seenOptionalParameter = false; - var parameterCount = parameters.length; - for (var i = 0; i < parameterCount; i++) { - var parameter = parameters[i]; - if (isInStrictMode && isEvalOrArgumentsIdentifier(parameter.name)) { - reportInvalidUseInStrictMode(parameter.name); - return; - } - else if (parameter.flags & 8 /* Rest */) { - if (i !== (parameterCount - 1)) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); - return; - } - if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_be_optional); - return; - } - if (parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer); - return; - } - } - else if (parameter.flags & 4 /* QuestionMark */ || parameter.initializer) { - seenOptionalParameter = true; - if (parameter.flags & 4 /* QuestionMark */ && parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer); - return; - } - } - else { - if (seenOptionalParameter) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); - return; - } - } - } - } - function parseSignatureMember(kind, returnToken) { - var node = createNode(kind); - var sig = parseSignature(kind, returnToken); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; - parseSemicolon(); - return finishNode(node); - } - function parseIndexSignatureMember() { - var node = createNode(122 /* IndexSignature */); - var errorCountBeforeIndexSignature = file.syntacticErrors.length; - var indexerStart = scanner.getTokenPos(); - node.parameters = parseParameterList(9 /* OpenBracketToken */, 10 /* CloseBracketToken */); - var indexerLength = scanner.getStartPos() - indexerStart; - node.type = parseTypeAnnotation(); - parseSemicolon(); - if (file.syntacticErrors.length === errorCountBeforeIndexSignature) { - checkIndexSignature(node, indexerStart, indexerLength); - } - return finishNode(node); - } - function checkIndexSignature(node, indexerStart, indexerLength) { - var parameter = node.parameters[0]; - if (node.parameters.length !== 1) { - var arityDiagnostic = ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter; - if (parameter) { - grammarErrorOnNode(parameter.name, arityDiagnostic); - } - else { - grammarErrorAtPos(indexerStart, indexerLength, arityDiagnostic); - } - return; - } - else if (parameter.flags & 8 /* Rest */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); - return; - } - else if (parameter.flags & ts.NodeFlags.Modifier) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); - return; - } - else if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); - return; - } - else if (parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); - return; - } - else if (!parameter.type) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); - return; - } - else if (parameter.type.kind !== 110 /* StringKeyword */ && parameter.type.kind !== 108 /* NumberKeyword */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); - return; - } - else if (!node.type) { - grammarErrorAtPos(indexerStart, indexerLength, ts.Diagnostics.An_index_signature_must_have_a_type_annotation); - return; - } - } - function parsePropertyOrMethod() { - var node = createNode(0 /* Unknown */); - node.name = parsePropertyName(); - if (parseOptional(41 /* QuestionToken */)) { - node.flags |= 4 /* QuestionMark */; - } - if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { - node.kind = 116 /* Method */; - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; - } - else { - node.kind = 115 /* Property */; - node.type = parseTypeAnnotation(); - } - parseSemicolon(); - return finishNode(node); - } - function isTypeMember() { - switch (token) { - case 7 /* OpenParenToken */: - case 15 /* LessThanToken */: - case 9 /* OpenBracketToken */: - return true; - default: - return isPropertyName() && lookAhead(function () { return nextToken() === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */ || token === 41 /* QuestionToken */ || token === 42 /* ColonToken */ || canParseSemicolon(); }); - } - } - function parseTypeMember() { - switch (token) { - case 7 /* OpenParenToken */: - case 15 /* LessThanToken */: - return parseSignatureMember(120 /* CallSignature */, 42 /* ColonToken */); - case 9 /* OpenBracketToken */: - return parseIndexSignatureMember(); - case 78 /* NewKeyword */: - if (lookAhead(function () { return nextToken() === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */; })) { - return parseSignatureMember(121 /* ConstructSignature */, 42 /* ColonToken */); - } - case 3 /* StringLiteral */: - case 2 /* NumericLiteral */: - return parsePropertyOrMethod(); - default: - if (token >= 55 /* Identifier */) { - return parsePropertyOrMethod(); - } - } - } - function parseTypeLiteral() { - var node = createNode(125 /* TypeLiteral */); - if (parseExpected(5 /* OpenBraceToken */)) { - node.members = parseList(5 /* TypeMembers */, false, parseTypeMember); - parseExpected(6 /* CloseBraceToken */); - } - else { - node.members = createMissingList(); - } - return finishNode(node); - } - function parseFunctionType(signatureKind) { - var node = createNode(125 /* TypeLiteral */); - var member = createNode(signatureKind); - var sig = parseSignature(signatureKind, 23 /* EqualsGreaterThanToken */); - member.typeParameters = sig.typeParameters; - member.parameters = sig.parameters; - member.type = sig.type; - finishNode(member); - node.members = createNodeArray(member); - return finishNode(node); - } - function parseKeywordAndNoDot() { - var node = parseTokenNode(); - return token === 11 /* DotToken */ ? undefined : node; - } - function parseNonArrayType() { - switch (token) { - case 101 /* AnyKeyword */: - case 110 /* StringKeyword */: - case 108 /* NumberKeyword */: - case 102 /* BooleanKeyword */: - case 89 /* VoidKeyword */: - var node = tryParse(parseKeywordAndNoDot); - return node || parseTypeReference(); - case 87 /* TypeOfKeyword */: - return parseTypeQuery(); - case 5 /* OpenBraceToken */: - return parseTypeLiteral(); - case 7 /* OpenParenToken */: - case 15 /* LessThanToken */: - return parseFunctionType(120 /* CallSignature */); - case 78 /* NewKeyword */: - return parseFunctionType(121 /* ConstructSignature */); - default: - if (isIdentifier()) { - return parseTypeReference(); - } - } - error(ts.Diagnostics.Type_expected); - return createMissingNode(); - } - function isType() { - switch (token) { - case 101 /* AnyKeyword */: - case 110 /* StringKeyword */: - case 108 /* NumberKeyword */: - case 102 /* BooleanKeyword */: - case 89 /* VoidKeyword */: - case 87 /* TypeOfKeyword */: - case 5 /* OpenBraceToken */: - case 15 /* LessThanToken */: - case 78 /* NewKeyword */: - return true; - case 7 /* OpenParenToken */: - return lookAhead(function () { - nextToken(); - return token === 8 /* CloseParenToken */ || isParameter(); - }); - default: - return isIdentifier(); - } - } - function parseType() { - var type = parseNonArrayType(); - while (type && !scanner.hasPrecedingLineBreak() && parseOptional(9 /* OpenBracketToken */)) { - parseExpected(10 /* CloseBracketToken */); - var node = createNode(126 /* ArrayType */, type.pos); - node.elementType = type; - type = finishNode(node); - } - return type; - } - function parseTypeAnnotation() { - return parseOptional(42 /* ColonToken */) ? parseType() : undefined; - } - function isExpression() { - switch (token) { - case 83 /* ThisKeyword */: - case 81 /* SuperKeyword */: - case 79 /* NullKeyword */: - case 85 /* TrueKeyword */: - case 70 /* FalseKeyword */: - case 2 /* NumericLiteral */: - case 3 /* StringLiteral */: - case 7 /* OpenParenToken */: - case 9 /* OpenBracketToken */: - case 5 /* OpenBraceToken */: - case 73 /* FunctionKeyword */: - case 78 /* NewKeyword */: - case 27 /* SlashToken */: - case 47 /* SlashEqualsToken */: - case 24 /* PlusToken */: - case 25 /* MinusToken */: - case 38 /* TildeToken */: - case 37 /* ExclamationToken */: - case 64 /* DeleteKeyword */: - case 87 /* TypeOfKeyword */: - case 89 /* VoidKeyword */: - case 29 /* PlusPlusToken */: - case 30 /* MinusMinusToken */: - case 15 /* LessThanToken */: - case 55 /* Identifier */: - return true; - default: - return isIdentifier(); - } - } - function isExpressionStatement() { - return token !== 5 /* OpenBraceToken */ && token !== 73 /* FunctionKeyword */ && isExpression(); - } - function parseExpression(noIn) { - var expr = parseAssignmentExpression(noIn); - while (parseOptional(14 /* CommaToken */)) { - expr = makeBinaryExpression(expr, 14 /* CommaToken */, parseAssignmentExpression(noIn)); - } - return expr; - } - function parseInitializer(inParameter, noIn) { - if (token !== 43 /* EqualsToken */) { - if (scanner.hasPrecedingLineBreak() || (inParameter && token === 5 /* OpenBraceToken */) || !isExpression()) { - return undefined; - } - } - parseExpected(43 /* EqualsToken */); - return parseAssignmentExpression(noIn); - } - function parseAssignmentExpression(noIn) { - var arrowExpression = tryParseArrowFunctionExpression(); - if (arrowExpression) { - return arrowExpression; - } - var expr = parseConditionalExpression(noIn); - if (isLeftHandSideExpression(expr) && isAssignmentOperator()) { - if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { - reportInvalidUseInStrictMode(expr); - } - var operator = token; - nextToken(); - return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn)); - } - return expr; - } - function isLeftHandSideExpression(expr) { - if (expr) { - switch (expr.kind) { - case 130 /* PropertyAccess */: - case 131 /* IndexedAccess */: - case 133 /* NewExpression */: - case 132 /* CallExpression */: - case 127 /* ArrayLiteral */: - case 135 /* ParenExpression */: - case 128 /* ObjectLiteral */: - case 136 /* FunctionExpression */: - case 55 /* Identifier */: - case 111 /* Missing */: - case 4 /* RegularExpressionLiteral */: - case 2 /* NumericLiteral */: - case 3 /* StringLiteral */: - case 70 /* FalseKeyword */: - case 79 /* NullKeyword */: - case 83 /* ThisKeyword */: - case 85 /* TrueKeyword */: - case 81 /* SuperKeyword */: - return true; - } - } - return false; - } - function tryParseArrowFunctionExpression() { - return isSimpleArrowFunctionExpression() ? parseSimpleArrowFunctionExpression() : tryParseParenthesizedArrowFunctionExpression(); - } - function isSimpleArrowFunctionExpression() { - if (token === 23 /* EqualsGreaterThanToken */) { - return true; - } - if (token === 55 /* Identifier */) { - return lookAhead(function () { - return nextToken() === 23 /* EqualsGreaterThanToken */; - }); - } - return false; - } - function parseSimpleArrowFunctionExpression() { - ts.Debug.assert(token === 55 /* Identifier */ || token === 23 /* EqualsGreaterThanToken */); - var identifier = parseIdentifier(); - ts.Debug.assert(token === 23 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); - parseExpected(23 /* EqualsGreaterThanToken */); - var parameter = createNode(114 /* Parameter */, identifier.pos); - parameter.name = identifier; - finishNode(parameter); - var signature = { parameters: [parameter] }; - return parseArrowExpressionTail(identifier.pos, signature, false); - } - function tryParseParenthesizedArrowFunctionExpression() { - var pos = getNodePos(); - var triState = isParenthesizedArrowFunctionExpression(); - if (triState === 0 /* False */) { - return undefined; - } - if (triState === 1 /* True */) { - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - if (parseExpected(23 /* EqualsGreaterThanToken */) || token === 5 /* OpenBraceToken */) { - return parseArrowExpressionTail(pos, sig, false); - } - else { - return makeFunctionExpression(137 /* ArrowFunction */, pos, undefined, sig, createMissingNode()); - } - } - var sig = tryParseSignatureIfArrowOrBraceFollows(); - if (sig) { - parseExpected(23 /* EqualsGreaterThanToken */); - return parseArrowExpressionTail(pos, sig, false); - } - else { - return undefined; - } - } - function isParenthesizedArrowFunctionExpression() { - if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { - return lookAhead(function () { - var first = token; - var second = nextToken(); - if (first === 7 /* OpenParenToken */) { - if (second === 8 /* CloseParenToken */) { - var third = nextToken(); - switch (third) { - case 23 /* EqualsGreaterThanToken */: - case 42 /* ColonToken */: - case 5 /* OpenBraceToken */: - return 1 /* True */; - default: - return 0 /* False */; - } - } - if (second === 12 /* DotDotDotToken */) { - return 1 /* True */; - } - if (!isIdentifier()) { - return 0 /* False */; - } - if (nextToken() === 42 /* ColonToken */) { - return 1 /* True */; - } - return 2 /* Unknown */; - } - else { - ts.Debug.assert(first === 15 /* LessThanToken */); - if (!isIdentifier()) { - return 0 /* False */; - } - return 2 /* Unknown */; - } - }); - } - return 0 /* False */; - } - function tryParseSignatureIfArrowOrBraceFollows() { - return tryParse(function () { - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - if (token === 23 /* EqualsGreaterThanToken */ || token === 5 /* OpenBraceToken */) { - return sig; - } - return undefined; - }); - } - function parseArrowExpressionTail(pos, sig, noIn) { - var body; - if (token === 5 /* OpenBraceToken */) { - body = parseBody(false); - } - else if (isStatement(true) && !isExpressionStatement() && token !== 73 /* FunctionKeyword */) { - body = parseBody(true); - } - else { - body = parseAssignmentExpression(noIn); - } - return makeFunctionExpression(137 /* ArrowFunction */, pos, undefined, sig, body); - } - function isAssignmentOperator() { - return token >= ts.SyntaxKind.FirstAssignment && token <= ts.SyntaxKind.LastAssignment; - } - function parseConditionalExpression(noIn) { - var expr = parseBinaryExpression(noIn); - while (parseOptional(41 /* QuestionToken */)) { - var node = createNode(141 /* ConditionalExpression */, expr.pos); - node.condition = expr; - node.whenTrue = parseAssignmentExpression(false); - parseExpected(42 /* ColonToken */); - node.whenFalse = parseAssignmentExpression(noIn); - expr = finishNode(node); - } - return expr; - } - function parseBinaryExpression(noIn) { - return parseBinaryOperators(parseUnaryExpression(), 0, noIn); - } - function parseBinaryOperators(expr, minPrecedence, noIn) { - while (true) { - reScanGreaterToken(); - var precedence = getOperatorPrecedence(); - if (precedence && precedence > minPrecedence && (!noIn || token !== 76 /* InKeyword */)) { - var operator = token; - nextToken(); - expr = makeBinaryExpression(expr, operator, parseBinaryOperators(parseUnaryExpression(), precedence, noIn)); - continue; - } - return expr; - } - } - function getOperatorPrecedence() { - switch (token) { - case 40 /* BarBarToken */: - return 1; - case 39 /* AmpersandAmpersandToken */: - return 2; - case 35 /* BarToken */: - return 3; - case 36 /* CaretToken */: - return 4; - case 34 /* AmpersandToken */: - return 5; - case 19 /* EqualsEqualsToken */: - case 20 /* ExclamationEqualsToken */: - case 21 /* EqualsEqualsEqualsToken */: - case 22 /* ExclamationEqualsEqualsToken */: - return 6; - case 15 /* LessThanToken */: - case 16 /* GreaterThanToken */: - case 17 /* LessThanEqualsToken */: - case 18 /* GreaterThanEqualsToken */: - case 77 /* InstanceOfKeyword */: - case 76 /* InKeyword */: - return 7; - case 31 /* LessThanLessThanToken */: - case 32 /* GreaterThanGreaterThanToken */: - case 33 /* GreaterThanGreaterThanGreaterThanToken */: - return 8; - case 24 /* PlusToken */: - case 25 /* MinusToken */: - return 9; - case 26 /* AsteriskToken */: - case 27 /* SlashToken */: - case 28 /* PercentToken */: - return 10; - } - return undefined; - } - function makeBinaryExpression(left, operator, right) { - var node = createNode(140 /* BinaryExpression */, left.pos); - node.left = left; - node.operator = operator; - node.right = right; - return finishNode(node); - } - function parseUnaryExpression() { - var pos = getNodePos(); - switch (token) { - case 24 /* PlusToken */: - case 25 /* MinusToken */: - case 38 /* TildeToken */: - case 37 /* ExclamationToken */: - case 64 /* DeleteKeyword */: - case 87 /* TypeOfKeyword */: - case 89 /* VoidKeyword */: - case 29 /* PlusPlusToken */: - case 30 /* MinusMinusToken */: - var operator = token; - nextToken(); - var operand = parseUnaryExpression(); - if (isInStrictMode) { - if ((token === 29 /* PlusPlusToken */ || token === 30 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { - reportInvalidUseInStrictMode(operand); - } - else if (token === 64 /* DeleteKeyword */ && operand.kind === 55 /* Identifier */) { - grammarErrorOnNode(operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); - } - } - return makeUnaryExpression(138 /* PrefixOperator */, pos, operator, operand); - case 15 /* LessThanToken */: - return parseTypeAssertion(); - } - var primaryExpression = parsePrimaryExpression(); - var illegalUsageOfSuperKeyword = primaryExpression.kind === 81 /* SuperKeyword */ && token !== 7 /* OpenParenToken */ && token !== 11 /* DotToken */; - if (illegalUsageOfSuperKeyword) { - error(ts.Diagnostics.super_must_be_followed_by_argument_list_or_member_access); - } - var expr = parseCallAndAccess(primaryExpression, false); - ts.Debug.assert(isLeftHandSideExpression(expr)); - if ((token === 29 /* PlusPlusToken */ || token === 30 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { - if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { - reportInvalidUseInStrictMode(expr); - } - var operator = token; - nextToken(); - expr = makeUnaryExpression(139 /* PostfixOperator */, expr.pos, operator, expr); - } - return expr; - } - function parseTypeAssertion() { - var node = createNode(134 /* TypeAssertion */); - parseExpected(15 /* LessThanToken */); - node.type = parseType(); - parseExpected(16 /* GreaterThanToken */); - node.operand = parseUnaryExpression(); - return finishNode(node); - } - function makeUnaryExpression(kind, pos, operator, operand) { - var node = createNode(kind, pos); - node.operator = operator; - node.operand = operand; - return finishNode(node); - } - function parseCallAndAccess(expr, inNewExpression) { - while (true) { - if (parseOptional(11 /* DotToken */)) { - var propertyAccess = createNode(130 /* PropertyAccess */, expr.pos); - propertyAccess.left = expr; - propertyAccess.right = parseIdentifierName(); - expr = finishNode(propertyAccess); - continue; - } - var bracketStart = scanner.getTokenPos(); - if (parseOptional(9 /* OpenBracketToken */)) { - var indexedAccess = createNode(131 /* IndexedAccess */, expr.pos); - indexedAccess.object = expr; - if (inNewExpression && parseOptional(10 /* CloseBracketToken */)) { - indexedAccess.index = createMissingNode(); - grammarErrorAtPos(bracketStart, scanner.getStartPos() - bracketStart, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); - } - else { - indexedAccess.index = parseExpression(); - parseExpected(10 /* CloseBracketToken */); - } - expr = finishNode(indexedAccess); - continue; - } - if ((token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) && !inNewExpression) { - var callExpr = createNode(132 /* CallExpression */, expr.pos); - callExpr.func = expr; - if (token === 15 /* LessThanToken */) { - if (!(callExpr.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) - return expr; - } - else { - parseExpected(7 /* OpenParenToken */); - } - callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); - parseExpected(8 /* CloseParenToken */); - expr = finishNode(callExpr); - continue; - } - return expr; - } - } - function parseTypeArgumentsAndOpenParen() { - var result = parseTypeArguments(); - parseExpected(7 /* OpenParenToken */); - return result; - } - function parseTypeArguments() { - var typeArgumentListStart = scanner.getTokenPos(); - var errorCountBeforeTypeParameterList = file.syntacticErrors.length; - var result = parseBracketedList(15 /* TypeArguments */, parseType, 15 /* LessThanToken */, 16 /* GreaterThanToken */); - if (!result.length && file.syntacticErrors.length === errorCountBeforeTypeParameterList) { - grammarErrorAtPos(typeArgumentListStart, scanner.getStartPos() - typeArgumentListStart, ts.Diagnostics.Type_argument_list_cannot_be_empty); - } - return result; - } - function parsePrimaryExpression() { - switch (token) { - case 83 /* ThisKeyword */: - case 81 /* SuperKeyword */: - case 79 /* NullKeyword */: - case 85 /* TrueKeyword */: - case 70 /* FalseKeyword */: - return parseTokenNode(); - case 2 /* NumericLiteral */: - case 3 /* StringLiteral */: - return parseLiteralNode(); - case 7 /* OpenParenToken */: - return parseParenExpression(); - case 9 /* OpenBracketToken */: - return parseArrayLiteral(); - case 5 /* OpenBraceToken */: - return parseObjectLiteral(); - case 73 /* FunctionKeyword */: - return parseFunctionExpression(); - case 78 /* NewKeyword */: - return parseNewExpression(); - case 27 /* SlashToken */: - case 47 /* SlashEqualsToken */: - if (reScanSlashToken() === 4 /* RegularExpressionLiteral */) { - return parseLiteralNode(); - } - break; - default: - if (isIdentifier()) { - return parseIdentifier(); - } - } - error(ts.Diagnostics.Expression_expected); - return createMissingNode(); - } - function parseParenExpression() { - var node = createNode(135 /* ParenExpression */); - parseExpected(7 /* OpenParenToken */); - node.expression = parseExpression(); - parseExpected(8 /* CloseParenToken */); - return finishNode(node); - } - function parseArrayLiteralElement() { - return token === 14 /* CommaToken */ ? createNode(142 /* OmittedExpression */) : parseAssignmentExpression(); - } - function parseArrayLiteral() { - var node = createNode(127 /* ArrayLiteral */); - parseExpected(9 /* OpenBracketToken */); - if (scanner.hasPrecedingLineBreak()) - node.flags |= 128 /* MultiLine */; - node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, 2 /* Preserve */); - parseExpected(10 /* CloseBracketToken */); - return finishNode(node); - } - function parsePropertyAssignment() { - var node = createNode(129 /* PropertyAssignment */); - node.name = parsePropertyName(); - if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - var body = parseBody(false); - node.initializer = makeFunctionExpression(136 /* FunctionExpression */, node.pos, undefined, sig, body); - } - else { - parseExpected(42 /* ColonToken */); - node.initializer = parseAssignmentExpression(false); - } - return finishNode(node); - } - function parseObjectLiteralMember() { - var initialPos = getNodePos(); - var initialToken = token; - if (parseContextualModifier(105 /* GetKeyword */) || parseContextualModifier(109 /* SetKeyword */)) { - var kind = initialToken === 105 /* GetKeyword */ ? 118 /* GetAccessor */ : 119 /* SetAccessor */; - return parseAndCheckMemberAccessorDeclaration(kind, initialPos, 0); - } - return parsePropertyAssignment(); - } - function parseObjectLiteral() { - var node = createNode(128 /* ObjectLiteral */); - parseExpected(5 /* OpenBraceToken */); - if (scanner.hasPrecedingLineBreak()) { - node.flags |= 128 /* MultiLine */; - } - var trailingCommaBehavior = languageVersion === 0 /* ES3 */ ? 1 /* Allow */ : 2 /* Preserve */; - node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, trailingCommaBehavior); - parseExpected(6 /* CloseBraceToken */); - var seen = {}; - var Property = 1; - var GetAccessor = 2; - var SetAccesor = 4; - var GetOrSetAccessor = GetAccessor | SetAccesor; - ts.forEach(node.properties, function (p) { - if (p.kind === 142 /* OmittedExpression */) { - return; - } - var currentKind; - if (p.kind === 129 /* PropertyAssignment */) { - currentKind = Property; - } - else if (p.kind === 118 /* GetAccessor */) { - currentKind = GetAccessor; - } - else if (p.kind === 119 /* SetAccessor */) { - currentKind = SetAccesor; - } - else { - ts.Debug.fail("Unexpected syntax kind:" + ts.SyntaxKind[p.kind]); - } - if (!ts.hasProperty(seen, p.name.text)) { - seen[p.name.text] = currentKind; - } - else { - var existingKind = seen[p.name.text]; - if (currentKind === Property && existingKind === Property) { - if (isInStrictMode) { - grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); - } - } - else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { - if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { - seen[p.name.text] = currentKind | existingKind; - } - else { - grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); - } - } - else { - grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); - } - } - }); - return finishNode(node); - } - function parseFunctionExpression() { - var pos = getNodePos(); - parseExpected(73 /* FunctionKeyword */); - var name = isIdentifier() ? parseIdentifier() : undefined; - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - var body = parseBody(false); - if (name && isInStrictMode && isEvalOrArgumentsIdentifier(name)) { - reportInvalidUseInStrictMode(name); - } - return makeFunctionExpression(136 /* FunctionExpression */, pos, name, sig, body); - } - function makeFunctionExpression(kind, pos, name, sig, body) { - var node = createNode(kind, pos); - node.name = name; - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; - node.body = body; - return finishNode(node); - } - function parseNewExpression() { - var node = createNode(133 /* NewExpression */); - parseExpected(78 /* NewKeyword */); - node.func = parseCallAndAccess(parsePrimaryExpression(), true); - if (parseOptional(7 /* OpenParenToken */) || token === 15 /* LessThanToken */ && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { - node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); - parseExpected(8 /* CloseParenToken */); - } - return finishNode(node); - } - function parseBlock(ignoreMissingOpenBrace, checkForStrictMode) { - var node = createNode(143 /* Block */); - if (parseExpected(5 /* OpenBraceToken */) || ignoreMissingOpenBrace) { - node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatement); - parseExpected(6 /* CloseBraceToken */); - } - else { - node.statements = createMissingList(); - } - return finishNode(node); - } - function parseBody(ignoreMissingOpenBrace) { - var saveInFunctionBody = inFunctionBody; - var saveInSwitchStatement = inSwitchStatement; - var saveInIterationStatement = inIterationStatement; - inFunctionBody = true; - if (inSwitchStatement === 1 /* Nested */) { - inSwitchStatement = 2 /* CrossingFunctionBoundary */; - } - if (inIterationStatement === 1 /* Nested */) { - inIterationStatement = 2 /* CrossingFunctionBoundary */; - } - labelledStatementInfo.pushFunctionBoundary(); - var block = parseBlock(ignoreMissingOpenBrace, true); - block.kind = 168 /* FunctionBlock */; - labelledStatementInfo.pop(); - inFunctionBody = saveInFunctionBody; - inSwitchStatement = saveInSwitchStatement; - inIterationStatement = saveInIterationStatement; - return block; - } - function parseEmptyStatement() { - var node = createNode(145 /* EmptyStatement */); - parseExpected(13 /* SemicolonToken */); - return finishNode(node); - } - function parseIfStatement() { - var node = createNode(147 /* IfStatement */); - parseExpected(74 /* IfKeyword */); - parseExpected(7 /* OpenParenToken */); - node.expression = parseExpression(); - parseExpected(8 /* CloseParenToken */); - node.thenStatement = parseStatement(); - node.elseStatement = parseOptional(66 /* ElseKeyword */) ? parseStatement() : undefined; - return finishNode(node); - } - function parseDoStatement() { - var node = createNode(148 /* DoStatement */); - parseExpected(65 /* DoKeyword */); - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - node.statement = parseStatement(); - inIterationStatement = saveInIterationStatement; - parseExpected(90 /* WhileKeyword */); - parseExpected(7 /* OpenParenToken */); - node.expression = parseExpression(); - parseExpected(8 /* CloseParenToken */); - parseOptional(13 /* SemicolonToken */); - return finishNode(node); - } - function parseWhileStatement() { - var node = createNode(149 /* WhileStatement */); - parseExpected(90 /* WhileKeyword */); - parseExpected(7 /* OpenParenToken */); - node.expression = parseExpression(); - parseExpected(8 /* CloseParenToken */); - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - node.statement = parseStatement(); - inIterationStatement = saveInIterationStatement; - return finishNode(node); - } - function parseForOrForInStatement() { - var pos = getNodePos(); - parseExpected(72 /* ForKeyword */); - parseExpected(7 /* OpenParenToken */); - if (token !== 13 /* SemicolonToken */) { - if (parseOptional(88 /* VarKeyword */)) { - var declarations = parseVariableDeclarationList(0, true); - if (!declarations.length) { - error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } - } - else { - var varOrInit = parseExpression(true); - } - } - var forOrForInStatement; - if (parseOptional(76 /* InKeyword */)) { - var forInStatement = createNode(151 /* ForInStatement */, pos); - if (declarations) { - if (declarations.length > 1) { - error(ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); - } - forInStatement.declaration = declarations[0]; - } - else { - forInStatement.variable = varOrInit; - } - forInStatement.expression = parseExpression(); - parseExpected(8 /* CloseParenToken */); - forOrForInStatement = forInStatement; - } - else { - var forStatement = createNode(150 /* ForStatement */, pos); - if (declarations) - forStatement.declarations = declarations; - if (varOrInit) - forStatement.initializer = varOrInit; - parseExpected(13 /* SemicolonToken */); - if (token !== 13 /* SemicolonToken */ && token !== 8 /* CloseParenToken */) { - forStatement.condition = parseExpression(); - } - parseExpected(13 /* SemicolonToken */); - if (token !== 8 /* CloseParenToken */) { - forStatement.iterator = parseExpression(); - } - parseExpected(8 /* CloseParenToken */); - forOrForInStatement = forStatement; - } - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - forOrForInStatement.statement = parseStatement(); - inIterationStatement = saveInIterationStatement; - return finishNode(forOrForInStatement); - } - function parseBreakOrContinueStatement(kind) { - var node = createNode(kind); - var errorCountBeforeStatement = file.syntacticErrors.length; - var keywordStart = scanner.getTokenPos(); - var keywordLength = scanner.getTextPos() - keywordStart; - parseExpected(kind === 153 /* BreakStatement */ ? 56 /* BreakKeyword */ : 61 /* ContinueKeyword */); - if (!canParseSemicolon()) - node.label = parseIdentifier(); - parseSemicolon(); - finishNode(node); - if (!inAmbientContext && errorCountBeforeStatement === file.syntacticErrors.length) { - if (node.label) { - checkBreakOrContinueStatementWithLabel(node); - } - else { - checkBareBreakOrContinueStatement(node); - } - } - return node; - } - function checkBareBreakOrContinueStatement(node) { - if (node.kind === 153 /* BreakStatement */) { - if (inIterationStatement === 1 /* Nested */ || inSwitchStatement === 1 /* Nested */) { - return; - } - else if (inIterationStatement === 0 /* NotNested */ && inSwitchStatement === 0 /* NotNested */) { - grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); - return; - } - } - else if (node.kind === 152 /* ContinueStatement */) { - if (inIterationStatement === 1 /* Nested */) { - return; - } - else if (inIterationStatement === 0 /* NotNested */) { - grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); - return; - } - } - else { - ts.Debug.fail("checkAnonymousBreakOrContinueStatement"); - } - ts.Debug.assert(inIterationStatement === 2 /* CrossingFunctionBoundary */ || inSwitchStatement === 2 /* CrossingFunctionBoundary */); - grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); - } - function checkBreakOrContinueStatementWithLabel(node) { - var nodeIsNestedInLabel = labelledStatementInfo.nodeIsNestedInLabel(node.label, node.kind === 152 /* ContinueStatement */, false); - if (nodeIsNestedInLabel === 1 /* Nested */) { - return; - } - if (nodeIsNestedInLabel === 2 /* CrossingFunctionBoundary */) { - grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); - return; - } - if (node.kind === 152 /* ContinueStatement */) { - grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); - } - else if (node.kind === 153 /* BreakStatement */) { - grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement); - } - else { - ts.Debug.fail("checkBreakOrContinueStatementWithLabel"); - } - } - function parseReturnStatement() { - var node = createNode(154 /* ReturnStatement */); - var errorCountBeforeReturnStatement = file.syntacticErrors.length; - var returnTokenStart = scanner.getTokenPos(); - var returnTokenLength = scanner.getTextPos() - returnTokenStart; - parseExpected(80 /* ReturnKeyword */); - if (!canParseSemicolon()) - node.expression = parseExpression(); - parseSemicolon(); - if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.syntacticErrors.length) { - grammarErrorAtPos(returnTokenStart, returnTokenLength, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); - } - return finishNode(node); - } - function parseWithStatement() { - var node = createNode(155 /* WithStatement */); - var startPos = scanner.getTokenPos(); - parseExpected(91 /* WithKeyword */); - var endPos = scanner.getStartPos(); - parseExpected(7 /* OpenParenToken */); - node.expression = parseExpression(); - parseExpected(8 /* CloseParenToken */); - node.statement = parseStatement(); - node = finishNode(node); - if (isInStrictMode) { - grammarErrorAtPos(startPos, endPos - startPos, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); - } - return node; - } - function parseCaseClause() { - var node = createNode(157 /* CaseClause */); - parseExpected(57 /* CaseKeyword */); - node.expression = parseExpression(); - parseExpected(42 /* ColonToken */); - node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); - return finishNode(node); - } - function parseDefaultClause() { - var node = createNode(158 /* DefaultClause */); - parseExpected(63 /* DefaultKeyword */); - parseExpected(42 /* ColonToken */); - node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); - return finishNode(node); - } - function parseCaseOrDefaultClause() { - return token === 57 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause(); - } - function parseSwitchStatement() { - var node = createNode(156 /* SwitchStatement */); - parseExpected(82 /* SwitchKeyword */); - parseExpected(7 /* OpenParenToken */); - node.expression = parseExpression(); - parseExpected(8 /* CloseParenToken */); - parseExpected(5 /* OpenBraceToken */); - var saveInSwitchStatement = inSwitchStatement; - inSwitchStatement = 1 /* Nested */; - node.clauses = parseList(3 /* SwitchClauses */, false, parseCaseOrDefaultClause); - inSwitchStatement = saveInSwitchStatement; - parseExpected(6 /* CloseBraceToken */); - var defaultClauses = ts.filter(node.clauses, function (clause) { return clause.kind === 158 /* DefaultClause */; }); - for (var i = 1, n = defaultClauses.length; i < n; i++) { - var clause = defaultClauses[i]; - var start = ts.skipTrivia(file.text, clause.pos); - var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; - grammarErrorAtPos(start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); - } - return finishNode(node); - } - function parseThrowStatement() { - var node = createNode(160 /* ThrowStatement */); - parseExpected(84 /* ThrowKeyword */); - if (scanner.hasPrecedingLineBreak()) { - error(ts.Diagnostics.Line_break_not_permitted_here); - } - node.expression = parseExpression(); - parseSemicolon(); - return finishNode(node); - } - function parseTryStatement() { - var node = createNode(161 /* TryStatement */); - node.tryBlock = parseTokenAndBlock(86 /* TryKeyword */, 162 /* TryBlock */); - if (token === 58 /* CatchKeyword */) { - node.catchBlock = parseCatchBlock(); - } - if (token === 71 /* FinallyKeyword */) { - node.finallyBlock = parseTokenAndBlock(71 /* FinallyKeyword */, 164 /* FinallyBlock */); - } - if (!(node.catchBlock || node.finallyBlock)) { - error(ts.Diagnostics.catch_or_finally_expected); - } - return finishNode(node); - } - function parseTokenAndBlock(token, kind) { - var pos = getNodePos(); - parseExpected(token); - var result = parseBlock(false, false); - result.kind = kind; - result.pos = pos; - return result; - } - function parseCatchBlock() { - var pos = getNodePos(); - parseExpected(58 /* CatchKeyword */); - parseExpected(7 /* OpenParenToken */); - var variable = parseIdentifier(); - var typeAnnotationColonStart = scanner.getTokenPos(); - var typeAnnotationColonLength = scanner.getTextPos() - typeAnnotationColonStart; - var typeAnnotation = parseTypeAnnotation(); - parseExpected(8 /* CloseParenToken */); - var result = parseBlock(false, false); - result.kind = 163 /* CatchBlock */; - result.pos = pos; - result.variable = variable; - if (typeAnnotation) { - errorAtPos(typeAnnotationColonStart, typeAnnotationColonLength, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); - } - if (isInStrictMode && isEvalOrArgumentsIdentifier(variable)) { - reportInvalidUseInStrictMode(variable); - } - return result; - } - function parseDebuggerStatement() { - var node = createNode(165 /* DebuggerStatement */); - parseExpected(62 /* DebuggerKeyword */); - parseSemicolon(); - return finishNode(node); - } - function isIterationStatementStart() { - return token === 90 /* WhileKeyword */ || token === 65 /* DoKeyword */ || token === 72 /* ForKeyword */; - } - function parseStatementWithLabelSet() { - labelledStatementInfo.pushCurrentLabelSet(isIterationStatementStart()); - var statement = parseStatement(); - labelledStatementInfo.pop(); - return statement; - } - function isLabel() { - return isIdentifier() && lookAhead(function () { return nextToken() === 42 /* ColonToken */; }); - } - function parseLabelledStatement() { - var node = createNode(159 /* LabelledStatement */); - node.label = parseIdentifier(); - parseExpected(42 /* ColonToken */); - if (labelledStatementInfo.nodeIsNestedInLabel(node.label, false, true)) { - grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getSourceTextOfNodeFromSourceText(sourceText, node.label)); - } - labelledStatementInfo.addLabel(node.label); - node.statement = isLabel() ? parseLabelledStatement() : parseStatementWithLabelSet(); - return finishNode(node); - } - function parseExpressionStatement() { - var node = createNode(146 /* ExpressionStatement */); - node.expression = parseExpression(); - parseSemicolon(); - return finishNode(node); - } - function isStatement(inErrorRecovery) { - switch (token) { - case 13 /* SemicolonToken */: - return !inErrorRecovery; - case 5 /* OpenBraceToken */: - case 88 /* VarKeyword */: - case 73 /* FunctionKeyword */: - case 74 /* IfKeyword */: - case 65 /* DoKeyword */: - case 90 /* WhileKeyword */: - case 72 /* ForKeyword */: - case 61 /* ContinueKeyword */: - case 56 /* BreakKeyword */: - case 80 /* ReturnKeyword */: - case 91 /* WithKeyword */: - case 82 /* SwitchKeyword */: - case 84 /* ThrowKeyword */: - case 86 /* TryKeyword */: - case 62 /* DebuggerKeyword */: - return true; - case 93 /* InterfaceKeyword */: - case 59 /* ClassKeyword */: - case 106 /* ModuleKeyword */: - case 67 /* EnumKeyword */: - if (isDeclaration()) - return false; - case 98 /* PublicKeyword */: - case 96 /* PrivateKeyword */: - case 99 /* StaticKeyword */: - if (lookAhead(function () { return nextToken() >= 55 /* Identifier */; })) - return false; - default: - return isExpression(); - } - } - function parseStatement() { - switch (token) { - case 5 /* OpenBraceToken */: - return parseBlock(false, false); - case 88 /* VarKeyword */: - return parseVariableStatement(); - case 73 /* FunctionKeyword */: - return parseFunctionDeclaration(); - case 13 /* SemicolonToken */: - return parseEmptyStatement(); - case 74 /* IfKeyword */: - return parseIfStatement(); - case 65 /* DoKeyword */: - return parseDoStatement(); - case 90 /* WhileKeyword */: - return parseWhileStatement(); - case 72 /* ForKeyword */: - return parseForOrForInStatement(); - case 61 /* ContinueKeyword */: - return parseBreakOrContinueStatement(152 /* ContinueStatement */); - case 56 /* BreakKeyword */: - return parseBreakOrContinueStatement(153 /* BreakStatement */); - case 80 /* ReturnKeyword */: - return parseReturnStatement(); - case 91 /* WithKeyword */: - return parseWithStatement(); - case 82 /* SwitchKeyword */: - return parseSwitchStatement(); - case 84 /* ThrowKeyword */: - return parseThrowStatement(); - case 86 /* TryKeyword */: - return parseTryStatement(); - case 62 /* DebuggerKeyword */: - return parseDebuggerStatement(); - default: - if (isLabel()) { - return parseLabelledStatement(); - } - return parseExpressionStatement(); - } - } - function parseStatementOrFunction() { - return token === 73 /* FunctionKeyword */ ? parseFunctionDeclaration() : parseStatement(); - } - function parseAndCheckFunctionBody(isConstructor) { - var initialPosition = scanner.getTokenPos(); - var errorCountBeforeBody = file.syntacticErrors.length; - if (token === 5 /* OpenBraceToken */) { - var body = parseBody(false); - if (body && inAmbientContext && file.syntacticErrors.length === errorCountBeforeBody) { - var diagnostic = isConstructor ? ts.Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : ts.Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; - grammarErrorAtPos(initialPosition, 1, diagnostic); - } - return body; - } - if (canParseSemicolon()) { - parseSemicolon(); - return undefined; - } - error(ts.Diagnostics.Block_or_expected); - } - function parseVariableDeclaration(flags, noIn) { - var node = createNode(166 /* VariableDeclaration */); - node.flags = flags; - var errorCountBeforeVariableDeclaration = file.syntacticErrors.length; - node.name = parseIdentifier(); - node.type = parseTypeAnnotation(); - var initializerStart = scanner.getTokenPos(); - var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; - node.initializer = parseInitializer(false, noIn); - if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file.syntacticErrors.length) { - grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); - } - if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { - reportInvalidUseInStrictMode(node.name); - } - return finishNode(node); - } - function parseVariableDeclarationList(flags, noIn) { - return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, 0 /* Disallow */); - } - function parseVariableStatement(pos, flags) { - var node = createNode(144 /* VariableStatement */, pos); - if (flags) - node.flags = flags; - var errorCountBeforeVarStatement = file.syntacticErrors.length; - parseExpected(88 /* VarKeyword */); - node.declarations = parseVariableDeclarationList(flags, false); - parseSemicolon(); - if (!node.declarations.length && file.syntacticErrors.length === errorCountBeforeVarStatement) { - grammarErrorOnNode(node, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } - return finishNode(node); - } - function parseFunctionDeclaration(pos, flags) { - var node = createNode(167 /* FunctionDeclaration */, pos); - if (flags) - node.flags = flags; - parseExpected(73 /* FunctionKeyword */); - node.name = parseIdentifier(); - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; - node.body = parseAndCheckFunctionBody(false); - if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { - reportInvalidUseInStrictMode(node.name); - } - return finishNode(node); - } - function parseConstructorDeclaration(pos, flags) { - var node = createNode(117 /* Constructor */, pos); - node.flags = flags; - parseExpected(103 /* ConstructorKeyword */); - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; - node.body = parseAndCheckFunctionBody(true); - if (node.typeParameters) { - grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); - } - if (node.type) { - grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); - } - return finishNode(node); - } - function parsePropertyMemberDeclaration(pos, flags) { - var errorCountBeforePropertyDeclaration = file.syntacticErrors.length; - var name = parsePropertyName(); - var questionStart = scanner.getTokenPos(); - if (parseOptional(41 /* QuestionToken */)) { - errorAtPos(questionStart, scanner.getStartPos() - questionStart, ts.Diagnostics.A_class_member_cannot_be_declared_optional); - } - if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { - var method = createNode(116 /* Method */, pos); - method.flags = flags; - method.name = name; - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - method.typeParameters = sig.typeParameters; - method.parameters = sig.parameters; - method.type = sig.type; - method.body = parseAndCheckFunctionBody(false); - return finishNode(method); - } - else { - var property = createNode(115 /* Property */, pos); - property.flags = flags; - property.name = name; - property.type = parseTypeAnnotation(); - var initializerStart = scanner.getTokenPos(); - var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; - property.initializer = parseInitializer(false); - parseSemicolon(); - if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.syntacticErrors.length) { - grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); - } - return finishNode(property); - } - } - function parseAndCheckMemberAccessorDeclaration(kind, pos, flags) { - var errorCountBeforeAccessor = file.syntacticErrors.length; - var accessor = parseMemberAccessorDeclaration(kind, pos, flags); - if (errorCountBeforeAccessor === file.syntacticErrors.length) { - if (languageVersion < 1 /* ES5 */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); - } - else if (inAmbientContext) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); - } - else if (accessor.typeParameters) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); - } - else if (kind === 118 /* GetAccessor */ && accessor.parameters.length) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); - } - else if (kind === 119 /* SetAccessor */) { - if (accessor.type) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); - } - else if (accessor.parameters.length !== 1) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); - } - else { - var parameter = accessor.parameters[0]; - if (parameter.flags & 8 /* Rest */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); - } - else if (parameter.flags & ts.NodeFlags.Modifier) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } - else if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); - } - else if (parameter.initializer) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); - } - } - } - } - return accessor; - } - function parseMemberAccessorDeclaration(kind, pos, flags) { - var node = createNode(kind, pos); - node.flags = flags; - node.name = parsePropertyName(); - var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; - if (inAmbientContext && canParseSemicolon()) { - parseSemicolon(); - node.body = createMissingNode(); - } - else { - node.body = parseBody(false); - } - return finishNode(node); - } - function isClassMemberStart() { - var idToken; - while (isModifier(token)) { - idToken = token; - nextToken(); - } - if (isPropertyName()) { - idToken = token; - nextToken(); - } - if (token === 9 /* OpenBracketToken */) { - return true; - } - if (idToken !== undefined) { - if (!isKeyword(idToken) || idToken === 109 /* SetKeyword */ || idToken === 105 /* GetKeyword */) { - return true; - } - switch (token) { - case 7 /* OpenParenToken */: - case 15 /* LessThanToken */: - case 42 /* ColonToken */: - case 43 /* EqualsToken */: - case 41 /* QuestionToken */: - return true; - default: - return canParseSemicolon(); - } - } - return false; - } - function parseAndCheckModifiers(context) { - var flags = 0; - var lastStaticModifierStart; - var lastStaticModifierLength; - var lastDeclareModifierStart; - var lastDeclareModifierLength; - var lastPrivateModifierStart; - var lastPrivateModifierLength; - while (true) { - var modifierStart = scanner.getTokenPos(); - var modifierToken = token; - if (!parseAnyContextualModifier()) - break; - var modifierLength = scanner.getStartPos() - modifierStart; - switch (modifierToken) { - case 98 /* PublicKeyword */: - if (flags & 32 /* Private */ || flags & 16 /* Public */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & 64 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "public", "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "public"); - } - flags |= 16 /* Public */; - break; - case 96 /* PrivateKeyword */: - if (flags & 32 /* Private */ || flags & 16 /* Public */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & 64 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "private", "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "private"); - } - lastPrivateModifierStart = modifierStart; - lastPrivateModifierLength = modifierLength; - flags |= 32 /* Private */; - break; - case 99 /* StaticKeyword */: - if (flags & 64 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); - } - lastStaticModifierStart = modifierStart; - lastStaticModifierLength = modifierLength; - flags |= 64 /* Static */; - break; - case 68 /* ExportKeyword */: - if (flags & 1 /* Export */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "export"); - } - else if (flags & 2 /* Ambient */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); - } - else if (context === 2 /* ClassMembers */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); - } - flags |= 1 /* Export */; - break; - case 104 /* DeclareKeyword */: - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "declare"); - } - else if (context === 2 /* ClassMembers */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); - } - else if (inAmbientContext && context === 1 /* ModuleElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); - } - lastDeclareModifierStart = modifierStart; - lastDeclareModifierLength = modifierLength; - flags |= 2 /* Ambient */; - break; - } - } - if (token === 103 /* ConstructorKeyword */ && flags & 64 /* Static */) { - grammarErrorAtPos(lastStaticModifierStart, lastStaticModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); - } - else if (token === 103 /* ConstructorKeyword */ && flags & 32 /* Private */) { - grammarErrorAtPos(lastPrivateModifierStart, lastPrivateModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); - } - else if (token === 75 /* ImportKeyword */) { - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); - } - } - else if (token === 93 /* InterfaceKeyword */) { - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); - } - } - else if (token !== 68 /* ExportKeyword */ && !(flags & 2 /* Ambient */) && inAmbientContext && context === 0 /* SourceElements */) { - var declarationStart = scanner.getTokenPos(); - var declarationFirstTokenLength = scanner.getTextPos() - declarationStart; - grammarErrorAtPos(declarationStart, declarationFirstTokenLength, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); - } - return flags; - } - function parseClassMemberDeclaration() { - var pos = getNodePos(); - var flags = parseAndCheckModifiers(2 /* ClassMembers */); - if (parseContextualModifier(105 /* GetKeyword */)) { - return parseAndCheckMemberAccessorDeclaration(118 /* GetAccessor */, pos, flags); - } - if (parseContextualModifier(109 /* SetKeyword */)) { - return parseAndCheckMemberAccessorDeclaration(119 /* SetAccessor */, pos, flags); - } - if (token === 103 /* ConstructorKeyword */) { - return parseConstructorDeclaration(pos, flags); - } - if (token >= 55 /* Identifier */ || token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */) { - return parsePropertyMemberDeclaration(pos, flags); - } - if (token === 9 /* OpenBracketToken */) { - if (flags) { - var start = getTokenPos(pos); - var length = getNodePos() - start; - errorAtPos(start, length, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members); - } - return parseIndexSignatureMember(); - } - ts.Debug.fail("Should not have attempted to parse class member declaration."); - } - function parseClassDeclaration(pos, flags) { - var node = createNode(169 /* ClassDeclaration */, pos); - node.flags = flags; - var errorCountBeforeClassDeclaration = file.syntacticErrors.length; - parseExpected(59 /* ClassKeyword */); - node.name = parseIdentifier(); - node.typeParameters = parseTypeParameters(); - node.baseType = parseOptional(69 /* ExtendsKeyword */) ? parseTypeReference() : undefined; - var implementsKeywordStart = scanner.getTokenPos(); - var implementsKeywordLength; - if (parseOptional(92 /* ImplementsKeyword */)) { - implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; - node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); - } - var errorCountBeforeClassBody = file.syntacticErrors.length; - if (parseExpected(5 /* OpenBraceToken */)) { - node.members = parseList(6 /* ClassMembers */, false, parseClassMemberDeclaration); - parseExpected(6 /* CloseBraceToken */); - } - else { - node.members = createMissingList(); - } - if (node.implementedTypes && !node.implementedTypes.length && errorCountBeforeClassBody === errorCountBeforeClassDeclaration) { - grammarErrorAtPos(implementsKeywordStart, implementsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "implements"); - } - return finishNode(node); - } - function parseInterfaceDeclaration(pos, flags) { - var node = createNode(170 /* InterfaceDeclaration */, pos); - node.flags = flags; - var errorCountBeforeInterfaceDeclaration = file.syntacticErrors.length; - parseExpected(93 /* InterfaceKeyword */); - node.name = parseIdentifier(); - node.typeParameters = parseTypeParameters(); - var extendsKeywordStart = scanner.getTokenPos(); - var extendsKeywordLength; - if (parseOptional(69 /* ExtendsKeyword */)) { - extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; - node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); - } - var errorCountBeforeInterfaceBody = file.syntacticErrors.length; - node.members = parseTypeLiteral().members; - if (node.baseTypes && !node.baseTypes.length && errorCountBeforeInterfaceBody === errorCountBeforeInterfaceDeclaration) { - grammarErrorAtPos(extendsKeywordStart, extendsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "extends"); - } - return finishNode(node); - } - function parseAndCheckEnumDeclaration(pos, flags) { - function isIntegerLiteral(expression) { - function isInteger(literalExpression) { - return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); - } - if (expression.kind === 138 /* PrefixOperator */) { - var unaryExpression = expression; - if (unaryExpression.operator === 24 /* PlusToken */ || unaryExpression.operator === 25 /* MinusToken */) { - expression = unaryExpression.operand; - } - } - if (expression.kind === 2 /* NumericLiteral */) { - return isInteger(expression); - } - return false; - } - var inConstantEnumMemberSection = true; - function parseAndCheckEnumMember() { - var node = createNode(176 /* EnumMember */); - var errorCountBeforeEnumMember = file.syntacticErrors.length; - node.name = parsePropertyName(); - node.initializer = parseInitializer(false); - if (inAmbientContext) { - if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file.syntacticErrors.length) { - grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); - } - } - else if (node.initializer) { - inConstantEnumMemberSection = isIntegerLiteral(node.initializer); - } - else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file.syntacticErrors.length) { - grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer); - } - return finishNode(node); - } - var node = createNode(171 /* EnumDeclaration */, pos); - node.flags = flags; - parseExpected(67 /* EnumKeyword */); - node.name = parseIdentifier(); - if (parseExpected(5 /* OpenBraceToken */)) { - node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, 1 /* Allow */); - parseExpected(6 /* CloseBraceToken */); - } - else { - node.members = createMissingList(); - } - return finishNode(node); - } - function parseModuleBody() { - var node = createNode(173 /* ModuleBlock */); - if (parseExpected(5 /* OpenBraceToken */)) { - node.statements = parseList(1 /* ModuleElements */, false, parseModuleElement); - parseExpected(6 /* CloseBraceToken */); - } - else { - node.statements = createMissingList(); - } - return finishNode(node); - } - function parseInternalModuleTail(pos, flags) { - var node = createNode(172 /* ModuleDeclaration */, pos); - node.flags = flags; - node.name = parseIdentifier(); - if (parseOptional(11 /* DotToken */)) { - node.body = parseInternalModuleTail(getNodePos(), 1 /* Export */); - } - else { - node.body = parseModuleBody(); - ts.forEach(node.body.statements, function (s) { - if (s.kind === 175 /* ExportAssignment */) { - grammarErrorOnNode(s, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); - } - else if (s.kind === 174 /* ImportDeclaration */ && s.externalModuleName) { - grammarErrorOnNode(s, ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); - } - }); - } - return finishNode(node); - } - function parseAmbientExternalModuleDeclaration(pos, flags) { - var node = createNode(172 /* ModuleDeclaration */, pos); - node.flags = flags; - node.name = parseStringLiteral(); - if (!inAmbientContext) { - var errorCount = file.syntacticErrors.length; - if (!errorCount || file.syntacticErrors[errorCount - 1].start < getTokenPos(pos)) { - grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); - } - } - var saveInAmbientContext = inAmbientContext; - inAmbientContext = true; - node.body = parseModuleBody(); - inAmbientContext = saveInAmbientContext; - return finishNode(node); - } - function parseModuleDeclaration(pos, flags) { - parseExpected(106 /* ModuleKeyword */); - return token === 3 /* StringLiteral */ ? parseAmbientExternalModuleDeclaration(pos, flags) : parseInternalModuleTail(pos, flags); - } - function parseImportDeclaration(pos, flags) { - var node = createNode(174 /* ImportDeclaration */, pos); - node.flags = flags; - parseExpected(75 /* ImportKeyword */); - node.name = parseIdentifier(); - parseExpected(43 /* EqualsToken */); - var entityName = parseEntityName(false); - if (entityName.kind === 55 /* Identifier */ && entityName.text === "require" && parseOptional(7 /* OpenParenToken */)) { - node.externalModuleName = parseStringLiteral(); - parseExpected(8 /* CloseParenToken */); - } - else { - node.entityName = entityName; - } - parseSemicolon(); - return finishNode(node); - } - function parseExportAssignmentTail(pos) { - var node = createNode(175 /* ExportAssignment */, pos); - node.exportName = parseIdentifier(); - parseSemicolon(); - return finishNode(node); - } - function isDeclaration() { - switch (token) { - case 88 /* VarKeyword */: - case 73 /* FunctionKeyword */: - return true; - case 59 /* ClassKeyword */: - case 93 /* InterfaceKeyword */: - case 67 /* EnumKeyword */: - case 75 /* ImportKeyword */: - return lookAhead(function () { return nextToken() >= 55 /* Identifier */; }); - case 106 /* ModuleKeyword */: - return lookAhead(function () { return nextToken() >= 55 /* Identifier */ || token === 3 /* StringLiteral */; }); - case 68 /* ExportKeyword */: - return lookAhead(function () { return nextToken() === 43 /* EqualsToken */ || isDeclaration(); }); - case 104 /* DeclareKeyword */: - case 98 /* PublicKeyword */: - case 96 /* PrivateKeyword */: - case 99 /* StaticKeyword */: - return lookAhead(function () { - nextToken(); - return isDeclaration(); - }); - } - } - function parseDeclaration(modifierContext) { - var pos = getNodePos(); - var errorCountBeforeModifiers = file.syntacticErrors.length; - var flags = parseAndCheckModifiers(modifierContext); - if (token === 68 /* ExportKeyword */) { - var modifiersEnd = scanner.getStartPos(); - nextToken(); - if (parseOptional(43 /* EqualsToken */)) { - var exportAssignmentTail = parseExportAssignmentTail(pos); - if (flags !== 0 && errorCountBeforeModifiers === file.syntacticErrors.length) { - var modifiersStart = ts.skipTrivia(sourceText, pos); - grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); - } - return exportAssignmentTail; - } - } - var saveInAmbientContext = inAmbientContext; - if (flags & 2 /* Ambient */) { - inAmbientContext = true; - } - var result; - switch (token) { - case 88 /* VarKeyword */: - result = parseVariableStatement(pos, flags); - break; - case 73 /* FunctionKeyword */: - result = parseFunctionDeclaration(pos, flags); - break; - case 59 /* ClassKeyword */: - result = parseClassDeclaration(pos, flags); - break; - case 93 /* InterfaceKeyword */: - result = parseInterfaceDeclaration(pos, flags); - break; - case 67 /* EnumKeyword */: - result = parseAndCheckEnumDeclaration(pos, flags); - break; - case 106 /* ModuleKeyword */: - result = parseModuleDeclaration(pos, flags); - break; - case 75 /* ImportKeyword */: - result = parseImportDeclaration(pos, flags); - break; - default: - error(ts.Diagnostics.Declaration_expected); - } - inAmbientContext = saveInAmbientContext; - return result; - } - function isSourceElement(inErrorRecovery) { - return isDeclaration() || isStatement(inErrorRecovery); - } - function parseSourceElement() { - return parseSourceElementOrModuleElement(0 /* SourceElements */); - } - function parseModuleElement() { - return parseSourceElementOrModuleElement(1 /* ModuleElements */); - } - function parseSourceElementOrModuleElement(modifierContext) { - if (isDeclaration()) { - return parseDeclaration(modifierContext); - } - var statementStart = scanner.getTokenPos(); - var statementFirstTokenLength = scanner.getTextPos() - statementStart; - var errorCountBeforeStatement = file.syntacticErrors.length; - var statement = parseStatement(); - if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) { - grammarErrorAtPos(statementStart, statementFirstTokenLength, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); - } - return statement; - } - function processReferenceComments() { - var referencedFiles = []; - var amdDependencies = []; - commentRanges = []; - token = scanner.scan(); - for (var i = 0; i < commentRanges.length; i++) { - var range = commentRanges[i]; - var comment = sourceText.substring(range.pos, range.end); - var simpleReferenceRegEx = /^\/\/\/\s*/gim; - if (isNoDefaultLibRegEx.exec(comment)) { - file.hasNoDefaultLib = true; - } - else { - var fullReferenceRegEx = /^(\/\/\/\s*/; - var matchResult = fullReferenceRegEx.exec(comment); - if (!matchResult) { - var start = range.pos; - var length = range.end - start; - errorAtPos(start, length, ts.Diagnostics.Invalid_reference_comment); - } - else { - referencedFiles.push({ - pos: range.pos, - end: range.end, - filename: matchResult[3] - }); - } - } - } - else { - var amdDependencyRegEx = /^\/\/\/\s*= 0 ? filename : filename + extension; - } - function processRootFile(filename, isDefaultLib) { - processSourceFile(ts.normalizePath(addExtension(filename, ".ts")), isDefaultLib); - } - function processSourceFile(filename, isDefaultLib, refFile, refPos, refEnd) { - if (refEnd !== undefined && refPos !== undefined) { - var start = refPos; - var length = refEnd - refPos; - } - if (!ts.fileExtensionIs(filename, ".ts")) { - errors.push(ts.createFileDiagnostic(refFile, start, length, ts.Diagnostics.File_0_must_have_extension_ts_or_d_ts, filename)); - } - else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { - errors.push(ts.createFileDiagnostic(refFile, start, length, ts.Diagnostics.File_0_not_found, filename)); - } - } - function findSourceFile(filename, isDefaultLib, refFile, refStart, refLength) { - var canonicalName = host.getCanonicalFileName(filename); - var file = getSourceFile(filename); - if (file) { - if (host.useCaseSensitiveFileNames() && canonicalName !== file.filename) { - errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, file.filename)); - } - } - else { - file = host.getSourceFile(filename, options.target, function (hostErrorMessage) { - errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage)); - }); - if (file) { - filesByName[host.getCanonicalFileName(filename)] = file; - seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib; - if (!options.noResolve) { - var basePath = ts.getDirectoryPath(filename); - processReferencedFiles(file, basePath); - processImportedModules(file, basePath); - } - if (isDefaultLib) { - files.unshift(file); - } - else { - files.push(file); - } - ts.forEach(file.syntacticErrors, function (e) { - errors.push(e); - }); - } - } - return file; - } - function processReferencedFiles(file, basePath) { - ts.forEach(file.referencedFiles, function (ref) { - processSourceFile(ts.normalizePath(ts.combinePaths(basePath, ref.filename)), false, file, ref.pos, ref.end); - }); - } - function processImportedModules(file, basePath) { - ts.forEach(file.statements, function (node) { - if (node.kind === 174 /* ImportDeclaration */ && node.externalModuleName) { - var nameLiteral = node.externalModuleName; - var moduleName = nameLiteral.text; - if (moduleName) { - var searchPath = basePath; - while (true) { - var searchName = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); - if (findModuleSourceFile(searchName + ".ts", nameLiteral) || findModuleSourceFile(searchName + ".d.ts", nameLiteral)) - break; - var parentPath = ts.getDirectoryPath(searchPath); - if (parentPath === searchPath) - break; - searchPath = parentPath; - } - } - } - else if (node.kind === 172 /* ModuleDeclaration */ && node.name.kind === 3 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || file.flags & 512 /* DeclarationFile */)) { - forEachChild(node.body, function (node) { - if (node.kind === 174 /* ImportDeclaration */ && node.externalModuleName) { - var nameLiteral = node.externalModuleName; - var moduleName = nameLiteral.text; - if (moduleName) { - var searchName = ts.normalizePath(ts.combinePaths(basePath, moduleName)); - var tsFile = findModuleSourceFile(searchName + ".ts", nameLiteral); - if (!tsFile) { - findModuleSourceFile(searchName + ".d.ts", nameLiteral); - } - } - } - }); - } - }); - function findModuleSourceFile(filename, nameLiteral) { - return findSourceFile(filename, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos); - } - } - function verifyCompilerOptions() { - if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) { - if (options.mapRoot) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); - } - if (options.sourceRoot) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); - } - return; - } - var firstExternalModule = ts.forEach(files, function (f) { return isExternalModule(f) ? f : undefined; }); - if (firstExternalModule && options.module === 0 /* None */) { - var externalModuleErrorSpan = getErrorSpanForNode(firstExternalModule.externalModuleIndicator); - var errorStart = ts.skipTrivia(firstExternalModule.text, externalModuleErrorSpan.pos); - var errorLength = externalModuleErrorSpan.end - errorStart; - errors.push(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); - } - if (options.outDir || options.sourceRoot || (options.mapRoot && (!options.out || firstExternalModule !== undefined))) { - var commonPathComponents; - ts.forEach(files, function (sourceFile) { - if (!(sourceFile.flags & 512 /* DeclarationFile */) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { - var sourcePathCompoments = ts.getNormalizedPathComponents(sourceFile.filename, host.getCurrentDirectory()); - sourcePathCompoments.pop(); - if (commonPathComponents) { - for (var i = 0; i < Math.min(commonPathComponents.length, sourcePathCompoments.length); i++) { - if (commonPathComponents[i] !== sourcePathCompoments[i]) { - if (i === 0) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); - return; - } - commonPathComponents.length = i; - break; - } - } - if (sourcePathCompoments.length < commonPathComponents.length) { - commonPathComponents.length = sourcePathCompoments.length; - } - } - else { - commonPathComponents = sourcePathCompoments; - } - } - }); - commonSourceDirectory = ts.getNormalizedPathFromPathCompoments(commonPathComponents); - if (commonSourceDirectory) { - commonSourceDirectory += ts.directorySeparator; - } - } - } - } - ts.createProgram = createProgram; -})(ts || (ts = {})); -var ts; -(function (ts) { - function isInstantiated(node) { - if (node.kind === 170 /* InterfaceDeclaration */) { - return false; - } - else if (node.kind === 174 /* ImportDeclaration */ && !(node.flags & 1 /* Export */)) { - return false; - } - else if (node.kind === 173 /* ModuleBlock */ && !ts.forEachChild(node, isInstantiated)) { - return false; - } - else if (node.kind === 172 /* ModuleDeclaration */ && !isInstantiated(node.body)) { - return false; - } - else { - return true; - } - } - ts.isInstantiated = isInstantiated; - function bindSourceFile(file) { - var parent; - var container; - var lastContainer; - var symbolCount = 0; - var Symbol = ts.objectAllocator.getSymbolConstructor(); - if (!file.locals) { - file.locals = {}; - container = file; - bind(file); - file.symbolCount = symbolCount; - } - function createSymbol(flags, name) { - symbolCount++; - return new Symbol(flags, name); - } - function addDeclarationToSymbol(symbol, node, symbolKind) { - symbol.flags |= symbolKind; - if (!symbol.declarations) - symbol.declarations = []; - symbol.declarations.push(node); - if (symbolKind & ts.SymbolFlags.HasExports && !symbol.exports) - symbol.exports = {}; - if (symbolKind & ts.SymbolFlags.HasMembers && !symbol.members) - symbol.members = {}; - node.symbol = symbol; - if (symbolKind & ts.SymbolFlags.Value && !symbol.valueDeclaration) - symbol.valueDeclaration = node; - } - function getDeclarationName(node) { - if (node.name) { - if (node.kind === 172 /* ModuleDeclaration */ && node.name.kind === 3 /* StringLiteral */) { - return '"' + node.name.text + '"'; - } - return node.name.text; - } - switch (node.kind) { - case 117 /* Constructor */: - return "__constructor"; - case 120 /* CallSignature */: - return "__call"; - case 121 /* ConstructSignature */: - return "__new"; - case 122 /* IndexSignature */: - return "__index"; - } - } - function getDisplayName(node) { - return node.name ? ts.identifierToString(node.name) : getDeclarationName(node); - } - function declareSymbol(symbols, parent, node, includes, excludes) { - var name = getDeclarationName(node); - if (name !== undefined) { - var symbol = ts.hasProperty(symbols, name) ? symbols[name] : (symbols[name] = createSymbol(0, name)); - if (symbol.flags & excludes) { - if (node.name) { - node.name.parent = node; - } - file.semanticErrors.push(ts.createDiagnosticForNode(node.name ? node.name : node, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(node))); - symbol = createSymbol(0, name); - } - } - else { - symbol = createSymbol(0, "__missing"); - } - addDeclarationToSymbol(symbol, node, includes); - symbol.parent = parent; - if (node.kind === 169 /* ClassDeclaration */ && symbol.exports) { - var prototypeSymbol = createSymbol(2 /* Property */ | 67108864 /* Prototype */, "prototype"); - if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) { - if (node.name) { - node.name.parent = node; - } - file.semanticErrors.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); - } - symbol.exports[prototypeSymbol.name] = prototypeSymbol; - prototypeSymbol.parent = symbol; - } - return symbol; - } - function isAmbientContext(node) { - while (node) { - if (node.flags & 2 /* Ambient */) - return true; - node = node.parent; - } - return false; - } - function declareModuleMember(node, symbolKind, symbolExcludes) { - var exportKind = 0; - if (symbolKind & ts.SymbolFlags.Value) { - exportKind |= 524288 /* ExportValue */; - } - if (symbolKind & ts.SymbolFlags.Type) { - exportKind |= 1048576 /* ExportType */; - } - if (symbolKind & ts.SymbolFlags.Namespace) { - exportKind |= 2097152 /* ExportNamespace */; - } - if (node.flags & 1 /* Export */ || (node.kind !== 174 /* ImportDeclaration */ && isAmbientContext(container))) { - if (exportKind) { - var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes); - local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); - node.localSymbol = local; - } - else { - declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); - } - } - else { - declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes); - } - } - function bindChildren(node, symbolKind) { - if (symbolKind & ts.SymbolFlags.HasLocals) { - node.locals = {}; - } - var saveParent = parent; - var saveContainer = container; - parent = node; - if (symbolKind & ts.SymbolFlags.IsContainer) { - container = node; - if (lastContainer) - lastContainer.nextContainer = container; - lastContainer = container; - } - ts.forEachChild(node, bind); - container = saveContainer; - parent = saveParent; - } - function bindDeclaration(node, symbolKind, symbolExcludes) { - switch (container.kind) { - case 172 /* ModuleDeclaration */: - declareModuleMember(node, symbolKind, symbolExcludes); - break; - case 177 /* SourceFile */: - if (ts.isExternalModule(container)) { - declareModuleMember(node, symbolKind, symbolExcludes); - break; - } - case 120 /* CallSignature */: - case 121 /* ConstructSignature */: - case 122 /* IndexSignature */: - case 116 /* Method */: - case 117 /* Constructor */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 167 /* FunctionDeclaration */: - case 136 /* FunctionExpression */: - case 137 /* ArrowFunction */: - declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes); - break; - case 169 /* ClassDeclaration */: - if (node.flags & 64 /* Static */) { - declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); - break; - } - case 125 /* TypeLiteral */: - case 128 /* ObjectLiteral */: - case 170 /* InterfaceDeclaration */: - declareSymbol(container.symbol.members, container.symbol, node, symbolKind, symbolExcludes); - break; - case 171 /* EnumDeclaration */: - declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); - break; - } - bindChildren(node, symbolKind); - } - function bindConstructorDeclaration(node) { - bindDeclaration(node, 4096 /* Constructor */, 0); - ts.forEach(node.parameters, function (p) { - if (p.flags & (16 /* Public */ | 32 /* Private */)) { - bindDeclaration(p, 2 /* Property */, ts.SymbolFlags.PropertyExcludes); - } - }); - } - function bindModuleDeclaration(node) { - if (node.name.kind === 3 /* StringLiteral */) { - bindDeclaration(node, 128 /* ValueModule */, ts.SymbolFlags.ValueModuleExcludes); - } - else if (isInstantiated(node)) { - bindDeclaration(node, 128 /* ValueModule */, ts.SymbolFlags.ValueModuleExcludes); - } - else { - bindDeclaration(node, 256 /* NamespaceModule */, 0 /* NamespaceModuleExcludes */); - } - } - function bindAnonymousDeclaration(node, symbolKind, name) { - var symbol = createSymbol(symbolKind, name); - addDeclarationToSymbol(symbol, node, symbolKind); - bindChildren(node, symbolKind); - } - function bindCatchVariableDeclaration(node) { - var symbol = createSymbol(1 /* Variable */, node.variable.text || "__missing"); - addDeclarationToSymbol(symbol, node.variable, 1 /* Variable */); - var saveParent = parent; - parent = node; - ts.forEachChild(node, bind); - parent = saveParent; - } - function bind(node) { - node.parent = parent; - switch (node.kind) { - case 113 /* TypeParameter */: - bindDeclaration(node, 262144 /* TypeParameter */, ts.SymbolFlags.TypeParameterExcludes); - break; - case 114 /* Parameter */: - bindDeclaration(node, 1 /* Variable */, ts.SymbolFlags.ParameterExcludes); - break; - case 166 /* VariableDeclaration */: - bindDeclaration(node, 1 /* Variable */, ts.SymbolFlags.VariableExcludes); - break; - case 115 /* Property */: - case 129 /* PropertyAssignment */: - bindDeclaration(node, 2 /* Property */, ts.SymbolFlags.PropertyExcludes); - break; - case 176 /* EnumMember */: - bindDeclaration(node, 4 /* EnumMember */, ts.SymbolFlags.EnumMemberExcludes); - break; - case 120 /* CallSignature */: - bindDeclaration(node, 32768 /* CallSignature */, 0); - break; - case 116 /* Method */: - bindDeclaration(node, 2048 /* Method */, ts.SymbolFlags.MethodExcludes); - break; - case 121 /* ConstructSignature */: - bindDeclaration(node, 65536 /* ConstructSignature */, 0); - break; - case 122 /* IndexSignature */: - bindDeclaration(node, 131072 /* IndexSignature */, 0); - break; - case 167 /* FunctionDeclaration */: - bindDeclaration(node, 8 /* Function */, ts.SymbolFlags.FunctionExcludes); - break; - case 117 /* Constructor */: - bindConstructorDeclaration(node); - break; - case 118 /* GetAccessor */: - bindDeclaration(node, 8192 /* GetAccessor */, ts.SymbolFlags.GetAccessorExcludes); - break; - case 119 /* SetAccessor */: - bindDeclaration(node, 16384 /* SetAccessor */, ts.SymbolFlags.SetAccessorExcludes); - break; - case 125 /* TypeLiteral */: - bindAnonymousDeclaration(node, 512 /* TypeLiteral */, "__type"); - break; - case 128 /* ObjectLiteral */: - bindAnonymousDeclaration(node, 1024 /* ObjectLiteral */, "__object"); - break; - case 136 /* FunctionExpression */: - case 137 /* ArrowFunction */: - bindAnonymousDeclaration(node, 8 /* Function */, "__function"); - break; - case 163 /* CatchBlock */: - bindCatchVariableDeclaration(node); - break; - case 169 /* ClassDeclaration */: - bindDeclaration(node, 16 /* Class */, ts.SymbolFlags.ClassExcludes); - break; - case 170 /* InterfaceDeclaration */: - bindDeclaration(node, 32 /* Interface */, ts.SymbolFlags.InterfaceExcludes); - break; - case 171 /* EnumDeclaration */: - bindDeclaration(node, 64 /* Enum */, ts.SymbolFlags.EnumExcludes); - break; - case 172 /* ModuleDeclaration */: - bindModuleDeclaration(node); - break; - case 174 /* ImportDeclaration */: - bindDeclaration(node, 4194304 /* Import */, ts.SymbolFlags.ImportExcludes); - break; - case 177 /* SourceFile */: - if (ts.isExternalModule(node)) { - bindAnonymousDeclaration(node, 128 /* ValueModule */, '"' + ts.getModuleNameFromFilename(node.filename) + '"'); - break; - } - default: - var saveParent = parent; - parent = node; - ts.forEachChild(node, bind); - parent = saveParent; - } - } - } - ts.bindSourceFile = bindSourceFile; -})(ts || (ts = {})); -var ts; -(function (ts) { - var indentStrings = []; - function getIndentString(level) { - return indentStrings[level] || (indentStrings[level] = level === 0 ? "" : getIndentString(level - 1) + " "); - } - function emitFiles(resolver) { - var program = resolver.getProgram(); - var compilerHost = program.getCompilerHost(); - var compilerOptions = program.getCompilerOptions(); - var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined; - var diagnostics = []; - function getSourceFilePathInNewDir(newDirPath, sourceFile) { - var sourceFilePath = ts.getNormalizedPathFromPathCompoments(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); - sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); - return ts.combinePaths(newDirPath, sourceFilePath); - } - function shouldEmitToOwnFile(sourceFile) { - if (!(sourceFile.flags & 512 /* DeclarationFile */)) { - if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { - return true; - } - } - } - function getOwnEmitOutputFilePath(sourceFile, extension) { - if (program.getCompilerOptions().outDir) { - var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(getSourceFilePathInNewDir(program.getCompilerOptions().outDir, sourceFile)); - } - else { - var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(sourceFile.filename); - } - return emitOutputFilePathWithoutExtension + extension; - } - function isExternalModuleOrDeclarationFile(sourceFile) { - return ts.isExternalModule(sourceFile) || (sourceFile.flags & 512 /* DeclarationFile */) !== 0; - } - function getFirstConstructorWithBody(node) { - return ts.forEach(node.members, function (member) { - if (member.kind === 117 /* Constructor */ && member.body) { - return member; - } - }); - } - function getAllAccessorDeclarations(node, accessor) { - var firstAccessor; - var getAccessor; - var setAccessor; - ts.forEach(node.members, function (member) { - if ((member.kind === 118 /* GetAccessor */ || member.kind === 119 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 64 /* Static */) === (accessor.flags & 64 /* Static */)) { - if (!firstAccessor) { - firstAccessor = member; - } - if (member.kind === 118 /* GetAccessor */ && !getAccessor) { - getAccessor = member; - } - if (member.kind === 119 /* SetAccessor */ && !setAccessor) { - setAccessor = member; - } - } - }); - return { - firstAccessor: firstAccessor, - getAccessor: getAccessor, - setAccessor: setAccessor - }; - } - function createTextWriter() { - var output = ""; - var indent = 0; - var lineStart = true; - var lineCount = 0; - var linePos = 0; - function write(s) { - if (s && s.length) { - if (lineStart) { - output += getIndentString(indent); - lineStart = false; - } - output += s; - } - } - function writeLiteral(s) { - if (s && s.length) { - write(s); - var pos = 0; - while (pos < s.length) { - switch (s.charCodeAt(pos++)) { - case 13 /* carriageReturn */: - if (pos < s.length && s.charCodeAt(pos) === 10 /* lineFeed */) { - pos++; - } - case 10 /* lineFeed */: - lineCount++; - linePos = output.length - s.length + pos; - break; - } - } - } - } - function writeLine() { - if (!lineStart) { - output += sys.newLine; - lineCount++; - linePos = output.length; - lineStart = true; - } - } - return { - write: write, - writeLiteral: writeLiteral, - writeLine: writeLine, - increaseIndent: function () { return indent++; }, - decreaseIndent: function () { return indent--; }, - getTextPos: function () { return output.length; }, - getLine: function () { return lineCount + 1; }, - getColumn: function () { return lineStart ? indent * 4 + 1 : output.length - linePos + 1; }, - getText: function () { return output; } - }; - } - var currentSourceFile; - function getSourceTextOfLocalNode(node) { - var text = currentSourceFile.text; - return text.substring(ts.skipTrivia(text, node.pos), node.end); - } - function writeFile(filename, data) { - compilerHost.writeFile(filename, data, function (hostErrorMessage) { - diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); - }); - } - function emitJavaScript(jsFilePath, root) { - var writer = createTextWriter(); - var write = writer.write; - var writeLine = writer.writeLine; - var increaseIndent = writer.increaseIndent; - var decreaseIndent = writer.decreaseIndent; - var extendsEmitted = false; - var writeEmittedFiles = writeJavaScriptFile; - var emit = emitNode; - var emitStart = function (node) { - }; - var emitEnd = function (node) { - }; - var emitToken = emitTokenText; - var emitNewSourceFileStart = function (node) { - }; - var scopeEmitStart = function (scopeDeclaration, scopeName) { - }; - var scopeEmitEnd = function () { - }; - var sourceMapData; - function initializeEmitterWithSourceMaps() { - var sourceMapDir; - var sourceMapSourceIndex = -1; - var sourceMapNameIndexMap = {}; - var sourceMapNameIndices = []; - function getSourceMapNameIndex() { - return sourceMapNameIndices.length ? sourceMapNameIndices[sourceMapNameIndices.length - 1] : -1; - } - var lastRecordedSourceMapSpan; - var lastEncodedSourceMapSpan = { - emittedLine: 1, - emittedColumn: 1, - sourceLine: 1, - sourceColumn: 1, - sourceIndex: 0 - }; - var lastEncodedNameIndex = 0; - function encodeLastRecordedSourceMapSpan() { - if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) { - return; - } - var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn; - if (lastEncodedSourceMapSpan.emittedLine == lastRecordedSourceMapSpan.emittedLine) { - if (sourceMapData.sourceMapMappings) { - sourceMapData.sourceMapMappings += ","; - } - } - else { - for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) { - sourceMapData.sourceMapMappings += ";"; - } - prevEncodedEmittedColumn = 1; - } - sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn); - sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex); - sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine); - sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn); - if (lastRecordedSourceMapSpan.nameIndex >= 0) { - sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex); - lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex; - } - lastEncodedSourceMapSpan = lastRecordedSourceMapSpan; - sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan); - function base64VLQFormatEncode(inValue) { - function base64FormatEncode(inValue) { - if (inValue < 64) { - return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.charAt(inValue); - } - throw TypeError(inValue + ": not a 64 based value"); - } - if (inValue < 0) { - inValue = ((-inValue) << 1) + 1; - } - else { - inValue = inValue << 1; - } - var encodedStr = ""; - do { - var currentDigit = inValue & 31; - inValue = inValue >> 5; - if (inValue > 0) { - currentDigit = currentDigit | 32; - } - encodedStr = encodedStr + base64FormatEncode(currentDigit); - } while (inValue > 0); - return encodedStr; - } - } - function recordSourceMapSpan(pos) { - var sourceLinePos = currentSourceFile.getLineAndCharacterFromPosition(pos); - var emittedLine = writer.getLine(); - var emittedColumn = writer.getColumn(); - if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)) { - encodeLastRecordedSourceMapSpan(); - lastRecordedSourceMapSpan = { - emittedLine: emittedLine, - emittedColumn: emittedColumn, - sourceLine: sourceLinePos.line, - sourceColumn: sourceLinePos.character, - nameIndex: getSourceMapNameIndex(), - sourceIndex: sourceMapSourceIndex - }; - } - else { - lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; - lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; - } - } - function recordEmitNodeStartSpan(node) { - recordSourceMapSpan(ts.getTokenPosOfNode(node)); - } - function recordEmitNodeEndSpan(node) { - recordSourceMapSpan(node.end); - } - function writeTextWithSpanRecord(tokenKind, startPos, emitFn) { - var tokenStartPos = ts.skipTrivia(currentSourceFile.text, startPos); - recordSourceMapSpan(tokenStartPos); - var tokenEndPos = emitTokenText(tokenKind, tokenStartPos, emitFn); - recordSourceMapSpan(tokenEndPos); - return tokenEndPos; - } - function recordNewSourceFileStart(node) { - var sourcesDirectoryPath = compilerOptions.sourceRoot ? program.getCommonSourceDirectory() : sourceMapDir; - sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), true)); - sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; - sourceMapData.inputSourceFileNames.push(node.filename); - } - function recordScopeNameOfNode(node, scopeName) { - function recordScopeNameIndex(scopeNameIndex) { - sourceMapNameIndices.push(scopeNameIndex); - } - function recordScopeNameStart(scopeName) { - var scopeNameIndex = -1; - if (scopeName) { - var parentIndex = getSourceMapNameIndex(); - if (parentIndex !== -1) { - scopeName = sourceMapData.sourceMapNames[parentIndex] + "." + scopeName; - } - scopeNameIndex = ts.getProperty(sourceMapNameIndexMap, scopeName); - if (scopeNameIndex === undefined) { - scopeNameIndex = sourceMapData.sourceMapNames.length; - sourceMapData.sourceMapNames.push(scopeName); - sourceMapNameIndexMap[scopeName] = scopeNameIndex; - } - } - recordScopeNameIndex(scopeNameIndex); - } - if (scopeName) { - recordScopeNameStart(scopeName); - } - else if (node.kind === 167 /* FunctionDeclaration */ || node.kind === 136 /* FunctionExpression */ || node.kind === 116 /* Method */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */ || node.kind === 172 /* ModuleDeclaration */ || node.kind === 169 /* ClassDeclaration */ || node.kind === 171 /* EnumDeclaration */) { - if (node.name) { - scopeName = node.name.text; - } - recordScopeNameStart(scopeName); - } - else { - recordScopeNameIndex(getSourceMapNameIndex()); - } - } - function recordScopeNameEnd() { - sourceMapNameIndices.pop(); - } - ; - function writeJavaScriptAndSourceMapFile(emitOutput) { - encodeLastRecordedSourceMapSpan(); - writeFile(sourceMapData.sourceMapFilePath, JSON.stringify({ - version: 3, - file: sourceMapData.sourceMapFile, - sourceRoot: sourceMapData.sourceMapSourceRoot, - sources: sourceMapData.sourceMapSources, - names: sourceMapData.sourceMapNames, - mappings: sourceMapData.sourceMapMappings - })); - sourceMapDataList.push(sourceMapData); - writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL); - } - var sourceMapJsFile = ts.getBaseFilename(ts.normalizeSlashes(jsFilePath)); - sourceMapData = { - sourceMapFilePath: jsFilePath + ".map", - jsSourceMappingURL: sourceMapJsFile + ".map", - sourceMapFile: sourceMapJsFile, - sourceMapSourceRoot: compilerOptions.sourceRoot || "", - sourceMapSources: [], - inputSourceFileNames: [], - sourceMapNames: [], - sourceMapMappings: "", - sourceMapDecodedMappings: [] - }; - sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot); - if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47 /* slash */) { - sourceMapData.sourceMapSourceRoot += ts.directorySeparator; - } - if (compilerOptions.mapRoot) { - sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot); - if (root) { - sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(sourceMapDir, root)); - } - if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) { - sourceMapDir = ts.combinePaths(program.getCommonSourceDirectory(), sourceMapDir); - sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), compilerHost.getCurrentDirectory(), true); - } - else { - sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL); - } - } - else { - sourceMapDir = ts.getDirectoryPath(ts.normalizePath(jsFilePath)); - } - function emitNodeWithMap(node) { - if (node) { - if (node.kind != 177 /* SourceFile */) { - recordEmitNodeStartSpan(node); - emitNode(node); - recordEmitNodeEndSpan(node); - } - else { - recordNewSourceFileStart(node); - emitNode(node); - } - } - } - writeEmittedFiles = writeJavaScriptAndSourceMapFile; - emit = emitNodeWithMap; - emitStart = recordEmitNodeStartSpan; - emitEnd = recordEmitNodeEndSpan; - emitToken = writeTextWithSpanRecord; - emitNewSourceFileStart = recordNewSourceFileStart; - scopeEmitStart = recordScopeNameOfNode; - scopeEmitEnd = recordScopeNameEnd; - } - function writeJavaScriptFile(emitOutput) { - writeFile(jsFilePath, emitOutput); - } - function emitTokenText(tokenKind, startPos, emitFn) { - var tokenString = ts.tokenToString(tokenKind); - if (emitFn) { - emitFn(); - } - else { - write(tokenString); - } - return startPos + tokenString.length; - } - function emitOptional(prefix, node) { - if (node) { - write(prefix); - emit(node); - } - } - function emitCommaList(nodes, count) { - if (!(count >= 0)) - count = nodes.length; - if (nodes) { - for (var i = 0; i < count; i++) { - if (i) - write(", "); - emit(nodes[i]); - } - } - } - function emitMultiLineList(nodes) { - if (nodes) { - for (var i = 0; i < nodes.length; i++) { - if (i) - write(","); - writeLine(); - emit(nodes[i]); - } - } - } - function emitLines(nodes) { - emitLinesStartingAt(nodes, 0); - } - function emitLinesStartingAt(nodes, startIndex) { - for (var i = startIndex; i < nodes.length; i++) { - writeLine(); - emit(nodes[i]); - } - } - function emitLiteral(node) { - var text = getSourceTextOfLocalNode(node); - if (node.kind === 3 /* StringLiteral */ && compilerOptions.sourceMap) { - writer.writeLiteral(text); - } - else { - write(text); - } - } - function emitQuotedIdentifier(node) { - if (node.kind === 3 /* StringLiteral */) { - emitLiteral(node); - } - else { - write("\""); - if (node.kind === 2 /* NumericLiteral */) { - write(node.text); - } - else { - write(getSourceTextOfLocalNode(node)); - } - write("\""); - } - } - function isNonExpressionIdentifier(node) { - var parent = node.parent; - switch (parent.kind) { - case 114 /* Parameter */: - case 166 /* VariableDeclaration */: - case 115 /* Property */: - case 129 /* PropertyAssignment */: - case 176 /* EnumMember */: - case 116 /* Method */: - case 167 /* FunctionDeclaration */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 136 /* FunctionExpression */: - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - case 171 /* EnumDeclaration */: - case 172 /* ModuleDeclaration */: - case 174 /* ImportDeclaration */: - return parent.name === node; - case 153 /* BreakStatement */: - case 152 /* ContinueStatement */: - case 175 /* ExportAssignment */: - return false; - case 159 /* LabelledStatement */: - return node.parent.label === node; - case 163 /* CatchBlock */: - return node.parent.variable === node; - } - } - function emitIdentifier(node) { - if (!isNonExpressionIdentifier(node)) { - var prefix = resolver.getExpressionNamePrefix(node); - if (prefix) { - write(prefix); - write("."); - } - } - write(getSourceTextOfLocalNode(node)); - } - function emitThis(node) { - if (resolver.getNodeCheckFlags(node) & 2 /* LexicalThis */) { - write("_this"); - } - else { - write("this"); - } - } - function emitSuper(node) { - var flags = resolver.getNodeCheckFlags(node); - if (flags & 16 /* SuperInstance */) { - write("_super.prototype"); - } - else if (flags & 32 /* SuperStatic */) { - write("_super"); - } - else { - write("super"); - } - } - function emitArrayLiteral(node) { - if (node.flags & 128 /* MultiLine */) { - write("["); - increaseIndent(); - emitMultiLineList(node.elements); - decreaseIndent(); - writeLine(); - write("]"); - } - else { - write("["); - emitCommaList(node.elements); - write("]"); - } - } - function emitObjectLiteral(node) { - if (!node.properties.length) { - write("{}"); - } - else if (node.flags & 128 /* MultiLine */) { - write("{"); - increaseIndent(); - emitMultiLineList(node.properties); - decreaseIndent(); - writeLine(); - write("}"); - } - else { - write("{ "); - emitCommaList(node.properties); - write(" }"); - } - } - function emitPropertyAssignment(node) { - emit(node.name); - write(": "); - emit(node.initializer); - } - function emitPropertyAccess(node) { - var text = resolver.getPropertyAccessSubstitution(node); - if (text) { - write(text); - return; - } - emit(node.left); - write("."); - emit(node.right); - } - function emitIndexedAccess(node) { - emit(node.object); - write("["); - emit(node.index); - write("]"); - } - function emitCallExpression(node) { - var superCall = false; - if (node.func.kind === 81 /* SuperKeyword */) { - write("_super"); - superCall = true; - } - else { - emit(node.func); - superCall = node.func.kind === 130 /* PropertyAccess */ && node.func.left.kind === 81 /* SuperKeyword */; - } - if (superCall) { - write(".call("); - emitThis(node.func); - if (node.arguments.length) { - write(", "); - emitCommaList(node.arguments); - } - write(")"); - } - else { - write("("); - emitCommaList(node.arguments); - write(")"); - } - } - function emitNewExpression(node) { - write("new "); - emit(node.func); - if (node.arguments) { - write("("); - emitCommaList(node.arguments); - write(")"); - } - } - function emitParenExpression(node) { - if (node.expression.kind === 134 /* TypeAssertion */) { - var operand = node.expression.operand; - while (operand.kind == 134 /* TypeAssertion */) { - operand = operand.operand; - } - if (operand.kind !== 138 /* PrefixOperator */ && operand.kind !== 139 /* PostfixOperator */ && operand.kind !== 133 /* NewExpression */ && !(operand.kind === 132 /* CallExpression */ && node.parent.kind === 133 /* NewExpression */) && !(operand.kind === 136 /* FunctionExpression */ && node.parent.kind === 132 /* CallExpression */)) { - emit(operand); - return; - } - } - write("("); - emit(node.expression); - write(")"); - } - function emitUnaryExpression(node) { - if (node.kind === 138 /* PrefixOperator */) { - write(ts.tokenToString(node.operator)); - } - if (node.operator >= 55 /* Identifier */) { - write(" "); - } - else if (node.kind === 138 /* PrefixOperator */ && node.operand.kind === 138 /* PrefixOperator */) { - var operand = node.operand; - if (node.operator === 24 /* PlusToken */ && (operand.operator === 24 /* PlusToken */ || operand.operator === 29 /* PlusPlusToken */)) { - write(" "); - } - else if (node.operator === 25 /* MinusToken */ && (operand.operator === 25 /* MinusToken */ || operand.operator === 30 /* MinusMinusToken */)) { - write(" "); - } - } - emit(node.operand); - if (node.kind === 139 /* PostfixOperator */) { - write(ts.tokenToString(node.operator)); - } - } - function emitBinaryExpression(node) { - emit(node.left); - if (node.operator !== 14 /* CommaToken */) - write(" "); - write(ts.tokenToString(node.operator)); - write(" "); - emit(node.right); - } - function emitConditionalExpression(node) { - emit(node.condition); - write(" ? "); - emit(node.whenTrue); - write(" : "); - emit(node.whenFalse); - } - function emitBlock(node) { - emitToken(5 /* OpenBraceToken */, node.pos); - increaseIndent(); - scopeEmitStart(node.parent); - if (node.kind === 173 /* ModuleBlock */) { - ts.Debug.assert(node.parent.kind === 172 /* ModuleDeclaration */); - emitCaptureThisForNodeIfNecessary(node.parent); - } - emitLines(node.statements); - decreaseIndent(); - writeLine(); - emitToken(6 /* CloseBraceToken */, node.statements.end); - scopeEmitEnd(); - } - function emitEmbeddedStatement(node) { - if (node.kind === 143 /* Block */) { - write(" "); - emit(node); - } - else { - increaseIndent(); - writeLine(); - emit(node); - decreaseIndent(); - } - } - function emitExpressionStatement(node) { - var isArrowExpression = node.expression.kind === 137 /* ArrowFunction */; - if (isArrowExpression) - write("("); - emit(node.expression); - if (isArrowExpression) - write(")"); - write(";"); - } - function emitIfStatement(node) { - var endPos = emitToken(74 /* IfKeyword */, node.pos); - write(" "); - endPos = emitToken(7 /* OpenParenToken */, endPos); - emit(node.expression); - emitToken(8 /* CloseParenToken */, node.expression.end); - emitEmbeddedStatement(node.thenStatement); - if (node.elseStatement) { - writeLine(); - emitToken(66 /* ElseKeyword */, node.thenStatement.end); - if (node.elseStatement.kind === 147 /* IfStatement */) { - write(" "); - emit(node.elseStatement); - } - else { - emitEmbeddedStatement(node.elseStatement); - } - } - } - function emitDoStatement(node) { - write("do"); - emitEmbeddedStatement(node.statement); - if (node.statement.kind === 143 /* Block */) { - write(" "); - } - else { - writeLine(); - } - write("while ("); - emit(node.expression); - write(");"); - } - function emitWhileStatement(node) { - write("while ("); - emit(node.expression); - write(")"); - emitEmbeddedStatement(node.statement); - } - function emitForStatement(node) { - var endPos = emitToken(72 /* ForKeyword */, node.pos); - write(" "); - endPos = emitToken(7 /* OpenParenToken */, endPos); - if (node.declarations) { - emitToken(88 /* VarKeyword */, endPos); - write(" "); - emitCommaList(node.declarations); - } - if (node.initializer) { - emit(node.initializer); - } - write(";"); - emitOptional(" ", node.condition); - write(";"); - emitOptional(" ", node.iterator); - write(")"); - emitEmbeddedStatement(node.statement); - } - function emitForInStatement(node) { - var endPos = emitToken(72 /* ForKeyword */, node.pos); - write(" "); - endPos = emitToken(7 /* OpenParenToken */, endPos); - if (node.declaration) { - emitToken(88 /* VarKeyword */, endPos); - write(" "); - emit(node.declaration); - } - else { - emit(node.variable); - } - write(" in "); - emit(node.expression); - emitToken(8 /* CloseParenToken */, node.expression.end); - emitEmbeddedStatement(node.statement); - } - function emitBreakOrContinueStatement(node) { - emitToken(node.kind === 153 /* BreakStatement */ ? 56 /* BreakKeyword */ : 61 /* ContinueKeyword */, node.pos); - emitOptional(" ", node.label); - write(";"); - } - function emitReturnStatement(node) { - emitToken(80 /* ReturnKeyword */, node.pos); - emitOptional(" ", node.expression); - write(";"); - } - function emitWithStatement(node) { - write("with ("); - emit(node.expression); - write(")"); - emitEmbeddedStatement(node.statement); - } - function emitSwitchStatement(node) { - var endPos = emitToken(82 /* SwitchKeyword */, node.pos); - write(" "); - emitToken(7 /* OpenParenToken */, endPos); - emit(node.expression); - endPos = emitToken(8 /* CloseParenToken */, node.expression.end); - write(" "); - emitToken(5 /* OpenBraceToken */, endPos); - increaseIndent(); - emitLines(node.clauses); - decreaseIndent(); - writeLine(); - emitToken(6 /* CloseBraceToken */, node.clauses.end); - } - function emitCaseOrDefaultClause(node) { - if (node.kind === 157 /* CaseClause */) { - write("case "); - emit(node.expression); - write(":"); - } - else { - write("default:"); - } - increaseIndent(); - emitLines(node.statements); - decreaseIndent(); - } - function emitThrowStatement(node) { - write("throw "); - emit(node.expression); - write(";"); - } - function emitTryStatement(node) { - write("try "); - emit(node.tryBlock); - emit(node.catchBlock); - if (node.finallyBlock) { - writeLine(); - write("finally "); - emit(node.finallyBlock); - } - } - function emitCatchBlock(node) { - writeLine(); - var endPos = emitToken(58 /* CatchKeyword */, node.pos); - write(" "); - emitToken(7 /* OpenParenToken */, endPos); - emit(node.variable); - emitToken(8 /* CloseParenToken */, node.variable.end); - write(" "); - emitBlock(node); - } - function emitDebuggerStatement(node) { - emitToken(62 /* DebuggerKeyword */, node.pos); - write(";"); - } - function emitLabelledStatement(node) { - emit(node.label); - write(": "); - emit(node.statement); - } - function getContainingModule(node) { - do { - node = node.parent; - } while (node && node.kind !== 172 /* ModuleDeclaration */); - return node; - } - function emitModuleMemberName(node) { - emitStart(node.name); - if (node.flags & 1 /* Export */) { - var container = getContainingModule(node); - write(container ? resolver.getLocalNameOfContainer(container) : "exports"); - write("."); - } - emitNode(node.name); - emitEnd(node.name); - } - function emitVariableDeclaration(node) { - emitModuleMemberName(node); - emitOptional(" = ", node.initializer); - } - function emitVariableStatement(node) { - if (!(node.flags & 1 /* Export */)) - write("var "); - emitCommaList(node.declarations); - write(";"); - } - function emitParameter(node) { - emit(node.name); - } - function emitDefaultValueAssignments(node) { - ts.forEach(node.parameters, function (param) { - if (param.initializer) { - writeLine(); - emitStart(param); - write("if ("); - emitNode(param.name); - write(" === void 0)"); - emitEnd(param); - write(" { "); - emitStart(param); - emitNode(param.name); - write(" = "); - emitNode(param.initializer); - emitEnd(param); - write("; }"); - } - }); - } - function emitRestParameter(node) { - if (ts.hasRestParameters(node)) { - var restIndex = node.parameters.length - 1; - var restParam = node.parameters[restIndex]; - writeLine(); - emitStart(restParam); - write("var "); - emitNode(restParam.name); - write(" = [];"); - emitEnd(restParam); - writeLine(); - write("for ("); - emitStart(restParam); - write("var _i = " + restIndex + ";"); - emitEnd(restParam); - write(" "); - emitStart(restParam); - write("_i < arguments.length;"); - emitEnd(restParam); - write(" "); - emitStart(restParam); - write("_i++"); - emitEnd(restParam); - write(") {"); - increaseIndent(); - writeLine(); - emitStart(restParam); - emitNode(restParam.name); - write("[_i - " + restIndex + "] = arguments[_i];"); - emitEnd(restParam); - decreaseIndent(); - writeLine(); - write("}"); - } - } - function emitAccessor(node) { - write(node.kind === 118 /* GetAccessor */ ? "get " : "set "); - emit(node.name); - emitSignatureAndBody(node); - } - function emitFunctionDeclaration(node) { - if (!node.body) - return; - write("function "); - if (node.kind === 167 /* FunctionDeclaration */ || (node.kind === 136 /* FunctionExpression */ && node.name)) { - emit(node.name); - } - emitSignatureAndBody(node); - } - function emitCaptureThisForNodeIfNecessary(node) { - if (resolver.getNodeCheckFlags(node) & 4 /* CaptureThis */) { - writeLine(); - emitStart(node); - write("var _this = this;"); - emitEnd(node); - } - } - function emitSignatureParameters(node) { - write("("); - if (node) { - emitCommaList(node.parameters, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); - } - write(")"); - } - function emitSignatureAndBody(node) { - emitSignatureParameters(node); - write(" {"); - scopeEmitStart(node); - increaseIndent(); - var startIndex = 0; - if (node.body.kind === 168 /* FunctionBlock */) { - startIndex = emitDirectivePrologues(node.body.statements, true); - } - var outPos = writer.getTextPos(); - emitCaptureThisForNodeIfNecessary(node); - emitDefaultValueAssignments(node); - emitRestParameter(node); - if (node.body.kind !== 168 /* FunctionBlock */ && outPos === writer.getTextPos()) { - decreaseIndent(); - write(" "); - emitStart(node.body); - write("return "); - emitNode(node.body); - emitEnd(node.body); - write("; "); - emitStart(node.body); - write("}"); - emitEnd(node.body); - } - else { - if (node.body.kind === 168 /* FunctionBlock */) { - emitLinesStartingAt(node.body.statements, startIndex); - } - else { - writeLine(); - write("return "); - emit(node.body); - write(";"); - } - decreaseIndent(); - writeLine(); - if (node.body.kind === 168 /* FunctionBlock */) { - emitToken(6 /* CloseBraceToken */, node.body.statements.end); - } - else { - emitStart(node.body); - write("}"); - emitEnd(node.body); - } - } - scopeEmitEnd(); - if (node.flags & 1 /* Export */) { - writeLine(); - emitStart(node); - emitModuleMemberName(node); - write(" = "); - emit(node.name); - emitEnd(node); - write(";"); - } - } - function findInitialSuperCall(ctor) { - if (ctor.body) { - var statement = ctor.body.statements[0]; - if (statement && statement.kind === 146 /* ExpressionStatement */) { - var expr = statement.expression; - if (expr && expr.kind === 132 /* CallExpression */) { - var func = expr.func; - if (func && func.kind === 81 /* SuperKeyword */) { - return statement; - } - } - } - } - } - function emitParameterPropertyAssignments(node) { - ts.forEach(node.parameters, function (param) { - if (param.flags & (16 /* Public */ | 32 /* Private */)) { - writeLine(); - emitStart(param); - emitStart(param.name); - write("this."); - emitNode(param.name); - emitEnd(param.name); - write(" = "); - emit(param.name); - write(";"); - emitEnd(param); - } - }); - } - function emitMemberAccess(memberName) { - if (memberName.kind === 3 /* StringLiteral */ || memberName.kind === 2 /* NumericLiteral */) { - write("["); - emitNode(memberName); - write("]"); - } - else { - write("."); - emitNode(memberName); - } - } - function emitMemberAssignments(node, staticFlag) { - ts.forEach(node.members, function (member) { - if (member.kind === 115 /* Property */ && (member.flags & 64 /* Static */) === staticFlag && member.initializer) { - writeLine(); - emitStart(member); - emitStart(member.name); - if (staticFlag) { - emitNode(node.name); - } - else { - write("this"); - } - emitMemberAccess(member.name); - emitEnd(member.name); - write(" = "); - emit(member.initializer); - write(";"); - emitEnd(member); - } - }); - } - function emitMemberFunctions(node) { - ts.forEach(node.members, function (member) { - if (member.kind === 116 /* Method */) { - if (!member.body) - return; - writeLine(); - emitStart(member); - emitStart(member.name); - emitNode(node.name); - if (!(member.flags & 64 /* Static */)) { - write(".prototype"); - } - emitMemberAccess(member.name); - emitEnd(member.name); - write(" = "); - emitStart(member); - emitFunctionDeclaration(member); - emitEnd(member); - emitEnd(member); - write(";"); - } - else if (member.kind === 118 /* GetAccessor */ || member.kind === 119 /* SetAccessor */) { - var accessors = getAllAccessorDeclarations(node, member); - if (member === accessors.firstAccessor) { - writeLine(); - emitStart(member); - write("Object.defineProperty("); - emitStart(member.name); - emitNode(node.name); - if (!(member.flags & 64 /* Static */)) { - write(".prototype"); - } - write(", "); - emitQuotedIdentifier(member.name); - emitEnd(member.name); - write(", {"); - increaseIndent(); - if (accessors.getAccessor) { - writeLine(); - write("get: "); - emitStart(accessors.getAccessor); - write("function "); - emitSignatureAndBody(accessors.getAccessor); - emitEnd(accessors.getAccessor); - write(","); - } - if (accessors.setAccessor) { - writeLine(); - write("set: "); - emitStart(accessors.setAccessor); - write("function "); - emitSignatureAndBody(accessors.setAccessor); - emitEnd(accessors.setAccessor); - write(","); - } - writeLine(); - write("enumerable: true,"); - writeLine(); - write("configurable: true"); - decreaseIndent(); - writeLine(); - write("});"); - emitEnd(member); - } - } - }); - } - function emitClassDeclaration(node) { - var ctor = getFirstConstructorWithBody(node); - write("var "); - emit(node.name); - write(" = (function ("); - if (node.baseType) - write("_super"); - write(") {"); - increaseIndent(); - scopeEmitStart(node); - if (node.baseType) { - writeLine(); - emitStart(node.baseType); - write("__extends("); - emit(node.name); - write(", _super);"); - emitEnd(node.baseType); - } - writeLine(); - emitStart(ctor || node); - write("function "); - emit(node.name); - emitSignatureParameters(ctor); - write(" {"); - scopeEmitStart(node, "constructor"); - increaseIndent(); - if (ctor) { - emitDefaultValueAssignments(ctor); - emitRestParameter(ctor); - if (node.baseType) { - var superCall = findInitialSuperCall(ctor); - if (superCall) { - writeLine(); - emit(superCall); - } - } - emitParameterPropertyAssignments(ctor); - } - else { - if (node.baseType) { - writeLine(); - emitStart(node.baseType); - write("_super.apply(this, arguments);"); - emitEnd(node.baseType); - } - } - emitCaptureThisForNodeIfNecessary(node); - emitMemberAssignments(node, 0); - if (ctor) { - var statements = ctor.body.statements; - if (superCall) - statements = statements.slice(1); - emitLines(statements); - } - decreaseIndent(); - writeLine(); - emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); - scopeEmitEnd(); - emitEnd(ctor || node); - emitMemberFunctions(node); - emitMemberAssignments(node, 64 /* Static */); - writeLine(); - function emitClassReturnStatement() { - write("return "); - emitNode(node.name); - } - emitToken(6 /* CloseBraceToken */, node.members.end, emitClassReturnStatement); - write(";"); - decreaseIndent(); - writeLine(); - emitToken(6 /* CloseBraceToken */, node.members.end); - scopeEmitEnd(); - emitStart(node); - write(")("); - if (node.baseType) { - emit(node.baseType.typeName); - } - write(");"); - emitEnd(node); - if (node.flags & 1 /* Export */) { - writeLine(); - emitStart(node); - emitModuleMemberName(node); - write(" = "); - emit(node.name); - emitEnd(node); - write(";"); - } - } - function emitEnumDeclaration(node) { - if (!(node.flags & 1 /* Export */)) { - emitStart(node); - write("var "); - emit(node.name); - emitEnd(node); - write(";"); - } - writeLine(); - emitStart(node); - write("(function ("); - emitStart(node.name); - write(resolver.getLocalNameOfContainer(node)); - emitEnd(node.name); - write(") {"); - increaseIndent(); - scopeEmitStart(node); - ts.forEach(node.members, function (member) { - writeLine(); - emitStart(member); - write(resolver.getLocalNameOfContainer(node)); - write("["); - write(resolver.getLocalNameOfContainer(node)); - write("["); - emitQuotedIdentifier(member.name); - write("] = "); - if (member.initializer) { - emit(member.initializer); - } - else { - write(resolver.getEnumMemberValue(member).toString()); - } - write("] = "); - emitQuotedIdentifier(member.name); - emitEnd(member); - write(";"); - }); - decreaseIndent(); - writeLine(); - emitToken(6 /* CloseBraceToken */, node.members.end); - scopeEmitEnd(); - write(")("); - emitModuleMemberName(node); - write(" || ("); - emitModuleMemberName(node); - write(" = {}));"); - emitEnd(node); - if (node.flags & 1 /* Export */) { - writeLine(); - emitStart(node); - write("var "); - emit(node.name); - write(" = "); - emitModuleMemberName(node); - emitEnd(node); - write(";"); - } - } - function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 172 /* ModuleDeclaration */) { - var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); - return recursiveInnerModule || moduleDeclaration.body; - } - } - function emitModuleDeclaration(node) { - if (!ts.isInstantiated(node)) - return; - if (!(node.flags & 1 /* Export */)) { - emitStart(node); - write("var "); - emit(node.name); - write(";"); - emitEnd(node); - writeLine(); - } - emitStart(node); - write("(function ("); - emitStart(node.name); - write(resolver.getLocalNameOfContainer(node)); - emitEnd(node.name); - write(") "); - if (node.body.kind === 173 /* ModuleBlock */) { - emit(node.body); - } - else { - write("{"); - increaseIndent(); - scopeEmitStart(node); - emitCaptureThisForNodeIfNecessary(node); - writeLine(); - emit(node.body); - decreaseIndent(); - writeLine(); - var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body; - emitToken(6 /* CloseBraceToken */, moduleBlock.statements.end); - scopeEmitEnd(); - } - write(")("); - emitModuleMemberName(node); - write(" || ("); - emitModuleMemberName(node); - write(" = {}));"); - emitEnd(node); - if (node.flags & 1 /* Export */) { - writeLine(); - emitStart(node); - write("var "); - emit(node.name); - write(" = "); - emitModuleMemberName(node); - emitEnd(node); - write(";"); - } - } - function emitImportDeclaration(node) { - var emitImportDeclaration = resolver.isReferencedImportDeclaration(node); - if (!emitImportDeclaration) { - emitImportDeclaration = !ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportedViaEntityName(node); - } - if (emitImportDeclaration) { - if (node.externalModuleName && node.parent.kind === 177 /* SourceFile */ && compilerOptions.module === 2 /* AMD */) { - if (node.flags & 1 /* Export */) { - writeLine(); - emitStart(node); - emitModuleMemberName(node); - write(" = "); - emit(node.name); - write(";"); - emitEnd(node); - } - } - else { - writeLine(); - emitStart(node); - if (!(node.flags & 1 /* Export */)) - write("var "); - emitModuleMemberName(node); - write(" = "); - if (node.entityName) { - emit(node.entityName); - } - else { - write("require("); - emitStart(node.externalModuleName); - emitLiteral(node.externalModuleName); - emitEnd(node.externalModuleName); - emitToken(8 /* CloseParenToken */, node.externalModuleName.end); - } - write(";"); - emitEnd(node); - } - } - } - function getExternalImportDeclarations(node) { - var result = []; - ts.forEach(node.statements, function (stat) { - if (stat.kind === 174 /* ImportDeclaration */ && stat.externalModuleName && resolver.isReferencedImportDeclaration(stat)) { - result.push(stat); - } - }); - return result; - } - function getFirstExportAssignment(sourceFile) { - return ts.forEach(sourceFile.statements, function (node) { - if (node.kind === 175 /* ExportAssignment */) { - return node; - } - }); - } - function emitAMDModule(node, startIndex) { - var imports = getExternalImportDeclarations(node); - writeLine(); - write("define([\"require\", \"exports\""); - ts.forEach(imports, function (imp) { - write(", "); - emitLiteral(imp.externalModuleName); - }); - ts.forEach(node.amdDependencies, function (amdDependency) { - var text = "\"" + amdDependency + "\""; - write(", "); - write(text); - }); - write("], function (require, exports"); - ts.forEach(imports, function (imp) { - write(", "); - emit(imp.name); - }); - write(") {"); - increaseIndent(); - emitCaptureThisForNodeIfNecessary(node); - emitLinesStartingAt(node.statements, startIndex); - var exportName = resolver.getExportAssignmentName(node); - if (exportName) { - writeLine(); - var exportAssignement = getFirstExportAssignment(node); - emitStart(exportAssignement); - write("return "); - emitStart(exportAssignement.exportName); - write(exportName); - emitEnd(exportAssignement.exportName); - write(";"); - emitEnd(exportAssignement); - } - decreaseIndent(); - writeLine(); - write("});"); - } - function emitCommonJSModule(node, startIndex) { - emitCaptureThisForNodeIfNecessary(node); - emitLinesStartingAt(node.statements, startIndex); - var exportName = resolver.getExportAssignmentName(node); - if (exportName) { - writeLine(); - var exportAssignement = getFirstExportAssignment(node); - emitStart(exportAssignement); - write("module.exports = "); - emitStart(exportAssignement.exportName); - write(exportName); - emitEnd(exportAssignement.exportName); - write(";"); - emitEnd(exportAssignement); - } - } - function emitDirectivePrologues(statements, startWithNewLine) { - for (var i = 0; i < statements.length; ++i) { - if (ts.isPrologueDirective(statements[i])) { - if (startWithNewLine || i > 0) { - writeLine(); - } - emit(statements[i]); - } - else { - return i; - } - } - return statements.length; - } - function emitSourceFile(node) { - currentSourceFile = node; - var startIndex = emitDirectivePrologues(node.statements, false); - if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) { - writeLine(); - write("var __extends = this.__extends || function (d, b) {"); - increaseIndent(); - writeLine(); - write("for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];"); - writeLine(); - write("function __() { this.constructor = d; }"); - writeLine(); - write("__.prototype = b.prototype;"); - writeLine(); - write("d.prototype = new __();"); - decreaseIndent(); - writeLine(); - write("};"); - extendsEmitted = true; - } - if (ts.isExternalModule(node)) { - if (compilerOptions.module === 2 /* AMD */) { - emitAMDModule(node, startIndex); - } - else { - emitCommonJSModule(node, startIndex); - } - } - else { - emitCaptureThisForNodeIfNecessary(node); - emitLinesStartingAt(node.statements, startIndex); - } - } - function emitNode(node) { - if (!node || node.flags & 2 /* Ambient */) - return; - switch (node.kind) { - case 55 /* Identifier */: - return emitIdentifier(node); - case 114 /* Parameter */: - return emitParameter(node); - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - return emitAccessor(node); - case 83 /* ThisKeyword */: - return emitThis(node); - case 81 /* SuperKeyword */: - return emitSuper(node); - case 79 /* NullKeyword */: - return write("null"); - case 85 /* TrueKeyword */: - return write("true"); - case 70 /* FalseKeyword */: - return write("false"); - case 2 /* NumericLiteral */: - case 3 /* StringLiteral */: - case 4 /* RegularExpressionLiteral */: - return emitLiteral(node); - case 112 /* QualifiedName */: - return emitPropertyAccess(node); - case 127 /* ArrayLiteral */: - return emitArrayLiteral(node); - case 128 /* ObjectLiteral */: - return emitObjectLiteral(node); - case 129 /* PropertyAssignment */: - return emitPropertyAssignment(node); - case 130 /* PropertyAccess */: - return emitPropertyAccess(node); - case 131 /* IndexedAccess */: - return emitIndexedAccess(node); - case 132 /* CallExpression */: - return emitCallExpression(node); - case 133 /* NewExpression */: - return emitNewExpression(node); - case 134 /* TypeAssertion */: - return emit(node.operand); - case 135 /* ParenExpression */: - return emitParenExpression(node); - case 167 /* FunctionDeclaration */: - case 136 /* FunctionExpression */: - case 137 /* ArrowFunction */: - return emitFunctionDeclaration(node); - case 138 /* PrefixOperator */: - case 139 /* PostfixOperator */: - return emitUnaryExpression(node); - case 140 /* BinaryExpression */: - return emitBinaryExpression(node); - case 141 /* ConditionalExpression */: - return emitConditionalExpression(node); - case 142 /* OmittedExpression */: - return; - case 143 /* Block */: - case 162 /* TryBlock */: - case 164 /* FinallyBlock */: - case 168 /* FunctionBlock */: - case 173 /* ModuleBlock */: - return emitBlock(node); - case 144 /* VariableStatement */: - return emitVariableStatement(node); - case 145 /* EmptyStatement */: - return write(";"); - case 146 /* ExpressionStatement */: - return emitExpressionStatement(node); - case 147 /* IfStatement */: - return emitIfStatement(node); - case 148 /* DoStatement */: - return emitDoStatement(node); - case 149 /* WhileStatement */: - return emitWhileStatement(node); - case 150 /* ForStatement */: - return emitForStatement(node); - case 151 /* ForInStatement */: - return emitForInStatement(node); - case 152 /* ContinueStatement */: - case 153 /* BreakStatement */: - return emitBreakOrContinueStatement(node); - case 154 /* ReturnStatement */: - return emitReturnStatement(node); - case 155 /* WithStatement */: - return emitWithStatement(node); - case 156 /* SwitchStatement */: - return emitSwitchStatement(node); - case 157 /* CaseClause */: - case 158 /* DefaultClause */: - return emitCaseOrDefaultClause(node); - case 159 /* LabelledStatement */: - return emitLabelledStatement(node); - case 160 /* ThrowStatement */: - return emitThrowStatement(node); - case 161 /* TryStatement */: - return emitTryStatement(node); - case 163 /* CatchBlock */: - return emitCatchBlock(node); - case 165 /* DebuggerStatement */: - return emitDebuggerStatement(node); - case 166 /* VariableDeclaration */: - return emitVariableDeclaration(node); - case 169 /* ClassDeclaration */: - return emitClassDeclaration(node); - case 171 /* EnumDeclaration */: - return emitEnumDeclaration(node); - case 172 /* ModuleDeclaration */: - return emitModuleDeclaration(node); - case 174 /* ImportDeclaration */: - return emitImportDeclaration(node); - case 177 /* SourceFile */: - return emitSourceFile(node); - } - } - if (compilerOptions.sourceMap) { - initializeEmitterWithSourceMaps(); - } - if (root) { - emit(root); - } - else { - ts.forEach(program.getSourceFiles(), function (sourceFile) { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - emit(sourceFile); - } - }); - } - writeLine(); - writeEmittedFiles(writer.getText()); - } - function emitDeclarations(jsFilePath, root) { - var writer = createTextWriter(); - var write = writer.write; - var writeLine = writer.writeLine; - var increaseIndent = writer.increaseIndent; - var decreaseIndent = writer.decreaseIndent; - var enclosingDeclaration; - function emitLines(nodes) { - for (var i = 0, n = nodes.length; i < n; i++) { - emitNode(nodes[i]); - } - } - function emitCommaList(nodes, eachNodeEmitFn) { - var currentWriterPos = writer.getTextPos(); - for (var i = 0, n = nodes.length; i < n; i++) { - if (currentWriterPos !== writer.getTextPos()) { - write(", "); - } - currentWriterPos = writer.getTextPos(); - eachNodeEmitFn(nodes[i]); - } - } - function emitSourceTextOfNode(node) { - write(getSourceTextOfLocalNode(node)); - } - function emitSourceFile(node) { - currentSourceFile = node; - enclosingDeclaration = node; - emitLines(node.statements); - } - function emitExportAssignment(node) { - write("export = "); - emitSourceTextOfNode(node.exportName); - write(";"); - writeLine(); - } - function emitDeclarationFlags(node) { - if (node.flags & 64 /* Static */) { - if (node.flags & 32 /* Private */) { - write("private "); - } - write("static "); - } - else { - if (node.flags & 32 /* Private */) { - write("private "); - } - else if (node.parent === currentSourceFile) { - if (node.flags & 1 /* Export */) { - write("export "); - } - if (node.kind !== 170 /* InterfaceDeclaration */) { - write("declare "); - } - } - } - } - function emitImportDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - if (node.flags & 1 /* Export */) { - write("export "); - } - write("import "); - emitSourceTextOfNode(node.name); - write(" = "); - if (node.entityName) { - emitSourceTextOfNode(node.entityName); - write(";"); - } - else { - write("require("); - emitSourceTextOfNode(node.externalModuleName); - write(");"); - } - writeLine(); - } - } - function emitModuleDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitDeclarationFlags(node); - write("module "); - emitSourceTextOfNode(node.name); - while (node.body.kind !== 173 /* ModuleBlock */) { - node = node.body; - write("."); - emitSourceTextOfNode(node.name); - } - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.body.statements); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitEnumDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitDeclarationFlags(node); - write("enum "); - emitSourceTextOfNode(node.name); - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - } - } - function emitEnumMemberDeclaration(node) { - emitSourceTextOfNode(node.name); - var enumMemberValue = resolver.getEnumMemberValue(node); - if (enumMemberValue !== undefined) { - write(" = "); - write(enumMemberValue.toString()); - } - write(","); - writeLine(); - } - function emitTypeParameters(typeParameters) { - function emitTypeParameter(node) { - emitSourceTextOfNode(node.name); - if (node.constraint) { - write(" extends "); - resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 0 /* None */, writer); - } - } - if (typeParameters) { - write("<"); - emitCommaList(typeParameters, emitTypeParameter); - write(">"); - } - } - function emitHeritageClause(typeReferences, isImplementsList) { - function emitTypeOfTypeReference(node) { - resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */, writer); - } - if (typeReferences) { - write(isImplementsList ? " implements " : " extends "); - emitCommaList(typeReferences, emitTypeOfTypeReference); - } - } - function emitClassDeclaration(node) { - function emitParameterProperties(constructorDeclaration) { - if (constructorDeclaration) { - ts.forEach(constructorDeclaration.parameters, function (param) { - if (param.flags & (16 /* Public */ | 32 /* Private */)) { - emitPropertyDeclaration(param); - } - }); - } - } - if (resolver.isDeclarationVisible(node)) { - emitDeclarationFlags(node); - write("class "); - emitSourceTextOfNode(node.name); - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - emitTypeParameters(node.typeParameters); - if (node.baseType) { - emitHeritageClause([node.baseType], false); - } - emitHeritageClause(node.implementedTypes, true); - write(" {"); - writeLine(); - increaseIndent(); - emitParameterProperties(getFirstConstructorWithBody(node)); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitInterfaceDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitDeclarationFlags(node); - write("interface "); - emitSourceTextOfNode(node.name); - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - emitTypeParameters(node.typeParameters); - emitHeritageClause(node.baseTypes, false); - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitPropertyDeclaration(node) { - emitDeclarationFlags(node); - emitVariableDeclaration(node); - write(";"); - writeLine(); - } - function emitVariableDeclaration(node) { - if (node.kind !== 166 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { - emitSourceTextOfNode(node.name); - if (node.kind === 115 /* Property */ && (node.flags & 4 /* QuestionMark */)) { - write("?"); - } - if (!(node.flags & 32 /* Private */)) { - write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); - } - } - } - function emitVariableStatement(node) { - var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); - if (hasDeclarationWithEmit) { - emitDeclarationFlags(node); - write("var "); - emitCommaList(node.declarations, emitVariableDeclaration); - write(";"); - writeLine(); - } - } - function emitAccessorDeclaration(node) { - var accessors = getAllAccessorDeclarations(node.parent, node); - if (node === accessors.firstAccessor) { - emitDeclarationFlags(node); - emitSourceTextOfNode(node.name); - if (!(node.flags & 32 /* Private */)) { - write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); - } - write(";"); - writeLine(); - } - } - function emitFunctionDeclaration(node) { - if ((node.kind !== 167 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { - emitDeclarationFlags(node); - if (node.kind === 167 /* FunctionDeclaration */) { - write("function "); - emitSourceTextOfNode(node.name); - } - else if (node.kind === 117 /* Constructor */) { - write("constructor"); - } - else { - emitSourceTextOfNode(node.name); - if (node.flags & 4 /* QuestionMark */) { - write("?"); - } - } - emitSignatureDeclaration(node); - } - } - function emitConstructSignatureDeclaration(node) { - write("new "); - emitSignatureDeclaration(node); - } - function emitSignatureDeclaration(node) { - emitTypeParameters(node.typeParameters); - if (node.kind === 122 /* IndexSignature */) { - write("["); - } - else { - write("("); - } - emitCommaList(node.parameters, emitParameterDeclaration); - if (node.kind === 122 /* IndexSignature */) { - write("]"); - } - else { - write(")"); - } - if (node.kind !== 117 /* Constructor */ && !(node.flags & 32 /* Private */)) { - write(": "); - resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 0 /* None */, writer); - } - write(";"); - writeLine(); - } - function emitParameterDeclaration(node) { - if (node.flags & 8 /* Rest */) { - write("..."); - } - emitSourceTextOfNode(node.name); - if (node.initializer || (node.flags & 4 /* QuestionMark */)) { - write("?"); - } - if (!(node.parent.flags & 32 /* Private */)) { - write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); - } - } - function emitNode(node) { - switch (node.kind) { - case 117 /* Constructor */: - case 167 /* FunctionDeclaration */: - case 116 /* Method */: - return emitFunctionDeclaration(node); - case 121 /* ConstructSignature */: - return emitConstructSignatureDeclaration(node); - case 120 /* CallSignature */: - case 122 /* IndexSignature */: - return emitSignatureDeclaration(node); - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - return emitAccessorDeclaration(node); - case 144 /* VariableStatement */: - return emitVariableStatement(node); - case 115 /* Property */: - return emitPropertyDeclaration(node); - case 170 /* InterfaceDeclaration */: - return emitInterfaceDeclaration(node); - case 169 /* ClassDeclaration */: - return emitClassDeclaration(node); - case 176 /* EnumMember */: - return emitEnumMemberDeclaration(node); - case 171 /* EnumDeclaration */: - return emitEnumDeclaration(node); - case 172 /* ModuleDeclaration */: - return emitModuleDeclaration(node); - case 174 /* ImportDeclaration */: - return emitImportDeclaration(node); - case 175 /* ExportAssignment */: - return emitExportAssignment(node); - case 177 /* SourceFile */: - return emitSourceFile(node); - } - } - function resolveScriptReference(sourceFile, reference) { - var referenceFileName = compilerOptions.noResolve ? reference.filename : ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename)); - return program.getSourceFile(referenceFileName); - } - var referencePathsOutput = ""; - function writeReferencePath(referencedFile) { - var declFileName = referencedFile.flags & 512 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile) ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") : ts.getModuleNameFromFilename(compilerOptions.out) + ".d.ts"; - declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), false); - referencePathsOutput += "/// " + sys.newLine; - } - if (root) { - var addedGlobalFileReference = false; - ts.forEach(root.referencedFiles, function (fileReference) { - var referencedFile = resolveScriptReference(root, fileReference); - if ((referencedFile.flags & 512 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile) || !addedGlobalFileReference) { - writeReferencePath(referencedFile); - if (!isExternalModuleOrDeclarationFile(referencedFile)) { - addedGlobalFileReference = true; - } - } - }); - emitNode(root); - } - else { - var emittedReferencedFiles = []; - ts.forEach(program.getSourceFiles(), function (sourceFile) { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - ts.forEach(sourceFile.referencedFiles, function (fileReference) { - var referencedFile = resolveScriptReference(sourceFile, fileReference); - if (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile)) { - writeReferencePath(referencedFile); - emittedReferencedFiles.push(referencedFile); - } - }); - emitNode(sourceFile); - } - }); - } - writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", referencePathsOutput + writer.getText()); - } - var shouldEmitDeclarations = resolver.shouldEmitDeclarations(); - function emitFile(jsFilePath, sourceFile) { - emitJavaScript(jsFilePath, sourceFile); - if (shouldEmitDeclarations) { - emitDeclarations(jsFilePath, sourceFile); - } - } - ts.forEach(program.getSourceFiles(), function (sourceFile) { - if (shouldEmitToOwnFile(sourceFile)) { - var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js"); - emitFile(jsFilePath, sourceFile); - } - }); - if (compilerOptions.out) { - emitFile(compilerOptions.out); - } - return { - errors: diagnostics, - sourceMaps: sourceMapDataList - }; - } - ts.emitFiles = emitFiles; -})(ts || (ts = {})); -var ts; -(function (ts) { - var nextSymbolId = 1; - var nextNodeId = 1; - var nextMergeId = 1; - function createTypeChecker(program) { - var Symbol = ts.objectAllocator.getSymbolConstructor(); - var Type = ts.objectAllocator.getTypeConstructor(); - var Signature = ts.objectAllocator.getSignatureConstructor(); - var typeCount = 0; - var emptyArray = []; - var emptySymbols = {}; - var undefinedSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "undefined"); - var argumentsSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "arguments"); - var unknownSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "unknown"); - var resolvingSymbol = createSymbol(33554432 /* Transient */, "__resolving__"); - var anyType = createIntrinsicType(1 /* Any */, "any"); - var stringType = createIntrinsicType(2 /* String */, "string"); - var numberType = createIntrinsicType(4 /* Number */, "number"); - var booleanType = createIntrinsicType(8 /* Boolean */, "boolean"); - var voidType = createIntrinsicType(16 /* Void */, "void"); - var undefinedType = createIntrinsicType(32 /* Undefined */, "undefined"); - var nullType = createIntrinsicType(64 /* Null */, "null"); - var unknownType = createIntrinsicType(1 /* Any */, "unknown"); - var resolvingType = createIntrinsicType(1 /* Any */, "__resolving__"); - var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - var globals = {}; - var globalObjectType; - var globalFunctionType; - var globalArrayType; - var globalStringType; - var globalNumberType; - var globalBooleanType; - var globalRegExpType; - var stringLiteralTypes = {}; - var emitExtends = false; - var mergedSymbols = []; - var symbolLinks = []; - var nodeLinks = []; - var potentialThisCollisions = []; - var diagnostics = []; - var diagnosticsModified = false; - var checker; - function addDiagnostic(diagnostic) { - diagnostics.push(diagnostic); - diagnosticsModified = true; - } - function error(location, message, arg0, arg1, arg2) { - var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) : ts.createCompilerDiagnostic(message, arg0, arg1, arg2); - addDiagnostic(diagnostic); - } - function createSymbol(flags, name) { - return new Symbol(flags, name); - } - function getExcludedSymbolFlags(flags) { - var result = 0; - if (flags & 1 /* Variable */) - result |= ts.SymbolFlags.VariableExcludes; - if (flags & 2 /* Property */) - result |= ts.SymbolFlags.PropertyExcludes; - if (flags & 4 /* EnumMember */) - result |= ts.SymbolFlags.EnumMemberExcludes; - if (flags & 8 /* Function */) - result |= ts.SymbolFlags.FunctionExcludes; - if (flags & 16 /* Class */) - result |= ts.SymbolFlags.ClassExcludes; - if (flags & 32 /* Interface */) - result |= ts.SymbolFlags.InterfaceExcludes; - if (flags & 64 /* Enum */) - result |= ts.SymbolFlags.EnumExcludes; - if (flags & 128 /* ValueModule */) - result |= ts.SymbolFlags.ValueModuleExcludes; - if (flags & 2048 /* Method */) - result |= ts.SymbolFlags.MethodExcludes; - if (flags & 8192 /* GetAccessor */) - result |= ts.SymbolFlags.GetAccessorExcludes; - if (flags & 16384 /* SetAccessor */) - result |= ts.SymbolFlags.SetAccessorExcludes; - if (flags & 262144 /* TypeParameter */) - result |= ts.SymbolFlags.TypeParameterExcludes; - if (flags & 4194304 /* Import */) - result |= ts.SymbolFlags.ImportExcludes; - return result; - } - function recordMergedSymbol(target, source) { - if (!source.mergeId) - source.mergeId = nextMergeId++; - mergedSymbols[source.mergeId] = target; - } - function cloneSymbol(symbol) { - var result = createSymbol(symbol.flags | 16777216 /* Merged */, symbol.name); - result.declarations = symbol.declarations.slice(0); - result.parent = symbol.parent; - if (symbol.valueDeclaration) - result.valueDeclaration = symbol.valueDeclaration; - if (symbol.members) - result.members = cloneSymbolTable(symbol.members); - if (symbol.exports) - result.exports = cloneSymbolTable(symbol.exports); - recordMergedSymbol(result, symbol); - return result; - } - function extendSymbol(target, source) { - if (!(target.flags & getExcludedSymbolFlags(source.flags))) { - target.flags |= source.flags; - if (!target.valueDeclaration && source.valueDeclaration) - target.valueDeclaration = source.valueDeclaration; - ts.forEach(source.declarations, function (node) { - target.declarations.push(node); - }); - if (source.members) { - if (!target.members) - target.members = {}; - extendSymbolTable(target.members, source.members); - } - if (source.exports) { - if (!target.exports) - target.exports = {}; - extendSymbolTable(target.exports, source.exports); - } - recordMergedSymbol(target, source); - } - else { - ts.forEach(source.declarations, function (node) { - error(node.name ? node.name : node, ts.Diagnostics.Duplicate_identifier_0, symbolToString(source)); - }); - } - } - function cloneSymbolTable(symbolTable) { - var result = {}; - for (var id in symbolTable) { - if (ts.hasProperty(symbolTable, id)) { - result[id] = symbolTable[id]; - } - } - return result; - } - function extendSymbolTable(target, source) { - for (var id in source) { - if (ts.hasProperty(source, id)) { - if (!ts.hasProperty(target, id)) { - target[id] = source[id]; - } - else { - var symbol = target[id]; - if (!(symbol.flags & 16777216 /* Merged */)) { - target[id] = symbol = cloneSymbol(symbol); - } - extendSymbol(symbol, source[id]); - } - } - } - } - function getSymbolLinks(symbol) { - if (symbol.flags & 33554432 /* Transient */) - return symbol; - if (!symbol.id) - symbol.id = nextSymbolId++; - return symbolLinks[symbol.id] || (symbolLinks[symbol.id] = {}); - } - function getNodeLinks(node) { - if (!node.id) - node.id = nextNodeId++; - return nodeLinks[node.id] || (nodeLinks[node.id] = {}); - } - function getSourceFile(node) { - return getAncestor(node, 177 /* SourceFile */); - } - function isGlobalSourceFile(node) { - return node.kind === 177 /* SourceFile */ && !ts.isExternalModule(node); - } - function getSymbol(symbols, name, meaning) { - if (meaning && ts.hasProperty(symbols, name)) { - var symbol = symbols[name]; - ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); - if (symbol.flags & meaning) { - return symbol; - } - if (symbol.flags & 4194304 /* Import */) { - var target = resolveImport(symbol); - if (target === unknownSymbol || target.flags & meaning) { - return symbol; - } - } - } - } - function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) { - var errorLocation = location; - var result; - var lastLocation; - var memberWithInitializerThatReferencesIdentifierFromConstructor; - function returnResolvedSymbol(s) { - if (s && memberWithInitializerThatReferencesIdentifierFromConstructor) { - var propertyName = memberWithInitializerThatReferencesIdentifierFromConstructor.name; - error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.identifierToString(propertyName), nameArg); - return undefined; - } - if (!s && nameNotFoundMessage) { - error(errorLocation, nameNotFoundMessage, nameArg); - } - return s; - } - while (location) { - if (location.locals && !isGlobalSourceFile(location)) { - if (result = getSymbol(location.locals, name, meaning)) { - return returnResolvedSymbol(result); - } - } - switch (location.kind) { - case 177 /* SourceFile */: - if (!ts.isExternalModule(location)) - break; - case 172 /* ModuleDeclaration */: - if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & ts.SymbolFlags.ModuleMember)) { - return returnResolvedSymbol(result); - } - break; - case 171 /* EnumDeclaration */: - if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 4 /* EnumMember */)) { - return returnResolvedSymbol(result); - } - break; - case 115 /* Property */: - if (location.parent.kind === 169 /* ClassDeclaration */ && !(location.flags & 64 /* Static */)) { - var ctor = findConstructorDeclaration(location.parent); - if (ctor && ctor.locals) { - if (getSymbol(ctor.locals, name, meaning & ts.SymbolFlags.Value)) { - memberWithInitializerThatReferencesIdentifierFromConstructor = location; - } - } - } - break; - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & ts.SymbolFlags.Type)) { - if (lastLocation && lastLocation.flags & 64 /* Static */) { - error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); - return undefined; - } - else { - return returnResolvedSymbol(result); - } - } - break; - case 116 /* Method */: - case 117 /* Constructor */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 167 /* FunctionDeclaration */: - case 137 /* ArrowFunction */: - if (name === "arguments") { - return returnResolvedSymbol(argumentsSymbol); - } - break; - case 136 /* FunctionExpression */: - if (name === "arguments") { - return returnResolvedSymbol(argumentsSymbol); - } - var id = location.name; - if (id && name === id.text) { - return returnResolvedSymbol(location.symbol); - } - break; - case 163 /* CatchBlock */: - var id = location.variable; - if (name === id.text) { - return returnResolvedSymbol(location.variable.symbol); - } - break; - } - lastLocation = location; - location = location.parent; - } - if (result = getSymbol(globals, name, meaning)) { - return returnResolvedSymbol(result); - } - return returnResolvedSymbol(undefined); - } - function resolveImport(symbol) { - ts.Debug.assert((symbol.flags & 4194304 /* Import */) !== 0, "Should only get Imports here."); - var links = getSymbolLinks(symbol); - if (!links.target) { - links.target = resolvingSymbol; - var node = getDeclarationOfKind(symbol, 174 /* ImportDeclaration */); - var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : resolveEntityName(node, node.entityName, node.entityName.kind === 112 /* QualifiedName */ ? ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace : ts.SymbolFlags.Namespace); - if (links.target === resolvingSymbol) { - links.target = target || unknownSymbol; - } - else { - error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol)); - } - } - else if (links.target === resolvingSymbol) { - links.target = unknownSymbol; - } - return links.target; - } - function getFullyQualifiedName(symbol) { - return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); - } - function resolveEntityName(location, name, meaning) { - if (name.kind === 55 /* Identifier */) { - var symbol = resolveName(location, name.text, meaning, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(name)); - if (!symbol) { - return; - } - } - else if (name.kind === 112 /* QualifiedName */) { - var namespace = resolveEntityName(location, name.left, ts.SymbolFlags.Namespace); - if (!namespace || namespace === unknownSymbol || name.right.kind === 111 /* Missing */) - return; - var symbol = getSymbol(namespace.exports, name.right.text, meaning); - if (!symbol) { - error(location, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.identifierToString(name.right)); - return; - } - } - else { - return; - } - ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); - return symbol.flags & meaning ? symbol : resolveImport(symbol); - } - function isExternalModuleNameRelative(moduleName) { - return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\"; - } - function resolveExternalModuleName(location, moduleLiteral) { - var searchPath = ts.getDirectoryPath(getSourceFile(location).filename); - var moduleName = moduleLiteral.text; - if (!moduleName) - return; - var isRelative = isExternalModuleNameRelative(moduleName); - if (!isRelative) { - var symbol = getSymbol(globals, '"' + moduleName + '"', 128 /* ValueModule */); - if (symbol) { - return getResolvedExportSymbol(symbol); - } - } - while (true) { - var filename = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); - var sourceFile = program.getSourceFile(filename + ".ts") || program.getSourceFile(filename + ".d.ts"); - if (sourceFile || isRelative) - break; - var parentPath = ts.getDirectoryPath(searchPath); - if (parentPath === searchPath) - break; - searchPath = parentPath; - } - if (sourceFile) { - if (sourceFile.symbol) { - return getResolvedExportSymbol(sourceFile.symbol); - } - error(moduleLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.filename); - return; - } - error(moduleLiteral, ts.Diagnostics.Cannot_find_external_module_0, moduleName); - } - function getResolvedExportSymbol(moduleSymbol) { - var symbol = getExportAssignmentSymbol(moduleSymbol); - if (symbol) { - if (symbol.flags & (ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace)) { - return symbol; - } - if (symbol.flags & 4194304 /* Import */) { - return resolveImport(symbol); - } - } - return moduleSymbol; - } - function getExportAssignmentSymbol(symbol) { - checkTypeOfExportAssignmentSymbol(symbol); - return symbol.exportAssignSymbol === unknownSymbol ? undefined : symbol.exportAssignSymbol; - } - function checkTypeOfExportAssignmentSymbol(containerSymbol) { - if (!containerSymbol.exportAssignSymbol) { - var exportInformation = collectExportInformationForSourceFileOrModule(containerSymbol); - if (exportInformation.exportAssignments.length) { - if (exportInformation.exportAssignments.length > 1) { - ts.forEach(exportInformation.exportAssignments, function (node) { return error(node, ts.Diagnostics.A_module_cannot_have_more_than_one_export_assignment); }); - } - var node = exportInformation.exportAssignments[0]; - if (exportInformation.hasExportedMember) { - error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements); - } - if (node.exportName.text) { - var meaning = ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace; - var exportSymbol = resolveName(node, node.exportName.text, meaning, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(node.exportName)); - } - } - containerSymbol.exportAssignSymbol = exportSymbol || unknownSymbol; - } - } - function collectExportInformationForSourceFileOrModule(symbol) { - var seenExportedMember = false; - var result = []; - ts.forEach(symbol.declarations, function (declaration) { - var block = (declaration.kind === 177 /* SourceFile */ ? declaration : declaration.body); - ts.forEach(block.statements, function (node) { - if (node.kind === 175 /* ExportAssignment */) { - result.push(node); - } - else { - seenExportedMember = seenExportedMember || (node.flags & 1 /* Export */) !== 0; - } - }); - }); - return { - hasExportedMember: seenExportedMember, - exportAssignments: result - }; - } - function getMergedSymbol(symbol) { - var merged; - return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol; - } - function getSymbolOfNode(node) { - return getMergedSymbol(node.symbol); - } - function getParentOfSymbol(symbol) { - return getMergedSymbol(symbol.parent); - } - function getExportSymbolOfValueSymbolIfExported(symbol) { - return symbol && (symbol.flags & 524288 /* ExportValue */) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol; - } - function symbolIsValue(symbol) { - if (symbol.flags & ts.SymbolFlags.Value) { - return true; - } - if (symbol.flags & 4194304 /* Import */) { - return (resolveImport(symbol).flags & ts.SymbolFlags.Value) !== 0; - } - if (symbol.flags & 8388608 /* Instantiated */) { - return (getSymbolLinks(symbol).target.flags & ts.SymbolFlags.Value) !== 0; - } - return false; - } - function getDeclarationOfKind(symbol, kind) { - var declarations = symbol.declarations; - for (var i = 0; i < declarations.length; i++) { - var declaration = declarations[i]; - if (declaration.kind === kind) { - return declaration; - } - } - return undefined; - } - function findConstructorDeclaration(node) { - var members = node.members; - for (var i = 0; i < members.length; i++) { - var member = members[i]; - if (member.kind === 117 /* Constructor */ && member.body) { - return member; - } - } - } - function createType(flags) { - var result = new Type(checker, flags); - result.id = typeCount++; - return result; - } - function createIntrinsicType(kind, intrinsicName) { - var type = createType(kind); - type.intrinsicName = intrinsicName; - return type; - } - function createObjectType(kind, symbol) { - var type = createType(kind); - type.symbol = symbol; - return type; - } - function isReservedMemberName(name) { - return name.charCodeAt(0) === 95 /* _ */ && name.charCodeAt(1) === 95 /* _ */ && name.charCodeAt(2) !== 95 /* _ */; - } - function getNamedMembers(members) { - var result; - for (var id in members) { - if (ts.hasProperty(members, id)) { - if (!isReservedMemberName(id)) { - if (!result) - result = []; - var symbol = members[id]; - if (symbolIsValue(symbol)) { - result.push(symbol); - } - } - } - } - return result || emptyArray; - } - function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) { - type.members = members; - type.properties = getNamedMembers(members); - type.callSignatures = callSignatures; - type.constructSignatures = constructSignatures; - if (stringIndexType) - type.stringIndexType = stringIndexType; - if (numberIndexType) - type.numberIndexType = numberIndexType; - return type; - } - function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) { - return setObjectTypeMembers(createObjectType(8192 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType); - } - function isOptionalProperty(propertySymbol) { - if (propertySymbol.flags & 67108864 /* Prototype */) { - return false; - } - return (propertySymbol.valueDeclaration.flags & 4 /* QuestionMark */) && propertySymbol.valueDeclaration.kind !== 114 /* Parameter */; - } - function forEachSymbolTableInScope(enclosingDeclaration, callback) { - var result; - for (var location = enclosingDeclaration; location; location = location.parent) { - if (location.locals && !isGlobalSourceFile(location)) { - if (result = callback(location.locals)) { - return result; - } - } - switch (location.kind) { - case 177 /* SourceFile */: - if (!ts.isExternalModule(location)) { - break; - } - case 172 /* ModuleDeclaration */: - if (result = callback(getSymbolOfNode(location).exports)) { - return result; - } - break; - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - if (result = callback(getSymbolOfNode(location).members)) { - return result; - } - break; - } - } - return callback(globals); - } - function getAccessibleSymbol(symbol, enclosingDeclaration, meaning) { - function getAccessibleSymbolFromSymbolTable(symbols) { - function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { - if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) { - if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { - return true; - } - var accessibleParent = getAccessibleSymbol(symbolFromSymbolTable.parent, enclosingDeclaration, ts.SymbolFlags.Namespace); - return !!accessibleParent; - } - } - if (isAccessible(symbols[symbol.name])) { - return symbol; - } - return ts.forEachValue(symbols, function (symbolFromSymbolTable) { - if (symbolFromSymbolTable.flags & 4194304 /* Import */) { - if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { - return symbolFromSymbolTable; - } - } - }); - } - if (symbol) { - return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolFromSymbolTable); - } - } - function needsQualification(symbol, enclosingDeclaration, meaning) { - var qualify = false; - forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) { - if (!symbolTable[symbol.name]) { - return false; - } - var symbolFromSymbolTable = symbolTable[symbol.name]; - if (symbolFromSymbolTable === symbol) { - return true; - } - symbolFromSymbolTable = (symbolFromSymbolTable.flags & 4194304 /* Import */) ? resolveImport(symbolFromSymbolTable) : symbolFromSymbolTable; - if (symbolFromSymbolTable.flags & meaning) { - qualify = true; - return true; - } - return false; - }); - return qualify; - } - function symbolToString(symbol, enclosingDeclaration, meaning) { - function getSymbolName(symbol) { - if (symbol.declarations && symbol.declarations.length > 0) { - var declaration = symbol.declarations[0]; - if (declaration.name) { - return ts.identifierToString(declaration.name); - } - } - return symbol.name; - } - if (enclosingDeclaration && !(symbol.flags & ts.SymbolFlags.PropertyOrAccessor & ts.SymbolFlags.Signature & 4096 /* Constructor */ & 2048 /* Method */ & 262144 /* TypeParameter */)) { - var symbolName; - while (symbol) { - var isFirstName = !symbolName; - var meaningToLook = isFirstName ? meaning : ts.SymbolFlags.Namespace; - var accessibleSymbol = getAccessibleSymbol(symbol, enclosingDeclaration, meaningToLook); - symbolName = getSymbolName(accessibleSymbol || symbol) + (isFirstName ? "" : ("." + symbolName)); - if (accessibleSymbol && !needsQualification(accessibleSymbol, enclosingDeclaration, meaningToLook)) { - break; - } - symbol = accessibleSymbol ? accessibleSymbol.parent : symbol.parent; - } - return symbolName; - } - return getSymbolName(symbol); - } - function createSingleLineTextWriter() { - var result = ""; - return { - write: function (s) { - result += s; - }, - writeLine: function () { - result += " "; - }, - increaseIndent: function () { - }, - decreaseIndent: function () { - }, - getText: function () { - return result; - } - }; - } - function typeToString(type, flags) { - var stringWriter = createSingleLineTextWriter(); - writeTypeToTextWriter(type, null, flags, stringWriter); - return stringWriter.getText(); - } - function writeTypeToTextWriter(type, enclosingDeclaration, flags, writer) { - var typeStack; - return writeType(type, true); - function writeType(type, allowFunctionOrConstructorTypeLiteral) { - if (type.flags & ts.TypeFlags.Intrinsic) { - writer.write(type.intrinsicName); - } - else if (type.flags & 4096 /* Reference */) { - writeTypeReference(type); - } - else if (type.flags & (1024 /* Class */ | 2048 /* Interface */ | 128 /* Enum */ | 512 /* TypeParameter */)) { - writer.write(symbolToString(type.symbol, enclosingDeclaration, ts.SymbolFlags.Type)); - } - else if (type.flags & 8192 /* Anonymous */) { - writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral); - } - else if (type.flags & 256 /* StringLiteral */) { - writer.write(type.text); - } - else { - writer.write("{ ... }"); - } - } - function writeTypeReference(type) { - if (type.target === globalArrayType && !(flags & 1 /* WriteArrayAsGenericType */)) { - writeType(type.typeArguments[0], false); - writer.write("[]"); - } - else { - writer.write(symbolToString(type.target.symbol, enclosingDeclaration, ts.SymbolFlags.Type)); - writer.write("<"); - for (var i = 0; i < type.typeArguments.length; i++) { - if (i > 0) { - writer.write(", "); - } - writeType(type.typeArguments[i], true); - } - writer.write(">"); - } - } - function writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral) { - if (type.symbol && type.symbol.flags & (16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { - writeTypeofSymbol(type); - } - else if (type.symbol && type.symbol.flags & (8 /* Function */ | 2048 /* Method */) && typeStack && ts.contains(typeStack, type)) { - writeTypeofSymbol(type); - } - else { - if (!typeStack) { - typeStack = []; - } - typeStack.push(type); - writeLiteralType(type, allowFunctionOrConstructorTypeLiteral); - typeStack.pop(); - } - } - function writeTypeofSymbol(type) { - writer.write("typeof "); - writer.write(symbolToString(type.symbol, enclosingDeclaration, ts.SymbolFlags.Value)); - } - function writeLiteralType(type, allowFunctionOrConstructorTypeLiteral) { - var resolved = resolveObjectTypeMembers(type); - if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) { - if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { - writer.write("{}"); - return; - } - if (allowFunctionOrConstructorTypeLiteral) { - if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { - writeSignature(resolved.callSignatures[0], true); - return; - } - if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { - writer.write("new "); - writeSignature(resolved.constructSignatures[0], true); - return; - } - } - } - writer.write("{"); - writer.writeLine(); - writer.increaseIndent(); - for (var i = 0; i < resolved.callSignatures.length; i++) { - writeSignature(resolved.callSignatures[i]); - writer.write(";"); - writer.writeLine(); - } - for (var i = 0; i < resolved.constructSignatures.length; i++) { - writer.write("new "); - writeSignature(resolved.constructSignatures[i]); - writer.write(";"); - writer.writeLine(); - } - if (resolved.stringIndexType) { - writer.write("[x: string]: "); - writeType(resolved.stringIndexType, true); - writer.write(";"); - writer.writeLine(); - } - if (resolved.numberIndexType) { - writer.write("[x: number]: "); - writeType(resolved.numberIndexType, true); - writer.write(";"); - writer.writeLine(); - } - for (var i = 0; i < resolved.properties.length; i++) { - var p = resolved.properties[i]; - var t = getTypeOfSymbol(p); - if (p.flags & (8 /* Function */ | 2048 /* Method */) && !getPropertiesOfType(t).length) { - var signatures = getSignaturesOfType(t, 0 /* Call */); - for (var j = 0; j < signatures.length; j++) { - writer.write(symbolToString(p)); - if (isOptionalProperty(p)) { - writer.write("?"); - } - writeSignature(signatures[j]); - writer.write(";"); - writer.writeLine(); - } - } - else { - writer.write(symbolToString(p)); - if (isOptionalProperty(p)) { - writer.write("?"); - } - writer.write(": "); - writeType(t, true); - writer.write(";"); - writer.writeLine(); - } - } - writer.decreaseIndent(); - writer.write("}"); - } - function writeSignature(signature, arrowStyle) { - if (signature.typeParameters) { - writer.write("<"); - for (var i = 0; i < signature.typeParameters.length; i++) { - if (i > 0) { - writer.write(", "); - } - var tp = signature.typeParameters[i]; - writer.write(symbolToString(tp.symbol)); - var constraint = getConstraintOfTypeParameter(tp); - if (constraint) { - writer.write(" extends "); - writeType(constraint, true); - } - } - writer.write(">"); - } - writer.write("("); - for (var i = 0; i < signature.parameters.length; i++) { - if (i > 0) { - writer.write(", "); - } - var p = signature.parameters[i]; - if (getDeclarationFlagsFromSymbol(p) & 8 /* Rest */) { - writer.write("..."); - } - writer.write(symbolToString(p)); - if (p.valueDeclaration.flags & 4 /* QuestionMark */ || p.valueDeclaration.initializer) { - writer.write("?"); - } - writer.write(": "); - writeType(getTypeOfSymbol(p), true); - } - writer.write(arrowStyle ? ") => " : "): "); - writeType(getReturnTypeOfSignature(signature), true); - } - } - function isDeclarationVisible(node) { - function getContainingExternalModule(node) { - for (; node; node = node.parent) { - if (node.kind === 172 /* ModuleDeclaration */) { - if (node.name.kind === 3 /* StringLiteral */) { - return node; - } - } - else if (node.kind === 177 /* SourceFile */) { - return ts.isExternalModule(node) ? node : undefined; - } - } - ts.Debug.fail("getContainingModule cant reach here"); - } - function isUsedInExportAssignment(node) { - var externalModule = getContainingExternalModule(node); - if (externalModule) { - var externalModuleSymbol = getSymbolOfNode(externalModule); - var exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol); - var symbolOfNode = getSymbolOfNode(node); - if (exportAssignmentSymbol === symbolOfNode) { - return true; - } - if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 4194304 /* Import */)) { - var resolvedExportSymbol = resolveImport(exportAssignmentSymbol); - if (resolvedExportSymbol === symbolOfNode) { - return true; - } - return ts.forEach(resolvedExportSymbol.declarations, function (declaration) { - while (declaration) { - if (declaration === node) { - return true; - } - declaration = declaration.parent; - } - }); - } - } - } - function determineIfDeclarationIsVisible() { - switch (node.kind) { - case 166 /* VariableDeclaration */: - if (!(node.flags & 1 /* Export */)) { - return isGlobalSourceFile(node.parent.parent) || isUsedInExportAssignment(node); - } - return isDeclarationVisible(node.parent.parent); - case 172 /* ModuleDeclaration */: - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - case 167 /* FunctionDeclaration */: - case 171 /* EnumDeclaration */: - case 174 /* ImportDeclaration */: - if (!(node.flags & 1 /* Export */)) { - return isGlobalSourceFile(node.parent) || isUsedInExportAssignment(node); - } - return isDeclarationVisible(node.parent); - case 115 /* Property */: - case 116 /* Method */: - if (node.flags & 32 /* Private */) { - return false; - } - case 117 /* Constructor */: - case 121 /* ConstructSignature */: - case 120 /* CallSignature */: - case 122 /* IndexSignature */: - case 114 /* Parameter */: - case 173 /* ModuleBlock */: - return isDeclarationVisible(node.parent); - case 177 /* SourceFile */: - return true; - default: - ts.Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + ts.SyntaxKind[node.kind]); - } - } - if (node) { - var links = getNodeLinks(node); - if (links.isVisible === undefined) { - links.isVisible = determineIfDeclarationIsVisible(); - } - return links.isVisible; - } - } - function getApparentType(type) { - if (type.flags & 512 /* TypeParameter */) { - do { - type = getConstraintOfTypeParameter(type); - } while (type && type.flags & 512 /* TypeParameter */); - if (!type) - type = emptyObjectType; - } - if (type.flags & ts.TypeFlags.StringLike) { - type = globalStringType; - } - else if (type.flags & ts.TypeFlags.NumberLike) { - type = globalNumberType; - } - else if (type.flags & 8 /* Boolean */) { - type = globalBooleanType; - } - return type; - } - function getTypeOfPrototypeProperty(prototype) { - var classType = getDeclaredTypeOfSymbol(prototype.parent); - return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType; - } - function getTypeOfVariableDeclaration(declaration) { - var type; - if (declaration.parent.kind === 163 /* CatchBlock */ || declaration.parent.kind === 151 /* ForInStatement */) { - type = anyType; - } - else if (declaration.type) { - type = getTypeFromTypeNode(declaration.type); - } - else { - if (declaration.kind === 114 /* Parameter */ && declaration.parent.kind === 119 /* SetAccessor */) { - var getter = getDeclarationOfKind(declaration.parent.symbol, 118 /* GetAccessor */); - if (getter) { - type = getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); - } - } - var unwidenedType; - if (!type) { - if (declaration.initializer) { - unwidenedType = checkAndMarkExpression(declaration.initializer); - type = getWidenedType(unwidenedType); - } - else if (declaration.flags & 8 /* Rest */) { - type = createArrayType(anyType); - } - else { - type = anyType; - } - } - if (program.getCompilerOptions().noImplicitAny && shouldReportNoImplicitAnyOnVariableOrParameterOrProperty(declaration, type, unwidenedType)) { - reportNoImplicitAnyOnVariableOrParameterOrProperty(declaration, type); - } - } - return type; - function shouldReportNoImplicitAnyOnVariableOrParameterOrProperty(declaration, type, unwidenedType) { - if (type === unwidenedType) { - return false; - } - if (getInnermostTypeOfNestedArrayTypes(type) !== anyType) { - return false; - } - if (isPrivateWithinAmbient(declaration) || (declaration.kind === 114 /* Parameter */ && isPrivateWithinAmbient(declaration.parent))) { - return false; - } - return true; - } - function reportNoImplicitAnyOnVariableOrParameterOrProperty(declaration, type) { - var varName = ts.identifierToString(declaration.name); - var typeName = typeToString(type); - switch (declaration.kind) { - case 166 /* VariableDeclaration */: - error(declaration, ts.Diagnostics.Variable_0_implicitly_has_an_1_type, varName, typeName); - break; - case 115 /* Property */: - error(declaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, varName, typeName); - break; - case 114 /* Parameter */: - var funcDeclaration = declaration.parent; - if (declaration.flags & 8 /* Rest */) { - error(declaration, ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type, varName); - } - else { - error(declaration, ts.Diagnostics.Parameter_0_implicitly_has_an_1_type, varName, typeName); - } - break; - default: - ts.Debug.fail("Received a '" + ts.SyntaxKind[declaration.kind] + "', but expected '" + ts.SyntaxKind[166 /* VariableDeclaration */] + "', '" + ts.SyntaxKind[115 /* Property */] + "', or '" + ts.SyntaxKind[114 /* Parameter */] + "'.\r\n"); - } - } - } - function getTypeOfVariableOrParameterOrProperty(symbol) { - var links = getSymbolLinks(symbol); - if (!links.type) { - if (symbol.flags & 67108864 /* Prototype */) { - links.type = getTypeOfPrototypeProperty(symbol); - } - else { - links.type = resolvingType; - var type = getTypeOfVariableDeclaration(symbol.valueDeclaration); - if (links.type === resolvingType) { - links.type = type; - } - } - } - else if (links.type === resolvingType) { - links.type = anyType; - } - return links.type; - } - function getSetAccessorTypeAnnotationNode(accessor) { - return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type; - } - function getAnnotatedAccessorType(accessor) { - if (accessor) { - if (accessor.kind === 118 /* GetAccessor */) { - return accessor.type && getTypeFromTypeNode(accessor.type); - } - else { - var setterTypeAnnotation = getSetAccessorTypeAnnotationNode(accessor); - return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation); - } - } - return undefined; - } - function getTypeOfAccessors(symbol) { - var links = getSymbolLinks(symbol); - checkAndStoreTypeOfAccessors(symbol, links); - return links.type; - } - function checkAndStoreTypeOfAccessors(symbol, links) { - links = links || getSymbolLinks(symbol); - if (!links.type) { - links.type = resolvingType; - var getter = getDeclarationOfKind(symbol, 118 /* GetAccessor */); - var setter = getDeclarationOfKind(symbol, 119 /* SetAccessor */); - var type; - var getterReturnType = getAnnotatedAccessorType(getter); - if (getterReturnType) { - type = getterReturnType; - } - else { - var setterParameterType = getAnnotatedAccessorType(setter); - if (setterParameterType) { - type = setterParameterType; - } - else { - if (getter) { - type = getReturnTypeFromBody(getter); - } - else { - if (program.getCompilerOptions().noImplicitAny) { - error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbol.name); - } - type = anyType; - } - } - } - if (links.type === resolvingType) { - links.type = type; - } - } - else if (links.type === resolvingType) { - links.type = anyType; - } - } - function getTypeOfFuncClassEnumModule(symbol) { - var links = getSymbolLinks(symbol); - if (!links.type) { - var type = links.type = createObjectType(8192 /* Anonymous */, symbol); - } - return links.type; - } - function getTypeOfEnumMember(symbol) { - var links = getSymbolLinks(symbol); - if (!links.type) { - links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol)); - } - return links.type; - } - function getTypeOfImport(symbol) { - var links = getSymbolLinks(symbol); - if (!links.type) { - links.type = getTypeOfSymbol(resolveImport(symbol)); - } - return links.type; - } - function getTypeOfInstantiatedSymbol(symbol) { - var links = getSymbolLinks(symbol); - if (!links.type) { - links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper); - } - return links.type; - } - function getTypeOfSymbol(symbol) { - if (symbol.flags & (1 /* Variable */ | 2 /* Property */)) { - return getTypeOfVariableOrParameterOrProperty(symbol); - } - if (symbol.flags & (8 /* Function */ | 2048 /* Method */ | 16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { - return getTypeOfFuncClassEnumModule(symbol); - } - if (symbol.flags & 4 /* EnumMember */) { - return getTypeOfEnumMember(symbol); - } - if (symbol.flags & ts.SymbolFlags.Accessor) { - return getTypeOfAccessors(symbol); - } - if (symbol.flags & 4194304 /* Import */) { - return getTypeOfImport(symbol); - } - if (symbol.flags & 8388608 /* Instantiated */) { - return getTypeOfInstantiatedSymbol(symbol); - } - return unknownType; - } - function getTargetType(type) { - return type.flags & 4096 /* Reference */ ? type.target : type; - } - function hasBaseType(type, checkBase) { - return check(type); - function check(type) { - var target = getTargetType(type); - return target === checkBase || ts.forEach(target.baseTypes, check); - } - } - function getTypeParametersOfClassOrInterface(symbol) { - var result; - ts.forEach(symbol.declarations, function (node) { - if (node.kind === 170 /* InterfaceDeclaration */ || node.kind === 169 /* ClassDeclaration */) { - var declaration = node; - if (declaration.typeParameters && declaration.typeParameters.length) { - ts.forEach(declaration.typeParameters, function (node) { - var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node)); - if (!result) { - result = [tp]; - } - else if (!ts.contains(result, tp)) { - result.push(tp); - } - }); - } - } - }); - return result; - } - function getDeclaredTypeOfClass(symbol) { - var links = getSymbolLinks(symbol); - if (!links.declaredType) { - var type = links.declaredType = createObjectType(1024 /* Class */, symbol); - var typeParameters = getTypeParametersOfClassOrInterface(symbol); - if (typeParameters) { - type.flags |= 4096 /* Reference */; - type.typeParameters = typeParameters; - type.instantiations = {}; - type.instantiations[getTypeListId(type.typeParameters)] = type; - type.target = type; - type.typeArguments = type.typeParameters; - } - type.baseTypes = []; - var declaration = getDeclarationOfKind(symbol, 169 /* ClassDeclaration */); - if (declaration.baseType) { - var baseType = getTypeFromTypeReferenceNode(declaration.baseType); - if (baseType !== unknownType) { - if (getTargetType(baseType).flags & 1024 /* Class */) { - if (type !== baseType && !hasBaseType(baseType, type)) { - type.baseTypes.push(baseType); - } - else { - error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, 1 /* WriteArrayAsGenericType */)); - } - } - else { - error(declaration.baseType, ts.Diagnostics.A_class_may_only_extend_another_class); - } - } - } - type.declaredProperties = getNamedMembers(symbol.members); - type.declaredCallSignatures = emptyArray; - type.declaredConstructSignatures = emptyArray; - type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); - type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); - } - return links.declaredType; - } - function getDeclaredTypeOfInterface(symbol) { - var links = getSymbolLinks(symbol); - if (!links.declaredType) { - var type = links.declaredType = createObjectType(2048 /* Interface */, symbol); - var typeParameters = getTypeParametersOfClassOrInterface(symbol); - if (typeParameters) { - type.flags |= 4096 /* Reference */; - type.typeParameters = typeParameters; - type.instantiations = {}; - type.instantiations[getTypeListId(type.typeParameters)] = type; - type.target = type; - type.typeArguments = type.typeParameters; - } - type.baseTypes = []; - ts.forEach(symbol.declarations, function (declaration) { - if (declaration.kind === 170 /* InterfaceDeclaration */ && declaration.baseTypes) { - ts.forEach(declaration.baseTypes, function (node) { - var baseType = getTypeFromTypeReferenceNode(node); - if (baseType !== unknownType) { - if (getTargetType(baseType).flags & (1024 /* Class */ | 2048 /* Interface */)) { - if (type !== baseType && !hasBaseType(baseType, type)) { - type.baseTypes.push(baseType); - } - else { - error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, 1 /* WriteArrayAsGenericType */)); - } - } - else { - error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface); - } - } - }); - } - }); - type.declaredProperties = getNamedMembers(symbol.members); - type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]); - type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]); - type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); - type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); - } - return links.declaredType; - } - function getDeclaredTypeOfEnum(symbol) { - var links = getSymbolLinks(symbol); - if (!links.declaredType) { - var type = createType(128 /* Enum */); - type.symbol = symbol; - links.declaredType = type; - } - return links.declaredType; - } - function getDeclaredTypeOfTypeParameter(symbol) { - var links = getSymbolLinks(symbol); - if (!links.declaredType) { - var type = createType(512 /* TypeParameter */); - type.symbol = symbol; - if (!getDeclarationOfKind(symbol, 113 /* TypeParameter */).constraint) { - type.constraint = noConstraintType; - } - links.declaredType = type; - } - return links.declaredType; - } - function getDeclaredTypeOfImport(symbol) { - var links = getSymbolLinks(symbol); - if (!links.declaredType) { - links.declaredType = getDeclaredTypeOfSymbol(resolveImport(symbol)); - } - return links.declaredType; - } - function getDeclaredTypeOfSymbol(symbol) { - if (symbol.flags & 16 /* Class */) { - return getDeclaredTypeOfClass(symbol); - } - if (symbol.flags & 32 /* Interface */) { - return getDeclaredTypeOfInterface(symbol); - } - if (symbol.flags & 64 /* Enum */) { - return getDeclaredTypeOfEnum(symbol); - } - if (symbol.flags & 262144 /* TypeParameter */) { - return getDeclaredTypeOfTypeParameter(symbol); - } - if (symbol.flags & 4194304 /* Import */) { - return getDeclaredTypeOfImport(symbol); - } - ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0); - return unknownType; - } - function createSymbolTable(symbols) { - var result = {}; - for (var i = 0; i < symbols.length; i++) { - var symbol = symbols[i]; - result[symbol.name] = symbol; - } - return result; - } - function createInstantiatedSymbolTable(symbols, mapper) { - var result = {}; - for (var i = 0; i < symbols.length; i++) { - var symbol = symbols[i]; - result[symbol.name] = instantiateSymbol(symbol, mapper); - } - return result; - } - function addInheritedMembers(symbols, baseSymbols) { - for (var i = 0; i < baseSymbols.length; i++) { - var s = baseSymbols[i]; - if (!ts.hasProperty(symbols, s.name)) { - symbols[s.name] = s; - } - } - } - function addInheritedSignatures(signatures, baseSignatures) { - if (baseSignatures) { - for (var i = 0; i < baseSignatures.length; i++) { - signatures.push(baseSignatures[i]); - } - } - } - function resolveClassOrInterfaceMembers(type) { - var members = type.symbol.members; - var callSignatures = type.declaredCallSignatures; - var constructSignatures = type.declaredConstructSignatures; - var stringIndexType = type.declaredStringIndexType; - var numberIndexType = type.declaredNumberIndexType; - if (type.baseTypes.length) { - members = createSymbolTable(type.declaredProperties); - ts.forEach(type.baseTypes, function (baseType) { - addInheritedMembers(members, getPropertiesOfType(baseType)); - callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0 /* Call */)); - constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1 /* Construct */)); - stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0 /* String */); - numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1 /* Number */); - }); - } - setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); - } - function resolveTypeReferenceMembers(type) { - var target = type.target; - var mapper = createTypeMapper(target.typeParameters, type.typeArguments); - var members = createInstantiatedSymbolTable(target.declaredProperties, mapper); - var callSignatures = instantiateList(target.declaredCallSignatures, mapper, instantiateSignature); - var constructSignatures = instantiateList(target.declaredConstructSignatures, mapper, instantiateSignature); - var stringIndexType = target.declaredStringIndexType ? instantiateType(target.declaredStringIndexType, mapper) : undefined; - var numberIndexType = target.declaredNumberIndexType ? instantiateType(target.declaredNumberIndexType, mapper) : undefined; - ts.forEach(target.baseTypes, function (baseType) { - var instantiatedBaseType = instantiateType(baseType, mapper); - addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType)); - callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */)); - constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */)); - stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0 /* String */); - numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1 /* Number */); - }); - setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); - } - function createSignature(declaration, typeParameters, parameters, resolvedReturnType, minArgumentCount, hasRestParameter, hasStringLiterals) { - var sig = new Signature(checker); - sig.declaration = declaration; - sig.typeParameters = typeParameters; - sig.parameters = parameters; - sig.resolvedReturnType = resolvedReturnType; - sig.minArgumentCount = minArgumentCount; - sig.hasRestParameter = hasRestParameter; - sig.hasStringLiterals = hasStringLiterals; - return sig; - } - function cloneSignature(sig) { - return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); - } - function getDefaultConstructSignatures(classType) { - if (classType.baseTypes.length) { - var baseType = classType.baseTypes[0]; - var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1 /* Construct */); - return ts.map(baseSignatures, function (baseSignature) { - var signature = baseType.flags & 4096 /* Reference */ ? getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature); - signature.typeParameters = classType.typeParameters; - signature.resolvedReturnType = classType; - return signature; - }); - } - return [createSignature(undefined, classType.typeParameters, emptyArray, classType, 0, false, false)]; - } - function resolveAnonymousTypeMembers(type) { - var symbol = type.symbol; - var members = emptySymbols; - var callSignatures = emptyArray; - var constructSignatures = emptyArray; - if (symbol.flags & ts.SymbolFlags.HasExports) { - members = symbol.exports; - } - if (symbol.flags & (8 /* Function */ | 2048 /* Method */)) { - callSignatures = getSignaturesOfSymbol(symbol); - } - if (symbol.flags & 16 /* Class */) { - var classType = getDeclaredTypeOfClass(symbol); - constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]); - if (!constructSignatures.length) - constructSignatures = getDefaultConstructSignatures(classType); - if (classType.baseTypes.length) { - var members = createSymbolTable(getNamedMembers(members)); - addInheritedMembers(members, getPropertiesOfType(getTypeOfSymbol(classType.baseTypes[0].symbol))); - } - } - var numberIndexType = (symbol.flags & 64 /* Enum */) ? stringType : undefined; - setObjectTypeMembers(type, members, callSignatures, constructSignatures, undefined, numberIndexType); - } - function resolveObjectTypeMembers(type) { - if (!type.members) { - if (type.flags & (1024 /* Class */ | 2048 /* Interface */)) { - resolveClassOrInterfaceMembers(type); - } - else if (type.flags & 8192 /* Anonymous */) { - resolveAnonymousTypeMembers(type); - } - else { - resolveTypeReferenceMembers(type); - } - } - return type; - } - function getPropertiesOfType(type) { - if (type.flags & ts.TypeFlags.ObjectType) { - return resolveObjectTypeMembers(type).properties; - } - return emptyArray; - } - function getPropertyOfType(type, name) { - if (type.flags & ts.TypeFlags.ObjectType) { - var resolved = resolveObjectTypeMembers(type); - if (ts.hasProperty(resolved.members, name)) { - var symbol = resolved.members[name]; - if (symbolIsValue(symbol)) { - return symbol; - } - } - } - } - function getPropertyOfApparentType(type, name) { - if (type.flags & ts.TypeFlags.ObjectType) { - var resolved = resolveObjectTypeMembers(type); - if (ts.hasProperty(resolved.members, name)) { - var symbol = resolved.members[name]; - if (symbolIsValue(symbol)) { - return symbol; - } - } - if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { - var symbol = getPropertyOfType(globalFunctionType, name); - if (symbol) - return symbol; - } - return getPropertyOfType(globalObjectType, name); - } - } - function getSignaturesOfType(type, kind) { - if (type.flags & ts.TypeFlags.ObjectType) { - var resolved = resolveObjectTypeMembers(type); - return kind === 0 /* Call */ ? resolved.callSignatures : resolved.constructSignatures; - } - return emptyArray; - } - function getIndexTypeOfType(type, kind) { - if (type.flags & ts.TypeFlags.ObjectType) { - var resolved = resolveObjectTypeMembers(type); - return kind === 0 /* String */ ? resolved.stringIndexType : resolved.numberIndexType; - } - } - function getTypeParametersFromDeclaration(typeParameterDeclarations) { - var result = []; - ts.forEach(typeParameterDeclarations, function (node) { - var tp = getDeclaredTypeOfTypeParameter(node.symbol); - if (!ts.contains(result, tp)) { - result.push(tp); - } - }); - return result; - } - function getSignatureFromDeclaration(declaration) { - var links = getNodeLinks(declaration); - if (!links.resolvedSignature) { - var classType = declaration.kind === 117 /* Constructor */ ? getDeclaredTypeOfClass(declaration.parent.symbol) : undefined; - var typeParameters = classType ? classType.typeParameters : declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined; - var parameters = []; - var hasStringLiterals = false; - var minArgumentCount = -1; - for (var i = 0, n = declaration.parameters.length; i < n; i++) { - var param = declaration.parameters[i]; - parameters.push(param.symbol); - if (param.type && param.type.kind === 3 /* StringLiteral */) { - hasStringLiterals = true; - } - if (minArgumentCount < 0) { - if (param.initializer || param.flags & (4 /* QuestionMark */ | 8 /* Rest */)) { - minArgumentCount = i; - } - } - } - if (minArgumentCount < 0) { - minArgumentCount = declaration.parameters.length; - } - var returnType; - if (classType) { - returnType = classType; - } - else if (declaration.type) { - returnType = getTypeFromTypeNode(declaration.type); - } - else { - if (declaration.kind === 118 /* GetAccessor */) { - var setter = getDeclarationOfKind(declaration.symbol, 119 /* SetAccessor */); - returnType = getAnnotatedAccessorType(setter); - } - if (!returnType && !declaration.body) { - returnType = anyType; - } - } - links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, minArgumentCount, ts.hasRestParameters(declaration), hasStringLiterals); - } - return links.resolvedSignature; - } - function getSignaturesOfSymbol(symbol) { - if (!symbol) - return emptyArray; - var result = []; - for (var i = 0, len = symbol.declarations.length; i < len; i++) { - var node = symbol.declarations[i]; - switch (node.kind) { - case 167 /* FunctionDeclaration */: - case 116 /* Method */: - case 117 /* Constructor */: - case 120 /* CallSignature */: - case 121 /* ConstructSignature */: - case 122 /* IndexSignature */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 136 /* FunctionExpression */: - case 137 /* ArrowFunction */: - if (i > 0 && node.body) { - var previous = symbol.declarations[i - 1]; - if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) { - break; - } - } - result.push(getSignatureFromDeclaration(node)); - } - } - return result; - } - function getReturnTypeOfSignature(signature) { - if (!signature.resolvedReturnType) { - signature.resolvedReturnType = resolvingType; - if (signature.target) { - var type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper); - } - else { - var type = getReturnTypeFromBody(signature.declaration); - } - if (signature.resolvedReturnType === resolvingType) { - signature.resolvedReturnType = type; - } - } - else if (signature.resolvedReturnType === resolvingType) { - signature.resolvedReturnType = anyType; - } - return signature.resolvedReturnType; - } - function getRestTypeOfSignature(signature) { - if (signature.hasRestParameter) { - var type = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); - if (type.flags & 4096 /* Reference */ && type.target === globalArrayType) { - return type.typeArguments[0]; - } - } - return anyType; - } - function getSignatureInstantiation(signature, typeArguments) { - return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true); - } - function getErasedSignature(signature) { - if (!signature.typeParameters) - return signature; - if (!signature.erasedSignatureCache) { - if (signature.target) { - signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); - } - else { - signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); - } - } - return signature.erasedSignatureCache; - } - function getOrCreateTypeFromSignature(signature) { - if (!signature.isolatedSignatureType) { - var isConstructor = signature.declaration.kind === 117 /* Constructor */ || signature.declaration.kind === 121 /* ConstructSignature */; - var type = createObjectType(8192 /* Anonymous */ | 16384 /* FromSignature */); - type.members = emptySymbols; - type.properties = emptyArray; - type.callSignatures = !isConstructor ? [signature] : emptyArray; - type.constructSignatures = isConstructor ? [signature] : emptyArray; - signature.isolatedSignatureType = type; - } - return signature.isolatedSignatureType; - } - function getIndexSymbol(symbol) { - return symbol.members["__index"]; - } - function getIndexDeclarationOfSymbol(symbol, kind) { - var syntaxKind = kind === 1 /* Number */ ? 108 /* NumberKeyword */ : 110 /* StringKeyword */; - var indexSymbol = getIndexSymbol(symbol); - if (indexSymbol) { - var len = indexSymbol.declarations.length; - for (var i = 0; i < len; i++) { - var node = indexSymbol.declarations[i]; - if (node.parameters.length === 1) { - var parameter = node.parameters[0]; - if (parameter && parameter.type && parameter.type.kind === syntaxKind) { - return node; - } - } - } - } - return undefined; - } - function getIndexTypeOfSymbol(symbol, kind) { - var declaration = getIndexDeclarationOfSymbol(symbol, kind); - return declaration ? declaration.type ? getTypeFromTypeNode(declaration.type) : anyType : undefined; - } - function getConstraintOfTypeParameter(type) { - if (!type.constraint) { - if (type.target) { - var targetConstraint = getConstraintOfTypeParameter(type.target); - type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType; - } - else { - type.constraint = getTypeFromTypeNode(getDeclarationOfKind(type.symbol, 113 /* TypeParameter */).constraint); - } - } - return type.constraint === noConstraintType ? undefined : type.constraint; - } - function getTypeListId(types) { - switch (types.length) { - case 1: - return "" + types[0].id; - case 2: - return types[0].id + "," + types[1].id; - default: - var result = ""; - for (var i = 0; i < types.length; i++) { - if (i > 0) - result += ","; - result += types[i].id; - } - return result; - } - } - function createTypeReference(target, typeArguments) { - var id = getTypeListId(typeArguments); - var type = target.instantiations[id]; - if (!type) { - type = target.instantiations[id] = createObjectType(4096 /* Reference */, target.symbol); - type.target = target; - type.typeArguments = typeArguments; - } - return type; - } - function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode, typeParameterSymbol) { - var links = getNodeLinks(typeReferenceNode); - if (links.isIllegalTypeReferenceInConstraint !== undefined) { - return links.isIllegalTypeReferenceInConstraint; - } - var currentNode = typeReferenceNode; - while (!ts.forEach(typeParameterSymbol.declarations, function (d) { return d.parent === currentNode.parent; })) { - currentNode = currentNode.parent; - } - links.isIllegalTypeReferenceInConstraint = currentNode.kind === 113 /* TypeParameter */; - return links.isIllegalTypeReferenceInConstraint; - } - function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) { - var typeParameterSymbol; - function check(n) { - if (n.kind === 123 /* TypeReference */ && n.typeName.kind === 55 /* Identifier */) { - var links = getNodeLinks(n); - if (links.isIllegalTypeReferenceInConstraint === undefined) { - var symbol = resolveName(typeParameter, n.typeName.text, ts.SymbolFlags.Type, undefined, undefined); - if (symbol && (symbol.flags & 262144 /* TypeParameter */)) { - links.isIllegalTypeReferenceInConstraint = ts.forEach(symbol.declarations, function (d) { return d.parent == typeParameter.parent; }); - } - } - if (links.isIllegalTypeReferenceInConstraint) { - error(typeParameter, ts.Diagnostics.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list); - } - } - ts.forEachChild(n, check); - } - if (typeParameter.constraint) { - typeParameterSymbol = getSymbolOfNode(typeParameter); - check(typeParameter.constraint); - } - } - function getTypeFromTypeReferenceNode(node) { - var links = getNodeLinks(node); - if (!links.resolvedType) { - var symbol = resolveEntityName(node, node.typeName, ts.SymbolFlags.Type); - if (symbol) { - var type; - if ((symbol.flags & 262144 /* TypeParameter */) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) { - type = unknownType; - } - else { - type = getDeclaredTypeOfSymbol(symbol); - if (type.flags & (1024 /* Class */ | 2048 /* Interface */) && type.flags & 4096 /* Reference */) { - var typeParameters = type.typeParameters; - if (node.typeArguments && node.typeArguments.length === typeParameters.length) { - type = createTypeReference(type, ts.map(node.typeArguments, function (t) { return getTypeFromTypeNode(t); })); - } - else { - error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, 1 /* WriteArrayAsGenericType */), typeParameters.length); - type = undefined; - } - } - else { - if (node.typeArguments) { - error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type)); - type = undefined; - } - } - } - } - links.resolvedType = type || unknownType; - } - return links.resolvedType; - } - function getTypeFromTypeQueryNode(node) { - var links = getNodeLinks(node); - if (!links.resolvedType) { - links.resolvedType = getWidenedType(checkExpression(node.exprName)); - } - return links.resolvedType; - } - function getGlobalType(name, arity) { - if (arity === void 0) { arity = 0; } - function getTypeDeclaration(symbol) { - var declarations = symbol.declarations; - for (var i = 0; i < declarations.length; i++) { - var declaration = declarations[i]; - switch (declaration.kind) { - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - case 171 /* EnumDeclaration */: - case 125 /* TypeLiteral */: - case 167 /* FunctionDeclaration */: - return declaration; - } - } - } - var symbol = resolveName(undefined, name, ts.SymbolFlags.Type, ts.Diagnostics.Cannot_find_global_type_0, name); - if (!symbol) { - return emptyObjectType; - } - var type = getDeclaredTypeOfSymbol(symbol); - if (!(type.flags & ts.TypeFlags.ObjectType)) { - error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, name); - return emptyObjectType; - } - if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) { - error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, name, arity); - return emptyObjectType; - } - return type; - } - function createArrayType(elementType, arrayType) { - var rootType = globalArrayType || arrayType; - return rootType !== emptyObjectType ? createTypeReference(rootType, [elementType]) : emptyObjectType; - } - function getTypeFromArrayTypeNode(node) { - var links = getNodeLinks(node); - if (!links.resolvedType) { - var arrayType = globalArrayType; - if (!arrayType) { - var arrayTypeSymbol = resolveName(node, "Array", ts.SymbolFlags.Type, undefined, undefined); - ts.Debug.assert(arrayTypeSymbol); - arrayType = getDeclaredTypeOfSymbol(arrayTypeSymbol); - ts.Debug.assert(arrayType); - } - links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType), arrayType); - } - return links.resolvedType; - } - function getTypeFromTypeLiteralNode(node) { - var links = getNodeLinks(node); - if (!links.resolvedType) { - var symbol = node.symbol; - var members = symbol.members; - var callSignatures = getSignaturesOfSymbol(members["__call"]); - var constructSignatures = getSignaturesOfSymbol(members["__new"]); - var stringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); - var numberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); - links.resolvedType = createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); - } - return links.resolvedType; - } - function getStringLiteralType(node) { - if (ts.hasProperty(stringLiteralTypes, node.text)) - return stringLiteralTypes[node.text]; - var type = stringLiteralTypes[node.text] = createType(256 /* StringLiteral */); - type.text = ts.getSourceTextOfNode(node); - return type; - } - function getTypeFromStringLiteral(node) { - var links = getNodeLinks(node); - if (!links.resolvedType) { - links.resolvedType = getStringLiteralType(node); - } - return links.resolvedType; - } - function getTypeFromTypeNode(node) { - switch (node.kind) { - case 101 /* AnyKeyword */: - return anyType; - case 110 /* StringKeyword */: - return stringType; - case 108 /* NumberKeyword */: - return numberType; - case 102 /* BooleanKeyword */: - return booleanType; - case 89 /* VoidKeyword */: - return voidType; - case 3 /* StringLiteral */: - return getTypeFromStringLiteral(node); - case 123 /* TypeReference */: - return getTypeFromTypeReferenceNode(node); - case 124 /* TypeQuery */: - return getTypeFromTypeQueryNode(node); - case 126 /* ArrayType */: - return getTypeFromArrayTypeNode(node); - case 125 /* TypeLiteral */: - return getTypeFromTypeLiteralNode(node); - default: - return unknownType; - } - } - function instantiateList(items, mapper, instantiator) { - if (items && items.length) { - var result = []; - for (var i = 0; i < items.length; i++) { - result.push(instantiator(items[i], mapper)); - } - return result; - } - return items; - } - function createUnaryTypeMapper(source, target) { - return function (t) { return t === source ? target : t; }; - } - function createBinaryTypeMapper(source1, target1, source2, target2) { - return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; }; - } - function createTypeMapper(sources, targets) { - switch (sources.length) { - case 1: - return createUnaryTypeMapper(sources[0], targets[0]); - case 2: - return createBinaryTypeMapper(sources[0], targets[0], sources[1], targets[1]); - } - return function (t) { - for (var i = 0; i < sources.length; i++) { - if (t === sources[i]) - return targets[i]; - } - return t; - }; - } - function createUnaryTypeEraser(source) { - return function (t) { return t === source ? anyType : t; }; - } - function createBinaryTypeEraser(source1, source2) { - return function (t) { return t === source1 || t === source2 ? anyType : t; }; - } - function createTypeEraser(sources) { - switch (sources.length) { - case 1: - return createUnaryTypeEraser(sources[0]); - case 2: - return createBinaryTypeEraser(sources[0], sources[1]); - } - return function (t) { - for (var i = 0; i < sources.length; i++) { - if (t === sources[i]) - return anyType; - } - return t; - }; - } - function createInferenceMapper(context) { - return function (t) { - for (var i = 0; i < context.typeParameters.length; i++) { - if (t === context.typeParameters[i]) { - return getInferredType(context, i); - } - } - return t; - }; - } - function identityMapper(type) { - return type; - } - function combineTypeMappers(mapper1, mapper2) { - return function (t) { return mapper2(mapper1(t)); }; - } - function instantiateTypeParameter(typeParameter, mapper) { - var result = createType(512 /* TypeParameter */); - result.symbol = typeParameter.symbol; - if (typeParameter.constraint) { - result.constraint = instantiateType(typeParameter.constraint, mapper); - } - else { - result.target = typeParameter; - result.mapper = mapper; - } - return result; - } - function instantiateSignature(signature, mapper, eraseTypeParameters) { - if (signature.typeParameters && !eraseTypeParameters) { - var freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter); - mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper); - } - var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), signature.resolvedReturnType ? instantiateType(signature.resolvedReturnType, mapper) : undefined, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals); - result.target = signature; - result.mapper = mapper; - return result; - } - function instantiateSymbol(symbol, mapper) { - if (symbol.flags & 8388608 /* Instantiated */) { - var links = getSymbolLinks(symbol); - symbol = links.target; - mapper = combineTypeMappers(links.mapper, mapper); - } - var result = createSymbol(8388608 /* Instantiated */ | 33554432 /* Transient */, symbol.name); - result.declarations = symbol.declarations; - result.parent = symbol.parent; - result.target = symbol; - result.mapper = mapper; - if (symbol.valueDeclaration) { - result.valueDeclaration = symbol.valueDeclaration; - } - return result; - } - function instantiateAnonymousType(type, mapper) { - var result = createObjectType(8192 /* Anonymous */, type.symbol); - result.properties = instantiateList(getPropertiesOfType(type), mapper, instantiateSymbol); - result.members = createSymbolTable(result.properties); - result.callSignatures = instantiateList(getSignaturesOfType(type, 0 /* Call */), mapper, instantiateSignature); - result.constructSignatures = instantiateList(getSignaturesOfType(type, 1 /* Construct */), mapper, instantiateSignature); - var stringIndexType = getIndexTypeOfType(type, 0 /* String */); - var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); - if (stringIndexType) - result.stringIndexType = instantiateType(stringIndexType, mapper); - if (numberIndexType) - result.numberIndexType = instantiateType(numberIndexType, mapper); - return result; - } - function instantiateType(type, mapper) { - if (type.flags & 512 /* TypeParameter */) { - return mapper(type); - } - if (type.flags & 8192 /* Anonymous */) { - return type.symbol && type.symbol.flags & (8 /* Function */ | 2048 /* Method */ | 512 /* TypeLiteral */ | 1024 /* ObjectLiteral */) ? instantiateAnonymousType(type, mapper) : type; - } - if (type.flags & 4096 /* Reference */) { - return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType)); - } - return type; - } - function isContextSensitiveExpression(node) { - switch (node.kind) { - case 136 /* FunctionExpression */: - case 137 /* ArrowFunction */: - return !node.typeParameters && !ts.forEach(node.parameters, function (p) { return p.type; }); - case 128 /* ObjectLiteral */: - return ts.forEach(node.properties, function (p) { return p.kind === 129 /* PropertyAssignment */ && isContextSensitiveExpression(p.initializer); }); - case 127 /* ArrayLiteral */: - return ts.forEach(node.elements, function (e) { return isContextSensitiveExpression(e); }); - case 141 /* ConditionalExpression */: - return isContextSensitiveExpression(node.whenTrue) || isContextSensitiveExpression(node.whenFalse); - case 140 /* BinaryExpression */: - return node.operator === 40 /* BarBarToken */ && (isContextSensitiveExpression(node.left) || isContextSensitiveExpression(node.right)); - } - return false; - } - function getTypeWithoutConstructors(type) { - if (type.flags & ts.TypeFlags.ObjectType) { - var resolved = resolveObjectTypeMembers(type); - if (resolved.constructSignatures.length) { - var result = createObjectType(8192 /* Anonymous */, type.symbol); - result.members = resolved.members; - result.properties = resolved.properties; - result.callSignatures = resolved.callSignatures; - result.constructSignatures = emptyArray; - type = result; - } - } - return type; - } - var subtypeRelation = {}; - var assignableRelation = {}; - var identityRelation = {}; - function isTypeIdenticalTo(source, target) { - return checkTypeRelatedTo(source, target, identityRelation, undefined, undefined, undefined); - } - function isTypeSubtypeOf(source, target) { - return checkTypeSubtypeOf(source, target, undefined, undefined, undefined); - } - function checkTypeSubtypeOf(source, target, errorNode, chainedMessage, terminalMessage) { - return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, chainedMessage, terminalMessage); - } - function isTypeAssignableTo(source, target) { - return checkTypeAssignableTo(source, target, undefined, undefined, undefined); - } - function checkTypeAssignableTo(source, target, errorNode, chainedMessage, terminalMessage) { - return checkTypeRelatedTo(source, target, assignableRelation, errorNode, chainedMessage, terminalMessage); - } - function isTypeRelatedTo(source, target, relation) { - return checkTypeRelatedTo(source, target, relation, undefined, undefined, undefined); - } - function isSignatureAssignableTo(source, target) { - var sourceType = getOrCreateTypeFromSignature(source); - var targetType = getOrCreateTypeFromSignature(target); - return checkTypeRelatedTo(sourceType, targetType, assignableRelation, undefined, undefined, undefined); - } - function isPropertyIdenticalTo(sourceProp, targetProp) { - return isPropertyIdenticalToRecursive(sourceProp, targetProp, false, function (s, t, _reportErrors) { return isTypeIdenticalTo(s, t); }); - } - function checkInheritedPropertiesAreIdentical(type, typeNode) { - if (!type.baseTypes.length || type.baseTypes.length === 1) { - return true; - } - var seen = {}; - ts.forEach(type.declaredProperties, function (p) { - seen[p.name] = { prop: p, containingType: type }; - }); - var ok = true; - for (var i = 0, len = type.baseTypes.length; i < len; ++i) { - var base = type.baseTypes[i]; - var properties = getPropertiesOfType(base); - for (var j = 0, proplen = properties.length; j < proplen; ++j) { - var prop = properties[j]; - if (!ts.hasProperty(seen, prop.name)) { - seen[prop.name] = { prop: prop, containingType: base }; - } - else { - var existing = seen[prop.name]; - var isInheritedProperty = existing.containingType !== type; - if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) { - ok = false; - var typeName1 = typeToString(existing.containingType); - var typeName2 = typeToString(base); - var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2); - errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon, typeToString(type), typeName1, typeName2); - addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo)); - } - } - } - } - return ok; - } - function isPropertyIdenticalToRecursive(sourceProp, targetProp, reportErrors, relate) { - ts.Debug.assert(sourceProp); - if (!targetProp) { - return false; - } - var sourcePropIsPrivate = getDeclarationFlagsFromSymbol(sourceProp) & 32 /* Private */; - var targetPropIsPrivate = getDeclarationFlagsFromSymbol(targetProp) & 32 /* Private */; - if (sourcePropIsPrivate !== targetPropIsPrivate) { - return false; - } - if (sourcePropIsPrivate) { - return (getTargetSymbol(sourceProp).parent === getTargetSymbol(targetProp).parent) && relate(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors); - } - else { - return isOptionalProperty(sourceProp) === isOptionalProperty(targetProp) && relate(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors); - } - } - function checkTypeRelatedTo(source, target, relation, errorNode, chainedMessage, terminalMessage) { - var errorInfo; - var sourceStack; - var targetStack; - var expandingFlags; - var depth = 0; - var overflow = false; - ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking"); - var result = isRelatedToWithCustomErrors(source, target, errorNode !== undefined, chainedMessage, terminalMessage); - if (overflow) { - error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target)); - } - else if (errorInfo) { - addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); - } - return result; - function reportError(message, arg0, arg1) { - errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1); - } - function isRelatedTo(source, target, reportErrors) { - return isRelatedToWithCustomErrors(source, target, reportErrors, undefined, undefined); - } - function isRelatedToWithCustomErrors(source, target, reportErrors, chainedMessage, terminalMessage) { - if (relation === identityRelation) { - if (source === target) - return true; - } - else { - if (source === target) - return true; - if (target.flags & 1 /* Any */) - return true; - if (source === undefinedType) - return true; - if (source === nullType && target !== undefinedType) - return true; - if (source.flags & 128 /* Enum */ && target === numberType) - return true; - if (source.flags & 256 /* StringLiteral */ && target === stringType) - return true; - if (relation === assignableRelation) { - if (source.flags & 1 /* Any */) - return true; - if (source === numberType && target.flags & 128 /* Enum */) - return true; - } - } - if (source.flags & 512 /* TypeParameter */ && target.flags & 512 /* TypeParameter */) { - if (typeParameterRelatedTo(source, target, reportErrors)) { - return true; - } - } - else { - var saveErrorInfo = errorInfo; - if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) { - if (typesRelatedTo(source.typeArguments, target.typeArguments, reportErrors)) { - return true; - } - } - var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo; - var sourceOrApparentType = relation === identityRelation ? source : getApparentType(source); - if (sourceOrApparentType.flags & ts.TypeFlags.ObjectType && target.flags & ts.TypeFlags.ObjectType && objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors)) { - errorInfo = saveErrorInfo; - return true; - } - } - if (reportErrors) { - chainedMessage = chainedMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Colon; - terminalMessage = terminalMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1; - var diagnosticKey = errorInfo ? chainedMessage : terminalMessage; - ts.Debug.assert(diagnosticKey); - reportError(diagnosticKey, typeToString(source), typeToString(target)); - } - return false; - } - function typesRelatedTo(sources, targets, reportErrors) { - for (var i = 0, len = sources.length; i < len; i++) { - if (!isRelatedTo(sources[i], targets[i], reportErrors)) - return false; - } - return true; - } - function typeParameterRelatedTo(source, target, reportErrors) { - if (relation === identityRelation) { - if (source.symbol.name !== target.symbol.name) { - return false; - } - if (source.constraint === target.constraint) { - return true; - } - if (source.constraint === noConstraintType || target.constraint === noConstraintType) { - return false; - } - return isRelatedTo(source.constraint, target.constraint, reportErrors); - } - else { - while (true) { - var constraint = getConstraintOfTypeParameter(source); - if (constraint === target) - return true; - if (!(constraint && constraint.flags & 512 /* TypeParameter */)) - break; - source = constraint; - } - return false; - } - } - function objectTypeRelatedTo(source, target, reportErrors) { - if (overflow) - return false; - var result; - var id = source.id + "," + target.id; - if ((result = relation[id]) !== undefined) - return result; - if (depth > 0) { - for (var i = 0; i < depth; i++) { - if (source === sourceStack[i] && target === targetStack[i]) - return true; - } - if (depth === 100) { - overflow = true; - return false; - } - } - else { - sourceStack = []; - targetStack = []; - expandingFlags = 0; - } - sourceStack[depth] = source; - targetStack[depth] = target; - depth++; - var saveExpandingFlags = expandingFlags; - if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack)) - expandingFlags |= 1; - if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack)) - expandingFlags |= 2; - result = expandingFlags === 3 || propertiesRelatedTo(source, target, reportErrors) && signaturesRelatedTo(source, target, 0 /* Call */, reportErrors) && signaturesRelatedTo(source, target, 1 /* Construct */, reportErrors) && stringIndexTypesRelatedTo(source, target, reportErrors) && numberIndexTypesRelatedTo(source, target, reportErrors); - expandingFlags = saveExpandingFlags; - depth--; - if (depth === 0) { - relation[id] = result; - } - return result; - } - function isDeeplyNestedGeneric(type, stack) { - if (type.flags & 4096 /* Reference */ && depth >= 10) { - var target = type.target; - var count = 0; - for (var i = 0; i < depth; i++) { - var t = stack[i]; - if (t.flags & 4096 /* Reference */ && t.target === target) { - count++; - if (count >= 10) - return true; - } - } - } - return false; - } - function propertiesRelatedTo(source, target, reportErrors) { - if (relation === identityRelation) { - return propertiesAreIdenticalTo(source, target, reportErrors); - } - else { - return propertiesAreSubtypeOrAssignableTo(source, target, reportErrors); - } - } - function propertiesAreIdenticalTo(source, target, reportErrors) { - if (source === target) { - return true; - } - var sourceProperties = getPropertiesOfType(source); - var targetProperties = getPropertiesOfType(target); - if (sourceProperties.length !== targetProperties.length) { - return false; - } - for (var i = 0, len = sourceProperties.length; i < len; ++i) { - var sourceProp = sourceProperties[i]; - var targetProp = getPropertyOfType(target, sourceProp.name); - if (!isPropertyIdenticalToRecursive(sourceProp, targetProp, reportErrors, isRelatedTo)) { - return false; - } - } - return true; - } - function propertiesAreSubtypeOrAssignableTo(source, target, reportErrors) { - var properties = getPropertiesOfType(target); - for (var i = 0; i < properties.length; i++) { - var targetProp = properties[i]; - var sourceProp = getPropertyOfApparentType(source, targetProp.name); - if (sourceProp === targetProp) { - continue; - } - var targetPropIsOptional = isOptionalProperty(targetProp); - if (!sourceProp) { - if (!targetPropIsOptional) { - if (reportErrors) { - reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source)); - } - return false; - } - } - else if (sourceProp !== targetProp) { - if (targetProp.flags & 67108864 /* Prototype */) { - continue; - } - if (getDeclarationFlagsFromSymbol(sourceProp) & 32 /* Private */ || getDeclarationFlagsFromSymbol(targetProp) & 32 /* Private */) { - if (reportErrors) { - reportError(ts.Diagnostics.Private_property_0_cannot_be_reimplemented, symbolToString(targetProp)); - } - return false; - } - if (!isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors)) { - if (reportErrors) { - reportError(ts.Diagnostics.Types_of_property_0_are_incompatible_Colon, symbolToString(targetProp)); - } - return false; - } - else if (isOptionalProperty(sourceProp) && !targetPropIsOptional) { - if (reportErrors) { - reportError(ts.Diagnostics.Required_property_0_cannot_be_reimplemented_with_optional_property_in_1, targetProp.name, typeToString(source)); - } - return false; - } - } - } - return true; - } - function signaturesRelatedTo(source, target, kind, reportErrors) { - if (relation === identityRelation) { - return areSignaturesIdenticalTo(source, target, kind, reportErrors); - } - else { - return areSignaturesSubtypeOrAssignableTo(source, target, kind, reportErrors); - } - } - function areSignaturesIdenticalTo(source, target, kind, reportErrors) { - var sourceSignatures = getSignaturesOfType(source, kind); - var targetSignatures = getSignaturesOfType(target, kind); - if (sourceSignatures.length !== targetSignatures.length) { - return false; - } - for (var i = 0, len = sourceSignatures.length; i < len; ++i) { - if (!isSignatureIdenticalTo(sourceSignatures[i], targetSignatures[i], reportErrors)) { - return false; - } - } - return true; - } - function isSignatureIdenticalTo(source, target, reportErrors) { - if (source === target) { - return true; - } - if (source.hasRestParameter !== target.hasRestParameter) { - return false; - } - if (source.parameters.length !== target.parameters.length) { - return false; - } - if (source.minArgumentCount !== target.minArgumentCount) { - return false; - } - if (source.typeParameters && target.typeParameters) { - if (source.typeParameters.length !== target.typeParameters.length) { - return false; - } - for (var i = 0, len = source.typeParameters.length; i < len; ++i) { - if (!isRelatedTo(source.typeParameters[i], target.typeParameters[i], reportErrors)) { - return false; - } - } - } - else if (source.typeParameters || source.typeParameters) { - return false; - } - source = getErasedSignature(source); - target = getErasedSignature(target); - for (var i = 0, len = source.parameters.length; i < len; i++) { - var s = source.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(source) : getTypeOfSymbol(source.parameters[i]); - var t = target.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]); - if (!isRelatedTo(s, t, reportErrors)) { - return false; - } - } - var t = getReturnTypeOfSignature(target); - var s = getReturnTypeOfSignature(source); - return isRelatedTo(s, t, reportErrors); - } - function areSignaturesSubtypeOrAssignableTo(source, target, kind, reportErrors) { - if (target === anyFunctionType || source === anyFunctionType) - return true; - var sourceSignatures = getSignaturesOfType(source, kind); - var targetSignatures = getSignaturesOfType(target, kind); - var saveErrorInfo = errorInfo; - outer: for (var i = 0; i < targetSignatures.length; i++) { - var t = targetSignatures[i]; - if (!t.hasStringLiterals || target.flags & 16384 /* FromSignature */) { - var localErrors = reportErrors; - for (var j = 0; j < sourceSignatures.length; j++) { - var s = sourceSignatures[j]; - if (!s.hasStringLiterals || source.flags & 16384 /* FromSignature */) { - if (isSignatureSubtypeOrAssignableTo(s, t, localErrors)) { - errorInfo = saveErrorInfo; - continue outer; - } - localErrors = false; - } - } - return false; - } - } - return true; - } - function isSignatureSubtypeOrAssignableTo(source, target, reportErrors) { - if (source === target) { - return true; - } - if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) { - return false; - } - var sourceMax = source.parameters.length; - var targetMax = target.parameters.length; - var checkCount; - if (source.hasRestParameter && target.hasRestParameter) { - checkCount = sourceMax > targetMax ? sourceMax : targetMax; - sourceMax--; - targetMax--; - } - else if (source.hasRestParameter) { - sourceMax--; - checkCount = targetMax; - } - else if (target.hasRestParameter) { - targetMax--; - checkCount = sourceMax; - } - else { - checkCount = sourceMax < targetMax ? sourceMax : targetMax; - } - source = getErasedSignature(source); - target = getErasedSignature(target); - for (var i = 0; i < checkCount; i++) { - var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source); - var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target); - var saveErrorInfo = errorInfo; - if (!isRelatedTo(s, t, reportErrors)) { - if (!isRelatedTo(t, s, false)) { - if (reportErrors) { - reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible_Colon, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name); - } - return false; - } - errorInfo = saveErrorInfo; - } - } - var t = getReturnTypeOfSignature(target); - if (t === voidType) - return true; - var s = getReturnTypeOfSignature(source); - return isRelatedTo(s, t, reportErrors); - } - function stringIndexTypesRelatedTo(source, target, reportErrors) { - if (relation === identityRelation) { - return areIndexTypesIdenticalTo(0 /* String */, source, target, reportErrors); - } - else { - var targetType = getIndexTypeOfType(target, 0 /* String */); - if (targetType) { - var sourceType = getIndexTypeOfType(source, 0 /* String */); - if (!sourceType) { - if (reportErrors) { - reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); - } - return false; - } - if (!isRelatedTo(sourceType, targetType, reportErrors)) { - if (reportErrors) { - reportError(ts.Diagnostics.Index_signatures_are_incompatible_Colon); - } - return false; - } - } - return true; - } - } - function numberIndexTypesRelatedTo(source, target, reportErrors) { - if (relation === identityRelation) { - return areIndexTypesIdenticalTo(1 /* Number */, source, target, reportErrors); - } - else { - var targetType = getIndexTypeOfType(target, 1 /* Number */); - if (targetType) { - var sourceStringType = getIndexTypeOfType(source, 0 /* String */); - var sourceNumberType = getIndexTypeOfType(source, 1 /* Number */); - if (!(sourceStringType || sourceNumberType)) { - if (reportErrors) { - reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); - } - return false; - } - if (sourceStringType && sourceNumberType) { - var compatible = isRelatedTo(sourceStringType, targetType, false) || isRelatedTo(sourceNumberType, targetType, reportErrors); - } - else { - var compatible = isRelatedTo(sourceStringType || sourceNumberType, targetType, reportErrors); - } - if (!compatible) { - if (reportErrors) { - reportError(ts.Diagnostics.Index_signatures_are_incompatible_Colon); - } - return false; - } - } - return true; - } - } - function areIndexTypesIdenticalTo(indexKind, source, target, reportErrors) { - var targetType = getIndexTypeOfType(target, indexKind); - var sourceType = getIndexTypeOfType(source, indexKind); - return (!sourceType && !targetType) || (sourceType && targetType && isRelatedTo(sourceType, targetType, reportErrors)); - } - } - function isSupertypeOfEach(candidate, types) { - for (var i = 0, len = types.length; i < len; i++) { - if (candidate !== types[i] && !isTypeSubtypeOf(types[i], candidate)) - return false; - } - return true; - } - function getBestCommonType(types, contextualType, candidatesOnly) { - if (contextualType && isSupertypeOfEach(contextualType, types)) - return contextualType; - return ts.forEach(types, function (t) { return isSupertypeOfEach(t, types) ? t : undefined; }) || (candidatesOnly ? undefined : emptyObjectType); - } - function isTypeOfObjectLiteral(type) { - return (type.flags & 8192 /* Anonymous */) && type.symbol && (type.symbol.flags & 1024 /* ObjectLiteral */) ? true : false; - } - function getWidenedTypeOfObjectLiteral(type) { - var properties = getPropertiesOfType(type); - if (properties.length) { - var widenedTypes = []; - var propTypeWasWidened = false; - ts.forEach(properties, function (p) { - var propType = getTypeOfSymbol(p); - var widenedType = getWidenedType(propType); - if (propType !== widenedType) { - propTypeWasWidened = true; - if (program.getCompilerOptions().noImplicitAny && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { - error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(widenedType)); - } - } - widenedTypes.push(widenedType); - }); - if (propTypeWasWidened) { - var members = {}; - var index = 0; - ts.forEach(properties, function (p) { - var symbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, p.name); - symbol.declarations = p.declarations; - symbol.parent = p.parent; - symbol.type = widenedTypes[index++]; - if (p.valueDeclaration) - symbol.valueDeclaration = p.valueDeclaration; - members[symbol.name] = symbol; - }); - var stringIndexType = getIndexTypeOfType(type, 0 /* String */); - var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); - if (stringIndexType) - stringIndexType = getWidenedType(stringIndexType); - if (numberIndexType) - numberIndexType = getWidenedType(numberIndexType); - type = createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType); - } - } - return type; - } - function isArrayType(type) { - return type.flags & 4096 /* Reference */ && type.target === globalArrayType; - } - function getInnermostTypeOfNestedArrayTypes(type) { - while (isArrayType(type)) { - type = type.typeArguments[0]; - } - return type; - } - function getWidenedTypeOfArrayLiteral(type) { - var elementType = type.typeArguments[0]; - var widenedType = getWidenedType(elementType); - type = elementType !== widenedType ? createArrayType(widenedType) : type; - return type; - } - function getWidenedType(type) { - if (type.flags & (32 /* Undefined */ | 64 /* Null */)) { - return anyType; - } - if (isTypeOfObjectLiteral(type)) { - return getWidenedTypeOfObjectLiteral(type); - } - if (isArrayType(type)) { - return getWidenedTypeOfArrayLiteral(type); - } - return type; - } - function forEachMatchingParameterType(source, target, callback) { - var sourceMax = source.parameters.length; - var targetMax = target.parameters.length; - var count; - if (source.hasRestParameter && target.hasRestParameter) { - count = sourceMax > targetMax ? sourceMax : targetMax; - sourceMax--; - targetMax--; - } - else if (source.hasRestParameter) { - sourceMax--; - count = targetMax; - } - else if (target.hasRestParameter) { - targetMax--; - count = sourceMax; - } - else { - count = sourceMax < targetMax ? sourceMax : targetMax; - } - for (var i = 0; i < count; i++) { - var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source); - var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target); - callback(s, t); - } - } - function createInferenceContext(typeParameters) { - var inferences = []; - for (var i = 0; i < typeParameters.length; i++) - inferences.push([]); - return { - typeParameters: typeParameters, - inferences: inferences, - inferredTypes: new Array(typeParameters.length) - }; - } - function inferTypes(context, source, target) { - var sourceStack; - var targetStack; - var depth = 0; - inferFromTypes(source, target); - function isInProcess(source, target) { - for (var i = 0; i < depth; i++) { - if (source === sourceStack[i] && target === targetStack[i]) - return true; - } - return false; - } - function isWithinDepthLimit(type, stack) { - if (depth >= 5) { - var target = type.target; - var count = 0; - for (var i = 0; i < depth; i++) { - var t = stack[i]; - if (t.flags & 4096 /* Reference */ && t.target === target) - count++; - } - return count < 5; - } - return true; - } - function inferFromTypes(source, target) { - if (target.flags & 512 /* TypeParameter */) { - var typeParameters = context.typeParameters; - for (var i = 0; i < typeParameters.length; i++) { - if (target === typeParameters[i]) { - var inferences = context.inferences[i]; - if (!ts.contains(inferences, source)) - inferences.push(source); - break; - } - } - } - else if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) { - var sourceTypes = source.typeArguments; - var targetTypes = target.typeArguments; - for (var i = 0; i < sourceTypes.length; i++) { - inferFromTypes(sourceTypes[i], targetTypes[i]); - } - } - else if (source.flags & ts.TypeFlags.ObjectType && (target.flags & 4096 /* Reference */ || (target.flags & 8192 /* Anonymous */) && target.symbol && target.symbol.flags & (2048 /* Method */ | 512 /* TypeLiteral */))) { - if (!isInProcess(source, target) && isWithinDepthLimit(source, sourceStack) && isWithinDepthLimit(target, targetStack)) { - if (depth === 0) { - sourceStack = []; - targetStack = []; - } - sourceStack[depth] = source; - targetStack[depth] = target; - depth++; - inferFromProperties(source, target); - inferFromSignatures(source, target, 0 /* Call */); - inferFromSignatures(source, target, 1 /* Construct */); - inferFromIndexTypes(source, target, 0 /* String */, 0 /* String */); - inferFromIndexTypes(source, target, 1 /* Number */, 1 /* Number */); - inferFromIndexTypes(source, target, 0 /* String */, 1 /* Number */); - depth--; - } - } - } - function inferFromProperties(source, target) { - var properties = getPropertiesOfType(target); - for (var i = 0; i < properties.length; i++) { - var targetProp = properties[i]; - var sourceProp = getPropertyOfType(source, targetProp.name); - if (sourceProp) { - inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); - } - } - } - function inferFromSignatures(source, target, kind) { - var sourceSignatures = getSignaturesOfType(source, kind); - var targetSignatures = getSignaturesOfType(target, kind); - var sourceLen = sourceSignatures.length; - var targetLen = targetSignatures.length; - var len = sourceLen < targetLen ? sourceLen : targetLen; - for (var i = 0; i < len; i++) { - inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i])); - } - } - function inferFromSignature(source, target) { - forEachMatchingParameterType(source, target, inferFromTypes); - inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); - } - function inferFromIndexTypes(source, target, sourceKind, targetKind) { - var targetIndexType = getIndexTypeOfType(target, targetKind); - if (targetIndexType) { - var sourceIndexType = getIndexTypeOfType(source, sourceKind); - if (sourceIndexType) { - inferFromTypes(sourceIndexType, targetIndexType); - } - } - } - } - function getInferredType(context, index) { - var result = context.inferredTypes[index]; - if (!result) { - var commonType = getWidenedType(getBestCommonType(context.inferences[index])); - var constraint = getConstraintOfTypeParameter(context.typeParameters[index]); - var result = constraint && !isTypeAssignableTo(commonType, constraint) ? constraint : commonType; - context.inferredTypes[index] = result; - } - return result; - } - function getInferredTypes(context) { - for (var i = 0; i < context.inferredTypes.length; i++) { - getInferredType(context, i); - } - context.inferences = undefined; - return context.inferredTypes; - } - function hasAncestor(node, kind) { - return getAncestor(node, kind) !== undefined; - } - function getAncestor(node, kind) { - switch (kind) { - case 169 /* ClassDeclaration */: - while (node) { - switch (node.kind) { - case 169 /* ClassDeclaration */: - return node; - case 171 /* EnumDeclaration */: - case 170 /* InterfaceDeclaration */: - case 172 /* ModuleDeclaration */: - case 174 /* ImportDeclaration */: - return undefined; - default: - node = node.parent; - continue; - } - } - break; - default: - while (node) { - if (node.kind === kind) { - return node; - } - else { - node = node.parent; - } - } - break; - } - return undefined; - } - function checkIdentifier(node) { - function isInTypeQuery(node) { - while (node) { - switch (node.kind) { - case 124 /* TypeQuery */: - return true; - case 55 /* Identifier */: - case 112 /* QualifiedName */: - node = node.parent; - continue; - default: - return false; - } - } - ts.Debug.fail("should not get here"); - } - var symbol = resolveName(node, node.text, ts.SymbolFlags.Value | 524288 /* ExportValue */, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(node)); - if (!symbol) { - symbol = unknownSymbol; - } - if (symbol.flags & 4194304 /* Import */) { - getSymbolLinks(symbol).referenced = !isInTypeQuery(node); - } - getNodeLinks(node).resolvedSymbol = symbol; - checkCollisionWithCapturedSuperVariable(node, node); - checkCollisionWithCapturedThisVariable(node, node); - checkCollisionWithIndexVariableInGeneratedCode(node, node); - return getTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol)); - } - function getThisContainer(node) { - while (true) { - node = node.parent; - if (!node) { - return node; - } - switch (node.kind) { - case 167 /* FunctionDeclaration */: - case 136 /* FunctionExpression */: - case 172 /* ModuleDeclaration */: - case 115 /* Property */: - case 116 /* Method */: - case 117 /* Constructor */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 171 /* EnumDeclaration */: - case 177 /* SourceFile */: - case 137 /* ArrowFunction */: - return node; - } - } - } - function captureLexicalThis(node, container) { - var classNode = container.parent && container.parent.kind === 169 /* ClassDeclaration */ ? container.parent : undefined; - getNodeLinks(node).flags |= 2 /* LexicalThis */; - if (container.kind === 115 /* Property */ || container.kind === 117 /* Constructor */) { - getNodeLinks(classNode).flags |= 4 /* CaptureThis */; - } - else { - getNodeLinks(container).flags |= 4 /* CaptureThis */; - } - } - function checkThisExpression(node) { - var container = getThisContainer(node); - var needToCaptureLexicalThis = false; - while (container.kind === 137 /* ArrowFunction */) { - container = getThisContainer(container); - needToCaptureLexicalThis = true; - } - switch (container.kind) { - case 172 /* ModuleDeclaration */: - error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_body); - break; - case 171 /* EnumDeclaration */: - error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); - break; - case 117 /* Constructor */: - if (isInConstructorArgumentInitializer(node, container)) { - error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); - } - break; - case 115 /* Property */: - if (container.flags & 64 /* Static */) { - error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); - } - break; - } - if (needToCaptureLexicalThis) { - captureLexicalThis(node, container); - } - var classNode = container.parent && container.parent.kind === 169 /* ClassDeclaration */ ? container.parent : undefined; - if (classNode) { - var symbol = getSymbolOfNode(classNode); - return container.flags & 64 /* Static */ ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol); - } - return anyType; - } - function getSuperContainer(node) { - while (true) { - node = node.parent; - if (!node) - return node; - switch (node.kind) { - case 167 /* FunctionDeclaration */: - case 136 /* FunctionExpression */: - case 137 /* ArrowFunction */: - case 115 /* Property */: - case 116 /* Method */: - case 117 /* Constructor */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - return node; - } - } - } - function isInConstructorArgumentInitializer(node, constructorDecl) { - for (var n = node; n && n !== constructorDecl; n = n.parent) { - if (n.kind === 114 /* Parameter */) { - return true; - } - } - return false; - } - function checkSuperExpression(node, isCallExpression) { - var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); - var baseClass; - if (enclosingClass && enclosingClass.baseType) { - var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass)); - baseClass = classType.baseTypes.length && classType.baseTypes[0]; - } - if (!baseClass) { - error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class); - return unknownType; - } - var container = getSuperContainer(node); - if (container) { - var canUseSuperExpression = false; - if (isCallExpression) { - canUseSuperExpression = container.kind === 117 /* Constructor */; - } - else { - var needToCaptureLexicalThis = false; - while (container && container.kind === 137 /* ArrowFunction */) { - container = getSuperContainer(container); - needToCaptureLexicalThis = true; - } - if (container && container.parent && container.parent.kind === 169 /* ClassDeclaration */) { - if (container.flags & 64 /* Static */) { - canUseSuperExpression = container.kind === 116 /* Method */ || container.kind === 118 /* GetAccessor */ || container.kind === 119 /* SetAccessor */; - } - else { - canUseSuperExpression = container.kind === 116 /* Method */ || container.kind === 118 /* GetAccessor */ || container.kind === 119 /* SetAccessor */ || container.kind === 115 /* Property */ || container.kind === 117 /* Constructor */; - } - } - } - if (canUseSuperExpression) { - var returnType; - if ((container.flags & 64 /* Static */) || isCallExpression) { - getNodeLinks(node).flags |= 32 /* SuperStatic */; - returnType = getTypeOfSymbol(baseClass.symbol); - } - else { - getNodeLinks(node).flags |= 16 /* SuperInstance */; - returnType = baseClass; - } - if (container.kind === 117 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { - error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); - returnType = unknownType; - } - if (!isCallExpression && needToCaptureLexicalThis) { - captureLexicalThis(node.parent, container); - } - return returnType; - } - } - if (isCallExpression) { - error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors); - } - else { - error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class); - } - return unknownType; - } - function isInferentialContext(mapper) { - return mapper && mapper !== identityMapper; - } - function checkArrayLiteral(node, contextualType, contextualMapper) { - var contextualElementType = contextualType && getIndexTypeOfType(contextualType, 1 /* Number */); - var elementTypes = []; - ts.forEach(node.elements, function (element) { - if (element.kind !== 142 /* OmittedExpression */) { - var type = checkExpression(element, contextualElementType, contextualMapper); - if (!ts.contains(elementTypes, type)) - elementTypes.push(type); - } - }); - var elementType = getBestCommonType(elementTypes, isInferentialContext(contextualMapper) ? undefined : contextualElementType, true); - if (!elementType) - elementType = elementTypes.length ? emptyObjectType : undefinedType; - return createArrayType(elementType); - } - function isNumericName(name) { - return !isNaN(name); - } - function getContextualTypeForProperty(type, name) { - var prop = getPropertyOfType(type, name); - if (prop) - return getTypeOfSymbol(prop); - return isNumericName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */); - } - function checkObjectLiteral(node, contextualType, contextualMapper) { - var members = node.symbol.members; - var properties = {}; - for (var id in members) { - if (ts.hasProperty(members, id)) { - var member = members[id]; - if (member.flags & 2 /* Property */) { - var contextualPropType = contextualType && getContextualTypeForProperty(contextualType, member.name); - var type = checkExpression(member.declarations[0].initializer, contextualPropType, contextualMapper); - var prop = createSymbol(2 /* Property */ | 33554432 /* Transient */, member.name); - prop.declarations = member.declarations; - prop.parent = member.parent; - if (member.valueDeclaration) - prop.valueDeclaration = member.valueDeclaration; - prop.type = type; - member = prop; - } - else { - var getAccessor = getDeclarationOfKind(member, 118 /* GetAccessor */); - if (getAccessor) { - checkAccessorDeclaration(getAccessor); - } - var setAccessor = getDeclarationOfKind(member, 119 /* SetAccessor */); - if (setAccessor) { - checkAccessorDeclaration(setAccessor); - } - } - properties[member.name] = member; - } - } - var stringIndexType = getIndexType(properties, 0 /* String */); - var numberIndexType = getIndexType(properties, 1 /* Number */); - return createAnonymousType(node.symbol, properties, emptyArray, emptyArray, stringIndexType, numberIndexType); - function getIndexType(properties, kind) { - if (contextualType) { - var indexType = getIndexTypeOfType(contextualType, kind); - if (indexType) { - var propTypes = []; - for (var id in properties) { - if (ts.hasProperty(properties, id)) { - if (kind === 0 /* String */ || isNumericName(id)) { - var type = getTypeOfSymbol(properties[id]); - if (!ts.contains(propTypes, type)) - propTypes.push(type); - } - } - } - return getBestCommonType(propTypes, isInferentialContext(contextualMapper) ? undefined : indexType); - } - } - } - } - function getDeclarationKindFromSymbol(s) { - return s.flags & 67108864 /* Prototype */ ? 115 /* Property */ : s.valueDeclaration.kind; - } - function getDeclarationFlagsFromSymbol(s) { - return s.flags & 67108864 /* Prototype */ ? 16 /* Public */ | 64 /* Static */ : s.valueDeclaration.flags; - } - function checkPropertyAccess(node) { - var type = checkExpression(node.left); - if (type === unknownType) - return type; - if (type !== anyType) { - var apparentType = getApparentType(getWidenedType(type)); - if (apparentType === unknownType) { - return unknownType; - } - var prop = getPropertyOfApparentType(apparentType, node.right.text); - if (!prop) { - if (node.right.text) { - error(node.right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.identifierToString(node.right), typeToString(type)); - } - return unknownType; - } - getNodeLinks(node).resolvedSymbol = prop; - if (prop.parent && prop.parent.flags & 16 /* Class */) { - if (node.left.kind === 81 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 116 /* Method */) { - error(node.right, ts.Diagnostics.Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword); - } - else if (getDeclarationFlagsFromSymbol(prop) & 32 /* Private */) { - var classDeclaration = getAncestor(node, 169 /* ClassDeclaration */); - if (!classDeclaration || !ts.contains(prop.parent.declarations, classDeclaration)) { - error(node, ts.Diagnostics.Property_0_is_inaccessible, getFullyQualifiedName(prop)); - } - } - } - return getTypeOfSymbol(prop); - } - return anyType; - } - function checkIndexedAccess(node) { - var objectType = checkExpression(node.object); - var indexType = checkExpression(node.index); - if (objectType === unknownType) - return unknownType; - var apparentType = getApparentType(objectType); - if (apparentType === unknownType) { - return unknownType; - } - if (node.index.kind === 3 /* StringLiteral */ || node.index.kind === 2 /* NumericLiteral */) { - var name = node.index.text; - var prop = getPropertyOfApparentType(apparentType, name); - if (prop) { - return getTypeOfSymbol(prop); - } - } - if (indexType.flags & (1 /* Any */ | ts.TypeFlags.StringLike | ts.TypeFlags.NumberLike)) { - if (indexType.flags & (1 /* Any */ | ts.TypeFlags.NumberLike)) { - var numberIndexType = getIndexTypeOfType(apparentType, 1 /* Number */); - if (numberIndexType) { - return numberIndexType; - } - } - var stringIndexType = getIndexTypeOfType(apparentType, 0 /* String */); - if (stringIndexType) { - return stringIndexType; - } - if (program.getCompilerOptions().noImplicitAny && objectType !== anyType) { - error(node, ts.Diagnostics.Index_signature_of_object_type_implicitly_has_an_any_type); - } - return anyType; - } - error(node, ts.Diagnostics.An_index_expression_argument_must_be_of_type_string_number_or_any); - return unknownType; - } - function checkUntypedCall(node) { - ts.forEach(node.arguments, function (argument) { - checkExpression(argument); - }); - return anyType; - } - function checkErrorCall(node) { - checkUntypedCall(node); - return unknownType; - } - function isCandidateSignature(node, signature) { - var args = node.arguments || emptyArray; - return args.length >= signature.minArgumentCount && (signature.hasRestParameter || args.length <= signature.parameters.length) && (!node.typeArguments || signature.typeParameters && node.typeArguments.length === signature.typeParameters.length); - } - function collectCandidates(node, signatures) { - var result = []; - var lastParent; - var pos; - for (var i = 0; i < signatures.length; i++) { - var signature = signatures[i]; - if (isCandidateSignature(node, signature)) { - var parent = signature.declaration ? signature.declaration.parent : undefined; - if (lastParent && parent === lastParent) { - pos++; - } - else { - lastParent = parent; - pos = 0; - } - for (var j = result.length; j > pos; j--) { - result[j] = result[j - 1]; - } - result[pos] = signature; - } - } - return result; - } - function getSingleCallSignature(type) { - if (type.flags & ts.TypeFlags.ObjectType) { - var resolved = resolveObjectTypeMembers(type); - if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 && resolved.properties.length === 0 && !resolved.stringIndexType && !resolved.numberIndexType) { - return resolved.callSignatures[0]; - } - } - return undefined; - } - function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper) { - var context = createInferenceContext(signature.typeParameters); - forEachMatchingParameterType(contextualSignature, signature, function (source, target) { - inferTypes(context, instantiateType(source, contextualMapper), target); - }); - return getSignatureInstantiation(signature, getInferredTypes(context)); - } - function inferentiallyTypeExpession(expr, contextualType, contextualMapper) { - var type = checkExpression(expr, contextualType, contextualMapper); - var signature = getSingleCallSignature(type); - if (signature && signature.typeParameters) { - var contextualSignature = getSingleCallSignature(contextualType); - if (contextualSignature && !contextualSignature.typeParameters) { - type = getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper)); - } - } - return type; - } - function inferTypeArguments(signature, args, excludeArgument) { - var typeParameters = signature.typeParameters; - var context = createInferenceContext(typeParameters); - var mapper = createInferenceMapper(context); - for (var i = 0; i < args.length; i++) { - if (!excludeArgument || excludeArgument[i] === undefined) { - var parameterType = getTypeAtPosition(signature, i); - inferTypes(context, inferentiallyTypeExpession(args[i], parameterType, mapper), parameterType); - } - } - if (excludeArgument) { - for (var i = 0; i < args.length; i++) { - if (excludeArgument[i] === false) { - var parameterType = getTypeAtPosition(signature, i); - inferTypes(context, inferentiallyTypeExpession(args[i], parameterType, mapper), parameterType); - } - } - } - return getInferredTypes(context); - } - function checkTypeArguments(signature, typeArguments) { - var typeParameters = signature.typeParameters; - var result = []; - for (var i = 0; i < typeParameters.length; i++) { - var typeArgNode = typeArguments[i]; - var typeArgument = getTypeFromTypeNode(typeArgNode); - var constraint = getConstraintOfTypeParameter(typeParameters[i]); - if (constraint) { - checkTypeAssignableTo(typeArgument, constraint, typeArgNode, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); - } - result.push(typeArgument); - } - return result; - } - function checkApplicableSignature(node, signature, relation, excludeArgument, reportErrors) { - if (node.arguments) { - for (var i = 0; i < node.arguments.length; i++) { - var arg = node.arguments[i]; - var paramType = getTypeAtPosition(signature, i); - var argType = arg.kind === 3 /* StringLiteral */ && !reportErrors ? getStringLiteralType(arg) : checkExpression(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); - var isValidArgument = checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1); - if (!isValidArgument) { - return false; - } - } - } - return true; - } - function checkCall(node, signatures) { - ts.forEach(node.typeArguments, checkSourceElement); - var candidates = collectCandidates(node, signatures); - if (!candidates.length) { - error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); - return checkErrorCall(node); - } - var args = node.arguments || emptyArray; - var excludeArgument; - for (var i = 0; i < args.length; i++) { - if (isContextSensitiveExpression(args[i])) { - if (!excludeArgument) - excludeArgument = new Array(args.length); - excludeArgument[i] = true; - } - } - var relation = candidates.length === 1 ? assignableRelation : subtypeRelation; - while (true) { - for (var i = 0; i < candidates.length; i++) { - while (true) { - var candidate = candidates[i]; - if (candidate.typeParameters) { - var typeArguments = node.typeArguments ? checkTypeArguments(candidate, node.typeArguments) : inferTypeArguments(candidate, args, excludeArgument); - candidate = getSignatureInstantiation(candidate, typeArguments); - } - if (!checkApplicableSignature(node, candidate, relation, excludeArgument, false)) { - break; - } - var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1; - if (index < 0) { - return getReturnTypeOfSignature(candidate); - } - excludeArgument[index] = false; - } - } - if (relation === assignableRelation) { - break; - } - relation = assignableRelation; - } - checkApplicableSignature(node, candidate, relation, undefined, true); - return checkErrorCall(node); - } - function checkCallExpression(node) { - if (node.func.kind === 81 /* SuperKeyword */) { - var superType = checkSuperExpression(node.func, true); - if (superType !== unknownType) { - checkCall(node, getSignaturesOfType(superType, 1 /* Construct */)); - } - else { - checkUntypedCall(node); - } - return voidType; - } - var funcType = checkExpression(node.func); - if (funcType === unknownType) { - return checkErrorCall(node); - } - var apparentType = getApparentType(funcType); - if (apparentType === unknownType) { - return checkErrorCall(node); - } - var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); - var constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); - if ((funcType === anyType) || (!callSignatures.length && !constructSignatures.length && isTypeAssignableTo(funcType, globalFunctionType))) { - if (node.typeArguments) { - error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); - } - return checkUntypedCall(node); - } - if (!callSignatures.length) { - if (constructSignatures.length) { - error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType)); - } - else { - error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature); - } - return checkErrorCall(node); - } - return checkCall(node, callSignatures); - } - function checkNewExpression(node) { - var expressionType = checkExpression(node.func); - if (expressionType === unknownType) { - return checkErrorCall(node); - } - if (expressionType === anyType) { - if (node.typeArguments) { - error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); - } - return checkUntypedCall(node); - } - expressionType = getApparentType(expressionType); - if (expressionType === unknownType) { - return checkErrorCall(node); - } - var constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */); - if (constructSignatures.length) { - return checkCall(node, constructSignatures); - } - var callSignatures = getSignaturesOfType(expressionType, 0 /* Call */); - if (callSignatures.length) { - var type = checkCall(node, callSignatures); - if (type !== voidType) { - error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); - } - if (program.getCompilerOptions().noImplicitAny) { - error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type); - } - return anyType; - } - error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature); - return checkErrorCall(node); - } - function checkTypeAssertion(node) { - var targetType = getTypeFromTypeNode(node.type); - if (targetType === unknownType) - return unknownType; - var exprType = checkExpression(node.operand, targetType); - var widenedType = getWidenedType(exprType); - if (!(isTypeAssignableTo(exprType, targetType) || isTypeAssignableTo(targetType, widenedType))) { - checkTypeAssignableTo(targetType, widenedType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other); - } - return targetType; - } - function getContextualSignature(contextualType) { - if (contextualType) { - var signatures = getSignaturesOfType(contextualType, 0 /* Call */); - if (signatures.length === 1) { - var signature = signatures[0]; - if (!signature.typeParameters) { - return signature; - } - } - } - } - function getTypeAtPosition(signature, pos) { - return signature.hasRestParameter ? pos < signature.parameters.length - 1 ? getTypeOfSymbol(signature.parameters[pos]) : getRestTypeOfSignature(signature) : pos < signature.parameters.length ? getTypeOfSymbol(signature.parameters[pos]) : anyType; - } - function assignContextualParameterTypes(signature, context, mapper) { - var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0); - for (var i = 0; i < len; i++) { - var parameter = signature.parameters[i]; - var links = getSymbolLinks(parameter); - if (!links.type) { - links.type = instantiateType(getTypeAtPosition(context, i), mapper); - } - } - if (signature.hasRestParameter && context.hasRestParameter && signature.parameters.length >= context.parameters.length) { - var parameter = signature.parameters[signature.parameters.length - 1]; - var links = getSymbolLinks(parameter); - if (!links.type) { - links.type = instantiateType(getTypeOfSymbol(context.parameters[context.parameters.length - 1]), mapper); - } - } - } - function getReturnTypeFromBody(func, contextualType, contextualMapper) { - if (func.body.kind !== 168 /* FunctionBlock */) { - var unwidenedType = checkAndMarkExpression(func.body, contextualType, contextualMapper); - var widenedType = getWidenedType(unwidenedType); - if (program.getCompilerOptions().noImplicitAny && widenedType !== unwidenedType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { - error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeToString(widenedType)); - } - return widenedType; - } - var types = checkAndAggregateReturnExpressionTypes(func.body, contextualType, contextualMapper); - if (types.length > 0) { - var commonType = getBestCommonType(types, undefined, true); - if (!commonType) { - error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); - return unknownType; - } - var widenedType = getWidenedType(commonType); - if (program.getCompilerOptions().noImplicitAny && widenedType !== commonType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { - var typeName = typeToString(widenedType); - if (func.name) { - error(func, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.identifierToString(func.name), typeName); - } - else { - error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeName); - } - } - return widenedType; - } - return voidType; - } - function forEachReturnStatement(body, visitor) { - return traverse(body); - function traverse(node) { - switch (node.kind) { - case 154 /* ReturnStatement */: - return visitor(node); - case 143 /* Block */: - case 168 /* FunctionBlock */: - case 147 /* IfStatement */: - case 148 /* DoStatement */: - case 149 /* WhileStatement */: - case 150 /* ForStatement */: - case 151 /* ForInStatement */: - case 155 /* WithStatement */: - case 156 /* SwitchStatement */: - case 157 /* CaseClause */: - case 158 /* DefaultClause */: - case 159 /* LabelledStatement */: - case 161 /* TryStatement */: - case 162 /* TryBlock */: - case 163 /* CatchBlock */: - case 164 /* FinallyBlock */: - return ts.forEachChild(node, traverse); - } - } - } - function checkAndAggregateReturnExpressionTypes(body, contextualType, contextualMapper) { - var aggregatedTypes = []; - forEachReturnStatement(body, function (returnStatement) { - var expr = returnStatement.expression; - if (expr) { - var type = checkAndMarkExpression(expr, contextualType, contextualMapper); - if (!ts.contains(aggregatedTypes, type)) { - aggregatedTypes.push(type); - } - } - }); - return aggregatedTypes; - } - function bodyContainsAReturnStatement(funcBody) { - return forEachReturnStatement(funcBody, function (returnStatement) { - return true; - }); - } - function bodyContainsSingleThrowStatement(body) { - return (body.statements.length === 1) && (body.statements[0].kind === 160 /* ThrowStatement */); - } - function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) { - if (returnType === voidType || returnType === anyType) { - return; - } - if (!func.body || func.body.kind !== 168 /* FunctionBlock */) { - return; - } - var bodyBlock = func.body; - if (bodyContainsAReturnStatement(bodyBlock)) { - return; - } - if (bodyContainsSingleThrowStatement(bodyBlock)) { - return; - } - error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement); - } - function checkFunctionExpression(node, contextualType, contextualMapper) { - if (contextualMapper === identityMapper) { - return anyFunctionType; - } - var type = getTypeOfSymbol(node.symbol); - var links = getNodeLinks(node); - if (!(links.flags & 1 /* TypeChecked */)) { - var signature = getSignaturesOfType(type, 0 /* Call */)[0]; - var contextualSignature = getContextualSignature(contextualType); - if (contextualSignature) { - if (!node.typeParameters && !ts.forEach(node.parameters, function (p) { return p.type; })) { - assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper); - } - if (!node.type) { - signature.resolvedReturnType = resolvingType; - var returnType = getReturnTypeFromBody(node, getReturnTypeOfSignature(contextualSignature), contextualMapper); - if (signature.resolvedReturnType === resolvingType) { - signature.resolvedReturnType = returnType; - } - } - else { - checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); - } - } - checkSignatureDeclaration(node); - if (node.body.kind === 168 /* FunctionBlock */) { - checkSourceElement(node.body); - } - else { - var returnType = getReturnTypeOfSignature(signature); - if (node.type) { - checkTypeAssignableTo(checkExpression(node.body, returnType), returnType, node.body, undefined, undefined); - } - } - links.flags |= 1 /* TypeChecked */; - } - return type; - } - function checkArithmeticOperandType(operand, type, diagnostic) { - if (!(type.flags & (1 /* Any */ | ts.TypeFlags.NumberLike))) { - error(operand, diagnostic); - return false; - } - return true; - } - function checkReferenceExpression(n, message) { - function findSymbol(n) { - var symbol = getNodeLinks(n).resolvedSymbol; - return symbol && getExportSymbolOfValueSymbolIfExported(symbol); - } - function isReferenceOrErrorExpression(n) { - switch (n.kind) { - case 55 /* Identifier */: - var symbol = findSymbol(n); - return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 1 /* Variable */) !== 0; - case 130 /* PropertyAccess */: - var symbol = findSymbol(n); - return !symbol || symbol === unknownSymbol || (symbol.flags & ~4 /* EnumMember */) !== 0; - case 131 /* IndexedAccess */: - return true; - case 135 /* ParenExpression */: - return isReferenceOrErrorExpression(n.expression); - default: - return false; - } - } - if (!isReferenceOrErrorExpression(n)) { - error(n, message); - return false; - } - return true; - } - function checkPrefixExpression(node) { - var operandType = checkExpression(node.operand); - switch (node.operator) { - case 24 /* PlusToken */: - case 25 /* MinusToken */: - case 38 /* TildeToken */: - return numberType; - case 37 /* ExclamationToken */: - case 64 /* DeleteKeyword */: - return booleanType; - case 87 /* TypeOfKeyword */: - return stringType; - case 89 /* VoidKeyword */: - return undefinedType; - case 29 /* PlusPlusToken */: - case 30 /* MinusMinusToken */: - var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); - if (ok) { - checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer); - } - return numberType; - } - return unknownType; - } - function checkPostfixExpression(node) { - var operandType = checkExpression(node.operand); - var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); - if (ok) { - checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer); - } - return numberType; - } - function isTypeAnyTypeObjectTypeOrTypeParameter(type) { - return type === anyType || ((type.flags & (ts.TypeFlags.ObjectType | 512 /* TypeParameter */)) !== 0); - } - function checkInstanceOfExpression(node, leftType, rightType) { - if (!isTypeAnyTypeObjectTypeOrTypeParameter(leftType)) { - error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); - } - if (rightType !== anyType && !isTypeSubtypeOf(rightType, globalFunctionType)) { - error(node.right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); - } - return booleanType; - } - function checkInExpression(node, leftType, rightType) { - if (leftType !== anyType && leftType !== stringType && leftType !== numberType) { - error(node.left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number); - } - if (!isTypeAnyTypeObjectTypeOrTypeParameter(rightType)) { - error(node.right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); - } - return booleanType; - } - function checkBinaryExpression(node, contextualType, contextualMapper) { - var operator = node.operator; - var leftContextualType = operator === 40 /* BarBarToken */ ? contextualType : undefined; - var leftType = checkExpression(node.left, leftContextualType, contextualMapper); - var rightContextualType = operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment ? leftType : operator === 40 /* BarBarToken */ ? contextualType || leftType : undefined; - var rightType = checkExpression(node.right, rightContextualType, contextualMapper); - switch (operator) { - case 26 /* AsteriskToken */: - case 46 /* AsteriskEqualsToken */: - case 27 /* SlashToken */: - case 47 /* SlashEqualsToken */: - case 28 /* PercentToken */: - case 48 /* PercentEqualsToken */: - case 25 /* MinusToken */: - case 45 /* MinusEqualsToken */: - case 31 /* LessThanLessThanToken */: - case 49 /* LessThanLessThanEqualsToken */: - case 32 /* GreaterThanGreaterThanToken */: - case 50 /* GreaterThanGreaterThanEqualsToken */: - case 33 /* GreaterThanGreaterThanGreaterThanToken */: - case 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - case 35 /* BarToken */: - case 53 /* BarEqualsToken */: - case 36 /* CaretToken */: - case 54 /* CaretEqualsToken */: - case 34 /* AmpersandToken */: - case 52 /* AmpersandEqualsToken */: - if (leftType.flags & (32 /* Undefined */ | 64 /* Null */)) - leftType = rightType; - if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) - rightType = leftType; - var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); - var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); - if (leftOk && rightOk) { - checkAssignmentOperator(numberType); - } - return numberType; - case 24 /* PlusToken */: - case 44 /* PlusEqualsToken */: - if (leftType.flags & (32 /* Undefined */ | 64 /* Null */)) - leftType = rightType; - if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) - rightType = leftType; - var resultType; - if (leftType.flags & ts.TypeFlags.NumberLike && rightType.flags & ts.TypeFlags.NumberLike) { - resultType = numberType; - } - else if (leftType.flags & ts.TypeFlags.StringLike || rightType.flags & ts.TypeFlags.StringLike) { - resultType = stringType; - } - else if (leftType.flags & 1 /* Any */ || leftType === unknownType || rightType.flags & 1 /* Any */ || rightType === unknownType) { - resultType = anyType; - } - if (!resultType) { - reportOperatorError(); - return anyType; - } - if (operator === 44 /* PlusEqualsToken */) { - checkAssignmentOperator(resultType); - } - return resultType; - case 19 /* EqualsEqualsToken */: - case 20 /* ExclamationEqualsToken */: - case 21 /* EqualsEqualsEqualsToken */: - case 22 /* ExclamationEqualsEqualsToken */: - case 15 /* LessThanToken */: - case 16 /* GreaterThanToken */: - case 17 /* LessThanEqualsToken */: - case 18 /* GreaterThanEqualsToken */: - if (!isTypeSubtypeOf(leftType, rightType) && !isTypeSubtypeOf(rightType, leftType)) { - reportOperatorError(); - } - return booleanType; - case 77 /* InstanceOfKeyword */: - return checkInstanceOfExpression(node, leftType, rightType); - case 76 /* InKeyword */: - return checkInExpression(node, leftType, rightType); - case 39 /* AmpersandAmpersandToken */: - return rightType; - case 40 /* BarBarToken */: - return getBestCommonType([leftType, rightType], isInferentialContext(contextualMapper) ? undefined : contextualType); - case 43 /* EqualsToken */: - checkAssignmentOperator(rightType); - return rightType; - case 14 /* CommaToken */: - return rightType; - } - function checkAssignmentOperator(valueType) { - if (operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { - var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression); - if (ok) { - checkTypeAssignableTo(valueType, leftType, node.left, undefined, undefined); - } - } - } - function reportOperatorError() { - error(node, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(node.operator), typeToString(leftType), typeToString(rightType)); - } - } - function checkConditionalExpression(node, contextualType, contextualMapper) { - checkExpression(node.condition); - var type1 = checkExpression(node.whenTrue, contextualType, contextualMapper); - var type2 = checkExpression(node.whenFalse, contextualType, contextualMapper); - var resultType = getBestCommonType([type1, type2], isInferentialContext(contextualMapper) ? undefined : contextualType, true); - if (!resultType) { - if (contextualType && !isInferentialContext(contextualMapper)) { - error(node, ts.Diagnostics.No_best_common_type_exists_between_0_1_and_2, typeToString(contextualType), typeToString(type1), typeToString(type2)); - } - else { - error(node, ts.Diagnostics.No_best_common_type_exists_between_0_and_1, typeToString(type1), typeToString(type2)); - } - resultType = emptyObjectType; - } - return resultType; - } - function checkAndMarkExpression(node, contextualType, contextualMapper) { - var result = checkExpression(node, contextualType, contextualMapper); - getNodeLinks(node).flags |= 1 /* TypeChecked */; - return result; - } - function checkExpression(node, contextualType, contextualMapper) { - switch (node.kind) { - case 55 /* Identifier */: - return checkIdentifier(node); - case 83 /* ThisKeyword */: - return checkThisExpression(node); - case 81 /* SuperKeyword */: - return checkSuperExpression(node, false); - case 79 /* NullKeyword */: - return nullType; - case 85 /* TrueKeyword */: - case 70 /* FalseKeyword */: - return booleanType; - case 2 /* NumericLiteral */: - return numberType; - case 3 /* StringLiteral */: - return stringType; - case 4 /* RegularExpressionLiteral */: - return globalRegExpType; - case 112 /* QualifiedName */: - return checkPropertyAccess(node); - case 127 /* ArrayLiteral */: - return checkArrayLiteral(node, contextualType, contextualMapper); - case 128 /* ObjectLiteral */: - return checkObjectLiteral(node, contextualType, contextualMapper); - case 130 /* PropertyAccess */: - return checkPropertyAccess(node); - case 131 /* IndexedAccess */: - return checkIndexedAccess(node); - case 132 /* CallExpression */: - return checkCallExpression(node); - case 133 /* NewExpression */: - return checkNewExpression(node); - case 134 /* TypeAssertion */: - return checkTypeAssertion(node); - case 135 /* ParenExpression */: - return checkExpression(node.expression); - case 136 /* FunctionExpression */: - case 137 /* ArrowFunction */: - return checkFunctionExpression(node, contextualType, contextualMapper); - case 138 /* PrefixOperator */: - return checkPrefixExpression(node); - case 139 /* PostfixOperator */: - return checkPostfixExpression(node); - case 140 /* BinaryExpression */: - return checkBinaryExpression(node, contextualType, contextualMapper); - case 141 /* ConditionalExpression */: - return checkConditionalExpression(node, contextualType, contextualMapper); - } - return unknownType; - } - function checkTypeParameter(node) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); - checkSourceElement(node.constraint); - checkTypeParameterHasIllegalReferencesInConstraint(node); - } - function checkParameter(parameterDeclaration) { - checkVariableDeclaration(parameterDeclaration); - checkCollisionWithIndexVariableInGeneratedCode(parameterDeclaration, parameterDeclaration.name); - if (parameterDeclaration.flags & (16 /* Public */ | 32 /* Private */) && !(parameterDeclaration.parent.kind === 117 /* Constructor */ && parameterDeclaration.parent.body)) { - error(parameterDeclaration, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } - if (parameterDeclaration.flags & 8 /* Rest */) { - if (!isArrayType(getTypeOfSymbol(parameterDeclaration.symbol))) { - error(parameterDeclaration, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); - } - } - else { - if (parameterDeclaration.initializer && !parameterDeclaration.parent.body) { - error(parameterDeclaration, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); - } - } - function checkReferencesInInitializer(n) { - if (n.kind === 55 /* Identifier */) { - var referencedSymbol = getNodeLinks(n).resolvedSymbol; - if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(parameterDeclaration.parent.locals, referencedSymbol.name, ts.SymbolFlags.Value) === referencedSymbol) { - if (referencedSymbol.valueDeclaration.kind === 114 /* Parameter */) { - if (referencedSymbol.valueDeclaration === parameterDeclaration) { - error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.identifierToString(parameterDeclaration.name)); - return; - } - var enclosingOrReferencedParameter = ts.forEach(parameterDeclaration.parent.parameters, function (p) { return p === parameterDeclaration || p === referencedSymbol.valueDeclaration ? p : undefined; }); - if (enclosingOrReferencedParameter === referencedSymbol.valueDeclaration) { - return; - } - } - error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.identifierToString(parameterDeclaration.name), ts.identifierToString(n)); - } - } - else { - ts.forEachChild(n, checkReferencesInInitializer); - } - } - if (parameterDeclaration.initializer) { - checkReferencesInInitializer(parameterDeclaration.initializer); - } - } - function checkSignatureDeclaration(node) { - checkTypeParameters(node.typeParameters); - ts.forEach(node.parameters, checkParameter); - if (node.type) { - checkSourceElement(node.type); - } - checkCollisionWithCapturedSuperVariable(node, node.name); - checkCollisionWithCapturedThisVariable(node, node.name); - checkCollisionWithArgumentsInGeneratedCode(node); - if (program.getCompilerOptions().noImplicitAny && !node.type) { - switch (node.kind) { - case 121 /* ConstructSignature */: - error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); - break; - case 120 /* CallSignature */: - error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); - break; - } - } - checkSpecializedSignatureDeclaration(node); - } - function checkTypeForDuplicateIndexSignatures(node) { - if (node.kind === 170 /* InterfaceDeclaration */) { - var nodeSymbol = getSymbolOfNode(node); - if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { - return; - } - } - var indexSymbol = getIndexSymbol(getSymbolOfNode(node)); - if (indexSymbol) { - var seenNumericIndexer = false; - var seenStringIndexer = false; - for (var i = 0, len = indexSymbol.declarations.length; i < len; ++i) { - var declaration = indexSymbol.declarations[i]; - if (declaration.parameters.length == 1 && declaration.parameters[0].type) { - switch (declaration.parameters[0].type.kind) { - case 110 /* StringKeyword */: - if (!seenStringIndexer) { - seenStringIndexer = true; - } - else { - error(declaration, ts.Diagnostics.Duplicate_string_index_signature); - } - break; - case 108 /* NumberKeyword */: - if (!seenNumericIndexer) { - seenNumericIndexer = true; - } - else { - error(declaration, ts.Diagnostics.Duplicate_number_index_signature); - } - break; - } - } - } - } - } - function checkPropertyDeclaration(node) { - checkVariableDeclaration(node); - } - function checkMethodDeclaration(node) { - checkFunctionDeclaration(node); - } - function checkConstructorDeclaration(node) { - checkSignatureDeclaration(node); - checkSourceElement(node.body); - var symbol = getSymbolOfNode(node); - var firstDeclaration = getDeclarationOfKind(symbol, node.kind); - if (node === firstDeclaration) { - checkFunctionOrConstructorSymbol(symbol); - } - if (!node.body) { - return; - } - function isSuperCallExpression(n) { - return n.kind === 132 /* CallExpression */ && n.func.kind === 81 /* SuperKeyword */; - } - function containsSuperCall(n) { - if (isSuperCallExpression(n)) { - return true; - } - switch (n.kind) { - case 136 /* FunctionExpression */: - case 167 /* FunctionDeclaration */: - case 137 /* ArrowFunction */: - case 128 /* ObjectLiteral */: - return false; - default: - return ts.forEachChild(n, containsSuperCall); - } - } - function markThisReferencesAsErrors(n) { - if (n.kind === 83 /* ThisKeyword */) { - error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); - } - else if (n.kind !== 136 /* FunctionExpression */ && n.kind !== 167 /* FunctionDeclaration */) { - ts.forEachChild(n, markThisReferencesAsErrors); - } - } - function isInstancePropertyWithInitializer(n) { - return n.kind === 115 /* Property */ && !(n.flags & 64 /* Static */) && !!n.initializer; - } - if (node.parent.baseType) { - if (containsSuperCall(node.body)) { - var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || ts.forEach(node.parameters, function (p) { return p.flags & (16 /* Public */ | 32 /* Private */); }); - if (superCallShouldBeFirst) { - var statements = node.body.statements; - if (!statements.length || statements[0].kind !== 146 /* ExpressionStatement */ || !isSuperCallExpression(statements[0].expression)) { - error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties); - } - else { - markThisReferencesAsErrors(statements[0].expression); - } - } - } - else { - error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call); - } - } - } - function checkAccessorDeclaration(node) { - if (node.kind === 118 /* GetAccessor */) { - if (!isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { - error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); - } - } - var otherKind = node.kind === 118 /* GetAccessor */ ? 119 /* SetAccessor */ : 118 /* GetAccessor */; - var otherAccessor = getDeclarationOfKind(node.symbol, otherKind); - if (otherAccessor) { - var visibilityFlags = 32 /* Private */ | 16 /* Public */; - if (((node.flags & visibilityFlags) !== (otherAccessor.flags & visibilityFlags))) { - error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); - } - var thisType = getAnnotatedAccessorType(node); - var otherType = getAnnotatedAccessorType(otherAccessor); - if (thisType && otherType) { - if (!isTypeIdenticalTo(thisType, otherType)) { - error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); - } - } - } - checkFunctionDeclaration(node); - checkAndStoreTypeOfAccessors(getSymbolOfNode(node)); - } - function checkTypeReference(node) { - var type = getTypeFromTypeReferenceNode(node); - if (type !== unknownType && node.typeArguments) { - var len = node.typeArguments.length; - for (var i = 0; i < len; i++) { - checkSourceElement(node.typeArguments[i]); - var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]); - if (constraint) { - var typeArgument = type.typeArguments[i]; - checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); - } - } - } - } - function checkTypeQuery(node) { - getTypeFromTypeQueryNode(node); - } - function checkTypeLiteral(node) { - ts.forEach(node.members, checkSourceElement); - var type = getTypeFromTypeLiteralNode(node); - checkIndexConstraints(type); - checkTypeForDuplicateIndexSignatures(node); - } - function checkArrayType(node) { - getTypeFromArrayTypeNode(node); - } - function isPrivateWithinAmbient(node) { - return (node.flags & 32 /* Private */) && isInAmbientContext(node); - } - function isInAmbientContext(node) { - while (node) { - if (node.flags & (2 /* Ambient */ | 512 /* DeclarationFile */)) - return true; - node = node.parent; - } - return false; - } - function checkSpecializedSignatureDeclaration(signatureDeclarationNode) { - var signature = getSignatureFromDeclaration(signatureDeclarationNode); - if (!signature.hasStringLiterals) { - return; - } - if (signatureDeclarationNode.body) { - error(signatureDeclarationNode, ts.Diagnostics.A_signature_with_an_implementation_cannot_use_a_string_literal_type); - return; - } - var signaturesOfSymbol = getSignaturesOfSymbol(getSymbolOfNode(signatureDeclarationNode)); - for (var i = 0; i < signaturesOfSymbol.length; i++) { - var otherSignature = signaturesOfSymbol[i]; - if (!otherSignature.hasStringLiterals && isSignatureAssignableTo(signature, otherSignature)) { - return; - } - } - error(signatureDeclarationNode, ts.Diagnostics.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature); - } - function getEffectiveDeclarationFlags(n, flagsToCheck) { - var flags = n.flags; - if (n.parent.kind !== 170 /* InterfaceDeclaration */ && isInAmbientContext(n)) { - if (!(flags & 2 /* Ambient */)) { - flags |= 1 /* Export */; - } - flags |= 2 /* Ambient */; - } - return flags & flagsToCheck; - } - function checkFunctionOrConstructorSymbol(symbol) { - function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) { - var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; - if (someButNotAllOverloadFlags !== 0) { - var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent; - var canonicalFlags = implementationSharesContainerWithFirstOverload ? getEffectiveDeclarationFlags(implementation, flagsToCheck) : getEffectiveDeclarationFlags(overloads[0], flagsToCheck); - ts.forEach(overloads, function (o) { - var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags; - if (deviation & 1 /* Export */) { - error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported); - } - else if (deviation & 2 /* Ambient */) { - error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); - } - else if (deviation & 32 /* Private */) { - error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_public_or_private); - } - else if (deviation & 4 /* QuestionMark */) { - error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required); - } - }); - } - } - var flagsToCheck = 1 /* Export */ | 2 /* Ambient */ | 32 /* Private */ | 4 /* QuestionMark */; - var someNodeFlags = 0; - var allNodeFlags = flagsToCheck; - var hasOverloads = false; - var bodyDeclaration; - var lastSeenNonAmbientDeclaration; - var declarations = symbol.declarations; - var isConstructor = (symbol.flags & 4096 /* Constructor */) !== 0; - for (var i = 0; i < declarations.length; i++) { - var node = declarations[i]; - if (node.kind === 167 /* FunctionDeclaration */ || node.kind === 116 /* Method */ || node.kind === 117 /* Constructor */) { - var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); - someNodeFlags |= currentNodeFlags; - allNodeFlags &= currentNodeFlags; - var inAmbientContext = isInAmbientContext(node); - var inAmbientContextOrInterface = node.parent.kind === 170 /* InterfaceDeclaration */ || node.parent.kind === 125 /* TypeLiteral */ || inAmbientContext; - if (!inAmbientContextOrInterface) { - lastSeenNonAmbientDeclaration = node; - } - if (node.body) { - if (bodyDeclaration) { - if (isConstructor) { - error(node, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); - } - else { - error(node, ts.Diagnostics.Duplicate_function_implementation); - } - } - else { - bodyDeclaration = node; - } - } - else { - hasOverloads = true; - } - } - } - if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) { - if (isConstructor) { - error(lastSeenNonAmbientDeclaration, ts.Diagnostics.Constructor_implementation_expected); - } - else { - error(lastSeenNonAmbientDeclaration, ts.Diagnostics.Function_implementation_expected); - } - } - if (hasOverloads) { - checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags); - if (bodyDeclaration) { - var signatures = getSignaturesOfSymbol(symbol); - var bodySignature = getSignatureFromDeclaration(bodyDeclaration); - if (!bodySignature.hasStringLiterals) { - for (var i = 0, len = signatures.length; i < len; ++i) { - if (!signatures[i].hasStringLiterals && !isSignatureAssignableTo(bodySignature, signatures[i])) { - error(signatures[i].declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation); - break; - } - } - } - } - } - } - function checkExportsOnMergedDeclarations(node) { - var symbol; - var symbol = node.localSymbol; - if (!symbol) { - symbol = getSymbolOfNode(node); - if (!(symbol.flags & ts.SymbolFlags.Export)) { - return; - } - } - if (getDeclarationOfKind(symbol, node.kind) !== node) { - return; - } - var exportedDeclarationSpaces = 0; - var nonExportedDeclarationSpaces = 0; - ts.forEach(symbol.declarations, function (d) { - var declarationSpaces = getDeclarationSpaces(d); - if (getEffectiveDeclarationFlags(d, 1 /* Export */)) { - exportedDeclarationSpaces |= declarationSpaces; - } - else { - nonExportedDeclarationSpaces |= declarationSpaces; - } - }); - var commonDeclarationSpace = exportedDeclarationSpaces & nonExportedDeclarationSpaces; - if (commonDeclarationSpace) { - ts.forEach(symbol.declarations, function (d) { - if (getDeclarationSpaces(d) & commonDeclarationSpace) { - error(d.name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.identifierToString(d.name)); - } - }); - } - function getDeclarationSpaces(d) { - switch (d.kind) { - case 170 /* InterfaceDeclaration */: - return 1048576 /* ExportType */; - case 172 /* ModuleDeclaration */: - return d.name.kind === 3 /* StringLiteral */ || ts.isInstantiated(d) ? 2097152 /* ExportNamespace */ | 524288 /* ExportValue */ : 2097152 /* ExportNamespace */; - case 169 /* ClassDeclaration */: - case 171 /* EnumDeclaration */: - return 1048576 /* ExportType */ | 524288 /* ExportValue */; - case 174 /* ImportDeclaration */: - var result = 0; - var target = resolveImport(getSymbolOfNode(d)); - ts.forEach(target.declarations, function (d) { - result |= getDeclarationSpaces(d); - }); - return result; - default: - return 524288 /* ExportValue */; - } - } - } - function checkFunctionDeclaration(node) { - checkSignatureDeclaration(node); - var symbol = getSymbolOfNode(node); - var localSymbol = node.localSymbol || symbol; - var firstDeclaration = getDeclarationOfKind(localSymbol, node.kind); - if (node === firstDeclaration) { - checkFunctionOrConstructorSymbol(localSymbol); - } - if (symbol.parent) { - if (getDeclarationOfKind(symbol, node.kind) === node) { - checkFunctionOrConstructorSymbol(symbol); - } - } - checkSourceElement(node.body); - if (node.type && !isAccessor(node.kind)) { - checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); - } - if (program.getCompilerOptions().noImplicitAny && !node.body && !node.type) { - if (!isPrivateWithinAmbient(node)) { - var typeName = typeToString(anyType); - if (node.name) { - error(node, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.identifierToString(node.name), typeName); - } - else { - error(node, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeName); - } - } - } - } - function checkBlock(node) { - ts.forEach(node.statements, checkSourceElement); - } - function checkCollisionWithArgumentsInGeneratedCode(node) { - if (!ts.hasRestParameters(node) || isInAmbientContext(node) || !node.body) { - return; - } - ts.forEach(node.parameters, function (p) { - if (p.name && p.name.text === argumentsSymbol.name) { - error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters); - } - }); - } - function checkCollisionWithIndexVariableInGeneratedCode(node, name) { - if (!(name && name.text === "_i")) { - return; - } - if (node.kind === 114 /* Parameter */) { - if (node.parent.body && ts.hasRestParameters(node.parent) && !isInAmbientContext(node)) { - error(node, ts.Diagnostics.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter); - } - return; - } - var symbol = getNodeLinks(node).resolvedSymbol; - if (symbol === unknownSymbol) { - return; - } - var current = node; - while (current) { - var definedOnCurrentLevel = ts.forEach(symbol.declarations, function (d) { return d.parent === current ? d : undefined; }); - if (definedOnCurrentLevel) { - return; - } - switch (current.kind) { - case 167 /* FunctionDeclaration */: - case 136 /* FunctionExpression */: - case 116 /* Method */: - case 137 /* ArrowFunction */: - case 117 /* Constructor */: - if (ts.hasRestParameters(current)) { - error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter); - return; - } - break; - } - current = current.parent; - } - } - function needCollisionCheckForIdentifier(node, identifier, name) { - if (!(identifier && identifier.text === name)) { - return false; - } - if (node.kind === 115 /* Property */ || node.kind === 116 /* Method */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */) { - return false; - } - if (isInAmbientContext(node)) { - return false; - } - if (node.kind === 114 /* Parameter */ && !node.parent.body) { - return false; - } - return true; - } - function checkCollisionWithCapturedThisVariable(node, name) { - if (!needCollisionCheckForIdentifier(node, name, "_this")) { - return; - } - potentialThisCollisions.push(node); - } - function checkIfThisIsCapturedInEnclosingScope(node) { - var current = node; - while (current) { - if (getNodeCheckFlags(current) & 4 /* CaptureThis */) { - var isDeclaration = node.kind !== 55 /* Identifier */; - if (isDeclaration) { - error(node.name, ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference); - } - else { - error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference); - } - return; - } - current = current.parent; - } - } - function checkCollisionWithCapturedSuperVariable(node, name) { - if (!needCollisionCheckForIdentifier(node, name, "_super")) { - return; - } - var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); - if (!enclosingClass || isInAmbientContext(enclosingClass)) { - return; - } - if (enclosingClass.baseType) { - var isDeclaration = node.kind !== 55 /* Identifier */; - if (isDeclaration) { - error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference); - } - else { - error(node, ts.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference); - } - } - } - function checkVariableDeclaration(node) { - checkSourceElement(node.type); - checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - var typeOfValueDeclaration = getTypeOfVariableOrParameterOrProperty(symbol); - var type; - var useTypeFromValueDeclaration = node === symbol.valueDeclaration; - if (useTypeFromValueDeclaration) { - type = typeOfValueDeclaration; - } - else { - type = getTypeOfVariableDeclaration(node); - } - if (node.initializer) { - if (!(getNodeLinks(node.initializer).flags & 1 /* TypeChecked */)) { - checkTypeAssignableTo(checkAndMarkExpression(node.initializer, type), type, node, undefined, undefined); - } - } - checkCollisionWithCapturedSuperVariable(node, node.name); - checkCollisionWithCapturedThisVariable(node, node.name); - if (!useTypeFromValueDeclaration) { - if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { - error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); - } - } - } - function checkVariableStatement(node) { - ts.forEach(node.declarations, checkVariableDeclaration); - } - function checkExpressionStatement(node) { - checkExpression(node.expression); - } - function checkIfStatement(node) { - checkExpression(node.expression); - checkSourceElement(node.thenStatement); - checkSourceElement(node.elseStatement); - } - function checkDoStatement(node) { - checkSourceElement(node.statement); - checkExpression(node.expression); - } - function checkWhileStatement(node) { - checkExpression(node.expression); - checkSourceElement(node.statement); - } - function checkForStatement(node) { - if (node.declarations) - ts.forEach(node.declarations, checkVariableDeclaration); - if (node.initializer) - checkExpression(node.initializer); - if (node.condition) - checkExpression(node.condition); - if (node.iterator) - checkExpression(node.iterator); - checkSourceElement(node.statement); - } - function checkForInStatement(node) { - if (node.declaration) { - checkVariableDeclaration(node.declaration); - if (node.declaration.type) { - error(node.declaration, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); - } - } - if (node.variable) { - var exprType = checkExpression(node.variable); - if (exprType !== anyType && exprType !== stringType) { - error(node.variable, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any); - } - else { - checkReferenceExpression(node.variable, ts.Diagnostics.Invalid_left_hand_side_in_for_in_statement); - } - } - var exprType = checkExpression(node.expression); - if (!isTypeAnyTypeObjectTypeOrTypeParameter(exprType) && exprType !== unknownType) { - error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); - } - checkSourceElement(node.statement); - } - function checkBreakOrContinueStatement(node) { - } - function getContainingFunction(node) { - while (true) { - node = node.parent; - if (!node || node.kind === 167 /* FunctionDeclaration */ || node.kind === 136 /* FunctionExpression */ || node.kind === 137 /* ArrowFunction */ || node.kind === 116 /* Method */ || node.kind === 117 /* Constructor */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */) { - return node; - } - } - } - function checkReturnStatement(node) { - if (node.expression && !(getNodeLinks(node.expression).flags & 1 /* TypeChecked */)) { - var func = getContainingFunction(node); - if (func) { - if (func.kind === 119 /* SetAccessor */) { - if (node.expression) { - error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); - } - } - else { - var returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func)); - var checkAssignability = func.type || (func.kind === 118 /* GetAccessor */ && getSetAccessorTypeAnnotationNode(getDeclarationOfKind(func.symbol, 119 /* SetAccessor */))); - if (checkAssignability) { - checkTypeAssignableTo(checkExpression(node.expression, returnType), returnType, node.expression, undefined, undefined); - } - else if (func.kind == 117 /* Constructor */) { - if (!isTypeAssignableTo(checkExpression(node.expression, returnType), returnType)) { - error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); - } - } - } - } - } - } - function checkWithStatement(node) { - checkExpression(node.expression); - error(node.expression, ts.Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any); - } - function checkSwitchStatement(node) { - var expressionType = checkExpression(node.expression); - ts.forEach(node.clauses, function (clause) { - if (clause.expression) { - var caseType = checkExpression(clause.expression); - if (!isTypeAssignableTo(expressionType, caseType)) { - checkTypeAssignableTo(caseType, expressionType, clause.expression, undefined, undefined); - } - } - checkBlock(clause); - }); - } - function checkLabelledStatement(node) { - checkSourceElement(node.statement); - } - function checkThrowStatement(node) { - checkExpression(node.expression); - } - function checkTryStatement(node) { - checkBlock(node.tryBlock); - if (node.catchBlock) - checkBlock(node.catchBlock); - if (node.finallyBlock) - checkBlock(node.finallyBlock); - } - function checkIndexConstraints(type) { - function checkIndexConstraintForProperty(prop, propertyType, indexDeclaration, indexType, indexKind) { - if (!indexType) { - return; - } - if (indexKind === 1 /* Number */ && !isNumericName(prop.name)) { - return; - } - var errorNode; - if (prop.parent === type.symbol) { - errorNode = prop.valueDeclaration; - } - else if (indexDeclaration) { - errorNode = indexDeclaration; - } - else if (type.flags & 2048 /* Interface */) { - var someBaseClassHasBothPropertyAndIndexer = ts.forEach(type.baseTypes, function (base) { return getPropertyOfType(base, prop.name) && getIndexTypeOfType(base, indexKind); }); - errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : type.symbol.declarations[0]; - } - if (errorNode && !isTypeAssignableTo(propertyType, indexType)) { - var errorMessage = indexKind === 0 /* String */ ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2 : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2; - error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType)); - } - } - var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1 /* Number */); - var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0 /* String */); - var stringIndexType = getIndexTypeOfType(type, 0 /* String */); - var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); - if (stringIndexType || numberIndexType) { - ts.forEach(getPropertiesOfType(type), function (prop) { - var propType = getTypeOfSymbol(prop); - checkIndexConstraintForProperty(prop, propType, declaredStringIndexer, stringIndexType, 0 /* String */); - checkIndexConstraintForProperty(prop, propType, declaredNumberIndexer, numberIndexType, 1 /* Number */); - }); - } - var errorNode; - if (stringIndexType && numberIndexType) { - errorNode = declaredNumberIndexer || declaredStringIndexer; - if (!errorNode && (type.flags & 2048 /* Interface */)) { - var someBaseTypeHasBothIndexers = ts.forEach(type.baseTypes, function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); }); - errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0]; - } - } - if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { - error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType)); - } - } - function checkTypeNameIsReserved(name, message) { - switch (name.text) { - case "any": - case "number": - case "boolean": - case "string": - case "void": - error(name, message, name.text); - } - } - function checkTypeParameters(typeParameterDeclarations) { - if (typeParameterDeclarations) { - for (var i = 0; i < typeParameterDeclarations.length; i++) { - var node = typeParameterDeclarations[i]; - checkTypeParameter(node); - for (var j = 0; j < i; j++) { - if (typeParameterDeclarations[j].symbol === node.symbol) { - error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.identifierToString(node.name)); - } - } - } - } - } - function checkClassDeclaration(node) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0); - checkTypeParameters(node.typeParameters); - checkCollisionWithCapturedThisVariable(node, node.name); - checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - var type = getDeclaredTypeOfSymbol(symbol); - var staticType = getTypeOfSymbol(symbol); - if (node.baseType) { - emitExtends = emitExtends || !isInAmbientContext(node); - checkTypeReference(node.baseType); - } - if (type.baseTypes.length) { - var baseType = type.baseTypes[0]; - checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1_Colon, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); - var staticBaseType = getTypeOfSymbol(baseType.symbol); - checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); - if (baseType.symbol !== resolveEntityName(node, node.baseType.typeName, ts.SymbolFlags.Value)) { - error(node.baseType, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); - } - checkExpression(node.baseType.typeName); - checkKindsOfPropertyMemberOverrides(type, baseType); - } - if (node.implementedTypes) { - ts.forEach(node.implementedTypes, function (typeRefNode) { - checkTypeReference(typeRefNode); - var t = getTypeFromTypeReferenceNode(typeRefNode); - if (t !== unknownType) { - var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t; - if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) { - checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1_Colon, ts.Diagnostics.Class_0_incorrectly_implements_interface_1); - } - else { - error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface); - } - } - }); - } - checkIndexConstraints(type); - ts.forEach(node.members, checkSourceElement); - checkTypeForDuplicateIndexSignatures(node); - } - function getTargetSymbol(s) { - return s.flags & 8388608 /* Instantiated */ ? getSymbolLinks(s).target : s; - } - function checkKindsOfPropertyMemberOverrides(type, baseType) { - var baseProperties = getPropertiesOfType(baseType); - for (var i = 0, len = baseProperties.length; i < len; ++i) { - var base = getTargetSymbol(baseProperties[i]); - if (base.flags & 67108864 /* Prototype */) { - continue; - } - var derived = getTargetSymbol(getPropertyOfType(type, base.name)); - if (derived) { - var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base); - var derivedDeclarationFlags = getDeclarationFlagsFromSymbol(derived); - if ((baseDeclarationFlags & 32 /* Private */) || (derivedDeclarationFlags & 32 /* Private */)) { - continue; - } - if ((baseDeclarationFlags & 64 /* Static */) !== (derivedDeclarationFlags & 64 /* Static */)) { - continue; - } - if ((base.flags & derived.flags & 2048 /* Method */) || ((base.flags & ts.SymbolFlags.PropertyOrAccessor) && (derived.flags & ts.SymbolFlags.PropertyOrAccessor))) { - continue; - } - var errorMessage; - if (base.flags & 2048 /* Method */) { - if (derived.flags & ts.SymbolFlags.Accessor) { - errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; - } - else { - ts.Debug.assert(derived.flags & 2 /* Property */); - errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property; - } - } - else if (base.flags & 2 /* Property */) { - ts.Debug.assert(derived.flags & 2048 /* Method */); - errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; - } - else { - ts.Debug.assert(base.flags & ts.SymbolFlags.Accessor); - ts.Debug.assert(derived.flags & 2048 /* Method */); - errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; - } - error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type)); - } - } - } - function isAccessor(kind) { - return kind === 118 /* GetAccessor */ || kind === 119 /* SetAccessor */; - } - function areTypeParametersIdentical(list1, list2) { - if (!list1 && !list2) { - return true; - } - if (!list1 || !list2 || list1.length !== list2.length) { - return false; - } - for (var i = 0, len = list1.length; i < len; i++) { - var tp1 = list1[i]; - var tp2 = list2[i]; - if (tp1.name.text !== tp2.name.text) { - return false; - } - if (!tp1.constraint && !tp2.constraint) { - continue; - } - if (!tp1.constraint || !tp2.constraint) { - return false; - } - if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) { - return false; - } - } - return true; - } - function checkInterfaceDeclaration(node) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); - checkTypeParameters(node.typeParameters); - checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - var firstInterfaceDecl = getDeclarationOfKind(symbol, 170 /* InterfaceDeclaration */); - if (symbol.declarations.length > 1) { - if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) { - error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters); - } - } - if (node === firstInterfaceDecl) { - var type = getDeclaredTypeOfSymbol(symbol); - if (checkInheritedPropertiesAreIdentical(type, node.name)) { - ts.forEach(type.baseTypes, function (baseType) { - checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1_Colon, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1); - }); - checkIndexConstraints(type); - } - } - ts.forEach(node.baseTypes, checkTypeReference); - ts.forEach(node.members, checkSourceElement); - checkTypeForDuplicateIndexSignatures(node); - } - function getConstantValue(node) { - var isNegative = false; - if (node.kind === 138 /* PrefixOperator */) { - var unaryExpression = node; - if (unaryExpression.operator === 25 /* MinusToken */ || unaryExpression.operator === 24 /* PlusToken */) { - node = unaryExpression.operand; - isNegative = unaryExpression.operator === 25 /* MinusToken */; - } - } - if (node.kind === 2 /* NumericLiteral */) { - var literalText = node.text; - return isNegative ? -literalText : +literalText; - } - return undefined; - } - function checkEnumDeclaration(node) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); - checkCollisionWithCapturedThisVariable(node, node.name); - checkExportsOnMergedDeclarations(node); - var enumSymbol = getSymbolOfNode(node); - var enumType = getDeclaredTypeOfSymbol(enumSymbol); - var autoValue = 0; - var ambient = isInAmbientContext(node); - ts.forEach(node.members, function (member) { - var initializer = member.initializer; - if (initializer) { - autoValue = getConstantValue(initializer); - if (autoValue === undefined && !ambient) { - checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined, undefined); - } - } - else if (ambient) { - autoValue = undefined; - } - if (autoValue !== undefined) { - getNodeLinks(member).enumMemberValue = autoValue++; - } - }); - var firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind); - if (node === firstDeclaration) { - var seenEnumMissingInitialInitializer = false; - ts.forEach(enumSymbol.declarations, function (declaration) { - if (declaration.kind !== 171 /* EnumDeclaration */) { - return false; - } - var enumDeclaration = declaration; - if (!enumDeclaration.members.length) { - return false; - } - var firstEnumMember = enumDeclaration.members[0]; - if (!firstEnumMember.initializer) { - if (seenEnumMissingInitialInitializer) { - error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element); - } - else { - seenEnumMissingInitialInitializer = true; - } - } - }); - } - } - function getFirstNonAmbientClassOrFunctionDeclaration(symbol) { - var declarations = symbol.declarations; - for (var i = 0; i < declarations.length; i++) { - var declaration = declarations[i]; - if ((declaration.kind === 169 /* ClassDeclaration */ || (declaration.kind === 167 /* FunctionDeclaration */ && declaration.body)) && !isInAmbientContext(declaration)) { - return declaration; - } - } - return undefined; - } - function checkModuleDeclaration(node) { - checkCollisionWithCapturedThisVariable(node, node.name); - checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !isInAmbientContext(node)) { - var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); - if (classOrFunc) { - if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { - error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); - } - else if (node.pos < classOrFunc.pos) { - error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); - } - } - } - if (node.name.kind === 3 /* StringLiteral */) { - if (!isGlobalSourceFile(node.parent)) { - error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); - } - if (isExternalModuleNameRelative(node.name.text)) { - error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); - } - } - checkSourceElement(node.body); - } - function getFirstIdentifier(node) { - while (node.kind === 112 /* QualifiedName */) { - node = node.left; - } - return node; - } - function checkImportDeclaration(node) { - checkCollisionWithCapturedThisVariable(node, node.name); - var symbol = getSymbolOfNode(node); - var target; - if (node.entityName) { - target = resolveImport(symbol); - if (target !== unknownSymbol) { - if (target.flags & ts.SymbolFlags.Value) { - var moduleName = getFirstIdentifier(node.entityName); - if (resolveEntityName(node, moduleName, ts.SymbolFlags.Value | ts.SymbolFlags.Namespace).flags & ts.SymbolFlags.Namespace) { - checkExpression(node.entityName); - } - else { - error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.identifierToString(moduleName)); - } - } - if (target.flags & ts.SymbolFlags.Type) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0); - } - } - } - else { - if (node.parent.kind === 177 /* SourceFile */) { - target = resolveImport(symbol); - } - else if (node.parent.kind === 173 /* ModuleBlock */ && node.parent.parent.name.kind === 3 /* StringLiteral */) { - if (isExternalModuleNameRelative(node.externalModuleName.text)) { - error(node, ts.Diagnostics.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name); - target = unknownSymbol; - } - else { - target = resolveImport(symbol); - } - } - else { - target = unknownSymbol; - } - } - if (target !== unknownSymbol) { - var excludedMeanings = (symbol.flags & ts.SymbolFlags.Value ? ts.SymbolFlags.Value : 0) | (symbol.flags & ts.SymbolFlags.Type ? ts.SymbolFlags.Type : 0) | (symbol.flags & ts.SymbolFlags.Namespace ? ts.SymbolFlags.Namespace : 0); - if (target.flags & excludedMeanings) { - error(node, ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0, symbolToString(symbol)); - } - } - } - function checkExportAssignment(node) { - var container = node.parent; - if (container.kind !== 177 /* SourceFile */) { - container = container.parent; - } - checkTypeOfExportAssignmentSymbol(getSymbolOfNode(container)); - } - function checkSourceElement(node) { - if (!node) - return; - switch (node.kind) { - case 113 /* TypeParameter */: - return checkTypeParameter(node); - case 114 /* Parameter */: - return checkParameter(node); - case 115 /* Property */: - return checkPropertyDeclaration(node); - case 120 /* CallSignature */: - case 121 /* ConstructSignature */: - case 122 /* IndexSignature */: - return checkSignatureDeclaration(node); - case 116 /* Method */: - return checkMethodDeclaration(node); - case 117 /* Constructor */: - return checkConstructorDeclaration(node); - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - return checkAccessorDeclaration(node); - case 123 /* TypeReference */: - return checkTypeReference(node); - case 124 /* TypeQuery */: - return checkTypeQuery(node); - case 125 /* TypeLiteral */: - return checkTypeLiteral(node); - case 126 /* ArrayType */: - return checkArrayType(node); - case 167 /* FunctionDeclaration */: - return checkFunctionDeclaration(node); - case 143 /* Block */: - case 168 /* FunctionBlock */: - case 173 /* ModuleBlock */: - return checkBlock(node); - case 144 /* VariableStatement */: - return checkVariableStatement(node); - case 146 /* ExpressionStatement */: - return checkExpressionStatement(node); - case 147 /* IfStatement */: - return checkIfStatement(node); - case 148 /* DoStatement */: - return checkDoStatement(node); - case 149 /* WhileStatement */: - return checkWhileStatement(node); - case 150 /* ForStatement */: - return checkForStatement(node); - case 151 /* ForInStatement */: - return checkForInStatement(node); - case 152 /* ContinueStatement */: - case 153 /* BreakStatement */: - return checkBreakOrContinueStatement(node); - case 154 /* ReturnStatement */: - return checkReturnStatement(node); - case 155 /* WithStatement */: - return checkWithStatement(node); - case 156 /* SwitchStatement */: - return checkSwitchStatement(node); - case 159 /* LabelledStatement */: - return checkLabelledStatement(node); - case 160 /* ThrowStatement */: - return checkThrowStatement(node); - case 161 /* TryStatement */: - return checkTryStatement(node); - case 166 /* VariableDeclaration */: - return ts.Debug.fail("Checker encountered variable declaration"); - case 169 /* ClassDeclaration */: - return checkClassDeclaration(node); - case 170 /* InterfaceDeclaration */: - return checkInterfaceDeclaration(node); - case 171 /* EnumDeclaration */: - return checkEnumDeclaration(node); - case 172 /* ModuleDeclaration */: - return checkModuleDeclaration(node); - case 174 /* ImportDeclaration */: - return checkImportDeclaration(node); - case 175 /* ExportAssignment */: - return checkExportAssignment(node); - } - } - function checkSourceFile(node) { - var links = getNodeLinks(node); - if (!(links.flags & 1 /* TypeChecked */)) { - emitExtends = false; - potentialThisCollisions.length = 0; - ts.forEach(node.statements, checkSourceElement); - if (ts.isExternalModule(node)) { - var symbol = getExportAssignmentSymbol(node.symbol); - if (symbol && symbol.flags & 4194304 /* Import */) { - getSymbolLinks(symbol).referenced = true; - } - } - if (potentialThisCollisions.length) { - ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope); - potentialThisCollisions.length = 0; - } - if (emitExtends) - links.flags |= 8 /* EmitExtends */; - links.flags |= 1 /* TypeChecked */; - } - } - function checkProgram() { - ts.forEach(program.getSourceFiles(), checkSourceFile); - } - function getSortedDiagnostics() { - if (diagnosticsModified) { - diagnostics.sort(ts.compareDiagnostics); - diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); - diagnosticsModified = false; - } - return diagnostics; - } - function getDiagnostics(sourceFile) { - if (sourceFile) { - checkSourceFile(sourceFile); - return ts.filter(getSortedDiagnostics(), function (d) { return d.file === sourceFile; }); - } - checkProgram(); - return getSortedDiagnostics(); - } - function getGlobalDiagnostics() { - return ts.filter(getSortedDiagnostics(), function (d) { return !d.file; }); - } - function getNodeAtPosition(sourceFile, position) { - function findChildAtPosition(parent) { - var child = ts.forEachChild(parent, function (node) { - if (position >= node.pos && position <= node.end && position >= ts.getTokenPosOfNode(node)) { - return findChildAtPosition(node); - } - }); - return child || parent; - } - if (position < sourceFile.pos) - position = sourceFile.pos; - if (position > sourceFile.end) - position = sourceFile.end; - return findChildAtPosition(sourceFile); - } - function getSymbolsInScope(location, meaning) { - var symbols = {}; - var memberFlags = 0; - function copySymbol(symbol, meaning) { - if (symbol.flags & meaning) { - var id = symbol.name; - if (!isReservedMemberName(id) && !ts.hasProperty(symbols, id)) { - symbols[id] = symbol; - } - } - } - function copySymbols(source, meaning) { - if (meaning) { - for (var id in source) { - if (ts.hasProperty(source, id)) { - copySymbol(source[id], meaning); - } - } - } - } - while (location) { - if (location.locals && !isGlobalSourceFile(location)) { - copySymbols(location.locals, meaning); - } - switch (location.kind) { - case 177 /* SourceFile */: - if (!ts.isExternalModule(location)) - break; - case 172 /* ModuleDeclaration */: - copySymbols(getSymbolOfNode(location).exports, meaning & ts.SymbolFlags.ModuleMember); - break; - case 171 /* EnumDeclaration */: - copySymbols(getSymbolOfNode(location).exports, meaning & 4 /* EnumMember */); - break; - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - if (!(memberFlags & 64 /* Static */)) { - copySymbols(getSymbolOfNode(location).members, meaning & ts.SymbolFlags.Type); - } - break; - case 136 /* FunctionExpression */: - if (location.name) { - copySymbol(location.symbol, meaning); - } - break; - case 163 /* CatchBlock */: - if (location.variable.text) { - copySymbol(location.symbol, meaning); - } - break; - } - memberFlags = location.flags; - location = location.parent; - } - copySymbols(globals, meaning); - return ts.mapToArray(symbols); - } - function isDeclarationIdentifier(identifier) { - if (identifier.parent) { - switch (identifier.parent.kind) { - case 113 /* TypeParameter */: - case 114 /* Parameter */: - case 166 /* VariableDeclaration */: - case 115 /* Property */: - case 129 /* PropertyAssignment */: - case 176 /* EnumMember */: - case 116 /* Method */: - case 167 /* FunctionDeclaration */: - case 136 /* FunctionExpression */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - case 171 /* EnumDeclaration */: - case 172 /* ModuleDeclaration */: - case 174 /* ImportDeclaration */: - return identifier.parent.name === identifier; - case 163 /* CatchBlock */: - return identifier.parent.variable === identifier; - } - } - return false; - } - function isTypeReferenceIdentifier(identifier) { - var node = identifier; - while (node.parent && node.parent.kind === 112 /* QualifiedName */) - node = node.parent; - return node.parent && node.parent.kind === 123 /* TypeReference */; - } - function isExpression(node) { - switch (node.kind) { - case 83 /* ThisKeyword */: - case 81 /* SuperKeyword */: - case 79 /* NullKeyword */: - case 85 /* TrueKeyword */: - case 70 /* FalseKeyword */: - case 4 /* RegularExpressionLiteral */: - case 127 /* ArrayLiteral */: - case 128 /* ObjectLiteral */: - case 130 /* PropertyAccess */: - case 131 /* IndexedAccess */: - case 132 /* CallExpression */: - case 133 /* NewExpression */: - case 134 /* TypeAssertion */: - case 135 /* ParenExpression */: - case 136 /* FunctionExpression */: - case 137 /* ArrowFunction */: - case 138 /* PrefixOperator */: - case 139 /* PostfixOperator */: - case 140 /* BinaryExpression */: - case 141 /* ConditionalExpression */: - return true; - case 112 /* QualifiedName */: - while (node.parent && node.parent.kind === 112 /* QualifiedName */) - node = node.parent; - return node.parent && node.parent.kind === 124 /* TypeQuery */; - case 55 /* Identifier */: - case 2 /* NumericLiteral */: - case 3 /* StringLiteral */: - var parent = node.parent; - if (parent) { - if (isExpression(parent)) - return true; - switch (parent.kind) { - case 166 /* VariableDeclaration */: - case 114 /* Parameter */: - case 115 /* Property */: - case 176 /* EnumMember */: - return parent.initializer === node; - case 146 /* ExpressionStatement */: - case 147 /* IfStatement */: - case 148 /* DoStatement */: - case 149 /* WhileStatement */: - case 154 /* ReturnStatement */: - case 155 /* WithStatement */: - case 156 /* SwitchStatement */: - case 157 /* CaseClause */: - case 160 /* ThrowStatement */: - case 156 /* SwitchStatement */: - return parent.expression === node; - case 150 /* ForStatement */: - return parent.initializer === node || parent.condition === node || parent.iterator === node; - case 151 /* ForInStatement */: - return parent.variable === node || parent.expression === node; - } - } - } - return false; - } - function getSymbolOfIdentifier(identifier) { - if (isExpression(identifier)) { - if (isRightSideOfQualifiedName()) { - } - return resolveEntityName(identifier, identifier, ts.SymbolFlags.Value); - } - if (isDeclarationIdentifier(identifier)) { - return getSymbolOfNode(identifier.parent); - } - if (isTypeReferenceIdentifier(identifier)) { - var entityName = isRightSideOfQualifiedName() ? identifier.parent : identifier; - var meaning = entityName.parent.kind === 123 /* TypeReference */ ? ts.SymbolFlags.Type : ts.SymbolFlags.Namespace; - return resolveEntityName(entityName, entityName, meaning); - } - function isRightSideOfQualifiedName() { - return (identifier.parent.kind === 112 /* QualifiedName */ || identifier.parent.kind === 130 /* PropertyAccess */) && identifier.parent.right === identifier; - } - } - function isExternalModuleSymbol(symbol) { - return symbol.flags & 128 /* ValueModule */ && symbol.declarations.length === 1 && symbol.declarations[0].kind === 177 /* SourceFile */; - } - function isNodeDescendentOf(node, ancestor) { - while (node) { - if (node === ancestor) - return true; - node = node.parent; - } - return false; - } - function isUniqueLocalName(name, container) { - for (var node = container; isNodeDescendentOf(node, container); node = node.nextContainer) { - if (node.locals && ts.hasProperty(node.locals, name) && node.locals[name].flags & (ts.SymbolFlags.Value | 524288 /* ExportValue */)) { - return false; - } - } - return true; - } - function getLocalNameOfContainer(container) { - var links = getNodeLinks(container); - if (!links.localModuleName) { - var prefix = ""; - var name = ts.unescapeIdentifier(container.name.text); - while (!isUniqueLocalName(ts.escapeIdentifier(prefix + name), container)) { - prefix += "_"; - } - links.localModuleName = prefix + ts.getSourceTextOfNode(container.name); - } - return links.localModuleName; - } - function getLocalNameForSymbol(symbol, location) { - var node = location; - while (node) { - if ((node.kind === 172 /* ModuleDeclaration */ || node.kind === 171 /* EnumDeclaration */) && getSymbolOfNode(node) === symbol) { - return getLocalNameOfContainer(node); - } - node = node.parent; - } - ts.Debug.fail("getLocalNameForSymbol failed"); - } - function getExpressionNamePrefix(node) { - var symbol = getNodeLinks(node).resolvedSymbol; - if (symbol) { - var exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); - if (symbol !== exportSymbol && !(exportSymbol.flags & ts.SymbolFlags.ExportHasLocal)) { - symbol = exportSymbol; - } - if (symbol.parent) { - return isExternalModuleSymbol(symbol.parent) ? "exports" : getLocalNameForSymbol(getParentOfSymbol(symbol), node.parent); - } - } - } - function getPropertyAccessSubstitution(node) { - var symbol = getNodeLinks(node).resolvedSymbol; - if (symbol && (symbol.flags & 4 /* EnumMember */)) { - var declaration = symbol.valueDeclaration; - var constantValue; - if (declaration.kind === 176 /* EnumMember */ && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) { - return constantValue.toString() + " /* " + ts.identifierToString(declaration.name) + " */"; - } - } - } - function getExportAssignmentName(node) { - var symbol = getExportAssignmentSymbol(getSymbolOfNode(node)); - return symbol && symbolIsValue(symbol) ? symbolToString(symbol) : undefined; - } - function isTopLevelValueImportedViaEntityName(node) { - if (node.parent.kind !== 177 /* SourceFile */ || !node.entityName) { - return false; - } - var symbol = getSymbolOfNode(node); - var target = resolveImport(symbol); - return target !== unknownSymbol && ((target.flags & ts.SymbolFlags.Value) !== 0); - } - function shouldEmitDeclarations() { - return program.getCompilerOptions().declaration && !program.getDiagnostics().length && !getDiagnostics().length; - } - function isReferencedImportDeclaration(node) { - var symbol = getSymbolOfNode(node); - if (getSymbolLinks(symbol).referenced) { - return true; - } - if (node.flags & 1 /* Export */) { - var target = resolveImport(symbol); - if (target !== unknownSymbol && target.flags & ts.SymbolFlags.Value) { - return true; - } - } - return false; - } - function isImplementationOfOverload(node) { - if (node.body) { - var symbol = getSymbolOfNode(node); - return getSignaturesOfSymbol(symbol).length > 1; - } - return false; - } - function getNodeCheckFlags(node) { - return getNodeLinks(node).flags; - } - function getEnumMemberValue(node) { - return getNodeLinks(node).enumMemberValue; - } - function writeTypeAtLocation(location, enclosingDeclaration, flags, writer) { - var symbol = getSymbolOfNode(location); - var type = symbol && !(symbol.flags & 512 /* TypeLiteral */) ? getTypeOfSymbol(symbol) : getTypeFromTypeNode(location); - writeTypeToTextWriter(type, enclosingDeclaration, flags, writer); - } - function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) { - var signature = getSignatureFromDeclaration(signatureDeclaration); - writeTypeToTextWriter(getReturnTypeOfSignature(signature), enclosingDeclaration, flags, writer); - } - function invokeEmitter() { - var resolver = { - getProgram: function () { return program; }, - getLocalNameOfContainer: getLocalNameOfContainer, - getExpressionNamePrefix: getExpressionNamePrefix, - getPropertyAccessSubstitution: getPropertyAccessSubstitution, - getExportAssignmentName: getExportAssignmentName, - isReferencedImportDeclaration: isReferencedImportDeclaration, - getNodeCheckFlags: getNodeCheckFlags, - getEnumMemberValue: getEnumMemberValue, - isTopLevelValueImportedViaEntityName: isTopLevelValueImportedViaEntityName, - shouldEmitDeclarations: shouldEmitDeclarations, - isDeclarationVisible: isDeclarationVisible, - isImplementationOfOverload: isImplementationOfOverload, - writeTypeAtLocation: writeTypeAtLocation, - writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration - }; - checkProgram(); - return ts.emitFiles(resolver); - } - function initializeTypeChecker() { - ts.forEach(program.getSourceFiles(), function (file) { - ts.bindSourceFile(file); - ts.forEach(file.semanticErrors, addDiagnostic); - }); - ts.forEach(program.getSourceFiles(), function (file) { - if (!ts.isExternalModule(file)) { - extendSymbolTable(globals, file.locals); - } - }); - getSymbolLinks(undefinedSymbol).type = undefinedType; - getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments"); - getSymbolLinks(unknownSymbol).type = unknownType; - globals[undefinedSymbol.name] = undefinedSymbol; - globalArrayType = getGlobalType("Array", 1); - globalObjectType = getGlobalType("Object"); - globalFunctionType = getGlobalType("Function"); - globalStringType = getGlobalType("String"); - globalNumberType = getGlobalType("Number"); - globalBooleanType = getGlobalType("Boolean"); - globalRegExpType = getGlobalType("RegExp"); - } - initializeTypeChecker(); - checker = { - getProgram: function () { return program; }, - getDiagnostics: getDiagnostics, - getGlobalDiagnostics: getGlobalDiagnostics, - getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, - getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, - getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, - getTypeCount: function () { return typeCount; }, - checkProgram: checkProgram, - emitFiles: invokeEmitter, - getSymbolOfNode: getSymbolOfNode, - getParentOfSymbol: getParentOfSymbol, - getTypeOfSymbol: getTypeOfSymbol, - getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, - getPropertiesOfType: getPropertiesOfType, - getSignaturesOfType: getSignaturesOfType, - getIndexTypeOfType: getIndexTypeOfType, - getReturnTypeOfSignature: getReturnTypeOfSignature, - resolveEntityName: resolveEntityName, - getSymbolsInScope: getSymbolsInScope, - getSymbolOfIdentifier: getSymbolOfIdentifier - }; - return checker; - } - ts.createTypeChecker = createTypeChecker; -})(ts || (ts = {})); -var ts; -(function (ts) { - (function (ByteOrderMark) { - ByteOrderMark[ByteOrderMark["None"] = 0] = "None"; - ByteOrderMark[ByteOrderMark["Utf8"] = 1] = "Utf8"; - ByteOrderMark[ByteOrderMark["Utf16BigEndian"] = 2] = "Utf16BigEndian"; - ByteOrderMark[ByteOrderMark["Utf16LittleEndian"] = 3] = "Utf16LittleEndian"; - })(ts.ByteOrderMark || (ts.ByteOrderMark = {})); - var ByteOrderMark = ts.ByteOrderMark; - var scanner = ts.createScanner(1 /* ES5 */); - var emptyArray = []; - function createNode(kind, pos, end, flags, parent) { - var node = new (ts.getNodeConstructor(kind))(); - node.pos = pos; - node.end = end; - node.flags = flags; - node.parent = parent; - return node; - } - var NodeObject = (function () { - function NodeObject() { - } - NodeObject.prototype.getSourceFile = function () { - var node = this; - while (node.kind !== 177 /* SourceFile */) - node = node.parent; - return node; - }; - NodeObject.prototype.getTextPos = function () { - return ts.getTokenPosOfNode(this); - }; - NodeObject.prototype.getFullWidth = function () { - return this.end - this.pos; - }; - NodeObject.prototype.getTriviaWidth = function () { - return ts.getTokenPosOfNode(this) - this.pos; - }; - NodeObject.prototype.getFullText = function () { - return this.getSourceFile().text.substring(this.pos, this.end); - }; - NodeObject.prototype.addSyntheticNodes = function (nodes, pos, end) { - scanner.setTextPos(pos); - while (pos < end) { - var token = scanner.scan(); - var textPos = scanner.getTextPos(); - var node = nodes.push(createNode(token, pos, textPos, 256 /* Synthetic */, this)); - pos = textPos; - } - return pos; - }; - NodeObject.prototype.createSyntaxList = function (nodes) { - var list = createNode(179 /* SyntaxList */, nodes.pos, nodes.end, 256 /* Synthetic */, this); - list._children = []; - var pos = nodes.pos; - for (var i = 0, len = nodes.length; i < len; i++) { - var node = nodes[i]; - if (pos < node.pos) { - pos = this.addSyntheticNodes(list._children, pos, node.pos); - } - list._children.push(node); - pos = node.end; - } - if (pos < nodes.end) { - this.addSyntheticNodes(list._children, pos, nodes.end); - } - return list; - }; - NodeObject.prototype.createChildren = function () { - var _this = this; - if (this.kind > 111 /* Missing */) { - scanner.setText(this.getSourceFile().text); - var children = []; - var pos = this.pos; - var processNode = function (node) { - if (pos < node.pos) { - pos = _this.addSyntheticNodes(children, pos, node.pos); - } - children.push(node); - pos = node.end; - }; - var processNodes = function (nodes) { - if (pos < nodes.pos) { - pos = _this.addSyntheticNodes(children, pos, nodes.pos); - } - children.push(_this.createSyntaxList(nodes)); - pos = nodes.end; - }; - ts.forEachChild(this, processNode, processNodes); - if (pos < this.end) { - this.addSyntheticNodes(children, pos, this.end); - } - scanner.setText(undefined); - } - this._children = children || emptyArray; - }; - NodeObject.prototype.getChildCount = function () { - if (!this._children) - this.createChildren(); - return this._children.length; - }; - NodeObject.prototype.getChildAt = function (index) { - if (!this._children) - this.createChildren(); - return this._children[index]; - }; - NodeObject.prototype.getChildren = function () { - if (!this._children) - this.createChildren(); - return this._children; - }; - NodeObject.prototype.getFirstToken = function () { - var children = this.getChildren(); - for (var i = 0; i < children.length; i++) { - var child = children[i]; - if (child.kind < 111 /* Missing */) - return child; - if (child.kind > 111 /* Missing */) - return child.getFirstToken(); - } - }; - NodeObject.prototype.getLastToken = function () { - var children = this.getChildren(); - for (var i = children.length - 1; i >= 0; i--) { - var child = children[i]; - if (child.kind < 111 /* Missing */) - return child; - if (child.kind > 111 /* Missing */) - return child.getLastToken(); - } - }; - return NodeObject; - })(); - var SymbolObject = (function () { - function SymbolObject(flags, name) { - this.flags = flags; - this.name = name; - } - SymbolObject.prototype.getFlags = function () { - return this.flags; - }; - SymbolObject.prototype.getName = function () { - return this.name; - }; - SymbolObject.prototype.getDeclarations = function () { - return this.declarations; - }; - return SymbolObject; - })(); - var TypeObject = (function () { - function TypeObject(checker, flags) { - this.checker = checker; - this.flags = flags; - } - TypeObject.prototype.getFlags = function () { - return this.flags; - }; - TypeObject.prototype.getSymbol = function () { - return this.symbol; - }; - TypeObject.prototype.getProperties = function () { - return this.checker.getPropertiesOfType(this); - }; - TypeObject.prototype.getCallSignatures = function () { - return this.checker.getSignaturesOfType(this, 0 /* Call */); - }; - TypeObject.prototype.getConstructSignatures = function () { - return this.checker.getSignaturesOfType(this, 1 /* Construct */); - }; - TypeObject.prototype.getStringIndexType = function () { - return this.checker.getIndexTypeOfType(this, 0 /* String */); - }; - TypeObject.prototype.getNumberIndexType = function () { - return this.checker.getIndexTypeOfType(this, 1 /* Number */); - }; - return TypeObject; - })(); - var SignatureObject = (function () { - function SignatureObject(checker) { - this.checker = checker; - } - SignatureObject.prototype.getDeclaration = function () { - return this.declaration; - }; - SignatureObject.prototype.getTypeParameters = function () { - return this.typeParameters; - }; - SignatureObject.prototype.getParameters = function () { - return this.parameters; - }; - SignatureObject.prototype.getReturnType = function () { - return this.checker.getReturnTypeOfSignature(this); - }; - return SignatureObject; - })(); - function createLanguageService(host) { - var program; - var typeChecker; - var filesByName; - function createCompilerHost() { - return { - getSourceFile: function (filename, languageVersion) { - var hostFile = filesByName[filename]; - if (!hostFile.sourceText) { - hostFile.sourceText = host.getScriptSnapshot(filename); - } - return ts.createSourceFile(filename, hostFile.sourceText.getText(0, hostFile.sourceText.getLength()), languageVersion); - }, - getDefaultLibFilename: function () { return ts.combinePaths(ts.getDirectoryPath(ts.normalizePath(sys.getExecutingFilePath())), "lib.d.ts"); }, - getCancellationToken: function () { return undefined; }, - writeFile: function (fileName, data) { - throw Error("TODO: write file"); - }, - getCurrentDirectory: function () { - throw Error("TODO: getCurrentDirectory"); - }, - getCanonicalFileName: ts.getCanonicalFileName, - useCaseSensitiveFileNames: function () { return sys.useCaseSensitiveFileNames; } - }; - } - function synchronizeHostData() { - filesByName = {}; - var files = host.getScriptFileNames(); - ts.forEach(files, function (f) { - filesByName[f] = { - version: host.getScriptVersion(f), - isOpen: host.getScriptIsOpen(f), - byteOrderMark: host.getScriptByteOrderMark(f) - }; - }); - var currentProgram = program; - var options = host.getCompilationSettings(); - program = ts.createProgram(files, options, createCompilerHost()); - typeChecker = program.getTypeChecker(); - if (currentProgram) { - } - } - function getSyntacticDiagnostics(filename) { - synchronizeHostData(); - var sourceFile = program.getSourceFile(filename); - return sourceFile ? program.getDiagnostics(sourceFile) : []; - } - function getSemanticDiagnostics(filename) { - synchronizeHostData(); - var sourceFile = program.getSourceFile(filename); - return sourceFile ? typeChecker.getDiagnostics(sourceFile) : []; - } - return { - getSyntacticDiagnostics: getSyntacticDiagnostics, - getSemanticDiagnostics: getSemanticDiagnostics - }; - } - ts.createLanguageService = createLanguageService; - function initializeServices() { - ts.objectAllocator = { - getNodeConstructor: function (kind) { - function Node() { - } - var proto = new NodeObject(); - proto.kind = kind; - proto.pos = 0; - proto.end = 0; - proto.flags = 0; - proto.parent = undefined; - Node.prototype = proto; - return Node; - }, - getSymbolConstructor: function () { return SymbolObject; }, - getTypeConstructor: function () { return TypeObject; }, - getSignatureConstructor: function () { return SignatureObject; } - }; - } - initializeServices(); -})(ts || (ts = {})); -var ts; -(function (ts) { - var ScriptSnapshotShimAdapter = (function () { - function ScriptSnapshotShimAdapter(scriptSnapshotShim) { - this.scriptSnapshotShim = scriptSnapshotShim; - this.lineStartPositions = null; - } - ScriptSnapshotShimAdapter.prototype.getText = function (start, end) { - return this.scriptSnapshotShim.getText(start, end); - }; - ScriptSnapshotShimAdapter.prototype.getLength = function () { - return this.scriptSnapshotShim.getLength(); - }; - ScriptSnapshotShimAdapter.prototype.getLineStartPositions = function () { - if (this.lineStartPositions == null) { - this.lineStartPositions = JSON.parse(this.scriptSnapshotShim.getLineStartPositions()); - } - return this.lineStartPositions; - }; - ScriptSnapshotShimAdapter.prototype.getChangeRange = function (scriptSnapshot) { - function createTextRange(start, length) { - function createSpan(start, length) { - return { - start: function () { return start; }, - end: function () { return start + length; }, - lenth: function () { return length; }, - isEmpty: function () { return length === 0; } - }; - } - return { - span: function () { return createSpan(start, length); }, - newLength: function () { return length; }, - newSpan: function () { return createSpan(start, length); }, - isUnchanged: function () { return length === 0; } - }; - } - var encoded = this.scriptSnapshotShim.getChangeRange(scriptSnapshot.scriptSnapshotShim); - if (encoded == null) { - return null; - } - var decoded = JSON.parse(encoded); - return createTextRange(decoded.span.start, decoded.span.length); - }; - return ScriptSnapshotShimAdapter; - })(); - var LanguageServiceShimHostAdapter = (function () { - function LanguageServiceShimHostAdapter(shimHost) { - this.shimHost = shimHost; - } - LanguageServiceShimHostAdapter.prototype.log = function (s) { - this.shimHost.log(s); - }; - LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () { - var settingsJson = this.shimHost.getCompilationSettings(); - if (settingsJson == null || settingsJson == "") { - return {}; - } - var settings = JSON.parse(settingsJson); - return settings; - }; - LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { - var encoded = this.shimHost.getScriptFileNames(); - return JSON.parse(encoded); - }; - LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { - return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName)); - }; - LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { - return this.shimHost.getScriptVersion(fileName); - }; - LanguageServiceShimHostAdapter.prototype.getScriptIsOpen = function (fileName) { - return this.shimHost.getScriptIsOpen(fileName); - }; - LanguageServiceShimHostAdapter.prototype.getScriptByteOrderMark = function (fileName) { - return this.shimHost.getScriptByteOrderMark(fileName); - }; - LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { - var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); - if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { - return null; - } - try { - return JSON.parse(diagnosticMessagesJson); - } - catch (e) { - this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); - return null; - } - }; - return LanguageServiceShimHostAdapter; - })(); - ts.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter; -})(ts || (ts = {})); diff --git a/bin/tsc b/bin/tsc index 9c392ee8e3b..3c0dab574f2 100644 --- a/bin/tsc +++ b/bin/tsc @@ -1,2 +1,2 @@ #!/usr/bin/env node -require('./tc.js') +require('./tsc.js') diff --git a/bin/tsc.js b/bin/tsc.js index 36d85d40758..5efd7065d8e 100644 --- a/bin/tsc.js +++ b/bin/tsc.js @@ -16,20 +16,11 @@ and limitations under the License. var ts; (function (ts) { ts.Diagnostics = { - Unknown_compiler_option_0: { code: 6001, category: 1 /* Error */, key: "Unknown compiler option '{0}'." }, - File_0_not_found: { code: 6002, category: 1 /* Error */, key: "File '{0}' not found." }, - File_0_must_have_extension_ts_or_d_ts: { code: 6003, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, - Unrecognized_escape_sequence: { code: 1000, category: 1 /* Error */, key: "Unrecognized escape sequence." }, - Unexpected_character_0: { code: 1001, category: 1 /* Error */, key: "Unexpected character {0}." }, - Missing_close_quote_character: { code: 1002, category: 1 /* Error */, key: "Missing close quote character." }, - Identifier_expected: { code: -9999999, category: 1 /* Error */, key: "Identifier expected." }, - _0_keyword_expected: { code: 1004, category: 1 /* Error */, key: "'{0}' keyword expected." }, - _0_expected: { code: -9999999, category: 1 /* Error */, key: "'{0}' expected." }, - Identifier_expected_0_is_a_keyword: { code: 1006, category: 1 /* Error */, key: "Identifier expected; '{0}' is a keyword." }, - Automatic_semicolon_insertion_not_allowed: { code: 1007, category: 1 /* Error */, key: "Automatic semicolon insertion not allowed." }, + Unterminated_string_literal: { code: 1002, category: 1 /* Error */, key: "Unterminated string literal." }, + Identifier_expected: { code: 1003, category: 1 /* Error */, key: "Identifier expected." }, + _0_expected: { code: 1005, category: 1 /* Error */, key: "'{0}' expected." }, Trailing_comma_not_allowed: { code: 1009, category: 1 /* Error */, key: "Trailing comma not allowed." }, Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." }, - public_or_private_modifier_must_precede_static: { code: 1011, category: 1 /* Error */, key: "'public' or 'private' modifier must precede 'static'." }, Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." }, Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation." }, A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list." }, @@ -42,16 +33,16 @@ var ts; An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation." }, An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation." }, An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'." }, - extends_clause_already_seen: { code: 1024, category: 1 /* Error */, key: "'extends' clause already seen." }, - extends_clause_must_precede_implements_clause: { code: 1025, category: 1 /* Error */, key: "'extends' clause must precede 'implements' clause." }, - Classes_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "Classes can only extend a single class." }, - implements_clause_already_seen: { code: 1027, category: 1 /* Error */, key: "'implements' clause already seen." }, + A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: 1 /* Error */, key: "A class or interface declaration can only have one 'extends' clause." }, + An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: 1 /* Error */, key: "An 'extends' clause must precede an 'implements' clause." }, + A_class_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "A class can only extend a single class." }, + A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: 1 /* Error */, key: "A class declaration can only have one 'implements' clause." }, Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen." }, _0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier." }, _0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen." }, _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element." }, - Interface_declaration_cannot_have_implements_clause: { code: 1032, category: 1 /* Error */, key: "Interface declaration cannot have 'implements' clause." }, - super_invocation_cannot_have_type_arguments: { code: 1034, category: 1 /* Error */, key: "'super' invocation cannot have type arguments." }, + An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: 1 /* Error */, key: "An interface declaration cannot have an 'implements' clause." }, + super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: 1 /* Error */, key: "'super' must be followed by an argument list or member access." }, Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names." }, Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts." }, A_function_implementation_cannot_be_declared_in_an_ambient_context: { code: 1037, category: 1 /* Error */, key: "A function implementation cannot be declared in an ambient context." }, @@ -67,23 +58,11 @@ var ts; A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer." }, A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter." }, A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters." }, - Modifiers_cannot_appear_here: { code: 1055, category: 1 /* Error */, key: "Modifiers cannot appear here." }, Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher." }, - Enum_member_must_have_initializer: { code: -9999999, category: 1 /* Error */, key: "Enum member must have initializer." }, + Enum_member_must_have_initializer: { code: 1061, category: 1 /* Error */, key: "Enum member must have initializer." }, An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module." }, Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers." }, - module_class_interface_enum_import_or_statement: { code: 1067, category: 3 /* NoPrefix */, key: "module, class, interface, enum, import or statement" }, Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1 /* Error */, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, - statement: { code: 1069, category: 3 /* NoPrefix */, key: "statement" }, - case_or_default_clause: { code: 1070, category: 3 /* NoPrefix */, key: "case or default clause" }, - identifier: { code: 1071, category: 3 /* NoPrefix */, key: "identifier" }, - call_construct_index_property_or_function_signature: { code: 1072, category: 3 /* NoPrefix */, key: "call, construct, index, property or function signature" }, - expression: { code: 1073, category: 3 /* NoPrefix */, key: "expression" }, - type_name: { code: 1074, category: 3 /* NoPrefix */, key: "type name" }, - property_or_accessor: { code: 1075, category: 3 /* NoPrefix */, key: "property or accessor" }, - parameter: { code: 1076, category: 3 /* NoPrefix */, key: "parameter" }, - type: { code: 1077, category: 3 /* NoPrefix */, key: "type" }, - type_parameter: { code: 1078, category: 3 /* NoPrefix */, key: "type parameter" }, A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration." }, Invalid_reference_directive_syntax: { code: 1084, category: 1 /* Error */, key: "Invalid 'reference' directive syntax." }, Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher." }, @@ -102,13 +81,12 @@ var ts; Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode." }, with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode." }, delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode." }, - Invalid_left_hand_side_in_for_in_statement: { code: 1103, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." }, A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement." }, A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary." }, A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body." }, - Expression_expected: { code: -9999999, category: 1 /* Error */, key: "Expression expected." }, - Type_expected: { code: -9999999, category: 1 /* Error */, key: "Type expected." }, + Expression_expected: { code: 1109, category: 1 /* Error */, key: "Expression expected." }, + Type_expected: { code: 1110, category: 1 /* Error */, key: "Type expected." }, A_constructor_implementation_cannot_be_declared_in_an_ambient_context: { code: 1111, category: 1 /* Error */, key: "A constructor implementation cannot be declared in an ambient context." }, A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional." }, A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement." }, @@ -120,136 +98,259 @@ var ts; An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name." }, An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers." }, Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1 /* Error */, key: "Octal literals are not allowed in strict mode." }, - Duplicate_identifier_0: { code: 2000, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, - Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 2018, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, - Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 2019, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, - Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 2020, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, - Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 2021, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, - Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 2022, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, - Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 2023, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2208, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2209, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 2210, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, - Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 2211, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, - Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 2212, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 2213, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, - Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2214, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2215, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2216, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2217, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2218, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 2219, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 2220, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, - Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 2221, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2222, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2223, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, - new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 2068, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, - Multiple_constructor_implementations_are_not_allowed: { code: 2070, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." }, - A_class_may_only_implement_another_class_or_interface: { code: 2074, category: 1 /* Error */, key: "A class may only implement another class or interface." }, - get_and_set_accessor_must_have_the_same_type: { code: 2096, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." }, - Static_members_cannot_reference_class_type_parameters: { code: 2099, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, - super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2102, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, - The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2112, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2113, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2114, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, - The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2115, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, - The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2116, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, - The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2117, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, - The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2118, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, - The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2119, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, - A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2126, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, - Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2127, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." }, - A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2131, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, - Untyped_function_calls_may_not_accept_type_arguments: { code: 2158, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." }, - The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2120, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2121, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, - Setters_cannot_return_a_value: { code: 2122, category: 1 /* Error */, key: "Setters cannot return a value." }, - Invalid_left_hand_side_of_assignment_expression: { code: 2130, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." }, - Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2134, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, - All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2135, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." }, - The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2139, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, - Overload_signatures_must_all_be_public_or_private: { code: 2150, category: 1 /* Error */, key: "Overload signatures must all be public or private." }, - Overload_signatures_must_all_be_exported_or_not_exported: { code: 2151, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." }, - Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2152, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." }, - Overload_signatures_must_all_be_optional_or_required: { code: 2153, category: 1 /* Error */, key: "Overload signatures must all be optional or required." }, - this_cannot_be_referenced_in_constructor_arguments: { code: 2155, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." }, - Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2161, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, - A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2163, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." }, - Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2189, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, - Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2190, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, - Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2192, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, - super_cannot_be_referenced_in_constructor_arguments: { code: 2193, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." }, - Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2194, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" }, - Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2196, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." }, - Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2197, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, - Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2200, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, - Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2205, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, - Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2206, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, - Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2207, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, - Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2224, category: 1 /* Error */, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, - Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2225, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, - Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2229, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, - Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2230, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, - Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2231, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." }, - Duplicate_string_index_signature: { code: 2232, category: 1 /* Error */, key: "Duplicate string index signature." }, - Duplicate_number_index_signature: { code: 2233, category: 1 /* Error */, key: "Duplicate number index signature." }, - All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2234, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, - Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2235, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, - Function_implementation_name_must_be_0: { code: 2239, category: 1 /* Error */, key: "Function implementation name must be '{0}'." }, - Constructor_implementation_is_missing: { code: 2240, category: 1 /* Error */, key: "Constructor implementation is missing." }, - An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2245, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, - A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2246, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, - Function_overload_must_be_static: { code: 2247, category: 1 /* Error */, key: "Function overload must be static." }, - Function_overload_must_not_be_static: { code: 2248, category: 1 /* Error */, key: "Function overload must not be static." }, - Circular_definition_of_import_alias_0: { code: 3000, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, - Cannot_find_name_0: { code: 3001, category: 1 /* Error */, key: "Cannot find name '{0}'." }, - Module_0_has_no_exported_member_1: { code: 3002, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, - Cannot_find_external_module_0: { code: 3003, category: 1 /* Error */, key: "Cannot find external module '{0}'." }, - A_module_cannot_have_more_than_one_export_assignment: { code: 3004, category: 1 /* Error */, key: "A module cannot have more than one export assignment." }, - Type_0_recursively_references_itself_as_a_base_type: { code: 3005, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." }, - A_class_may_only_extend_another_class: { code: 3006, category: 1 /* Error */, key: "A class may only extend another class." }, - An_interface_may_only_extend_a_class_or_another_interface: { code: 3007, category: 1 /* Error */, key: "An interface may only extend a class or another interface." }, - Generic_type_0_requires_1_type_argument_s: { code: 3008, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." }, - Type_0_is_not_generic: { code: 3009, category: 1 /* Error */, key: "Type '{0}' is not generic." }, - Cannot_find_global_type_0: { code: 3010, category: 1 /* Error */, key: "Cannot find global type '{0}'." }, - Global_type_0_must_be_a_class_or_interface_type: { code: 3011, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." }, - Global_type_0_must_have_1_type_parameter_s: { code: 3012, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." }, - this_cannot_be_referenced_in_a_module_body: { code: 3013, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." }, - this_cannot_be_referenced_in_a_static_property_initializer: { code: 3014, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." }, - this_cannot_be_referenced_in_current_location: { code: -9999999, category: 1 /* Error */, key: "'this' cannot be referenced in current location." }, - super_can_only_be_referenced_in_a_derived_class: { code: 3015, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." }, - Property_0_does_not_exist_on_type_1: { code: 3017, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." }, - An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 3018, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, - Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 3019, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}':" }, - Type_0_does_not_satisfy_the_constraint_1: { code: 3019, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." }, - Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 3020, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." }, - Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 3021, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." }, - Only_a_void_function_can_be_called_with_the_new_keyword: { code: 3022, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." }, - Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 3023, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, - Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 3024, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, - Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 3024, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, - No_best_common_type_exists_among_return_expressions: { code: 3027, category: 1 /* Error */, key: "No best common type exists among return expressions." }, - Operator_0_cannot_be_applied_to_types_1_and_2: { code: 3028, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, - No_best_common_type_exists_between_0_and_1: { code: 3029, category: 1 /* Error */, key: "No best common type exists between '{0}' and '{1}'." }, - No_best_common_type_exists_between_0_1_and_2: { code: 3030, category: 1 /* Error */, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, - A_rest_parameter_must_be_of_an_array_type: { code: 3031, category: 1 /* Error */, key: "A rest parameter must be of an array type." }, - A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 3032, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." }, - Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 3033, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." }, - Duplicate_function_implementation: { code: 3034, category: 1 /* Error */, key: "Duplicate function implementation." }, - Overload_signature_is_not_compatible_with_function_implementation: { code: 3035, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." }, - Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 3036, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, - Index_signature_is_missing_in_type_0: { code: 4003, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." }, - Index_signatures_are_incompatible_Colon: { code: 4004, category: 1 /* Error */, key: "Index signatures are incompatible:" }, - Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4016, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4017, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 4018, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 4019, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, - In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 4024, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, - Named_properties_0_of_types_1_and_2_are_not_identical: { code: 4032, category: 3 /* NoPrefix */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1 /* Error */, key: "Variable declaration list cannot be empty." }, + Digit_expected: { code: 1124, category: 1 /* Error */, key: "Digit expected." }, + Hexadecimal_digit_expected: { code: 1125, category: 1 /* Error */, key: "Hexadecimal digit expected." }, + Unexpected_end_of_text: { code: 1126, category: 1 /* Error */, key: "Unexpected end of text." }, + Invalid_character: { code: 1127, category: 1 /* Error */, key: "Invalid character." }, + Declaration_or_statement_expected: { code: 1128, category: 1 /* Error */, key: "Declaration or statement expected." }, + Statement_expected: { code: 1129, category: 1 /* Error */, key: "Statement expected." }, + case_or_default_expected: { code: 1130, category: 1 /* Error */, key: "'case' or 'default' expected." }, + Property_or_signature_expected: { code: 1131, category: 1 /* Error */, key: "Property or signature expected." }, + Enum_member_expected: { code: 1132, category: 1 /* Error */, key: "Enum member expected." }, + Type_reference_expected: { code: 1133, category: 1 /* Error */, key: "Type reference expected." }, + Variable_declaration_expected: { code: 1134, category: 1 /* Error */, key: "Variable declaration expected." }, + Argument_expression_expected: { code: 1135, category: 1 /* Error */, key: "Argument expression expected." }, + Property_assignment_expected: { code: 1136, category: 1 /* Error */, key: "Property assignment expected." }, + Expression_or_comma_expected: { code: 1137, category: 1 /* Error */, key: "Expression or comma expected." }, + Parameter_declaration_expected: { code: 1138, category: 1 /* Error */, key: "Parameter declaration expected." }, + Type_parameter_declaration_expected: { code: 1139, category: 1 /* Error */, key: "Type parameter declaration expected." }, + Type_argument_expected: { code: 1140, category: 1 /* Error */, key: "Type argument expected." }, + String_literal_expected: { code: 1141, category: 1 /* Error */, key: "String literal expected." }, + Line_break_not_permitted_here: { code: 1142, category: 1 /* Error */, key: "Line break not permitted here." }, + catch_or_finally_expected: { code: 1143, category: 1 /* Error */, key: "'catch' or 'finally' expected." }, + Block_or_expected: { code: 1144, category: 1 /* Error */, key: "Block or ';' expected." }, + Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." }, + Declaration_expected: { code: 1146, category: 1 /* Error */, key: "Declaration expected." }, + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." }, + Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, + Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + Duplicate_identifier_0: { code: 2300, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, + Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, + Circular_definition_of_import_alias_0: { code: 2303, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, + Cannot_find_name_0: { code: 2304, category: 1 /* Error */, key: "Cannot find name '{0}'." }, + Module_0_has_no_exported_member_1: { code: 2305, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, + File_0_is_not_an_external_module: { code: 2306, category: 1 /* Error */, key: "File '{0}' is not an external module." }, + Cannot_find_external_module_0: { code: 2307, category: 1 /* Error */, key: "Cannot find external module '{0}'." }, + A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: 1 /* Error */, key: "A module cannot have more than one export assignment." }, + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, + Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." }, + A_class_may_only_extend_another_class: { code: 2311, category: 1 /* Error */, key: "A class may only extend another class." }, + An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: 1 /* Error */, key: "An interface may only extend a class or another interface." }, + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, + Generic_type_0_requires_1_type_argument_s: { code: 2314, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." }, + Type_0_is_not_generic: { code: 2315, category: 1 /* Error */, key: "Type '{0}' is not generic." }, + Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." }, + Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." }, + Cannot_find_global_type_0: { code: 2318, category: 1 /* Error */, key: "Cannot find global type '{0}'." }, + Named_properties_0_of_types_1_and_2_are_not_identical: { code: 2319, category: 1 /* Error */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2320, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, + Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, + Type_0_is_not_assignable_to_type_1_Colon: { code: 2322, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}':" }, + Type_0_is_not_assignable_to_type_1: { code: 2323, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." }, + Property_0_is_missing_in_type_1: { code: 2324, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." }, + Private_property_0_cannot_be_reimplemented: { code: 2325, category: 1 /* Error */, key: "Private property '{0}' cannot be reimplemented." }, + Types_of_property_0_are_incompatible_Colon: { code: 2326, category: 1 /* Error */, key: "Types of property '{0}' are incompatible:" }, + Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2327, category: 1 /* Error */, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, + Types_of_parameters_0_and_1_are_incompatible_Colon: { code: 2328, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, + Index_signature_is_missing_in_type_0: { code: 2329, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." }, + Index_signatures_are_incompatible_Colon: { code: 2330, category: 1 /* Error */, key: "Index signatures are incompatible:" }, + this_cannot_be_referenced_in_a_module_body: { code: 2331, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." }, + this_cannot_be_referenced_in_current_location: { code: 2332, category: 1 /* Error */, key: "'this' cannot be referenced in current location." }, + this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." }, + this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." }, + super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." }, + super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." }, + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, + Property_0_does_not_exist_on_type_1: { code: 2339, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." }, + Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: 1 /* Error */, key: "Only public methods of the base class are accessible via the 'super' keyword" }, + Property_0_is_inaccessible: { code: 2341, category: 1 /* Error */, key: "Property '{0}' is inaccessible." }, + An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 2342, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, + Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 2343, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}':" }, + Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." }, + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, + Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." }, + Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." }, + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." }, + Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." }, + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 2353, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, + No_best_common_type_exists_among_return_expressions: { code: 2354, category: 1 /* Error */, key: "No best common type exists among return expressions." }, + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2360, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." }, + Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, + No_best_common_type_exists_between_0_1_and_2: { code: 2366, category: 1 /* Error */, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, + No_best_common_type_exists_between_0_and_1: { code: 2367, category: 1 /* Error */, key: "No best common type exists between '{0}' and '{1}'." }, + Type_parameter_name_cannot_be_0: { code: 2368, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" }, + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, + A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: 1 /* Error */, key: "A rest parameter must be of an array type." }, + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." }, + Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." }, + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, + Duplicate_string_index_signature: { code: 2374, category: 1 /* Error */, key: "Duplicate string index signature." }, + Duplicate_number_index_signature: { code: 2375, category: 1 /* Error */, key: "Duplicate number index signature." }, + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, + Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." }, + A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, + Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." }, + get_and_set_accessor_must_have_the_same_type: { code: 2380, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." }, + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." }, + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." }, + Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." }, + Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." }, + Overload_signatures_must_all_be_public_or_private: { code: 2385, category: 1 /* Error */, key: "Overload signatures must all be public or private." }, + Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: 1 /* Error */, key: "Overload signatures must all be optional or required." }, + Function_overload_must_be_static: { code: 2387, category: 1 /* Error */, key: "Function overload must be static." }, + Function_overload_must_not_be_static: { code: 2388, category: 1 /* Error */, key: "Function overload must not be static." }, + Function_implementation_name_must_be_0: { code: 2389, category: 1 /* Error */, key: "Function implementation name must be '{0}'." }, + Constructor_implementation_is_missing: { code: 2390, category: 1 /* Error */, key: "Constructor implementation is missing." }, + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." }, + Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." }, + Duplicate_function_implementation: { code: 2393, category: 1 /* Error */, key: "Duplicate function implementation." }, + Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." }, + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, + Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2397, category: 1 /* Error */, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, + Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2398, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, + Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." }, + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, + Setters_cannot_return_a_value: { code: 2408, category: 1 /* Error */, key: "Setters cannot return a value." }, + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" }, + All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." }, + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, + Class_name_cannot_be_0: { code: 2414, category: 1 /* Error */, key: "Class name cannot be '{0}'" }, + Class_0_incorrectly_extends_base_class_1: { code: 2415, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." }, + Class_0_incorrectly_extends_base_class_1_Colon: { code: 2416, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}':" }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: 2418, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, + Class_0_incorrectly_implements_interface_1: { code: 2420, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." }, + Class_0_incorrectly_implements_interface_1_Colon: { code: 2421, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}':" }, + A_class_may_only_implement_another_class_or_interface: { code: 2422, category: 1 /* Error */, key: "A class may only implement another class or interface." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: 1 /* Error */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: 1 /* Error */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, + Interface_name_cannot_be_0: { code: 2427, category: 1 /* Error */, key: "Interface name cannot be '{0}'" }, + All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, + Interface_0_incorrectly_extends_interface_1_Colon: { code: 2429, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}':" }, + Interface_0_incorrectly_extends_interface_1: { code: 2430, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." }, + Enum_name_cannot_be_0: { code: 2431, category: 1 /* Error */, key: "Enum name cannot be '{0}'" }, + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, + A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, + A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, + Ambient_external_modules_cannot_be_nested_in_other_modules: { code: 2435, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." }, + Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." }, + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" }, + Import_name_cannot_be_0: { code: 2438, category: 1 /* Error */, key: "Import name cannot be '{0}'" }, + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, + Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" }, + Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1 /* Error */, key: "Import declaration '{0}' is using private name '{1}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4003, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4005, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4007, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4009, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4011, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4013, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4015, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4017, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4018, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 4021, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, + Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." }, + Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, + Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: 1 /* Error */, key: "Exported variable '{0}' has or is using private name '{1}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using private name '{1}'." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using private name '{1}'." }, + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using private name '{0}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using private name '{0}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using private name '{0}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using private name '{0}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using private name '{0}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: 1 /* Error */, key: "Return type of public method from exported class has or is using private name '{0}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: 1 /* Error */, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: 1 /* Error */, key: "Return type of method from exported interface has or is using private name '{0}'." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." }, + Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: 1 /* Error */, key: "Return type of exported function has or is using private name '{0}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, The_current_host_does_not_support_the_0_option: { code: 5001, category: 1 /* Error */, key: "The current host does not support the '{0}' option." }, Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1 /* Error */, key: "Cannot find the common subdirectory path for the input files." }, Cannot_read_file_0_Colon_1: { code: 5012, category: 1 /* Error */, key: "Cannot read file '{0}': {1}" }, - Unsupported_file_encoding: { code: 5013, category: 3 /* NoPrefix */, key: "Unsupported file encoding." }, + Unsupported_file_encoding: { code: 5013, category: 1 /* Error */, key: "Unsupported file encoding." }, + Unknown_compiler_option_0: { code: 5023, category: 1 /* Error */, key: "Unknown compiler option '{0}'." }, Could_not_write_file_0_Colon_1: { code: 5033, category: 1 /* Error */, key: "Could not write file '{0}': {1}" }, Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1 /* Error */, key: "Option mapRoot cannot be specified without specifying sourcemap option." }, Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1 /* Error */, key: "Option sourceRoot cannot be specified without specifying sourcemap option." }, @@ -260,13 +361,10 @@ var ts; Watch_input_files: { code: 6005, category: 2 /* Message */, key: "Watch input files." }, Redirect_output_structure_to_the_directory: { code: 6006, category: 2 /* Message */, key: "Redirect output structure to the directory." }, Do_not_emit_comments_to_output: { code: 6009, category: 2 /* Message */, key: "Do not emit comments to output." }, - Skip_resolution_and_preprocessing: { code: 6010, category: 2 /* Message */, key: "Skip resolution and preprocessing." }, Specify_ECMAScript_target_version_Colon_ES3_default_or_ES5: { code: 6015, category: 2 /* Message */, key: "Specify ECMAScript target version: 'ES3' (default), or 'ES5'" }, Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: 2 /* Message */, key: "Specify module code generation: 'commonjs' or 'amd'" }, Print_this_message: { code: 6017, category: 2 /* Message */, key: "Print this message." }, Print_the_compiler_s_version: { code: 6019, category: 2 /* Message */, key: "Print the compiler's version." }, - Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: { code: 6021, category: 2 /* Message */, key: "Allow use of deprecated '{0}' keyword when referencing an external module." }, - Specify_locale_for_errors_and_messages_For_example_0_or_1: { code: 6022, category: 2 /* Message */, key: "Specify locale for errors and messages. For example '{0}' or '{1}'" }, Syntax_Colon_0: { code: 6023, category: 2 /* Message */, key: "Syntax: {0}" }, options: { code: 6024, category: 2 /* Message */, key: "options" }, file: { code: 6025, category: 2 /* Message */, key: "file" }, @@ -274,29 +372,25 @@ var ts; Options_Colon: { code: 6027, category: 2 /* Message */, key: "Options:" }, Version_0: { code: 6029, category: 2 /* Message */, key: "Version {0}" }, Insert_command_line_options_and_files_from_a_file: { code: 6030, category: 2 /* Message */, key: "Insert command line options and files from a file." }, - Use_the_0_flag_to_see_options: { code: 6031, category: 2 /* Message */, key: "Use the '{0}' flag to see options." }, File_change_detected_Compiling: { code: 6032, category: 2 /* Message */, key: "File change detected. Compiling..." }, - STRING: { code: 6033, category: 2 /* Message */, key: "STRING" }, KIND: { code: 6034, category: 2 /* Message */, key: "KIND" }, FILE: { code: 6035, category: 2 /* Message */, key: "FILE" }, VERSION: { code: 6036, category: 2 /* Message */, key: "VERSION" }, LOCATION: { code: 6037, category: 2 /* Message */, key: "LOCATION" }, DIRECTORY: { code: 6038, category: 2 /* Message */, key: "DIRECTORY" }, - NUMBER: { code: 6039, category: 2 /* Message */, key: "NUMBER" }, - Specify_the_codepage_to_use_when_opening_source_files: { code: 6040, category: 2 /* Message */, key: "Specify the codepage to use when opening source files." }, - Additional_locations_Colon: { code: 6041, category: 2 /* Message */, key: "Additional locations:" }, Compilation_complete_Watching_for_file_changes: { code: 6042, category: 2 /* Message */, key: "Compilation complete. Watching for file changes." }, Generates_corresponding_map_file: { code: 6043, category: 2 /* Message */, key: "Generates corresponding '.map' file." }, Compiler_option_0_expects_an_argument: { code: 6044, category: 1 /* Error */, key: "Compiler option '{0}' expects an argument." }, Unterminated_quoted_string_in_response_file_0: { code: 6045, category: 1 /* Error */, key: "Unterminated quoted string in response file '{0}'." }, - Argument_for_module_option_must_be_commonjs_or_amd: { code: 6045, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, - Argument_for_target_option_must_be_es3_or_es5: { code: 6046, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3' or 'es5'." }, - Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6047, category: 1 /* Error */, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, - Unsupported_locale_0: { code: 6048, category: 1 /* Error */, key: "Unsupported locale '{0}'." }, - Unable_to_open_file_0: { code: 6049, category: 1 /* Error */, key: "Unable to open file '{0}'." }, - Corrupted_locale_file_0: { code: 6050, category: 1 /* Error */, key: "Corrupted locale file {0}." }, - No_input_files_specified: { code: 6051, category: 1 /* Error */, key: "No input files specified." }, - Warn_on_expressions_and_declarations_with_an_implied_any_type: { code: 7004, category: 2 /* Message */, key: "Warn on expressions and declarations with an implied 'any' type." }, + Argument_for_module_option_must_be_commonjs_or_amd: { code: 6046, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, + Argument_for_target_option_must_be_es3_or_es5: { code: 6047, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3' or 'es5'." }, + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: 1 /* Error */, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, + Unsupported_locale_0: { code: 6049, category: 1 /* Error */, key: "Unsupported locale '{0}'." }, + Unable_to_open_file_0: { code: 6050, category: 1 /* Error */, key: "Unable to open file '{0}'." }, + Corrupted_locale_file_0: { code: 6051, category: 1 /* Error */, key: "Corrupted locale file {0}." }, + Warn_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: 2 /* Message */, key: "Warn on expressions and declarations with an implied 'any' type." }, + File_0_not_found: { code: 6053, category: 1 /* Error */, key: "File '{0}' not found." }, + File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1 /* Error */, key: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1 /* Error */, key: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: 1 /* Error */, key: "Member '{0}' implicitly has an '{1}' type." }, @@ -304,84 +398,12 @@ var ts; _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1 /* Error */, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1 /* Error */, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1 /* Error */, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Lambda_function_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7014, category: 1 /* Error */, key: "Lambda function, which lacks return-type annotation, implicitly has an '{0}' return type." }, - Array_literal_implicitly_has_an_0_type: { code: 7015, category: 1 /* Error */, key: "Array literal implicitly has an '{0}' type." }, Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1 /* Error */, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1 /* Error */, key: "Index signature of object type implicitly has an 'any' type." }, Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1 /* Error */, key: "Object literal's property '{0}' implicitly has an '{1}' type." }, Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1 /* Error */, key: "Rest parameter '{0}' implicitly has an 'any[]' type." }, Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1 /* Error */, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Variable_declaration_list_cannot_be_empty: { code: -9999999, category: 1 /* Error */, key: "Variable declaration list cannot be empty." }, - Digit_expected: { code: -9999999, category: 1 /* Error */, key: "Digit expected." }, - Hexadecimal_digit_expected: { code: -9999999, category: 1 /* Error */, key: "Hexadecimal digit expected." }, - Unexpected_end_of_text: { code: -9999999, category: 1 /* Error */, key: "Unexpected end of text." }, - Unterminated_string_constant: { code: -9999999, category: 1 /* Error */, key: "Unterminated string constant." }, - Invalid_character: { code: -9999999, category: 1 /* Error */, key: "Invalid character." }, - Declaration_or_statement_expected: { code: -9999999, category: 1 /* Error */, key: "Declaration or statement expected." }, - Statement_expected: { code: -9999999, category: 1 /* Error */, key: "Statement expected." }, - case_or_default_expected: { code: -9999999, category: 1 /* Error */, key: "'case' or 'default' expected." }, - Property_or_signature_expected: { code: -9999999, category: 1 /* Error */, key: "Property or signature expected." }, - Enum_member_expected: { code: -9999999, category: 1 /* Error */, key: "Enum member expected." }, - Type_reference_expected: { code: -9999999, category: 1 /* Error */, key: "Type reference expected." }, - Variable_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Variable declaration expected." }, - Argument_expression_expected: { code: -9999999, category: 1 /* Error */, key: "Argument expression expected." }, - Property_assignment_expected: { code: -9999999, category: 1 /* Error */, key: "Property assignment expected." }, - Expression_or_comma_expected: { code: -9999999, category: 1 /* Error */, key: "Expression or comma expected." }, - Parameter_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Parameter declaration expected." }, - Type_parameter_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Type parameter declaration expected." }, - Type_argument_expected: { code: -9999999, category: 1 /* Error */, key: "Type argument expected." }, - String_literal_expected: { code: -9999999, category: 1 /* Error */, key: "String literal expected." }, - not_preceded_by_parameter_list: { code: -9999999, category: 1 /* Error */, key: "'=>' not preceded by parameter list." }, - Invalid_assignment_target: { code: -9999999, category: 1 /* Error */, key: "Invalid assignment target." }, - super_must_be_followed_by_argument_list_or_member_access: { code: -9999999, category: 1 /* Error */, key: "'super' must be followed by argument list or member access." }, - Line_break_not_permitted_here: { code: -9999999, category: 1 /* Error */, key: "Line break not permitted here." }, - catch_or_finally_expected: { code: -9999999, category: 1 /* Error */, key: "'catch' or 'finally' expected." }, - Block_or_expected: { code: -9999999, category: 1 /* Error */, key: "Block or ';' expected." }, - Modifiers_not_permitted_on_index_signature_members: { code: -9999999, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." }, - Class_member_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Class member declaration expected." }, - Declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Declaration expected." }, - Invalid_reference_comment: { code: -9999999, category: 1 /* Error */, key: "Invalid reference comment." }, - File_0_is_not_an_external_module: { code: -9999999, category: 1 /* Error */, key: "File '{0}' is not an external module." }, - Excessive_stack_depth_comparing_types_0_and_1: { code: -9999999, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, - Type_0_is_not_assignable_to_type_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}':" }, - Type_0_is_not_assignable_to_type_1: { code: -9999999, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." }, - Property_0_is_missing_in_type_1: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." }, - Private_property_0_cannot_be_reimplemented: { code: -9999999, category: 1 /* Error */, key: "Private property '{0}' cannot be reimplemented." }, - Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2012, category: 1 /* Error */, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, - Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: -9999999, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, - Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: -9999999, category: 1 /* Error */, key: "Only public methods of the base class are accessible via the 'super' keyword" }, - A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: -9999999, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, - Constructors_for_derived_classes_must_contain_a_super_call: { code: -9999999, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." }, - Import_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Import name cannot be '{0}'" }, - Type_parameter_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" }, - Class_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Class name cannot be '{0}'" }, - Interface_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Interface name cannot be '{0}'" }, - Enum_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Enum name cannot be '{0}'" }, - Types_of_property_0_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of property '{0}' are incompatible:" }, - Types_of_parameters_0_and_1_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, - Unknown_identifier_0: { code: -9999999, category: 1 /* Error */, key: "Unknown identifier '{0}'." }, - Property_0_is_inaccessible: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is inaccessible." }, - Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: -9999999, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." }, - Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, - Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, - Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: -9999999, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, - Class_0_incorrectly_extends_base_class_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}':" }, - Class_0_incorrectly_extends_base_class_1: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: -9999999, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, - Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: -9999999, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, - Class_0_incorrectly_implements_interface_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}':" }, - Class_0_incorrectly_implements_interface_1: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." }, - Interface_0_incorrectly_extends_interface_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}':" }, - Interface_0_incorrectly_extends_interface_1: { code: -9999999, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." }, - Ambient_external_modules_cannot_be_nested_in_other_modules: { code: -9999999, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." }, - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: -9999999, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." }, - A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, - A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, - Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: -9999999, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, - Import_declaration_conflicts_with_local_declaration_of_0: { code: -9999999, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" }, - Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: -9999999, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" }, - Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: -9999999, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" } + You_cannot_rename_this_element: { code: 8000, category: 1 /* Error */, key: "You cannot rename this element." } }; })(ts || (ts = {})); var ts; @@ -559,6 +581,11 @@ var ts; return result; } ts.getLineStarts = getLineStarts; + function getPositionFromLineAndCharacter(lineStarts, line, character) { + ts.Debug.assert(line > 0); + return lineStarts[line - 1] + character - 1; + } + ts.getPositionFromLineAndCharacter = getPositionFromLineAndCharacter; function getLineAndCharacterOfPosition(lineStarts, position) { var lineNumber = ts.binarySearch(lineStarts, position); if (lineNumber < 0) { @@ -579,9 +606,11 @@ var ts; function isWhiteSpace(ch) { return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; } + ts.isWhiteSpace = isWhiteSpace; function isLineBreak(ch) { return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */; } + ts.isLineBreak = isLineBreak; function isDigit(ch) { return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; } @@ -643,7 +672,7 @@ var ts; ts.skipTrivia = skipTrivia; function getCommentRanges(text, pos, trailing) { var result; - var collecting = trailing; + var collecting = trailing || pos === 0; while (true) { var ch = text.charCodeAt(pos); switch (ch) { @@ -656,6 +685,9 @@ var ts; return result; } collecting = true; + if (result && result.length) { + result[result.length - 1].hasTrailingNewLine = true; + } continue; case 9 /* tab */: case 11 /* verticalTab */: @@ -665,12 +697,14 @@ var ts; continue; case 47 /* slash */: var nextChar = text.charCodeAt(pos + 1); + var hasTrailingNewLine = false; if (nextChar === 47 /* slash */ || nextChar === 42 /* asterisk */) { var startPos = pos; pos += 2; if (nextChar === 47 /* slash */) { while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { + hasTrailingNewLine = true; break; } pos++; @@ -688,13 +722,16 @@ var ts; if (collecting) { if (!result) result = []; - result.push({ pos: startPos, end: pos }); + result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine }); } continue; } break; default: if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (result && result.length && isLineBreak(ch)) { + result[result.length - 1].hasTrailingNewLine = true; + } pos++; continue; } @@ -866,7 +903,7 @@ var ts; } if (isLineBreak(ch)) { result += text.substring(start, pos); - error(ts.Diagnostics.Unterminated_string_constant); + error(ts.Diagnostics.Unterminated_string_literal); break; } pos++; @@ -1014,9 +1051,8 @@ var ts; } if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { pos += 2; - var safeLength = len - 1; var commentClosed = false; - while (pos < safeLength) { + while (pos < len) { var ch = text.charCodeAt(pos); if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { pos += 2; @@ -1029,7 +1065,6 @@ var ts; pos++; } if (!commentClosed) { - pos++; error(ts.Diagnostics.Asterisk_Slash_expected); } if (onComment) { @@ -1457,6 +1492,10 @@ var ts; SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.StringKeyword] = "LastKeyword"; SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedWord"; SyntaxKind[SyntaxKind["LastFutureReservedWord"] = SyntaxKind.YieldKeyword] = "LastFutureReservedWord"; + SyntaxKind[SyntaxKind["FirstTypeNode"] = SyntaxKind.TypeReference] = "FirstTypeNode"; + SyntaxKind[SyntaxKind["LastTypeNode"] = SyntaxKind.ArrayType] = "LastTypeNode"; + SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation"; + SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.CaretEqualsToken] = "LastPunctuation"; })(ts.SyntaxKind || (ts.SyntaxKind = {})); var SyntaxKind = ts.SyntaxKind; (function (NodeFlags) { @@ -1476,6 +1515,7 @@ var ts; (function (TypeFormatFlags) { TypeFormatFlags[TypeFormatFlags["None"] = 0x00000000] = "None"; TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 0x00000001] = "WriteArrayAsGenericType"; + TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 0x00000002] = "UseTypeOfFunction"; })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); var TypeFormatFlags = ts.TypeFormatFlags; (function (SymbolAccessibility) { @@ -1589,7 +1629,6 @@ var ts; DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; - DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; })(ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); var DiagnosticCategory = ts.DiagnosticCategory; (function (ModuleKind) { @@ -1793,9 +1832,9 @@ var ts; } ts.map = map; function concatenate(array1, array2) { - if (!array2.length) + if (!array2 || !array2.length) return array1; - if (!array1.length) + if (!array1 || !array1.length) return array2; return array1.concat(array2); } @@ -1900,9 +1939,9 @@ var ts; if (ts.localizedDiagnosticMessages) { message = ts.localizedDiagnosticMessages[message]; } - Debug.assert(message, "Diagnostic message does not exist in locale map."); return message; } + ts.getLocaleSpecificMessage = getLocaleSpecificMessage; function createFileDiagnostic(file, start, length, message) { var text = getLocaleSpecificMessage(message.key); if (arguments.length > 4) { @@ -2168,10 +2207,6 @@ var ts; return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } ts.fileExtensionIs = fileExtensionIs; - function getCanonicalFileName(fileName) { - return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); - } - ts.getCanonicalFileName = getCanonicalFileName; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -2209,7 +2244,7 @@ var ts; (function (Debug) { var currentAssertionLevel = 0 /* None */; function shouldAssert(level) { - return this.currentAssertionLevel >= level; + return currentAssertionLevel >= level; } Debug.shouldAssert = shouldAssert; function assert(expression, message, verboseDebugInfo) { @@ -2293,9 +2328,6 @@ var sys = (function () { write: function (s) { WScript.StdOut.Write(s); }, - writeErr: function (s) { - WScript.StdErr.Write(s); - }, readFile: readFile, writeFile: writeFile, resolvePath: function (path) { @@ -2318,9 +2350,6 @@ var sys = (function () { getCurrentDirectory: function () { return new ActiveXObject("WScript.Shell").CurrentDirectory; }, - getMemoryUsage: function () { - return 0; - }, exit: function (exitCode) { try { WScript.Quit(exitCode); @@ -2370,10 +2399,7 @@ var sys = (function () { newLine: _os.EOL, useCaseSensitiveFileNames: useCaseSensitiveFileNames, write: function (s) { - process.stdout.write(s); - }, - writeErr: function (s) { - process.stderr.write(s); + _fs.writeSync(1, s); }, readFile: readFile, writeFile: writeFile, @@ -2413,7 +2439,9 @@ var sys = (function () { return process.cwd(); }, getMemoryUsage: function () { - global.gc(); + if (global.gc) { + global.gc(); + } return process.memoryUsage().heapUsed; }, exit: function (exitCode) { @@ -2543,6 +2571,23 @@ var ts; ts.Debug.assert(isPrologueDirective(node)); return node.expression.text === "use strict"; } + function getLeadingCommentsOfNode(node, sourceFileOfNode) { + if (node.kind === 114 /* Parameter */ || node.kind === 113 /* TypeParameter */) { + return ts.concatenate(ts.getTrailingComments(sourceFileOfNode.text, node.pos), ts.getLeadingComments(sourceFileOfNode.text, node.pos)); + } + else { + return ts.getLeadingComments(sourceFileOfNode.text, node.pos); + } + } + ts.getLeadingCommentsOfNode = getLeadingCommentsOfNode; + function getJsDocComments(node, sourceFileOfNode) { + return ts.filter(getLeadingCommentsOfNode(node, sourceFileOfNode), function (comment) { return isJsDocComment(comment); }); + function isJsDocComment(comment) { + return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47 /* slash */; + } + } + ts.getJsDocComments = getJsDocComments; + ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/; function forEachChild(node, cbNode, cbNodes) { function child(node) { if (node) @@ -2776,7 +2821,6 @@ var ts; ControlBlockContext[ControlBlockContext["CrossingFunctionBoundary"] = 2] = "CrossingFunctionBoundary"; })(ControlBlockContext || (ControlBlockContext = {})); function createSourceFile(filename, sourceText, languageVersion, version, isOpen) { - if (version === void 0) { version = 0; } if (isOpen === void 0) { isOpen = false; } var file; var scanner; @@ -2873,6 +2917,12 @@ var ts; } return ts.getLineAndCharacterOfPosition(lineStarts, position); } + function getPositionFromSourceLineAndCharacter(line, character) { + if (!lineStarts) { + lineStarts = ts.getLineStarts(sourceText); + } + return ts.getPositionFromLineAndCharacter(lineStarts, line, character); + } function error(message, arg0, arg1, arg2) { var start = scanner.getTokenPos(); var length = scanner.getTextPos() - start; @@ -3651,11 +3701,14 @@ var ts; return parseAssignmentExpression(noIn); } function parseAssignmentExpression(noIn) { - var arrowExpression = tryParseArrowFunctionExpression(); + var arrowExpression = tryParseParenthesizedArrowFunctionExpression(); if (arrowExpression) { return arrowExpression; } var expr = parseConditionalExpression(noIn); + if (expr.kind === 55 /* Identifier */ && token === 23 /* EqualsGreaterThanToken */) { + return parseSimpleArrowFunctionExpression(expr); + } if (isLeftHandSideExpression(expr) && isAssignmentOperator()) { if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { reportInvalidUseInStrictMode(expr); @@ -3692,23 +3745,7 @@ var ts; } return false; } - function tryParseArrowFunctionExpression() { - return isSimpleArrowFunctionExpression() ? parseSimpleArrowFunctionExpression() : tryParseParenthesizedArrowFunctionExpression(); - } - function isSimpleArrowFunctionExpression() { - if (token === 23 /* EqualsGreaterThanToken */) { - return true; - } - if (token === 55 /* Identifier */) { - return lookAhead(function () { - return nextToken() === 23 /* EqualsGreaterThanToken */; - }); - } - return false; - } - function parseSimpleArrowFunctionExpression() { - ts.Debug.assert(token === 55 /* Identifier */ || token === 23 /* EqualsGreaterThanToken */); - var identifier = parseIdentifier(); + function parseSimpleArrowFunctionExpression(identifier) { ts.Debug.assert(token === 23 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); parseExpected(23 /* EqualsGreaterThanToken */); var parameter = createNode(114 /* Parameter */, identifier.pos); @@ -3722,11 +3759,11 @@ var ts; return parseArrowExpressionTail(identifier.pos, signature, false); } function tryParseParenthesizedArrowFunctionExpression() { - var pos = getNodePos(); var triState = isParenthesizedArrowFunctionExpression(); if (triState === 0 /* False */) { return undefined; } + var pos = getNodePos(); if (triState === 1 /* True */) { var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); if (parseExpected(23 /* EqualsGreaterThanToken */) || token === 5 /* OpenBraceToken */) { @@ -3782,6 +3819,9 @@ var ts; } }); } + if (token === 23 /* EqualsGreaterThanToken */) { + return 1 /* True */; + } return 0 /* False */; } function tryParseSignatureIfArrowOrBraceFollows() { @@ -3912,7 +3952,7 @@ var ts; var primaryExpression = parsePrimaryExpression(); var illegalUsageOfSuperKeyword = primaryExpression.kind === 81 /* SuperKeyword */ && token !== 7 /* OpenParenToken */ && token !== 11 /* DotToken */; if (illegalUsageOfSuperKeyword) { - error(ts.Diagnostics.super_must_be_followed_by_argument_list_or_member_access); + error(ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); } var expr = parseCallAndAccess(primaryExpression, false); ts.Debug.assert(isLeftHandSideExpression(expr)); @@ -4288,8 +4328,6 @@ var ts; function parseBreakOrContinueStatement(kind) { var node = createNode(kind); var errorCountBeforeStatement = file.syntacticErrors.length; - var keywordStart = scanner.getTokenPos(); - var keywordLength = scanner.getTextPos() - keywordStart; parseExpected(kind === 153 /* BreakStatement */ ? 56 /* BreakKeyword */ : 61 /* ContinueKeyword */); if (!canParseSemicolon()) node.label = parseIdentifier(); @@ -5211,12 +5249,11 @@ var ts; file.hasNoDefaultLib = true; } else { - var fullReferenceRegEx = /^(\/\/\/\s*/; - var matchResult = fullReferenceRegEx.exec(comment); + var matchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment); if (!matchResult) { var start = range.pos; var length = range.end - start; - errorAtPos(start, length, ts.Diagnostics.Invalid_reference_comment); + errorAtPos(start, length, ts.Diagnostics.Invalid_reference_directive_syntax); } else { referencedFiles.push({ @@ -5254,6 +5291,7 @@ var ts; file.filename = ts.normalizePath(filename); file.text = sourceText; file.getLineAndCharacterFromPosition = getLineAndCharacterlFromSourcePosition; + file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; file.syntacticErrors = []; file.semanticErrors = []; var referenceComments = processReferenceComments(); @@ -5289,7 +5327,7 @@ var ts; getCompilerHost: function () { return host; }, getDiagnostics: getDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, - getTypeChecker: function () { return ts.createTypeChecker(program); }, + getTypeChecker: function (fullTypeCheckMode) { return ts.createTypeChecker(program, fullTypeCheckMode); }, getCommonSourceDirectory: function () { return commonSourceDirectory; } }; return program; @@ -5769,9 +5807,15 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { - var indentStrings = []; + var indentStrings = ["", " "]; function getIndentString(level) { - return indentStrings[level] || (indentStrings[level] = level === 0 ? "" : getIndentString(level - 1) + " "); + if (indentStrings[level] === undefined) { + indentStrings[level] = getIndentString(level - 1) + indentStrings[1]; + } + return indentStrings[level]; + } + function getIndentSize() { + return indentStrings[1].length; } function emitFiles(resolver) { var program = resolver.getProgram(); @@ -5849,6 +5893,14 @@ var ts; output += s; } } + function rawWrite(s) { + if (s !== undefined) { + if (lineStart) { + lineStart = false; + } + output += s; + } + } function writeLiteral(s) { if (s && s.length) { write(s); @@ -5878,13 +5930,15 @@ var ts; return { write: write, writeSymbol: writeSymbol, + rawWrite: rawWrite, writeLiteral: writeLiteral, writeLine: writeLine, increaseIndent: function () { return indent++; }, decreaseIndent: function () { return indent--; }, + getIndent: function () { return indent; }, getTextPos: function () { return output.length; }, getLine: function () { return lineCount + 1; }, - getColumn: function () { return lineStart ? indent * 4 + 1 : output.length - linePos + 1; }, + getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; }, getText: function () { return output; } }; } @@ -5893,11 +5947,97 @@ var ts; var text = currentSourceFile.text; return text.substring(ts.skipTrivia(text, node.pos), node.end); } + function getLineOfLocalPosition(pos) { + return currentSourceFile.getLineAndCharacterFromPosition(pos).line; + } function writeFile(filename, data, writeByteOrderMark) { compilerHost.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); }); } + function emitComments(comments, trailingSeparator, writer, writeComment) { + var emitLeadingSpace = !trailingSeparator; + ts.forEach(comments, function (comment) { + if (emitLeadingSpace) { + writer.write(" "); + emitLeadingSpace = false; + } + writeComment(comment, writer); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } + else if (trailingSeparator) { + writer.write(" "); + } + else { + emitLeadingSpace = true; + } + }); + } + function emitNewLineBeforeLeadingComments(node, leadingComments, writer) { + if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && getLineOfLocalPosition(node.pos) !== getLineOfLocalPosition(leadingComments[0].pos)) { + writer.writeLine(); + } + } + function writeCommentRange(comment, writer) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { + var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); + var firstCommentLineIndent; + for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { + var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1); + if (pos !== comment.pos) { + if (firstCommentLineIndent === undefined) { + firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos); + } + var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); + var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); + if (spacesToEmit > 0) { + var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); + var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); + writer.rawWrite(indentSizeSpaceString); + while (numberOfSingleSpacesToEmit) { + writer.rawWrite(" "); + numberOfSingleSpacesToEmit--; + } + } + else { + writer.rawWrite(""); + } + } + writeTrimmedCurrentLine(pos, nextLineStart); + pos = nextLineStart; + } + } + else { + writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); + } + function writeTrimmedCurrentLine(pos, nextLineStart) { + var end = Math.min(comment.end, nextLineStart - 1); + var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); + if (currentLineText) { + writer.write(currentLineText); + if (end !== comment.end) { + writer.writeLine(); + } + } + else { + writer.writeLiteral(newLine); + } + } + function calculateIndent(pos, end) { + var currentLineIndent = 0; + while (pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos))) { + pos++; + if (currentSourceFile.text.charCodeAt(pos) === 9 /* tab */) { + currentLineIndent += getIndentSize(); + } + else { + currentLineIndent++; + } + } + return currentLineIndent; + } + } function emitJavaScript(jsFilePath, root) { var writer = createTextWriter(writeSymbol); var write = writer.write; @@ -5906,14 +6046,24 @@ var ts; var decreaseIndent = writer.decreaseIndent; var extendsEmitted = false; var writeEmittedFiles = writeJavaScriptFile; + var emitLeadingComments = compilerOptions.removeComments ? function (node) { + } : emitLeadingDeclarationComments; + var emitTrailingComments = compilerOptions.removeComments ? function (node) { + } : emitTrailingDeclarationComments; + var emitLeadingCommentsOfPosition = compilerOptions.removeComments ? function (pos) { + } : emitLeadingCommentsOfLocalPosition; + var detachedCommentsInfo; + var emitDetachedComments = compilerOptions.removeComments ? function (node) { + } : emitDetachedCommentsAtPosition; + var emitPinnedOrTripleSlashComments = compilerOptions.removeComments ? function (node) { + } : emitPinnedOrTripleSlashCommentsOfNode; + var writeComment = writeCommentRange; var emit = emitNode; var emitStart = function (node) { }; var emitEnd = function (node) { }; var emitToken = emitTokenText; - var emitNewSourceFileStart = function (node) { - }; var scopeEmitStart = function (scopeDeclaration, scopeName) { }; var scopeEmitEnd = function () { @@ -5993,7 +6143,7 @@ var ts; var sourceLinePos = currentSourceFile.getLineAndCharacterFromPosition(pos); var emittedLine = writer.getLine(); var emittedColumn = writer.getColumn(); - if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)) { + if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) { encodeLastRecordedSourceMapSpan(); lastRecordedSourceMapSpan = { emittedLine: emittedLine, @@ -6007,10 +6157,11 @@ var ts; else { lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; + lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex; } } function recordEmitNodeStartSpan(node) { - recordSourceMapSpan(ts.getTokenPosOfNode(node)); + recordSourceMapSpan(ts.skipTrivia(currentSourceFile.text, node.pos)); } function recordEmitNodeEndSpan(node) { recordSourceMapSpan(node.end); @@ -6065,6 +6216,11 @@ var ts; sourceMapNameIndices.pop(); } ; + function writeCommentRangeWithMap(comment, writer) { + recordSourceMapSpan(comment.pos); + writeCommentRange(comment, writer); + recordSourceMapSpan(comment.end); + } function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) { encodeLastRecordedSourceMapSpan(); writeFile(sourceMapData.sourceMapFilePath, JSON.stringify({ @@ -6128,9 +6284,9 @@ var ts; emitStart = recordEmitNodeStartSpan; emitEnd = recordEmitNodeEndSpan; emitToken = writeTextWithSpanRecord; - emitNewSourceFileStart = recordNewSourceFileStart; scopeEmitStart = recordScopeNameOfNode; scopeEmitEnd = recordScopeNameEnd; + writeComment = writeCommentRangeWithMap; } function writeJavaScriptFile(emitOutput, writeByteOrderMark) { writeFile(jsFilePath, emitOutput, writeByteOrderMark); @@ -6298,9 +6454,11 @@ var ts; } } function emitPropertyAssignment(node) { + emitLeadingComments(node); emit(node.name); write(": "); emit(node.initializer); + emitTrailingComments(node); } function emitPropertyAccess(node) { var text = resolver.getPropertyAccessSubstitution(node); @@ -6431,14 +6589,17 @@ var ts; } function emitExpressionStatement(node) { var isArrowExpression = node.expression.kind === 137 /* ArrowFunction */; + emitLeadingComments(node); if (isArrowExpression) write("("); emit(node.expression); if (isArrowExpression) write(")"); write(";"); + emitTrailingComments(node); } function emitIfStatement(node) { + emitLeadingComments(node); var endPos = emitToken(74 /* IfKeyword */, node.pos); write(" "); endPos = emitToken(7 /* OpenParenToken */, endPos); @@ -6456,6 +6617,7 @@ var ts; emitEmbeddedStatement(node.elseStatement); } } + emitTrailingComments(node); } function emitDoStatement(node) { write("do"); @@ -6518,9 +6680,11 @@ var ts; write(";"); } function emitReturnStatement(node) { + emitLeadingComments(node); emitToken(80 /* ReturnKeyword */, node.pos); emitOptional(" ", node.expression); write(";"); + emitTrailingComments(node); } function emitWithStatement(node) { write("with ("); @@ -6606,17 +6770,23 @@ var ts; emitEnd(node.name); } function emitVariableDeclaration(node) { + emitLeadingComments(node); emitModuleMemberName(node); emitOptional(" = ", node.initializer); + emitTrailingComments(node); } function emitVariableStatement(node) { + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) write("var "); emitCommaList(node.declarations); write(";"); + emitTrailingComments(node); } function emitParameter(node) { + emitLeadingComments(node); emit(node.name); + emitTrailingComments(node); } function emitDefaultValueAssignments(node) { ts.forEach(node.parameters, function (param) { @@ -6642,11 +6812,13 @@ var ts; var restIndex = node.parameters.length - 1; var restParam = node.parameters[restIndex]; writeLine(); + emitLeadingComments(restParam); emitStart(restParam); write("var "); emitNode(restParam.name); write(" = [];"); emitEnd(restParam); + emitTrailingComments(restParam); writeLine(); write("for ("); emitStart(restParam); @@ -6673,18 +6845,27 @@ var ts; } } function emitAccessor(node) { + emitLeadingComments(node); write(node.kind === 118 /* GetAccessor */ ? "get " : "set "); emit(node.name); emitSignatureAndBody(node); + emitTrailingComments(node); } function emitFunctionDeclaration(node) { - if (!node.body) - return; + if (!node.body) { + return emitPinnedOrTripleSlashComments(node); + } + if (node.kind !== 116 /* Method */) { + emitLeadingComments(node); + } write("function "); if (node.kind === 167 /* FunctionDeclaration */ || (node.kind === 136 /* FunctionExpression */ && node.name)) { emit(node.name); } emitSignatureAndBody(node); + if (node.kind !== 116 /* Method */) { + emitTrailingComments(node); + } } function emitCaptureThisForNodeIfNecessary(node) { if (resolver.getNodeCheckFlags(node) & 4 /* CaptureThis */) { @@ -6695,17 +6876,20 @@ var ts; } } function emitSignatureParameters(node) { + increaseIndent(); write("("); if (node) { emitCommaList(node.parameters, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); } write(")"); + decreaseIndent(); } function emitSignatureAndBody(node) { emitSignatureParameters(node); write(" {"); scopeEmitStart(node); increaseIndent(); + emitDetachedComments(node.body.kind === 168 /* FunctionBlock */ ? node.body.statements : node.body); var startIndex = 0; if (node.body.kind === 168 /* FunctionBlock */) { startIndex = emitDirectivePrologues(node.body.statements, true); @@ -6732,16 +6916,20 @@ var ts; } else { writeLine(); + emitLeadingComments(node.body); write("return "); emit(node.body); write(";"); + emitTrailingComments(node.body); } - decreaseIndent(); writeLine(); if (node.body.kind === 168 /* FunctionBlock */) { + emitLeadingCommentsOfPosition(node.body.statements.end); + decreaseIndent(); emitToken(6 /* CloseBraceToken */, node.body.statements.end); } else { + decreaseIndent(); emitStart(node.body); write("}"); emitEnd(node.body); @@ -6803,6 +6991,7 @@ var ts; ts.forEach(node.members, function (member) { if (member.kind === 115 /* Property */ && (member.flags & 64 /* Static */) === staticFlag && member.initializer) { writeLine(); + emitLeadingComments(member); emitStart(member); emitStart(member.name); if (staticFlag) { @@ -6817,15 +7006,18 @@ var ts; emit(member.initializer); write(";"); emitEnd(member); + emitTrailingComments(member); } }); } function emitMemberFunctions(node) { ts.forEach(node.members, function (member) { if (member.kind === 116 /* Method */) { - if (!member.body) - return; + if (!member.body) { + return emitPinnedOrTripleSlashComments(member); + } writeLine(); + emitLeadingComments(member); emitStart(member); emitStart(member.name); emitNode(node.name); @@ -6840,6 +7032,7 @@ var ts; emitEnd(member); emitEnd(member); write(";"); + emitTrailingComments(member); } else if (member.kind === 118 /* GetAccessor */ || member.kind === 119 /* SetAccessor */) { var accessors = getAllAccessorDeclarations(node, member); @@ -6859,20 +7052,24 @@ var ts; increaseIndent(); if (accessors.getAccessor) { writeLine(); + emitLeadingComments(accessors.getAccessor); write("get: "); emitStart(accessors.getAccessor); write("function "); emitSignatureAndBody(accessors.getAccessor); emitEnd(accessors.getAccessor); + emitTrailingComments(accessors.getAccessor); write(","); } if (accessors.setAccessor) { writeLine(); + emitLeadingComments(accessors.setAccessor); write("set: "); emitStart(accessors.setAccessor); write("function "); emitSignatureAndBody(accessors.setAccessor); emitEnd(accessors.setAccessor); + emitTrailingComments(accessors.setAccessor); write(","); } writeLine(); @@ -6888,12 +7085,13 @@ var ts; }); } function emitClassDeclaration(node) { - var ctor = getFirstConstructorWithBody(node); + emitLeadingComments(node); write("var "); emit(node.name); write(" = (function ("); - if (node.baseType) + if (node.baseType) { write("_super"); + } write(") {"); increaseIndent(); scopeEmitStart(node); @@ -6906,46 +7104,7 @@ var ts; emitEnd(node.baseType); } writeLine(); - emitStart(ctor || node); - write("function "); - emit(node.name); - emitSignatureParameters(ctor); - write(" {"); - scopeEmitStart(node, "constructor"); - increaseIndent(); - emitCaptureThisForNodeIfNecessary(node); - if (ctor) { - emitDefaultValueAssignments(ctor); - emitRestParameter(ctor); - if (node.baseType) { - var superCall = findInitialSuperCall(ctor); - if (superCall) { - writeLine(); - emit(superCall); - } - } - emitParameterPropertyAssignments(ctor); - } - else { - if (node.baseType) { - writeLine(); - emitStart(node.baseType); - write("_super.apply(this, arguments);"); - emitEnd(node.baseType); - } - } - emitMemberAssignments(node, 0); - if (ctor) { - var statements = ctor.body.statements; - if (superCall) - statements = statements.slice(1); - emitLines(statements); - } - decreaseIndent(); - writeLine(); - emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); - scopeEmitEnd(); - emitEnd(ctor || node); + emitConstructorOfClass(); emitMemberFunctions(node); emitMemberAssignments(node, 64 /* Static */); writeLine(); @@ -6975,8 +7134,73 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); + function emitConstructorOfClass() { + ts.forEach(node.members, function (member) { + if (member.kind === 117 /* Constructor */ && !member.body) { + emitPinnedOrTripleSlashComments(member); + } + }); + var ctor = getFirstConstructorWithBody(node); + if (ctor) { + emitLeadingComments(ctor); + } + emitStart(ctor || node); + write("function "); + emit(node.name); + emitSignatureParameters(ctor); + write(" {"); + scopeEmitStart(node, "constructor"); + increaseIndent(); + if (ctor) { + emitDetachedComments(ctor.body.statements); + } + emitCaptureThisForNodeIfNecessary(node); + if (ctor) { + emitDefaultValueAssignments(ctor); + emitRestParameter(ctor); + if (node.baseType) { + var superCall = findInitialSuperCall(ctor); + if (superCall) { + writeLine(); + emit(superCall); + } + } + emitParameterPropertyAssignments(ctor); + } + else { + if (node.baseType) { + writeLine(); + emitStart(node.baseType); + write("_super.apply(this, arguments);"); + emitEnd(node.baseType); + } + } + emitMemberAssignments(node, 0); + if (ctor) { + var statements = ctor.body.statements; + if (superCall) + statements = statements.slice(1); + emitLines(statements); + } + writeLine(); + if (ctor) { + emitLeadingCommentsOfPosition(ctor.body.statements.end); + } + decreaseIndent(); + emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); + scopeEmitEnd(); + emitEnd(ctor || node); + if (ctor) { + emitTrailingComments(ctor); + } + } + } + function emitInterfaceDeclaration(node) { + emitPinnedOrTripleSlashComments(node); } function emitEnumDeclaration(node) { + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) { emitStart(node); write("var "); @@ -6993,26 +7217,7 @@ var ts; write(") {"); increaseIndent(); scopeEmitStart(node); - ts.forEach(node.members, function (member) { - writeLine(); - emitStart(member); - write(resolver.getLocalNameOfContainer(node)); - write("["); - write(resolver.getLocalNameOfContainer(node)); - write("["); - emitQuotedIdentifier(member.name); - write("] = "); - if (member.initializer) { - emit(member.initializer); - } - else { - write(resolver.getEnumMemberValue(member).toString()); - } - write("] = "); - emitQuotedIdentifier(member.name); - emitEnd(member); - write(";"); - }); + emitEnumMemberDeclarations(); decreaseIndent(); writeLine(); emitToken(6 /* CloseBraceToken */, node.members.end); @@ -7033,6 +7238,31 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); + function emitEnumMemberDeclarations() { + ts.forEach(node.members, function (member) { + writeLine(); + emitLeadingComments(member); + emitStart(member); + write(resolver.getLocalNameOfContainer(node)); + write("["); + write(resolver.getLocalNameOfContainer(node)); + write("["); + emitQuotedIdentifier(member.name); + write("] = "); + if (member.initializer) { + emit(member.initializer); + } + else { + write(resolver.getEnumMemberValue(member).toString()); + } + write("] = "); + emitQuotedIdentifier(member.name); + emitEnd(member); + write(";"); + emitTrailingComments(member); + }); + } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { if (moduleDeclaration.body.kind === 172 /* ModuleDeclaration */) { @@ -7041,8 +7271,10 @@ var ts; } } function emitModuleDeclaration(node) { - if (!ts.isInstantiated(node)) - return; + if (!ts.isInstantiated(node)) { + return emitPinnedOrTripleSlashComments(node); + } + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) { emitStart(node); write("var "); @@ -7089,6 +7321,7 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); } function emitImportDeclaration(node) { var emitImportDeclaration = resolver.isReferencedImportDeclaration(node); @@ -7099,16 +7332,19 @@ var ts; if (node.externalModuleName && node.parent.kind === 177 /* SourceFile */ && compilerOptions.module === 2 /* AMD */) { if (node.flags & 1 /* Export */) { writeLine(); + emitLeadingComments(node); emitStart(node); emitModuleMemberName(node); write(" = "); emit(node.name); write(";"); emitEnd(node); + emitTrailingComments(node); } } else { writeLine(); + emitLeadingComments(node); emitStart(node); if (!(node.flags & 1 /* Export */)) write("var "); @@ -7126,6 +7362,7 @@ var ts; } write(";"); emitEnd(node); + emitTrailingComments(node); } } } @@ -7215,6 +7452,8 @@ var ts; } function emitSourceFile(node) { currentSourceFile = node; + writeLine(); + emitDetachedComments(node); var startIndex = emitDirectivePrologues(node.statements, false); if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) { writeLine(); @@ -7247,8 +7486,12 @@ var ts; } } function emitNode(node) { - if (!node || node.flags & 2 /* Ambient */) + if (!node) { return; + } + if (node.flags & 2 /* Ambient */) { + return emitPinnedOrTripleSlashComments(node); + } switch (node.kind) { case 55 /* Identifier */: return emitIdentifier(node); @@ -7352,6 +7595,8 @@ var ts; return emitVariableDeclaration(node); case 169 /* ClassDeclaration */: return emitClassDeclaration(node); + case 170 /* InterfaceDeclaration */: + return emitInterfaceDeclaration(node); case 171 /* EnumDeclaration */: return emitEnumDeclaration(node); case 172 /* ModuleDeclaration */: @@ -7362,6 +7607,99 @@ var ts; return emitSourceFile(node); } } + function hasDetachedComments(pos) { + return detachedCommentsInfo !== undefined && detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos === pos; + } + function getLeadingCommentsWithoutDetachedComments() { + var leadingComments = ts.getLeadingComments(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); + if (detachedCommentsInfo.length - 1) { + detachedCommentsInfo.pop(); + } + else { + detachedCommentsInfo = undefined; + } + return leadingComments; + } + function getLeadingCommentsToEmit(node) { + if (node.parent.kind === 177 /* SourceFile */ || node.pos !== node.parent.pos) { + var leadingComments; + if (hasDetachedComments(node.pos)) { + leadingComments = getLeadingCommentsWithoutDetachedComments(); + } + else { + leadingComments = ts.getLeadingCommentsOfNode(node, currentSourceFile); + } + return leadingComments; + } + } + function emitLeadingDeclarationComments(node) { + var leadingComments = getLeadingCommentsToEmit(node); + emitNewLineBeforeLeadingComments(node, leadingComments, writer); + emitComments(leadingComments, true, writer, writeComment); + } + function emitTrailingDeclarationComments(node) { + if (node.parent.kind === 177 /* SourceFile */ || node.end !== node.parent.end) { + var trailingComments = ts.getTrailingComments(currentSourceFile.text, node.end); + emitComments(trailingComments, false, writer, writeComment); + } + } + function emitLeadingCommentsOfLocalPosition(pos) { + var leadingComments; + if (hasDetachedComments(pos)) { + leadingComments = getLeadingCommentsWithoutDetachedComments(); + } + else { + leadingComments = ts.getLeadingComments(currentSourceFile.text, pos); + } + emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer); + emitComments(leadingComments, true, writer, writeComment); + } + function emitDetachedCommentsAtPosition(node) { + var leadingComments = ts.getLeadingComments(currentSourceFile.text, node.pos); + if (leadingComments) { + var detachedComments = []; + var lastComment; + ts.forEach(leadingComments, function (comment) { + if (lastComment) { + var lastCommentLine = getLineOfLocalPosition(lastComment.end); + var commentLine = getLineOfLocalPosition(comment.pos); + if (commentLine >= lastCommentLine + 2) { + return detachedComments; + } + } + detachedComments.push(comment); + lastComment = comment; + }); + if (detachedComments.length) { + var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end); + var astLine = getLineOfLocalPosition(ts.skipTrivia(currentSourceFile.text, node.pos)); + if (astLine >= lastCommentLine + 2) { + emitNewLineBeforeLeadingComments(node, leadingComments, writer); + emitComments(detachedComments, true, writer, writeComment); + var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end }; + if (detachedCommentsInfo) { + detachedCommentsInfo.push(currentDetachedCommentInfo); + } + else { + detachedCommentsInfo = [currentDetachedCommentInfo]; + } + } + } + } + } + function emitPinnedOrTripleSlashCommentsOfNode(node) { + var pinnedComments = ts.filter(getLeadingCommentsToEmit(node), isPinnedOrTripleSlashComment); + function isPinnedOrTripleSlashComment(comment) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { + return currentSourceFile.text.charCodeAt(comment.pos + 2) === 33 /* exclamation */; + } + else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 /* slash */ && comment.pos + 2 < comment.end && currentSourceFile.text.charCodeAt(comment.pos + 2) === 47 /* slash */ && currentSourceFile.text.substring(comment.pos, comment.end).match(ts.fullTripleSlashReferencePathRegEx)) { + return true; + } + } + emitNewLineBeforeLeadingComments(node, pinnedComments, writer); + emitComments(pinnedComments, true, writer, writeComment); + } if (compilerOptions.sourceMap) { initializeEmitterWithSourceMaps(); } @@ -7386,16 +7724,42 @@ var ts; var decreaseIndent = writer.decreaseIndent; var enclosingDeclaration; var reportedDeclarationError = false; + var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { + } : writeJsDocComments; + var aliasDeclarationEmitInfo = []; var getSymbolVisibilityDiagnosticMessage; + function writeAsychronousImportDeclarations(importDeclarations) { + var oldWriter = writer; + ts.forEach(importDeclarations, function (aliasToWrite) { + var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); + writer = createTextWriter(writeSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); + }); + writer = oldWriter; + } function writeSymbol(symbol, enclosingDeclaration, meaning) { var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); - if (!getSymbolVisibilityDiagnosticMessage || symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { resolver.writeSymbol(symbol, enclosingDeclaration, meaning, writer); + if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } } else { reportedDeclarationError = true; var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); - diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + if (errorInfo) { + if (errorInfo.typeName) { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + else { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + } } } function emitLines(nodes) { @@ -7413,6 +7777,13 @@ var ts; eachNodeEmitFn(nodes[i]); } } + function writeJsDocComments(declaration) { + if (declaration) { + var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile); + emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer); + emitComments(jsDocComments, true, writer, writeCommentRange); + } + } function emitSourceTextOfNode(node) { write(getSourceTextOfLocalNode(node)); } @@ -7449,27 +7820,52 @@ var ts; } } function emitImportDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - if (node.flags & 1 /* Export */) { - write("export "); - } - write("import "); - emitSourceTextOfNode(node.name); - write(" = "); - if (node.entityName) { - emitSourceTextOfNode(node.entityName); - write(";"); + var nodeEmitInfo = { + declaration: node, + outputPos: writer.getTextPos(), + indent: writer.getIndent(), + hasWritten: resolver.isDeclarationVisible(node) + }; + aliasDeclarationEmitInfo.push(nodeEmitInfo); + if (nodeEmitInfo.hasWritten) { + writeImportDeclaration(node); + } + } + function writeImportDeclaration(node) { + emitJsDocComments(node); + if (node.flags & 1 /* Export */) { + writer.write("export "); + } + writer.write("import "); + writer.write(getSourceTextOfLocalNode(node.name)); + writer.write(" = "); + if (node.entityName) { + checkEntityNameAccessible(); + writer.write(getSourceTextOfLocalNode(node.entityName)); + writer.write(";"); + } + else { + writer.write("require("); + writer.write(getSourceTextOfLocalNode(node.externalModuleName)); + writer.write(");"); + } + writer.writeLine(); + function checkEntityNameAccessible() { + var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } } else { - write("require("); - emitSourceTextOfNode(node.externalModuleName); - write(");"); + reportedDeclarationError = true; + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Import_declaration_0_is_using_private_name_1, getSourceTextOfLocalNode(node.name), symbolAccesibilityResult.errorSymbolName)); } - writeLine(); } } function emitModuleDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("module "); emitSourceTextOfNode(node.name); @@ -7492,6 +7888,7 @@ var ts; } function emitEnumDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("enum "); emitSourceTextOfNode(node.name); @@ -7505,6 +7902,7 @@ var ts; } } function emitEnumMemberDeclaration(node) { + emitJsDocComments(node); emitSourceTextOfNode(node.name); var enumMemberValue = resolver.getEnumMemberValue(node); if (enumMemberValue !== undefined) { @@ -7554,12 +7952,14 @@ var ts; typeName: node.name }; } + increaseIndent(); + emitJsDocComments(node); + decreaseIndent(); emitSourceTextOfNode(node.name); if (node.constraint && (node.parent.kind !== 116 /* Method */ || !(node.parent.flags & 32 /* Private */))) { write(" extends "); getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; - resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 0 /* None */, writer); - getSymbolVisibilityDiagnosticMessage = undefined; + resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); } } if (typeParameters) { @@ -7575,32 +7975,23 @@ var ts; } function emitTypeOfTypeReference(node) { getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */, writer); - getSymbolVisibilityDiagnosticMessage = undefined; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */ | 2 /* UseTypeOfFunction */, writer); function getHeritageClauseVisibilityError(symbolAccesibilityResult) { var diagnosticMessage; if (node.parent.kind === 169 /* ClassDeclaration */) { - if (symbolAccesibilityResult.accessibility == 1 /* NotAccessible */) { - if (symbolAccesibilityResult.errorModuleName) { - diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; - } - else { - diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; - } + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; } else { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; } } else { - if (symbolAccesibilityResult.accessibility == 1 /* NotAccessible */) { - if (symbolAccesibilityResult.errorModuleName) { - diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; - } - else { - diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; - } + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; } else { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; } } return { @@ -7622,6 +8013,7 @@ var ts; } } if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("class "); emitSourceTextOfNode(node.name); @@ -7645,6 +8037,7 @@ var ts; } function emitInterfaceDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("interface "); emitSourceTextOfNode(node.name); @@ -7663,6 +8056,7 @@ var ts; } } function emitPropertyDeclaration(node) { + emitJsDocComments(node); emitDeclarationFlags(node); emitVariableDeclaration(node); write(";"); @@ -7676,13 +8070,37 @@ var ts; } if (!(node.flags & 32 /* Private */)) { write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); } } + function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 166 /* VariableDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; + } + else if (node.kind === 115 /* Property */) { + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; + } + } + return diagnosticMessage !== undefined ? { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + } : undefined; + } } function emitVariableStatement(node) { var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); if (hasDeclarationWithEmit) { + emitJsDocComments(node); emitDeclarationFlags(node); write("var "); emitCommaList(node.declarations, emitVariableDeclaration); @@ -7693,18 +8111,51 @@ var ts; function emitAccessorDeclaration(node) { var accessors = getAllAccessorDeclarations(node.parent, node); if (node === accessors.firstAccessor) { + emitJsDocComments(accessors.getAccessor); + emitJsDocComments(accessors.setAccessor); emitDeclarationFlags(node); emitSourceTextOfNode(node.name); if (!(node.flags & 32 /* Private */)) { write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); } write(";"); writeLine(); } + function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 119 /* SetAccessor */) { + if (node.parent.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.parameters[0], + typeName: node.name + }; + } + else { + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name, + typeName: undefined + }; + } + } } function emitFunctionDeclaration(node) { if ((node.kind !== 167 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); if (node.kind === 167 /* FunctionDeclaration */) { write("function "); @@ -7723,10 +8174,14 @@ var ts; } } function emitConstructSignatureDeclaration(node) { + emitJsDocComments(node); write("new "); emitSignatureDeclaration(node); } function emitSignatureDeclaration(node) { + if (node.kind === 120 /* CallSignature */ || node.kind === 122 /* IndexSignature */) { + emitJsDocComments(node); + } emitTypeParameters(node.typeParameters); if (node.kind === 122 /* IndexSignature */) { write("["); @@ -7743,12 +8198,49 @@ var ts; } if (node.kind !== 117 /* Constructor */ && !(node.flags & 32 /* Private */)) { write(": "); - resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 0 /* None */, writer); + getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; + resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); } write(";"); writeLine(); + function getReturnTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.kind) { + case 121 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 120 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 122 /* IndexSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 116 /* Method */: + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; + } + else if (node.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; + } + break; + case 167 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; + break; + default: + ts.Debug.fail("This is unknown kind for signature: " + ts.SyntaxKind[node.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name || node + }; + } } function emitParameterDeclaration(node) { + increaseIndent(); + emitJsDocComments(node); if (node.flags & 8 /* Rest */) { write("..."); } @@ -7756,9 +8248,46 @@ var ts; if (node.initializer || (node.flags & 4 /* QuestionMark */)) { write("?"); } + decreaseIndent(); if (!(node.parent.flags & 32 /* Private */)) { write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 117 /* Constructor */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; + break; + case 121 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 120 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 116 /* Method */: + if (node.parent.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 167 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + default: + ts.Debug.fail("This is unknown parent for parameter: " + ts.SyntaxKind[node.parent.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; } } function emitNode(node) { @@ -7836,7 +8365,18 @@ var ts; }); } if (!reportedDeclarationError) { - writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", referencePathsOutput + writer.getText(), compilerOptions.emitBOM); + var declarationOutput = referencePathsOutput; + var synchronousDeclarationOutput = writer.getText(); + var appliedSyncOutputPos = 0; + ts.forEach(aliasDeclarationEmitInfo, function (aliasEmitInfo) { + if (aliasEmitInfo.asynchronousOutput) { + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); + declarationOutput += aliasEmitInfo.asynchronousOutput; + appliedSyncOutputPos = aliasEmitInfo.outputPos; + } + }); + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); + writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); } } var shouldEmitDeclarations = resolver.shouldEmitDeclarations(); @@ -7855,6 +8395,8 @@ var ts; if (compilerOptions.out) { emitFile(compilerOptions.out); } + diagnostics.sort(ts.compareDiagnostics); + diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); return { errors: diagnostics, sourceMaps: sourceMapDataList @@ -7867,13 +8409,38 @@ var ts; var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; - function createTypeChecker(program) { + function createTypeChecker(program, fullTypeCheck) { var Symbol = ts.objectAllocator.getSymbolConstructor(); var Type = ts.objectAllocator.getTypeConstructor(); var Signature = ts.objectAllocator.getSignatureConstructor(); var typeCount = 0; var emptyArray = []; var emptySymbols = {}; + var checker = { + getProgram: function () { return program; }, + getDiagnostics: getDiagnostics, + getGlobalDiagnostics: getGlobalDiagnostics, + getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, + getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, + getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, + getTypeCount: function () { return typeCount; }, + checkProgram: checkProgram, + emitFiles: invokeEmitter, + getParentOfSymbol: getParentOfSymbol, + getTypeOfSymbol: getTypeOfSymbol, + getPropertiesOfType: getPropertiesOfType, + getPropertyOfType: getPropertyOfType, + getSignaturesOfType: getSignaturesOfType, + getIndexTypeOfType: getIndexTypeOfType, + getReturnTypeOfSignature: getReturnTypeOfSignature, + getSymbolsInScope: getSymbolsInScope, + getSymbolInfo: getSymbolInfo, + getTypeOfNode: getTypeOfNode, + getApparentType: getApparentType, + typeToString: typeToString, + symbolToString: symbolToString, + getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType + }; var undefinedSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "undefined"); var argumentsSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "arguments"); var unknownSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "unknown"); @@ -7902,7 +8469,6 @@ var ts; var globalBooleanType; var globalRegExpType; var stringLiteralTypes = {}; - var fullTypeCheck = false; var emitExtends = false; var mergedSymbols = []; var symbolLinks = []; @@ -7910,33 +8476,6 @@ var ts; var potentialThisCollisions = []; var diagnostics = []; var diagnosticsModified = false; - var checker = { - getProgram: function () { return program; }, - getDiagnostics: getDiagnostics, - getGlobalDiagnostics: getGlobalDiagnostics, - getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, - getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, - getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, - getTypeCount: function () { return typeCount; }, - checkProgram: checkProgram, - emitFiles: invokeEmitter, - getSymbolOfNode: getSymbolOfNode, - getParentOfSymbol: getParentOfSymbol, - getTypeOfSymbol: getTypeOfSymbol, - getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, - getPropertiesOfType: getPropertiesOfType, - getPropertyOfType: getPropertyOfType, - getSignaturesOfType: getSignaturesOfType, - getIndexTypeOfType: getIndexTypeOfType, - getReturnTypeOfSignature: getReturnTypeOfSignature, - resolveEntityName: resolveEntityName, - getSymbolsInScope: getSymbolsInScope, - getSymbolInfo: getSymbolInfo, - getTypeOfExpression: getTypeOfExpression, - typeToString: typeToString, - symbolToString: symbolToString, - getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType - }; function addDiagnostic(diagnostic) { diagnostics.push(diagnostic); diagnosticsModified = true; @@ -8178,7 +8717,7 @@ var ts; if (!links.target) { links.target = resolvingSymbol; var node = getDeclarationOfKind(symbol, 174 /* ImportDeclaration */); - var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : resolveEntityName(node, node.entityName, node.entityName.kind === 112 /* QualifiedName */ ? ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace : ts.SymbolFlags.Namespace); + var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : getSymbolOfPartOfRightHandSideOfImport(node.entityName, node); if (links.target === resolvingSymbol) { links.target = target || unknownSymbol; } @@ -8191,6 +8730,22 @@ var ts; } return links.target; } + function getSymbolOfPartOfRightHandSideOfImport(entityName, importDeclaration) { + if (!importDeclaration) { + importDeclaration = getAncestor(entityName, 174 /* ImportDeclaration */); + ts.Debug.assert(importDeclaration); + } + if (entityName.kind === 55 /* Identifier */ && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + entityName = entityName.parent; + } + if (entityName.kind === 55 /* Identifier */ || entityName.parent.kind === 112 /* QualifiedName */) { + return resolveEntityName(importDeclaration, entityName, ts.SymbolFlags.Namespace); + } + else { + ts.Debug.assert(entityName.parent.kind === 174 /* ImportDeclaration */); + return resolveEntityName(importDeclaration, entityName, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace); + } + } function getFullyQualifiedName(symbol) { return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); } @@ -8433,30 +8988,41 @@ var ts; } return callback(globals); } - function getAccessibleSymbol(symbol, enclosingDeclaration, meaning) { - function getAccessibleSymbolFromSymbolTable(symbols) { + function getQualifiedLeftMeaning(rightMeaning) { + return rightMeaning === ts.SymbolFlags.Value ? ts.SymbolFlags.Value : ts.SymbolFlags.Namespace; + } + function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning) { + function getAccessibleSymbolChainFromSymbolTable(symbols) { + function canQualifySymbol(symbolFromSymbolTable, meaning) { + if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { + return true; + } + var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning)); + return !!accessibleParent; + } function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) { - if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { - return true; - } - var accessibleParent = getAccessibleSymbol(symbolFromSymbolTable.parent, enclosingDeclaration, ts.SymbolFlags.Namespace); - return !!accessibleParent; + return !ts.forEach(symbolFromSymbolTable.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); }) && canQualifySymbol(symbolFromSymbolTable, meaning); } } if (isAccessible(ts.lookUp(symbols, symbol.name))) { - return symbol; + return [symbol]; } return ts.forEachValue(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 4194304 /* Import */) { + var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { - return symbolFromSymbolTable; + return [symbolFromSymbolTable]; + } + var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; + if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { + return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); } } }); } if (symbol) { - return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolFromSymbolTable); + return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); } } function needsQualification(symbol, enclosingDeclaration, meaning) { @@ -8483,26 +9049,80 @@ var ts; var initialSymbol = symbol; var meaningToLook = meaning; while (symbol) { - var accessibleSymbol = getAccessibleSymbol(symbol, enclosingDeclaration, meaningToLook); - if (accessibleSymbol) { - if (ts.forEach(accessibleSymbol.declarations, function (declaration) { return !isDeclarationVisible(declaration); })) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook); + if (accessibleSymbolChain) { + var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); + if (!hasAccessibleDeclarations) { return { accessibility: 1 /* NotAccessible */, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, ts.SymbolFlags.Namespace) : undefined }; } - return { accessibility: 0 /* Accessible */ }; + return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasAccessibleDeclarations.aliasesToMakeVisible }; + } + meaningToLook = getQualifiedLeftMeaning(meaning); + symbol = getParentOfSymbol(symbol); + } + var symbolExternalModule = ts.forEach(initialSymbol.declarations, function (declaration) { return getExternalModuleContainer(declaration); }); + if (symbolExternalModule) { + var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); + if (symbolExternalModule !== enclosingExternalModule) { + return { + accessibility: 2 /* CannotBeNamed */, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), + errorModuleName: symbolToString(symbolExternalModule) + }; } - meaningToLook = ts.SymbolFlags.Namespace; - symbol = symbol.parent; } return { - accessibility: 2 /* CannotBeNamed */, + accessibility: 1 /* NotAccessible */, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning) }; } return { accessibility: 0 /* Accessible */ }; + function getExternalModuleContainer(declaration) { + for (; declaration; declaration = declaration.parent) { + if (hasExternalModuleSymbol(declaration)) { + return getSymbolOfNode(declaration); + } + } + } + } + function hasExternalModuleSymbol(declaration) { + return (declaration.kind === 172 /* ModuleDeclaration */ && declaration.name.kind === 3 /* StringLiteral */) || (declaration.kind === 177 /* SourceFile */ && ts.isExternalModule(declaration)); + } + function hasVisibleDeclarations(symbol) { + var aliasesToMakeVisible; + if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) { + return undefined; + } + return { aliasesToMakeVisible: aliasesToMakeVisible }; + function getIsDeclarationVisible(declaration) { + if (!isDeclarationVisible(declaration)) { + if (declaration.kind === 174 /* ImportDeclaration */ && !(declaration.flags & 1 /* Export */) && isDeclarationVisible(declaration.parent)) { + getNodeLinks(declaration).isVisible = true; + if (aliasesToMakeVisible) { + if (!ts.contains(aliasesToMakeVisible, declaration)) { + aliasesToMakeVisible.push(declaration); + } + } + else { + aliasesToMakeVisible = [declaration]; + } + return true; + } + return false; + } + return true; + } + } + function isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName) { + var firstIdentifier = getFirstIdentifier(entityName); + var firstIdentifierName = ts.identifierToString(firstIdentifier); + var symbolOfNameSpace = resolveName(entityName.parent, firstIdentifier.text, ts.SymbolFlags.Namespace, ts.Diagnostics.Cannot_find_name_0, firstIdentifierName); + var hasNamespaceDeclarationsVisibile = hasVisibleDeclarations(symbolOfNameSpace); + return hasNamespaceDeclarationsVisibile ? { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasNamespaceDeclarationsVisibile.aliasesToMakeVisible } : { accessibility: 1 /* NotAccessible */, errorSymbolName: firstIdentifierName }; } function symbolToString(symbol, enclosingDeclaration, meaning) { function getSymbolName(symbol) { @@ -8514,17 +9134,27 @@ var ts; } return symbol.name; } - if (enclosingDeclaration && !(symbol.flags & ts.SymbolFlags.PropertyOrAccessor & ts.SymbolFlags.Signature & 4096 /* Constructor */ & 2048 /* Method */ & 262144 /* TypeParameter */)) { + if (enclosingDeclaration && !(symbol.flags & (ts.SymbolFlags.PropertyOrAccessor | ts.SymbolFlags.Signature | 4096 /* Constructor */ | 2048 /* Method */ | 262144 /* TypeParameter */))) { var symbolName; while (symbol) { var isFirstName = !symbolName; - var meaningToLook = isFirstName ? meaning : ts.SymbolFlags.Namespace; - var accessibleSymbol = getAccessibleSymbol(symbol, enclosingDeclaration, meaningToLook); - symbolName = getSymbolName(accessibleSymbol || symbol) + (isFirstName ? "" : ("." + symbolName)); - if (accessibleSymbol && !needsQualification(accessibleSymbol, enclosingDeclaration, meaningToLook)) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning); + var currentSymbolName; + if (accessibleSymbolChain) { + currentSymbolName = ts.map(accessibleSymbolChain, function (accessibleSymbol) { return getSymbolName(accessibleSymbol); }).join("."); + } + else { + if (!isFirstName && ts.forEach(symbol.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); })) { + break; + } + currentSymbolName = getSymbolName(symbol); + } + symbolName = currentSymbolName + (isFirstName ? "" : ("." + symbolName)); + if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { break; } - symbol = accessibleSymbol ? accessibleSymbol.parent : symbol.parent; + symbol = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); + meaning = getQualifiedLeftMeaning(meaning); } return symbolName; } @@ -8603,9 +9233,12 @@ var ts; if (type.symbol && type.symbol.flags & (16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { writeTypeofSymbol(type); } - else if (type.symbol && type.symbol.flags & (8 /* Function */ | 2048 /* Method */) && typeStack && ts.contains(typeStack, type)) { + else if (shouldWriteTypeOfFunctionSymbol()) { writeTypeofSymbol(type); } + else if (typeStack && ts.contains(typeStack, type)) { + writer.write("any"); + } else { if (!typeStack) { typeStack = []; @@ -8614,6 +9247,15 @@ var ts; writeLiteralType(type, allowFunctionOrConstructorTypeLiteral); typeStack.pop(); } + function shouldWriteTypeOfFunctionSymbol() { + if (type.symbol) { + var isStaticMethodSymbol = !!(type.symbol.flags & 2048 /* Method */ && ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 64 /* Static */; })); + var isNonLocalFunctionSymbol = !!(type.symbol.flags & 8 /* Function */) && (type.symbol.parent || ts.forEach(type.symbol.declarations, function (declaration) { return declaration.parent.kind === 177 /* SourceFile */ || declaration.parent.kind === 173 /* ModuleBlock */; })); + if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { + return !!(flags & 2 /* UseTypeOfFunction */) || (typeStack && ts.contains(typeStack, type)); + } + } + } } function writeTypeofSymbol(type) { writer.write("typeof "); @@ -8749,13 +9391,22 @@ var ts; if (externalModule) { var externalModuleSymbol = getSymbolOfNode(externalModule); var exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol); + var resolvedExportSymbol; var symbolOfNode = getSymbolOfNode(node); - if (exportAssignmentSymbol === symbolOfNode) { + if (isSymbolUsedInExportAssignment(symbolOfNode)) { + return true; + } + if (symbolOfNode.flags & 4194304 /* Import */) { + return isSymbolUsedInExportAssignment(resolveImport(symbolOfNode)); + } + } + function isSymbolUsedInExportAssignment(symbol) { + if (exportAssignmentSymbol === symbol) { return true; } if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 4194304 /* Import */)) { - var resolvedExportSymbol = resolveImport(exportAssignmentSymbol); - if (resolvedExportSymbol === symbolOfNode) { + resolvedExportSymbol = resolvedExportSymbol || resolveImport(exportAssignmentSymbol); + if (resolvedExportSymbol === symbol) { return true; } return ts.forEach(resolvedExportSymbol.declarations, function (declaration) { @@ -8772,20 +9423,17 @@ var ts; function determineIfDeclarationIsVisible() { switch (node.kind) { case 166 /* VariableDeclaration */: - if (!(node.flags & 1 /* Export */)) { - return isGlobalSourceFile(node.parent.parent) || isUsedInExportAssignment(node); - } - return isDeclarationVisible(node.parent.parent); case 172 /* ModuleDeclaration */: case 169 /* ClassDeclaration */: case 170 /* InterfaceDeclaration */: case 167 /* FunctionDeclaration */: case 171 /* EnumDeclaration */: case 174 /* ImportDeclaration */: - if (!(node.flags & 1 /* Export */)) { - return isGlobalSourceFile(node.parent) || isUsedInExportAssignment(node); + var parent = node.kind === 166 /* VariableDeclaration */ ? node.parent.parent : node.parent; + if (!(node.flags & 1 /* Export */) && !(node.kind !== 174 /* ImportDeclaration */ && parent.kind !== 177 /* SourceFile */ && ts.isInAmbientContext(parent))) { + return isGlobalSourceFile(parent) || isUsedInExportAssignment(node); } - return isDeclarationVisible(node.parent); + return isDeclarationVisible(parent); case 115 /* Property */: case 116 /* Method */: if (node.flags & 32 /* Private */) { @@ -8807,7 +9455,7 @@ var ts; if (node) { var links = getNodeLinks(node); if (links.isVisible === undefined) { - links.isVisible = determineIfDeclarationIsVisible(); + links.isVisible = !!determineIfDeclarationIsVisible(); } return links.isVisible; } @@ -8867,7 +9515,7 @@ var ts; checkImplicitAny(type); return type; function checkImplicitAny(type) { - if (!program.getCompilerOptions().noImplicitAny) { + if (!fullTypeCheck || !program.getCompilerOptions().noImplicitAny) { return; } if (getInnermostTypeOfNestedArrayTypes(type) !== anyType) { @@ -8969,7 +9617,7 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var type = links.type = createObjectType(8192 /* Anonymous */, symbol); + links.type = createObjectType(8192 /* Anonymous */, symbol); } return links.type; } @@ -9642,11 +10290,11 @@ var ts; } var type = getDeclaredTypeOfSymbol(symbol); if (!(type.flags & ts.TypeFlags.ObjectType)) { - error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, name); + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name); return emptyObjectType; } if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) { - error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, name, arity); + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity); return emptyObjectType; } return type; @@ -9717,6 +10365,10 @@ var ts; return getTypeFromArrayTypeNode(node); case 125 /* TypeLiteral */: return getTypeFromTypeLiteralNode(node); + case 55 /* Identifier */: + case 112 /* QualifiedName */: + var symbol = getSymbolInfo(node); + return getDeclaredTypeOfSymbol(symbol); default: return unknownType; } @@ -10774,7 +11426,8 @@ var ts; } return false; } - function checkSuperExpression(node, isCallExpression) { + function checkSuperExpression(node) { + var isCallExpression = node.parent.kind === 132 /* CallExpression */ && node.parent.func === node; var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); var baseClass; if (enclosingClass && enclosingClass.baseType) { @@ -11210,7 +11863,7 @@ var ts; var typeArgNode = typeArguments[i]; var typeArgument = getTypeFromTypeNode(typeArgNode); var constraint = getConstraintOfTypeParameter(typeParameters[i]); - if (constraint) { + if (constraint && fullTypeCheck) { checkTypeAssignableTo(typeArgument, constraint, typeArgNode, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); } result.push(typeArgument); @@ -11276,7 +11929,7 @@ var ts; } function resolveCallExpression(node) { if (node.func.kind === 81 /* SuperKeyword */) { - var superType = checkSuperExpression(node.func, true); + var superType = checkSuperExpression(node.func); if (superType !== unknownType) { return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */)); } @@ -11366,7 +12019,7 @@ var ts; function checkTypeAssertion(node) { var exprType = checkExpression(node.operand); var targetType = getTypeFromTypeNode(node.type); - if (targetType !== unknownType) { + if (fullTypeCheck && targetType !== unknownType) { var widenedType = getWidenedType(exprType); if (!(isTypeAssignableTo(exprType, targetType) || isTypeAssignableTo(targetType, widenedType))) { checkTypeAssignableTo(targetType, widenedType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other); @@ -11394,7 +12047,7 @@ var ts; if (func.body.kind !== 168 /* FunctionBlock */) { var unwidenedType = checkAndMarkExpression(func.body, contextualMapper); var widenedType = getWidenedType(unwidenedType); - if (program.getCompilerOptions().noImplicitAny && widenedType !== unwidenedType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && widenedType !== unwidenedType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeToString(widenedType)); } return widenedType; @@ -11407,7 +12060,7 @@ var ts; return unknownType; } var widenedType = getWidenedType(commonType); - if (program.getCompilerOptions().noImplicitAny && widenedType !== commonType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && widenedType !== commonType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { var typeName = typeToString(widenedType); if (func.name) { error(func, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.identifierToString(func.name), typeName); @@ -11468,6 +12121,9 @@ var ts; return (body.statements.length === 1) && (body.statements[0].kind === 160 /* ThrowStatement */); } function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) { + if (!fullTypeCheck) { + return; + } if (returnType === voidType || returnType === anyType) { return; } @@ -11699,7 +12355,7 @@ var ts; return rightType; } function checkAssignmentOperator(valueType) { - if (operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { + if (fullTypeCheck && operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression); if (ok) { checkTypeAssignableTo(valueType, leftType, node.left, undefined, undefined); @@ -11746,7 +12402,7 @@ var ts; case 83 /* ThisKeyword */: return checkThisExpression(node); case 81 /* SuperKeyword */: - return checkSuperExpression(node, false); + return checkSuperExpression(node); case 79 /* NullKeyword */: return nullType; case 85 /* TrueKeyword */: @@ -11790,24 +12446,28 @@ var ts; return unknownType; } function checkTypeParameter(node) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); checkSourceElement(node.constraint); - checkTypeParameterHasIllegalReferencesInConstraint(node); + if (fullTypeCheck) { + checkTypeParameterHasIllegalReferencesInConstraint(node); + checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); + } } function checkParameter(parameterDeclaration) { checkVariableDeclaration(parameterDeclaration); - checkCollisionWithIndexVariableInGeneratedCode(parameterDeclaration, parameterDeclaration.name); - if (parameterDeclaration.flags & (16 /* Public */ | 32 /* Private */) && !(parameterDeclaration.parent.kind === 117 /* Constructor */ && parameterDeclaration.parent.body)) { - error(parameterDeclaration, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } - if (parameterDeclaration.flags & 8 /* Rest */) { - if (!isArrayType(getTypeOfSymbol(parameterDeclaration.symbol))) { - error(parameterDeclaration, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); + if (fullTypeCheck) { + checkCollisionWithIndexVariableInGeneratedCode(parameterDeclaration, parameterDeclaration.name); + if (parameterDeclaration.flags & (16 /* Public */ | 32 /* Private */) && !(parameterDeclaration.parent.kind === 117 /* Constructor */ && parameterDeclaration.parent.body)) { + error(parameterDeclaration, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } - } - else { - if (parameterDeclaration.initializer && !parameterDeclaration.parent.body) { - error(parameterDeclaration, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); + if (parameterDeclaration.flags & 8 /* Rest */) { + if (!isArrayType(getTypeOfSymbol(parameterDeclaration.symbol))) { + error(parameterDeclaration, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); + } + } + else { + if (parameterDeclaration.initializer && !parameterDeclaration.parent.body) { + error(parameterDeclaration, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); + } } } function checkReferencesInInitializer(n) { @@ -11841,17 +12501,19 @@ var ts; if (node.type) { checkSourceElement(node.type); } - checkCollisionWithCapturedSuperVariable(node, node.name); - checkCollisionWithCapturedThisVariable(node, node.name); - checkCollisionWithArgumentsInGeneratedCode(node); - if (program.getCompilerOptions().noImplicitAny && !node.type) { - switch (node.kind) { - case 121 /* ConstructSignature */: - error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); - break; - case 120 /* CallSignature */: - error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); - break; + if (fullTypeCheck) { + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + checkCollisionWithArgumentsInGeneratedCode(node); + if (program.getCompilerOptions().noImplicitAny && !node.type) { + switch (node.kind) { + case 121 /* ConstructSignature */: + error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + case 120 /* CallSignature */: + error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + } } } checkSpecializedSignatureDeclaration(node); @@ -11909,6 +12571,9 @@ var ts; if (!node.body) { return; } + if (!fullTypeCheck) { + return; + } function isSuperCallExpression(n) { return n.kind === 132 /* CallExpression */ && n.func.kind === 81 /* SuperKeyword */; } @@ -11956,23 +12621,25 @@ var ts; } } function checkAccessorDeclaration(node) { - if (node.kind === 118 /* GetAccessor */) { - if (!ts.isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { - error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); + if (fullTypeCheck) { + if (node.kind === 118 /* GetAccessor */) { + if (!ts.isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { + error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); + } } - } - var otherKind = node.kind === 118 /* GetAccessor */ ? 119 /* SetAccessor */ : 118 /* GetAccessor */; - var otherAccessor = getDeclarationOfKind(node.symbol, otherKind); - if (otherAccessor) { - var visibilityFlags = 32 /* Private */ | 16 /* Public */; - if (((node.flags & visibilityFlags) !== (otherAccessor.flags & visibilityFlags))) { - error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); - } - var thisType = getAnnotatedAccessorType(node); - var otherType = getAnnotatedAccessorType(otherAccessor); - if (thisType && otherType) { - if (!isTypeIdenticalTo(thisType, otherType)) { - error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + var otherKind = node.kind === 118 /* GetAccessor */ ? 119 /* SetAccessor */ : 118 /* GetAccessor */; + var otherAccessor = getDeclarationOfKind(node.symbol, otherKind); + if (otherAccessor) { + var visibilityFlags = 32 /* Private */ | 16 /* Public */; + if (((node.flags & visibilityFlags) !== (otherAccessor.flags & visibilityFlags))) { + error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); + } + var thisType = getAnnotatedAccessorType(node); + var otherType = getAnnotatedAccessorType(otherAccessor); + if (thisType && otherType) { + if (!isTypeIdenticalTo(thisType, otherType)) { + error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + } } } } @@ -11986,7 +12653,7 @@ var ts; for (var i = 0; i < len; i++) { checkSourceElement(node.typeArguments[i]); var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]); - if (constraint) { + if (fullTypeCheck && constraint) { var typeArgument = type.typeArguments[i]; checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); } @@ -11998,9 +12665,11 @@ var ts; } function checkTypeLiteral(node) { ts.forEach(node.members, checkSourceElement); - var type = getTypeFromTypeLiteralNode(node); - checkIndexConstraints(type); - checkTypeForDuplicateIndexSignatures(node); + if (fullTypeCheck) { + var type = getTypeFromTypeLiteralNode(node); + checkIndexConstraints(type); + checkTypeForDuplicateIndexSignatures(node); + } } function checkArrayType(node) { getTypeFromArrayTypeNode(node); @@ -12009,6 +12678,9 @@ var ts; return (node.flags & 32 /* Private */) && ts.isInAmbientContext(node); } function checkSpecializedSignatureDeclaration(signatureDeclarationNode) { + if (!fullTypeCheck) { + return; + } var signature = getSignatureFromDeclaration(signatureDeclarationNode); if (!signature.hasStringLiterals) { return; @@ -12048,6 +12720,9 @@ var ts; return flags & flagsToCheck; } function checkFunctionOrConstructorSymbol(symbol) { + if (!fullTypeCheck) { + return; + } function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) { var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; if (someButNotAllOverloadFlags !== 0) { @@ -12170,6 +12845,9 @@ var ts; } } function checkExportsOnMergedDeclarations(node) { + if (!fullTypeCheck) { + return; + } var symbol; var symbol = node.localSymbol; if (!symbol) { @@ -12238,7 +12916,7 @@ var ts; if (node.type && !isAccessor(node.kind)) { checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); } - if (program.getCompilerOptions().noImplicitAny && !node.body && !node.type) { + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && !node.body && !node.type) { if (!isPrivateWithinAmbient(node)) { var typeName = typeToString(anyType); if (node.name) { @@ -12356,26 +13034,28 @@ var ts; function checkVariableDeclaration(node) { checkSourceElement(node.type); checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - var typeOfValueDeclaration = getTypeOfVariableOrParameterOrProperty(symbol); - var type; - var useTypeFromValueDeclaration = node === symbol.valueDeclaration; - if (useTypeFromValueDeclaration) { - type = typeOfValueDeclaration; - } - else { - type = getTypeOfVariableDeclaration(node); - } - if (node.initializer) { - if (!(getNodeLinks(node.initializer).flags & 1 /* TypeChecked */)) { - checkTypeAssignableTo(checkAndMarkExpression(node.initializer), type, node, undefined, undefined); + if (fullTypeCheck) { + var symbol = getSymbolOfNode(node); + var typeOfValueDeclaration = getTypeOfVariableOrParameterOrProperty(symbol); + var type; + var useTypeFromValueDeclaration = node === symbol.valueDeclaration; + if (useTypeFromValueDeclaration) { + type = typeOfValueDeclaration; } - } - checkCollisionWithCapturedSuperVariable(node, node.name); - checkCollisionWithCapturedThisVariable(node, node.name); - if (!useTypeFromValueDeclaration) { - if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { - error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); + else { + type = getTypeOfVariableDeclaration(node); + } + if (node.initializer) { + if (!(getNodeLinks(node.initializer).flags & 1 /* TypeChecked */)) { + checkTypeAssignableTo(checkAndMarkExpression(node.initializer), type, node, undefined, undefined); + } + } + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + if (!useTypeFromValueDeclaration) { + if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { + error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); + } } } } @@ -12472,7 +13152,7 @@ var ts; function checkSwitchStatement(node) { var expressionType = checkExpression(node.expression); ts.forEach(node.clauses, function (clause) { - if (clause.expression) { + if (fullTypeCheck && clause.expression) { var caseType = checkExpression(clause.expression); if (!isTypeAssignableTo(expressionType, caseType)) { checkTypeAssignableTo(caseType, expressionType, clause.expression, undefined, undefined); @@ -12556,9 +13236,11 @@ var ts; for (var i = 0; i < typeParameterDeclarations.length; i++) { var node = typeParameterDeclarations[i]; checkTypeParameter(node); - for (var j = 0; j < i; j++) { - if (typeParameterDeclarations[j].symbol === node.symbol) { - error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.identifierToString(node.name)); + if (fullTypeCheck) { + for (var j = 0; j < i; j++) { + if (typeParameterDeclarations[j].symbol === node.symbol) { + error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.identifierToString(node.name)); + } } } } @@ -12577,34 +13259,40 @@ var ts; checkTypeReference(node.baseType); } if (type.baseTypes.length) { - var baseType = type.baseTypes[0]; - checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1_Colon, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); - var staticBaseType = getTypeOfSymbol(baseType.symbol); - checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); - if (baseType.symbol !== resolveEntityName(node, node.baseType.typeName, ts.SymbolFlags.Value)) { - error(node.baseType, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); + if (fullTypeCheck) { + var baseType = type.baseTypes[0]; + checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1_Colon, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); + var staticBaseType = getTypeOfSymbol(baseType.symbol); + checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); + if (baseType.symbol !== resolveEntityName(node, node.baseType.typeName, ts.SymbolFlags.Value)) { + error(node.baseType, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); + } + checkKindsOfPropertyMemberOverrides(type, baseType); } checkExpression(node.baseType.typeName); - checkKindsOfPropertyMemberOverrides(type, baseType); } if (node.implementedTypes) { ts.forEach(node.implementedTypes, function (typeRefNode) { checkTypeReference(typeRefNode); - var t = getTypeFromTypeReferenceNode(typeRefNode); - if (t !== unknownType) { - var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t; - if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) { - checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1_Colon, ts.Diagnostics.Class_0_incorrectly_implements_interface_1); - } - else { - error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface); + if (fullTypeCheck) { + var t = getTypeFromTypeReferenceNode(typeRefNode); + if (t !== unknownType) { + var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t; + if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) { + checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1_Colon, ts.Diagnostics.Class_0_incorrectly_implements_interface_1); + } + else { + error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface); + } } } }); } - checkIndexConstraints(type); ts.forEach(node.members, checkSourceElement); - checkTypeForDuplicateIndexSignatures(node); + if (fullTypeCheck) { + checkIndexConstraints(type); + checkTypeForDuplicateIndexSignatures(node); + } } function getTargetSymbol(s) { return s.flags & 8388608 /* Instantiated */ ? getSymbolLinks(s).target : s; @@ -12681,28 +13369,32 @@ var ts; return true; } function checkInterfaceDeclaration(node) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); checkTypeParameters(node.typeParameters); - checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - var firstInterfaceDecl = getDeclarationOfKind(symbol, 170 /* InterfaceDeclaration */); - if (symbol.declarations.length > 1) { - if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) { - error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters); + if (fullTypeCheck) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + var firstInterfaceDecl = getDeclarationOfKind(symbol, 170 /* InterfaceDeclaration */); + if (symbol.declarations.length > 1) { + if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) { + error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters); + } } - } - if (node === firstInterfaceDecl) { - var type = getDeclaredTypeOfSymbol(symbol); - if (checkInheritedPropertiesAreIdentical(type, node.name)) { - ts.forEach(type.baseTypes, function (baseType) { - checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1_Colon, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1); - }); - checkIndexConstraints(type); + if (node === firstInterfaceDecl) { + var type = getDeclaredTypeOfSymbol(symbol); + if (checkInheritedPropertiesAreIdentical(type, node.name)) { + ts.forEach(type.baseTypes, function (baseType) { + checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1_Colon, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1); + }); + checkIndexConstraints(type); + } } } ts.forEach(node.baseTypes, checkTypeReference); ts.forEach(node.members, checkSourceElement); - checkTypeForDuplicateIndexSignatures(node); + if (fullTypeCheck) { + checkTypeForDuplicateIndexSignatures(node); + } } function getConstantValue(node) { var isNegative = false; @@ -12720,6 +13412,9 @@ var ts; return undefined; } function checkEnumDeclaration(node) { + if (!fullTypeCheck) { + return; + } checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); checkCollisionWithCapturedThisVariable(node, node.name); checkExportsOnMergedDeclarations(node); @@ -12776,26 +13471,28 @@ var ts; return undefined; } function checkModuleDeclaration(node) { - checkCollisionWithCapturedThisVariable(node, node.name); - checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { - var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); - if (classOrFunc) { - if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { - error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); - } - else if (node.pos < classOrFunc.pos) { - error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); + if (fullTypeCheck) { + checkCollisionWithCapturedThisVariable(node, node.name); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { + var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); + if (classOrFunc) { + if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { + error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); + } + else if (node.pos < classOrFunc.pos) { + error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); + } } } - } - if (node.name.kind === 3 /* StringLiteral */) { - if (!isGlobalSourceFile(node.parent)) { - error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); - } - if (isExternalModuleNameRelative(node.name.text)) { - error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); + if (node.name.kind === 3 /* StringLiteral */) { + if (!isGlobalSourceFile(node.parent)) { + error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); + } + if (isExternalModuleNameRelative(node.name.text)) { + error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); + } } } checkSourceElement(node.body); @@ -12941,7 +13638,6 @@ var ts; function checkSourceFile(node) { var links = getNodeLinks(node); if (!(links.flags & 1 /* TypeChecked */)) { - fullTypeCheck = true; emitExtends = false; potentialThisCollisions.length = 0; ts.forEach(node.statements, checkSourceElement); @@ -12958,13 +13654,13 @@ var ts; if (emitExtends) links.flags |= 8 /* EmitExtends */; links.flags |= 1 /* TypeChecked */; - fullTypeCheck = false; } } function checkProgram() { ts.forEach(program.getSourceFiles(), checkSourceFile); } function getSortedDiagnostics() { + ts.Debug.assert(fullTypeCheck, "diagnostics are available only in the full typecheck mode"); if (diagnosticsModified) { diagnostics.sort(ts.compareDiagnostics); diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); @@ -13055,29 +13751,49 @@ var ts; copySymbols(globals, meaning); return ts.mapToArray(symbols); } - function isDeclarationIdentifier(identifier) { - if (identifier.parent) { - switch (identifier.parent.kind) { - case 113 /* TypeParameter */: - case 114 /* Parameter */: - case 166 /* VariableDeclaration */: - case 115 /* Property */: - case 129 /* PropertyAssignment */: - case 176 /* EnumMember */: - case 116 /* Method */: - case 167 /* FunctionDeclaration */: - case 136 /* FunctionExpression */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - case 171 /* EnumDeclaration */: - case 172 /* ModuleDeclaration */: - case 174 /* ImportDeclaration */: - return identifier.parent.name === identifier; - case 163 /* CatchBlock */: - return identifier.parent.variable === identifier; - } + function isTypeDeclarationName(name) { + return name.kind == 55 /* Identifier */ && isTypeDeclaration(name.parent) && name.parent.name === name; + } + function isDeclarationOrFunctionExpressionOrCatchVariableName(name) { + if (name.kind !== 55 /* Identifier */ && name.kind !== 3 /* StringLiteral */ && name.kind !== 2 /* NumericLiteral */) { + return false; + } + var parent = name.parent; + if (isDeclaration(parent) || parent.kind === 136 /* FunctionExpression */) { + return parent.name === name; + } + if (parent.kind === 163 /* CatchBlock */) { + return parent.variable === name; + } + return false; + } + function isTypeDeclaration(node) { + switch (node.kind) { + case 113 /* TypeParameter */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + return true; + } + } + function isDeclaration(node) { + switch (node.kind) { + case 113 /* TypeParameter */: + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + case 115 /* Property */: + case 129 /* PropertyAssignment */: + case 176 /* EnumMember */: + case 116 /* Method */: + case 167 /* FunctionDeclaration */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 172 /* ModuleDeclaration */: + case 174 /* ImportDeclaration */: + return true; } return false; } @@ -13109,54 +13825,133 @@ var ts; case 139 /* PostfixOperator */: case 140 /* BinaryExpression */: case 141 /* ConditionalExpression */: + case 142 /* OmittedExpression */: return true; case 112 /* QualifiedName */: - while (node.parent && node.parent.kind === 112 /* QualifiedName */) + while (node.parent.kind === 112 /* QualifiedName */) node = node.parent; - return node.parent && node.parent.kind === 124 /* TypeQuery */; + return node.parent.kind === 124 /* TypeQuery */; case 55 /* Identifier */: + if (node.parent.kind === 124 /* TypeQuery */) { + return true; + } case 2 /* NumericLiteral */: case 3 /* StringLiteral */: var parent = node.parent; - if (parent) { - if (isExpression(parent)) - return true; - switch (parent.kind) { - case 166 /* VariableDeclaration */: - case 114 /* Parameter */: - case 115 /* Property */: - case 176 /* EnumMember */: - return parent.initializer === node; - case 146 /* ExpressionStatement */: - case 147 /* IfStatement */: - case 148 /* DoStatement */: - case 149 /* WhileStatement */: - case 154 /* ReturnStatement */: - case 155 /* WithStatement */: - case 156 /* SwitchStatement */: - case 157 /* CaseClause */: - case 160 /* ThrowStatement */: - case 156 /* SwitchStatement */: - return parent.expression === node; - case 150 /* ForStatement */: - return parent.initializer === node || parent.condition === node || parent.iterator === node; - case 151 /* ForInStatement */: - return parent.variable === node || parent.expression === node; - } + switch (parent.kind) { + case 166 /* VariableDeclaration */: + case 114 /* Parameter */: + case 115 /* Property */: + case 176 /* EnumMember */: + case 129 /* PropertyAssignment */: + return parent.initializer === node; + case 146 /* ExpressionStatement */: + case 147 /* IfStatement */: + case 148 /* DoStatement */: + case 149 /* WhileStatement */: + case 154 /* ReturnStatement */: + case 155 /* WithStatement */: + case 156 /* SwitchStatement */: + case 157 /* CaseClause */: + case 160 /* ThrowStatement */: + case 156 /* SwitchStatement */: + return parent.expression === node; + case 150 /* ForStatement */: + return parent.initializer === node || parent.condition === node || parent.iterator === node; + case 151 /* ForInStatement */: + return parent.variable === node || parent.expression === node; + case 134 /* TypeAssertion */: + return node === parent.operand; + default: + if (isExpression(parent)) { + return true; + } } } return false; } + function isTypeNode(node) { + if (node.kind >= ts.SyntaxKind.FirstTypeNode && node.kind <= ts.SyntaxKind.LastTypeNode) { + return true; + } + switch (node.kind) { + case 101 /* AnyKeyword */: + case 108 /* NumberKeyword */: + case 110 /* StringKeyword */: + case 102 /* BooleanKeyword */: + return true; + case 89 /* VoidKeyword */: + return node.parent.kind !== 138 /* PrefixOperator */; + case 3 /* StringLiteral */: + return node.parent.kind === 114 /* Parameter */; + case 55 /* Identifier */: + if (node.parent.kind === 112 /* QualifiedName */) { + node = node.parent; + } + case 112 /* QualifiedName */: + var parent = node.parent; + if (parent.kind === 124 /* TypeQuery */) { + return false; + } + if (parent.kind >= ts.SyntaxKind.FirstTypeNode && parent.kind <= ts.SyntaxKind.LastTypeNode) { + return true; + } + switch (parent.kind) { + case 113 /* TypeParameter */: + return node === parent.constraint; + case 115 /* Property */: + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + return node === parent.type; + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + case 117 /* Constructor */: + case 116 /* Method */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return node === parent.type; + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + return node === parent.type; + case 134 /* TypeAssertion */: + return node === parent.type; + case 132 /* CallExpression */: + case 133 /* NewExpression */: + return parent.typeArguments.indexOf(node) >= 0; + } + } + return false; + } + function isInRightSideOfImportOrExportAssignment(node) { + while (node.parent.kind === 112 /* QualifiedName */) { + node = node.parent; + } + if (node.parent.kind === 174 /* ImportDeclaration */) { + return node.parent.entityName === node; + } + if (node.parent.kind === 175 /* ExportAssignment */) { + return node.parent.exportName === node; + } + return false; + } function isRightSideOfQualifiedNameOrPropertyAccess(node) { return (node.parent.kind === 112 /* QualifiedName */ || node.parent.kind === 130 /* PropertyAccess */) && node.parent.right === node; } - function getSymbolOfIdentifier(identifier) { - if (isDeclarationIdentifier(identifier)) { - return getSymbolOfNode(identifier.parent); + function getSymbolOfEntityName(entityName) { + if (isDeclarationOrFunctionExpressionOrCatchVariableName(entityName)) { + return getSymbolOfNode(entityName.parent); } - var entityName = identifier; - while (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) + if (entityName.parent.kind === 175 /* ExportAssignment */) { + return resolveEntityName(entityName.parent.parent, entityName, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace | 4194304 /* Import */); + } + if (isInRightSideOfImportOrExportAssignment(entityName)) { + return getSymbolOfPartOfRightHandSideOfImport(entityName); + } + if (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; + } if (isExpression(entityName)) { if (entityName.kind === 55 /* Identifier */) { var meaning = ts.SymbolFlags.Value | 4194304 /* Import */; @@ -13178,11 +13973,14 @@ var ts; meaning |= 4194304 /* Import */; return resolveEntityName(entityName, entityName, meaning); } + return undefined; } function getSymbolInfo(node) { switch (node.kind) { case 55 /* Identifier */: - return getSymbolOfIdentifier(node); + case 130 /* PropertyAccess */: + case 112 /* QualifiedName */: + return getSymbolOfEntityName(node); case 83 /* ThisKeyword */: case 81 /* SuperKeyword */: var type = checkExpression(node); @@ -13215,15 +14013,42 @@ var ts; } return undefined; } - function getTypeOfExpression(node) { + function getTypeOfNode(node) { if (isExpression(node)) { - while (isRightSideOfQualifiedNameOrPropertyAccess(node)) { - node = node.parent; - } - return getApparentType(checkExpression(node)); + return getTypeOfExpression(node); + } + if (isTypeNode(node)) { + return getTypeFromTypeNode(node); + } + if (isTypeDeclaration(node)) { + var symbol = getSymbolOfNode(node); + return getDeclaredTypeOfSymbol(symbol); + } + if (isTypeDeclarationName(node)) { + var symbol = getSymbolInfo(node); + return getDeclaredTypeOfSymbol(symbol); + } + if (isDeclaration(node)) { + var symbol = getSymbolOfNode(node); + return getTypeOfSymbol(symbol); + } + if (isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + var symbol = getSymbolInfo(node); + return getTypeOfSymbol(symbol); + } + if (isInRightSideOfImportOrExportAssignment(node)) { + var symbol = getSymbolInfo(node); + var declaredType = getDeclaredTypeOfSymbol(symbol); + return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol); } return unknownType; } + function getTypeOfExpression(expr) { + if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) { + expr = expr.parent; + } + return checkExpression(expr); + } function getAugmentedPropertiesOfApparentType(type) { var apparentType = getApparentType(type); if (apparentType.flags & ts.TypeFlags.ObjectType) { @@ -13348,7 +14173,8 @@ var ts; function isImplementationOfOverload(node) { if (node.body) { var symbol = getSymbolOfNode(node); - return getSignaturesOfSymbol(symbol).length > 1; + var signaturesOfSymbol = getSignaturesOfSymbol(symbol); + return signaturesOfSymbol.length > 1 || (signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node); } return false; } @@ -13384,7 +14210,8 @@ var ts; writeTypeAtLocation: writeTypeAtLocation, writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, writeSymbol: writeSymbolToTextWriter, - isSymbolAccessible: isSymbolAccessible + isSymbolAccessible: isSymbolAccessible, + isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile }; checkProgram(); return ts.emitFiles(resolver); @@ -13657,7 +14484,7 @@ var ts; return true; } function trySetLanguageAndTerritory(language, territory, errors) { - var compilerFilePath = sys.getExecutingFilePath(); + var compilerFilePath = ts.normalizePath(sys.getExecutingFilePath()); var containingDirectoryPath = ts.getDirectoryPath(compilerFilePath); var filePath = ts.combinePaths(containingDirectoryPath, language); if (territory) { @@ -13699,13 +14526,14 @@ var ts; return diagnostic.messageText; } function reportDiagnostic(diagnostic) { + var output = ""; if (diagnostic.file) { var loc = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - sys.write(diagnostic.file.filename + "(" + loc.line + "," + loc.character + "): " + diagnostic.messageText + sys.newLine); - } - else { - sys.write(diagnostic.messageText + sys.newLine); + output += diagnostic.file.filename + "(" + loc.line + "," + loc.character + "): "; } + var category = ts.DiagnosticCategory[diagnostic.category].toLowerCase(); + output += category + " TS" + diagnostic.code + ": " + diagnostic.messageText + sys.newLine; + sys.write(output); } function reportDiagnostics(diagnostics) { for (var i = 0; i < diagnostics.length; i++) { @@ -13736,6 +14564,9 @@ var ts; function createCompilerHost(options) { var currentDirectory; var existingDirectories = {}; + function getCanonicalFileName(fileName) { + return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } function getSourceFile(filename, languageVersion, onError) { try { var text = sys.readFile(filename, options.charset); @@ -13746,7 +14577,7 @@ var ts; } text = ""; } - return text !== undefined ? ts.createSourceFile(filename, text, languageVersion) : undefined; + return text !== undefined ? ts.createSourceFile(filename, text, languageVersion, "0") : undefined; } function writeFile(fileName, data, writeByteOrderMark, onError) { function directoryExists(directoryPath) { @@ -13781,7 +14612,7 @@ var ts; writeFile: writeFile, getCurrentDirectory: function () { return currentDirectory || (currentDirectory = sys.getCurrentDirectory()); }, useCaseSensitiveFileNames: function () { return sys.useCaseSensitiveFileNames; }, - getCanonicalFileName: ts.getCanonicalFileName, + getCanonicalFileName: getCanonicalFileName, getNewLine: function () { return sys.newLine; } }; } @@ -13882,7 +14713,7 @@ var ts; var reportStart = bindStart; } else { - var checker = program.getTypeChecker(); + var checker = program.getTypeChecker(true); var checkStart = new Date().getTime(); var semanticErrors = checker.getDiagnostics(); var emitStart = new Date().getTime(); @@ -13892,12 +14723,16 @@ var ts; } reportDiagnostics(errors); if (commandLine.options.diagnostics) { + var memoryUsed = sys.getMemoryUsage ? sys.getMemoryUsage() : -1; reportCountStatistic("Files", program.getSourceFiles().length); reportCountStatistic("Lines", countLines(program)); reportCountStatistic("Nodes", checker ? checker.getNodeCount() : 0); reportCountStatistic("Identifiers", checker ? checker.getIdentifierCount() : 0); reportCountStatistic("Symbols", checker ? checker.getSymbolCount() : 0); reportCountStatistic("Types", checker ? checker.getTypeCount() : 0); + if (memoryUsed >= 0) { + reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K"); + } reportTimeStatistic("Parse time", bindStart - parseStart); reportTimeStatistic("Bind time", checkStart - bindStart); reportTimeStatistic("Check time", emitStart - checkStart); diff --git a/bin/typescriptServices.js b/bin/typescriptServices.js index 8babfd4486d..d9b53be63cf 100644 --- a/bin/typescriptServices.js +++ b/bin/typescriptServices.js @@ -16,20 +16,11 @@ and limitations under the License. var ts; (function (ts) { ts.Diagnostics = { - Unknown_compiler_option_0: { code: 6001, category: 1 /* Error */, key: "Unknown compiler option '{0}'." }, - File_0_not_found: { code: 6002, category: 1 /* Error */, key: "File '{0}' not found." }, - File_0_must_have_extension_ts_or_d_ts: { code: 6003, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, - Unrecognized_escape_sequence: { code: 1000, category: 1 /* Error */, key: "Unrecognized escape sequence." }, - Unexpected_character_0: { code: 1001, category: 1 /* Error */, key: "Unexpected character {0}." }, - Missing_close_quote_character: { code: 1002, category: 1 /* Error */, key: "Missing close quote character." }, - Identifier_expected: { code: -9999999, category: 1 /* Error */, key: "Identifier expected." }, - _0_keyword_expected: { code: 1004, category: 1 /* Error */, key: "'{0}' keyword expected." }, - _0_expected: { code: -9999999, category: 1 /* Error */, key: "'{0}' expected." }, - Identifier_expected_0_is_a_keyword: { code: 1006, category: 1 /* Error */, key: "Identifier expected; '{0}' is a keyword." }, - Automatic_semicolon_insertion_not_allowed: { code: 1007, category: 1 /* Error */, key: "Automatic semicolon insertion not allowed." }, + Unterminated_string_literal: { code: 1002, category: 1 /* Error */, key: "Unterminated string literal." }, + Identifier_expected: { code: 1003, category: 1 /* Error */, key: "Identifier expected." }, + _0_expected: { code: 1005, category: 1 /* Error */, key: "'{0}' expected." }, Trailing_comma_not_allowed: { code: 1009, category: 1 /* Error */, key: "Trailing comma not allowed." }, Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." }, - public_or_private_modifier_must_precede_static: { code: 1011, category: 1 /* Error */, key: "'public' or 'private' modifier must precede 'static'." }, Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." }, Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation." }, A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list." }, @@ -42,16 +33,16 @@ var ts; An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation." }, An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation." }, An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'." }, - extends_clause_already_seen: { code: 1024, category: 1 /* Error */, key: "'extends' clause already seen." }, - extends_clause_must_precede_implements_clause: { code: 1025, category: 1 /* Error */, key: "'extends' clause must precede 'implements' clause." }, - Classes_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "Classes can only extend a single class." }, - implements_clause_already_seen: { code: 1027, category: 1 /* Error */, key: "'implements' clause already seen." }, + A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: 1 /* Error */, key: "A class or interface declaration can only have one 'extends' clause." }, + An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: 1 /* Error */, key: "An 'extends' clause must precede an 'implements' clause." }, + A_class_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "A class can only extend a single class." }, + A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: 1 /* Error */, key: "A class declaration can only have one 'implements' clause." }, Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen." }, _0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier." }, _0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen." }, _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element." }, - Interface_declaration_cannot_have_implements_clause: { code: 1032, category: 1 /* Error */, key: "Interface declaration cannot have 'implements' clause." }, - super_invocation_cannot_have_type_arguments: { code: 1034, category: 1 /* Error */, key: "'super' invocation cannot have type arguments." }, + An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: 1 /* Error */, key: "An interface declaration cannot have an 'implements' clause." }, + super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: 1 /* Error */, key: "'super' must be followed by an argument list or member access." }, Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names." }, Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts." }, A_function_implementation_cannot_be_declared_in_an_ambient_context: { code: 1037, category: 1 /* Error */, key: "A function implementation cannot be declared in an ambient context." }, @@ -67,23 +58,11 @@ var ts; A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer." }, A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter." }, A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters." }, - Modifiers_cannot_appear_here: { code: 1055, category: 1 /* Error */, key: "Modifiers cannot appear here." }, Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher." }, - Enum_member_must_have_initializer: { code: -9999999, category: 1 /* Error */, key: "Enum member must have initializer." }, + Enum_member_must_have_initializer: { code: 1061, category: 1 /* Error */, key: "Enum member must have initializer." }, An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module." }, Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers." }, - module_class_interface_enum_import_or_statement: { code: 1067, category: 3 /* NoPrefix */, key: "module, class, interface, enum, import or statement" }, Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1 /* Error */, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, - statement: { code: 1069, category: 3 /* NoPrefix */, key: "statement" }, - case_or_default_clause: { code: 1070, category: 3 /* NoPrefix */, key: "case or default clause" }, - identifier: { code: 1071, category: 3 /* NoPrefix */, key: "identifier" }, - call_construct_index_property_or_function_signature: { code: 1072, category: 3 /* NoPrefix */, key: "call, construct, index, property or function signature" }, - expression: { code: 1073, category: 3 /* NoPrefix */, key: "expression" }, - type_name: { code: 1074, category: 3 /* NoPrefix */, key: "type name" }, - property_or_accessor: { code: 1075, category: 3 /* NoPrefix */, key: "property or accessor" }, - parameter: { code: 1076, category: 3 /* NoPrefix */, key: "parameter" }, - type: { code: 1077, category: 3 /* NoPrefix */, key: "type" }, - type_parameter: { code: 1078, category: 3 /* NoPrefix */, key: "type parameter" }, A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration." }, Invalid_reference_directive_syntax: { code: 1084, category: 1 /* Error */, key: "Invalid 'reference' directive syntax." }, Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher." }, @@ -102,13 +81,12 @@ var ts; Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode." }, with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode." }, delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode." }, - Invalid_left_hand_side_in_for_in_statement: { code: 1103, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." }, A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement." }, A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary." }, A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body." }, - Expression_expected: { code: -9999999, category: 1 /* Error */, key: "Expression expected." }, - Type_expected: { code: -9999999, category: 1 /* Error */, key: "Type expected." }, + Expression_expected: { code: 1109, category: 1 /* Error */, key: "Expression expected." }, + Type_expected: { code: 1110, category: 1 /* Error */, key: "Type expected." }, A_constructor_implementation_cannot_be_declared_in_an_ambient_context: { code: 1111, category: 1 /* Error */, key: "A constructor implementation cannot be declared in an ambient context." }, A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional." }, A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement." }, @@ -120,136 +98,259 @@ var ts; An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name." }, An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers." }, Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1 /* Error */, key: "Octal literals are not allowed in strict mode." }, - Duplicate_identifier_0: { code: 2000, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, - Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 2018, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, - Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 2019, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, - Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 2020, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, - Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 2021, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, - Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 2022, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, - Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 2023, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2208, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2209, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 2210, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, - Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 2211, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, - Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 2212, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 2213, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, - Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2214, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2215, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2216, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2217, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2218, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 2219, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 2220, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, - Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 2221, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2222, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2223, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, - new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 2068, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, - Multiple_constructor_implementations_are_not_allowed: { code: 2070, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." }, - A_class_may_only_implement_another_class_or_interface: { code: 2074, category: 1 /* Error */, key: "A class may only implement another class or interface." }, - get_and_set_accessor_must_have_the_same_type: { code: 2096, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." }, - Static_members_cannot_reference_class_type_parameters: { code: 2099, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, - super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2102, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, - The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2112, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2113, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2114, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, - The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2115, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, - The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2116, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, - The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2117, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, - The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2118, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, - The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2119, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, - A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2126, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, - Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2127, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." }, - A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2131, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, - Untyped_function_calls_may_not_accept_type_arguments: { code: 2158, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." }, - The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2120, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2121, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, - Setters_cannot_return_a_value: { code: 2122, category: 1 /* Error */, key: "Setters cannot return a value." }, - Invalid_left_hand_side_of_assignment_expression: { code: 2130, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." }, - Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2134, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, - All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2135, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." }, - The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2139, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, - Overload_signatures_must_all_be_public_or_private: { code: 2150, category: 1 /* Error */, key: "Overload signatures must all be public or private." }, - Overload_signatures_must_all_be_exported_or_not_exported: { code: 2151, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." }, - Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2152, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." }, - Overload_signatures_must_all_be_optional_or_required: { code: 2153, category: 1 /* Error */, key: "Overload signatures must all be optional or required." }, - this_cannot_be_referenced_in_constructor_arguments: { code: 2155, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." }, - Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2161, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, - A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2163, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." }, - Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2189, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, - Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2190, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, - Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2192, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, - super_cannot_be_referenced_in_constructor_arguments: { code: 2193, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." }, - Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2194, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" }, - Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2196, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." }, - Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2197, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, - Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2200, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, - Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2205, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, - Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2206, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, - Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2207, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, - Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2224, category: 1 /* Error */, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, - Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2225, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, - Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2229, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, - Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2230, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, - Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2231, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." }, - Duplicate_string_index_signature: { code: 2232, category: 1 /* Error */, key: "Duplicate string index signature." }, - Duplicate_number_index_signature: { code: 2233, category: 1 /* Error */, key: "Duplicate number index signature." }, - All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2234, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, - Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2235, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, - Function_implementation_name_must_be_0: { code: 2239, category: 1 /* Error */, key: "Function implementation name must be '{0}'." }, - Constructor_implementation_is_missing: { code: 2240, category: 1 /* Error */, key: "Constructor implementation is missing." }, - An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2245, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, - A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2246, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, - Function_overload_must_be_static: { code: 2247, category: 1 /* Error */, key: "Function overload must be static." }, - Function_overload_must_not_be_static: { code: 2248, category: 1 /* Error */, key: "Function overload must not be static." }, - Circular_definition_of_import_alias_0: { code: 3000, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, - Cannot_find_name_0: { code: 3001, category: 1 /* Error */, key: "Cannot find name '{0}'." }, - Module_0_has_no_exported_member_1: { code: 3002, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, - Cannot_find_external_module_0: { code: 3003, category: 1 /* Error */, key: "Cannot find external module '{0}'." }, - A_module_cannot_have_more_than_one_export_assignment: { code: 3004, category: 1 /* Error */, key: "A module cannot have more than one export assignment." }, - Type_0_recursively_references_itself_as_a_base_type: { code: 3005, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." }, - A_class_may_only_extend_another_class: { code: 3006, category: 1 /* Error */, key: "A class may only extend another class." }, - An_interface_may_only_extend_a_class_or_another_interface: { code: 3007, category: 1 /* Error */, key: "An interface may only extend a class or another interface." }, - Generic_type_0_requires_1_type_argument_s: { code: 3008, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." }, - Type_0_is_not_generic: { code: 3009, category: 1 /* Error */, key: "Type '{0}' is not generic." }, - Cannot_find_global_type_0: { code: 3010, category: 1 /* Error */, key: "Cannot find global type '{0}'." }, - Global_type_0_must_be_a_class_or_interface_type: { code: 3011, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." }, - Global_type_0_must_have_1_type_parameter_s: { code: 3012, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." }, - this_cannot_be_referenced_in_a_module_body: { code: 3013, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." }, - this_cannot_be_referenced_in_a_static_property_initializer: { code: 3014, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." }, - this_cannot_be_referenced_in_current_location: { code: -9999999, category: 1 /* Error */, key: "'this' cannot be referenced in current location." }, - super_can_only_be_referenced_in_a_derived_class: { code: 3015, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." }, - Property_0_does_not_exist_on_type_1: { code: 3017, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." }, - An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 3018, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, - Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 3019, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}':" }, - Type_0_does_not_satisfy_the_constraint_1: { code: 3019, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." }, - Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 3020, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." }, - Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 3021, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." }, - Only_a_void_function_can_be_called_with_the_new_keyword: { code: 3022, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." }, - Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 3023, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, - Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 3024, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, - Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 3024, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, - No_best_common_type_exists_among_return_expressions: { code: 3027, category: 1 /* Error */, key: "No best common type exists among return expressions." }, - Operator_0_cannot_be_applied_to_types_1_and_2: { code: 3028, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, - No_best_common_type_exists_between_0_and_1: { code: 3029, category: 1 /* Error */, key: "No best common type exists between '{0}' and '{1}'." }, - No_best_common_type_exists_between_0_1_and_2: { code: 3030, category: 1 /* Error */, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, - A_rest_parameter_must_be_of_an_array_type: { code: 3031, category: 1 /* Error */, key: "A rest parameter must be of an array type." }, - A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 3032, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." }, - Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 3033, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." }, - Duplicate_function_implementation: { code: 3034, category: 1 /* Error */, key: "Duplicate function implementation." }, - Overload_signature_is_not_compatible_with_function_implementation: { code: 3035, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." }, - Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 3036, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, - Index_signature_is_missing_in_type_0: { code: 4003, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." }, - Index_signatures_are_incompatible_Colon: { code: 4004, category: 1 /* Error */, key: "Index signatures are incompatible:" }, - Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4016, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4017, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 4018, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 4019, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, - In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 4024, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, - Named_properties_0_of_types_1_and_2_are_not_identical: { code: 4032, category: 3 /* NoPrefix */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1 /* Error */, key: "Variable declaration list cannot be empty." }, + Digit_expected: { code: 1124, category: 1 /* Error */, key: "Digit expected." }, + Hexadecimal_digit_expected: { code: 1125, category: 1 /* Error */, key: "Hexadecimal digit expected." }, + Unexpected_end_of_text: { code: 1126, category: 1 /* Error */, key: "Unexpected end of text." }, + Invalid_character: { code: 1127, category: 1 /* Error */, key: "Invalid character." }, + Declaration_or_statement_expected: { code: 1128, category: 1 /* Error */, key: "Declaration or statement expected." }, + Statement_expected: { code: 1129, category: 1 /* Error */, key: "Statement expected." }, + case_or_default_expected: { code: 1130, category: 1 /* Error */, key: "'case' or 'default' expected." }, + Property_or_signature_expected: { code: 1131, category: 1 /* Error */, key: "Property or signature expected." }, + Enum_member_expected: { code: 1132, category: 1 /* Error */, key: "Enum member expected." }, + Type_reference_expected: { code: 1133, category: 1 /* Error */, key: "Type reference expected." }, + Variable_declaration_expected: { code: 1134, category: 1 /* Error */, key: "Variable declaration expected." }, + Argument_expression_expected: { code: 1135, category: 1 /* Error */, key: "Argument expression expected." }, + Property_assignment_expected: { code: 1136, category: 1 /* Error */, key: "Property assignment expected." }, + Expression_or_comma_expected: { code: 1137, category: 1 /* Error */, key: "Expression or comma expected." }, + Parameter_declaration_expected: { code: 1138, category: 1 /* Error */, key: "Parameter declaration expected." }, + Type_parameter_declaration_expected: { code: 1139, category: 1 /* Error */, key: "Type parameter declaration expected." }, + Type_argument_expected: { code: 1140, category: 1 /* Error */, key: "Type argument expected." }, + String_literal_expected: { code: 1141, category: 1 /* Error */, key: "String literal expected." }, + Line_break_not_permitted_here: { code: 1142, category: 1 /* Error */, key: "Line break not permitted here." }, + catch_or_finally_expected: { code: 1143, category: 1 /* Error */, key: "'catch' or 'finally' expected." }, + Block_or_expected: { code: 1144, category: 1 /* Error */, key: "Block or ';' expected." }, + Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." }, + Declaration_expected: { code: 1146, category: 1 /* Error */, key: "Declaration expected." }, + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." }, + Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, + Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + Duplicate_identifier_0: { code: 2300, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, + Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, + Circular_definition_of_import_alias_0: { code: 2303, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, + Cannot_find_name_0: { code: 2304, category: 1 /* Error */, key: "Cannot find name '{0}'." }, + Module_0_has_no_exported_member_1: { code: 2305, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, + File_0_is_not_an_external_module: { code: 2306, category: 1 /* Error */, key: "File '{0}' is not an external module." }, + Cannot_find_external_module_0: { code: 2307, category: 1 /* Error */, key: "Cannot find external module '{0}'." }, + A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: 1 /* Error */, key: "A module cannot have more than one export assignment." }, + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, + Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." }, + A_class_may_only_extend_another_class: { code: 2311, category: 1 /* Error */, key: "A class may only extend another class." }, + An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: 1 /* Error */, key: "An interface may only extend a class or another interface." }, + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, + Generic_type_0_requires_1_type_argument_s: { code: 2314, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." }, + Type_0_is_not_generic: { code: 2315, category: 1 /* Error */, key: "Type '{0}' is not generic." }, + Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." }, + Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." }, + Cannot_find_global_type_0: { code: 2318, category: 1 /* Error */, key: "Cannot find global type '{0}'." }, + Named_properties_0_of_types_1_and_2_are_not_identical: { code: 2319, category: 1 /* Error */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2320, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, + Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, + Type_0_is_not_assignable_to_type_1_Colon: { code: 2322, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}':" }, + Type_0_is_not_assignable_to_type_1: { code: 2323, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." }, + Property_0_is_missing_in_type_1: { code: 2324, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." }, + Private_property_0_cannot_be_reimplemented: { code: 2325, category: 1 /* Error */, key: "Private property '{0}' cannot be reimplemented." }, + Types_of_property_0_are_incompatible_Colon: { code: 2326, category: 1 /* Error */, key: "Types of property '{0}' are incompatible:" }, + Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2327, category: 1 /* Error */, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, + Types_of_parameters_0_and_1_are_incompatible_Colon: { code: 2328, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, + Index_signature_is_missing_in_type_0: { code: 2329, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." }, + Index_signatures_are_incompatible_Colon: { code: 2330, category: 1 /* Error */, key: "Index signatures are incompatible:" }, + this_cannot_be_referenced_in_a_module_body: { code: 2331, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." }, + this_cannot_be_referenced_in_current_location: { code: 2332, category: 1 /* Error */, key: "'this' cannot be referenced in current location." }, + this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." }, + this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." }, + super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." }, + super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." }, + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, + Property_0_does_not_exist_on_type_1: { code: 2339, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." }, + Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: 1 /* Error */, key: "Only public methods of the base class are accessible via the 'super' keyword" }, + Property_0_is_inaccessible: { code: 2341, category: 1 /* Error */, key: "Property '{0}' is inaccessible." }, + An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 2342, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, + Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 2343, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}':" }, + Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." }, + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, + Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." }, + Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." }, + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." }, + Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." }, + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 2353, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, + No_best_common_type_exists_among_return_expressions: { code: 2354, category: 1 /* Error */, key: "No best common type exists among return expressions." }, + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2360, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." }, + Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, + No_best_common_type_exists_between_0_1_and_2: { code: 2366, category: 1 /* Error */, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, + No_best_common_type_exists_between_0_and_1: { code: 2367, category: 1 /* Error */, key: "No best common type exists between '{0}' and '{1}'." }, + Type_parameter_name_cannot_be_0: { code: 2368, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" }, + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, + A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: 1 /* Error */, key: "A rest parameter must be of an array type." }, + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." }, + Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." }, + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, + Duplicate_string_index_signature: { code: 2374, category: 1 /* Error */, key: "Duplicate string index signature." }, + Duplicate_number_index_signature: { code: 2375, category: 1 /* Error */, key: "Duplicate number index signature." }, + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, + Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." }, + A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, + Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." }, + get_and_set_accessor_must_have_the_same_type: { code: 2380, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." }, + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." }, + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." }, + Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." }, + Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." }, + Overload_signatures_must_all_be_public_or_private: { code: 2385, category: 1 /* Error */, key: "Overload signatures must all be public or private." }, + Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: 1 /* Error */, key: "Overload signatures must all be optional or required." }, + Function_overload_must_be_static: { code: 2387, category: 1 /* Error */, key: "Function overload must be static." }, + Function_overload_must_not_be_static: { code: 2388, category: 1 /* Error */, key: "Function overload must not be static." }, + Function_implementation_name_must_be_0: { code: 2389, category: 1 /* Error */, key: "Function implementation name must be '{0}'." }, + Constructor_implementation_is_missing: { code: 2390, category: 1 /* Error */, key: "Constructor implementation is missing." }, + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." }, + Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." }, + Duplicate_function_implementation: { code: 2393, category: 1 /* Error */, key: "Duplicate function implementation." }, + Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." }, + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, + Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2397, category: 1 /* Error */, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, + Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2398, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, + Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." }, + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, + Setters_cannot_return_a_value: { code: 2408, category: 1 /* Error */, key: "Setters cannot return a value." }, + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" }, + All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." }, + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, + Class_name_cannot_be_0: { code: 2414, category: 1 /* Error */, key: "Class name cannot be '{0}'" }, + Class_0_incorrectly_extends_base_class_1: { code: 2415, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." }, + Class_0_incorrectly_extends_base_class_1_Colon: { code: 2416, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}':" }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: 2418, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, + Class_0_incorrectly_implements_interface_1: { code: 2420, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." }, + Class_0_incorrectly_implements_interface_1_Colon: { code: 2421, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}':" }, + A_class_may_only_implement_another_class_or_interface: { code: 2422, category: 1 /* Error */, key: "A class may only implement another class or interface." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: 1 /* Error */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: 1 /* Error */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, + Interface_name_cannot_be_0: { code: 2427, category: 1 /* Error */, key: "Interface name cannot be '{0}'" }, + All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, + Interface_0_incorrectly_extends_interface_1_Colon: { code: 2429, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}':" }, + Interface_0_incorrectly_extends_interface_1: { code: 2430, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." }, + Enum_name_cannot_be_0: { code: 2431, category: 1 /* Error */, key: "Enum name cannot be '{0}'" }, + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, + A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, + A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, + Ambient_external_modules_cannot_be_nested_in_other_modules: { code: 2435, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." }, + Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." }, + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" }, + Import_name_cannot_be_0: { code: 2438, category: 1 /* Error */, key: "Import name cannot be '{0}'" }, + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, + Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" }, + Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1 /* Error */, key: "Import declaration '{0}' is using private name '{1}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4003, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4005, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4007, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4009, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4011, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4013, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4015, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4017, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4018, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 4021, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, + Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." }, + Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, + Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: 1 /* Error */, key: "Exported variable '{0}' has or is using private name '{1}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using private name '{1}'." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using private name '{1}'." }, + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using private name '{0}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using private name '{0}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using private name '{0}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using private name '{0}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using private name '{0}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: 1 /* Error */, key: "Return type of public method from exported class has or is using private name '{0}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: 1 /* Error */, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: 1 /* Error */, key: "Return type of method from exported interface has or is using private name '{0}'." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." }, + Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: 1 /* Error */, key: "Return type of exported function has or is using private name '{0}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, The_current_host_does_not_support_the_0_option: { code: 5001, category: 1 /* Error */, key: "The current host does not support the '{0}' option." }, Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1 /* Error */, key: "Cannot find the common subdirectory path for the input files." }, Cannot_read_file_0_Colon_1: { code: 5012, category: 1 /* Error */, key: "Cannot read file '{0}': {1}" }, - Unsupported_file_encoding: { code: 5013, category: 3 /* NoPrefix */, key: "Unsupported file encoding." }, + Unsupported_file_encoding: { code: 5013, category: 1 /* Error */, key: "Unsupported file encoding." }, + Unknown_compiler_option_0: { code: 5023, category: 1 /* Error */, key: "Unknown compiler option '{0}'." }, Could_not_write_file_0_Colon_1: { code: 5033, category: 1 /* Error */, key: "Could not write file '{0}': {1}" }, Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1 /* Error */, key: "Option mapRoot cannot be specified without specifying sourcemap option." }, Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1 /* Error */, key: "Option sourceRoot cannot be specified without specifying sourcemap option." }, @@ -260,13 +361,10 @@ var ts; Watch_input_files: { code: 6005, category: 2 /* Message */, key: "Watch input files." }, Redirect_output_structure_to_the_directory: { code: 6006, category: 2 /* Message */, key: "Redirect output structure to the directory." }, Do_not_emit_comments_to_output: { code: 6009, category: 2 /* Message */, key: "Do not emit comments to output." }, - Skip_resolution_and_preprocessing: { code: 6010, category: 2 /* Message */, key: "Skip resolution and preprocessing." }, Specify_ECMAScript_target_version_Colon_ES3_default_or_ES5: { code: 6015, category: 2 /* Message */, key: "Specify ECMAScript target version: 'ES3' (default), or 'ES5'" }, Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: 2 /* Message */, key: "Specify module code generation: 'commonjs' or 'amd'" }, Print_this_message: { code: 6017, category: 2 /* Message */, key: "Print this message." }, Print_the_compiler_s_version: { code: 6019, category: 2 /* Message */, key: "Print the compiler's version." }, - Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: { code: 6021, category: 2 /* Message */, key: "Allow use of deprecated '{0}' keyword when referencing an external module." }, - Specify_locale_for_errors_and_messages_For_example_0_or_1: { code: 6022, category: 2 /* Message */, key: "Specify locale for errors and messages. For example '{0}' or '{1}'" }, Syntax_Colon_0: { code: 6023, category: 2 /* Message */, key: "Syntax: {0}" }, options: { code: 6024, category: 2 /* Message */, key: "options" }, file: { code: 6025, category: 2 /* Message */, key: "file" }, @@ -274,29 +372,25 @@ var ts; Options_Colon: { code: 6027, category: 2 /* Message */, key: "Options:" }, Version_0: { code: 6029, category: 2 /* Message */, key: "Version {0}" }, Insert_command_line_options_and_files_from_a_file: { code: 6030, category: 2 /* Message */, key: "Insert command line options and files from a file." }, - Use_the_0_flag_to_see_options: { code: 6031, category: 2 /* Message */, key: "Use the '{0}' flag to see options." }, File_change_detected_Compiling: { code: 6032, category: 2 /* Message */, key: "File change detected. Compiling..." }, - STRING: { code: 6033, category: 2 /* Message */, key: "STRING" }, KIND: { code: 6034, category: 2 /* Message */, key: "KIND" }, FILE: { code: 6035, category: 2 /* Message */, key: "FILE" }, VERSION: { code: 6036, category: 2 /* Message */, key: "VERSION" }, LOCATION: { code: 6037, category: 2 /* Message */, key: "LOCATION" }, DIRECTORY: { code: 6038, category: 2 /* Message */, key: "DIRECTORY" }, - NUMBER: { code: 6039, category: 2 /* Message */, key: "NUMBER" }, - Specify_the_codepage_to_use_when_opening_source_files: { code: 6040, category: 2 /* Message */, key: "Specify the codepage to use when opening source files." }, - Additional_locations_Colon: { code: 6041, category: 2 /* Message */, key: "Additional locations:" }, Compilation_complete_Watching_for_file_changes: { code: 6042, category: 2 /* Message */, key: "Compilation complete. Watching for file changes." }, Generates_corresponding_map_file: { code: 6043, category: 2 /* Message */, key: "Generates corresponding '.map' file." }, Compiler_option_0_expects_an_argument: { code: 6044, category: 1 /* Error */, key: "Compiler option '{0}' expects an argument." }, Unterminated_quoted_string_in_response_file_0: { code: 6045, category: 1 /* Error */, key: "Unterminated quoted string in response file '{0}'." }, - Argument_for_module_option_must_be_commonjs_or_amd: { code: 6045, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, - Argument_for_target_option_must_be_es3_or_es5: { code: 6046, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3' or 'es5'." }, - Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6047, category: 1 /* Error */, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, - Unsupported_locale_0: { code: 6048, category: 1 /* Error */, key: "Unsupported locale '{0}'." }, - Unable_to_open_file_0: { code: 6049, category: 1 /* Error */, key: "Unable to open file '{0}'." }, - Corrupted_locale_file_0: { code: 6050, category: 1 /* Error */, key: "Corrupted locale file {0}." }, - No_input_files_specified: { code: 6051, category: 1 /* Error */, key: "No input files specified." }, - Warn_on_expressions_and_declarations_with_an_implied_any_type: { code: 7004, category: 2 /* Message */, key: "Warn on expressions and declarations with an implied 'any' type." }, + Argument_for_module_option_must_be_commonjs_or_amd: { code: 6046, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, + Argument_for_target_option_must_be_es3_or_es5: { code: 6047, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3' or 'es5'." }, + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: 1 /* Error */, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, + Unsupported_locale_0: { code: 6049, category: 1 /* Error */, key: "Unsupported locale '{0}'." }, + Unable_to_open_file_0: { code: 6050, category: 1 /* Error */, key: "Unable to open file '{0}'." }, + Corrupted_locale_file_0: { code: 6051, category: 1 /* Error */, key: "Corrupted locale file {0}." }, + Warn_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: 2 /* Message */, key: "Warn on expressions and declarations with an implied 'any' type." }, + File_0_not_found: { code: 6053, category: 1 /* Error */, key: "File '{0}' not found." }, + File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1 /* Error */, key: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1 /* Error */, key: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: 1 /* Error */, key: "Member '{0}' implicitly has an '{1}' type." }, @@ -304,84 +398,12 @@ var ts; _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1 /* Error */, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1 /* Error */, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1 /* Error */, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Lambda_function_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7014, category: 1 /* Error */, key: "Lambda function, which lacks return-type annotation, implicitly has an '{0}' return type." }, - Array_literal_implicitly_has_an_0_type: { code: 7015, category: 1 /* Error */, key: "Array literal implicitly has an '{0}' type." }, Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1 /* Error */, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1 /* Error */, key: "Index signature of object type implicitly has an 'any' type." }, Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1 /* Error */, key: "Object literal's property '{0}' implicitly has an '{1}' type." }, Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1 /* Error */, key: "Rest parameter '{0}' implicitly has an 'any[]' type." }, Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1 /* Error */, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Variable_declaration_list_cannot_be_empty: { code: -9999999, category: 1 /* Error */, key: "Variable declaration list cannot be empty." }, - Digit_expected: { code: -9999999, category: 1 /* Error */, key: "Digit expected." }, - Hexadecimal_digit_expected: { code: -9999999, category: 1 /* Error */, key: "Hexadecimal digit expected." }, - Unexpected_end_of_text: { code: -9999999, category: 1 /* Error */, key: "Unexpected end of text." }, - Unterminated_string_constant: { code: -9999999, category: 1 /* Error */, key: "Unterminated string constant." }, - Invalid_character: { code: -9999999, category: 1 /* Error */, key: "Invalid character." }, - Declaration_or_statement_expected: { code: -9999999, category: 1 /* Error */, key: "Declaration or statement expected." }, - Statement_expected: { code: -9999999, category: 1 /* Error */, key: "Statement expected." }, - case_or_default_expected: { code: -9999999, category: 1 /* Error */, key: "'case' or 'default' expected." }, - Property_or_signature_expected: { code: -9999999, category: 1 /* Error */, key: "Property or signature expected." }, - Enum_member_expected: { code: -9999999, category: 1 /* Error */, key: "Enum member expected." }, - Type_reference_expected: { code: -9999999, category: 1 /* Error */, key: "Type reference expected." }, - Variable_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Variable declaration expected." }, - Argument_expression_expected: { code: -9999999, category: 1 /* Error */, key: "Argument expression expected." }, - Property_assignment_expected: { code: -9999999, category: 1 /* Error */, key: "Property assignment expected." }, - Expression_or_comma_expected: { code: -9999999, category: 1 /* Error */, key: "Expression or comma expected." }, - Parameter_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Parameter declaration expected." }, - Type_parameter_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Type parameter declaration expected." }, - Type_argument_expected: { code: -9999999, category: 1 /* Error */, key: "Type argument expected." }, - String_literal_expected: { code: -9999999, category: 1 /* Error */, key: "String literal expected." }, - not_preceded_by_parameter_list: { code: -9999999, category: 1 /* Error */, key: "'=>' not preceded by parameter list." }, - Invalid_assignment_target: { code: -9999999, category: 1 /* Error */, key: "Invalid assignment target." }, - super_must_be_followed_by_argument_list_or_member_access: { code: -9999999, category: 1 /* Error */, key: "'super' must be followed by argument list or member access." }, - Line_break_not_permitted_here: { code: -9999999, category: 1 /* Error */, key: "Line break not permitted here." }, - catch_or_finally_expected: { code: -9999999, category: 1 /* Error */, key: "'catch' or 'finally' expected." }, - Block_or_expected: { code: -9999999, category: 1 /* Error */, key: "Block or ';' expected." }, - Modifiers_not_permitted_on_index_signature_members: { code: -9999999, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." }, - Class_member_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Class member declaration expected." }, - Declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Declaration expected." }, - Invalid_reference_comment: { code: -9999999, category: 1 /* Error */, key: "Invalid reference comment." }, - File_0_is_not_an_external_module: { code: -9999999, category: 1 /* Error */, key: "File '{0}' is not an external module." }, - Excessive_stack_depth_comparing_types_0_and_1: { code: -9999999, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, - Type_0_is_not_assignable_to_type_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}':" }, - Type_0_is_not_assignable_to_type_1: { code: -9999999, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." }, - Property_0_is_missing_in_type_1: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." }, - Private_property_0_cannot_be_reimplemented: { code: -9999999, category: 1 /* Error */, key: "Private property '{0}' cannot be reimplemented." }, - Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2012, category: 1 /* Error */, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, - Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: -9999999, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, - Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: -9999999, category: 1 /* Error */, key: "Only public methods of the base class are accessible via the 'super' keyword" }, - A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: -9999999, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, - Constructors_for_derived_classes_must_contain_a_super_call: { code: -9999999, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." }, - Import_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Import name cannot be '{0}'" }, - Type_parameter_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" }, - Class_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Class name cannot be '{0}'" }, - Interface_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Interface name cannot be '{0}'" }, - Enum_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Enum name cannot be '{0}'" }, - Types_of_property_0_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of property '{0}' are incompatible:" }, - Types_of_parameters_0_and_1_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, - Unknown_identifier_0: { code: -9999999, category: 1 /* Error */, key: "Unknown identifier '{0}'." }, - Property_0_is_inaccessible: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is inaccessible." }, - Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: -9999999, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." }, - Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, - Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, - Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: -9999999, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, - Class_0_incorrectly_extends_base_class_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}':" }, - Class_0_incorrectly_extends_base_class_1: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: -9999999, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, - Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: -9999999, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, - Class_0_incorrectly_implements_interface_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}':" }, - Class_0_incorrectly_implements_interface_1: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." }, - Interface_0_incorrectly_extends_interface_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}':" }, - Interface_0_incorrectly_extends_interface_1: { code: -9999999, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." }, - Ambient_external_modules_cannot_be_nested_in_other_modules: { code: -9999999, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." }, - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: -9999999, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." }, - A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, - A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, - Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: -9999999, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, - Import_declaration_conflicts_with_local_declaration_of_0: { code: -9999999, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" }, - Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: -9999999, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" }, - Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: -9999999, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" } + You_cannot_rename_this_element: { code: 8000, category: 1 /* Error */, key: "You cannot rename this element." } }; })(ts || (ts = {})); var ts; @@ -559,6 +581,11 @@ var ts; return result; } ts.getLineStarts = getLineStarts; + function getPositionFromLineAndCharacter(lineStarts, line, character) { + ts.Debug.assert(line > 0); + return lineStarts[line - 1] + character - 1; + } + ts.getPositionFromLineAndCharacter = getPositionFromLineAndCharacter; function getLineAndCharacterOfPosition(lineStarts, position) { var lineNumber = ts.binarySearch(lineStarts, position); if (lineNumber < 0) { @@ -579,9 +606,11 @@ var ts; function isWhiteSpace(ch) { return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; } + ts.isWhiteSpace = isWhiteSpace; function isLineBreak(ch) { return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */; } + ts.isLineBreak = isLineBreak; function isDigit(ch) { return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; } @@ -643,7 +672,7 @@ var ts; ts.skipTrivia = skipTrivia; function getCommentRanges(text, pos, trailing) { var result; - var collecting = trailing; + var collecting = trailing || pos === 0; while (true) { var ch = text.charCodeAt(pos); switch (ch) { @@ -656,6 +685,9 @@ var ts; return result; } collecting = true; + if (result && result.length) { + result[result.length - 1].hasTrailingNewLine = true; + } continue; case 9 /* tab */: case 11 /* verticalTab */: @@ -665,12 +697,14 @@ var ts; continue; case 47 /* slash */: var nextChar = text.charCodeAt(pos + 1); + var hasTrailingNewLine = false; if (nextChar === 47 /* slash */ || nextChar === 42 /* asterisk */) { var startPos = pos; pos += 2; if (nextChar === 47 /* slash */) { while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { + hasTrailingNewLine = true; break; } pos++; @@ -688,13 +722,16 @@ var ts; if (collecting) { if (!result) result = []; - result.push({ pos: startPos, end: pos }); + result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine }); } continue; } break; default: if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (result && result.length && isLineBreak(ch)) { + result[result.length - 1].hasTrailingNewLine = true; + } pos++; continue; } @@ -866,7 +903,7 @@ var ts; } if (isLineBreak(ch)) { result += text.substring(start, pos); - error(ts.Diagnostics.Unterminated_string_constant); + error(ts.Diagnostics.Unterminated_string_literal); break; } pos++; @@ -1014,9 +1051,8 @@ var ts; } if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { pos += 2; - var safeLength = len - 1; var commentClosed = false; - while (pos < safeLength) { + while (pos < len) { var ch = text.charCodeAt(pos); if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { pos += 2; @@ -1029,7 +1065,6 @@ var ts; pos++; } if (!commentClosed) { - pos++; error(ts.Diagnostics.Asterisk_Slash_expected); } if (onComment) { @@ -1457,6 +1492,10 @@ var ts; SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.StringKeyword] = "LastKeyword"; SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedWord"; SyntaxKind[SyntaxKind["LastFutureReservedWord"] = SyntaxKind.YieldKeyword] = "LastFutureReservedWord"; + SyntaxKind[SyntaxKind["FirstTypeNode"] = SyntaxKind.TypeReference] = "FirstTypeNode"; + SyntaxKind[SyntaxKind["LastTypeNode"] = SyntaxKind.ArrayType] = "LastTypeNode"; + SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation"; + SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.CaretEqualsToken] = "LastPunctuation"; })(ts.SyntaxKind || (ts.SyntaxKind = {})); var SyntaxKind = ts.SyntaxKind; (function (NodeFlags) { @@ -1476,6 +1515,7 @@ var ts; (function (TypeFormatFlags) { TypeFormatFlags[TypeFormatFlags["None"] = 0x00000000] = "None"; TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 0x00000001] = "WriteArrayAsGenericType"; + TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 0x00000002] = "UseTypeOfFunction"; })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); var TypeFormatFlags = ts.TypeFormatFlags; (function (SymbolAccessibility) { @@ -1589,7 +1629,6 @@ var ts; DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; - DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; })(ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); var DiagnosticCategory = ts.DiagnosticCategory; (function (ModuleKind) { @@ -1793,9 +1832,9 @@ var ts; } ts.map = map; function concatenate(array1, array2) { - if (!array2.length) + if (!array2 || !array2.length) return array1; - if (!array1.length) + if (!array1 || !array1.length) return array2; return array1.concat(array2); } @@ -1900,9 +1939,9 @@ var ts; if (ts.localizedDiagnosticMessages) { message = ts.localizedDiagnosticMessages[message]; } - Debug.assert(message, "Diagnostic message does not exist in locale map."); return message; } + ts.getLocaleSpecificMessage = getLocaleSpecificMessage; function createFileDiagnostic(file, start, length, message) { var text = getLocaleSpecificMessage(message.key); if (arguments.length > 4) { @@ -2168,10 +2207,6 @@ var ts; return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } ts.fileExtensionIs = fileExtensionIs; - function getCanonicalFileName(fileName) { - return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); - } - ts.getCanonicalFileName = getCanonicalFileName; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -2209,7 +2244,7 @@ var ts; (function (Debug) { var currentAssertionLevel = 0 /* None */; function shouldAssert(level) { - return this.currentAssertionLevel >= level; + return currentAssertionLevel >= level; } Debug.shouldAssert = shouldAssert; function assert(expression, message, verboseDebugInfo) { @@ -2229,208 +2264,6 @@ var ts; })(ts.Debug || (ts.Debug = {})); var Debug = ts.Debug; })(ts || (ts = {})); -var sys = (function () { - function getWScriptSystem() { - var fso = new ActiveXObject("Scripting.FileSystemObject"); - var fileStream = new ActiveXObject("ADODB.Stream"); - fileStream.Type = 2; - var binaryStream = new ActiveXObject("ADODB.Stream"); - binaryStream.Type = 1; - var args = []; - for (var i = 0; i < WScript.Arguments.length; i++) { - args[i] = WScript.Arguments.Item(i); - } - function readFile(fileName, encoding) { - if (!fso.FileExists(fileName)) { - return undefined; - } - fileStream.Open(); - try { - if (encoding) { - fileStream.Charset = encoding; - fileStream.LoadFromFile(fileName); - } - else { - fileStream.Charset = "x-ansi"; - fileStream.LoadFromFile(fileName); - var bom = fileStream.ReadText(2) || ""; - fileStream.Position = 0; - fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8"; - } - return fileStream.ReadText(); - } - catch (e) { - throw e.number === -2147024809 ? new Error(ts.Diagnostics.Unsupported_file_encoding.key) : e; - } - finally { - fileStream.Close(); - } - } - function writeFile(fileName, data, writeByteOrderMark) { - fileStream.Open(); - binaryStream.Open(); - try { - fileStream.Charset = "utf-8"; - fileStream.WriteText(data); - if (writeByteOrderMark) { - fileStream.Position = 0; - } - else { - fileStream.Position = 3; - } - fileStream.CopyTo(binaryStream); - binaryStream.SaveToFile(fileName, 2); - } - finally { - binaryStream.Close(); - fileStream.Close(); - } - } - return { - args: args, - newLine: "\r\n", - useCaseSensitiveFileNames: false, - write: function (s) { - WScript.StdOut.Write(s); - }, - writeErr: function (s) { - WScript.StdErr.Write(s); - }, - readFile: readFile, - writeFile: writeFile, - resolvePath: function (path) { - return fso.GetAbsolutePathName(path); - }, - fileExists: function (path) { - return fso.FileExists(path); - }, - directoryExists: function (path) { - return fso.FolderExists(path); - }, - createDirectory: function (directoryName) { - if (!this.directoryExists(directoryName)) { - fso.CreateFolder(directoryName); - } - }, - getExecutingFilePath: function () { - return WScript.ScriptFullName; - }, - getCurrentDirectory: function () { - return new ActiveXObject("WScript.Shell").CurrentDirectory; - }, - getMemoryUsage: function () { - return 0; - }, - exit: function (exitCode) { - try { - WScript.Quit(exitCode); - } - catch (e) { - } - } - }; - } - function getNodeSystem() { - var _fs = require("fs"); - var _path = require("path"); - var _os = require('os'); - var platform = _os.platform(); - var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin"; - function readFile(fileName, encoding) { - if (!_fs.existsSync(fileName)) { - return undefined; - } - var buffer = _fs.readFileSync(fileName); - var len = buffer.length; - if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) { - len &= ~1; - for (var i = 0; i < len; i += 2) { - var temp = buffer[i]; - buffer[i] = buffer[i + 1]; - buffer[i + 1] = temp; - } - return buffer.toString("utf16le", 2); - } - if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) { - return buffer.toString("utf16le", 2); - } - if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { - return buffer.toString("utf8", 3); - } - return buffer.toString("utf8"); - } - function writeFile(fileName, data, writeByteOrderMark) { - if (writeByteOrderMark) { - data = '\uFEFF' + data; - } - _fs.writeFileSync(fileName, data, "utf8"); - } - return { - args: process.argv.slice(2), - newLine: _os.EOL, - useCaseSensitiveFileNames: useCaseSensitiveFileNames, - write: function (s) { - process.stdout.write(s); - }, - writeErr: function (s) { - process.stderr.write(s); - }, - readFile: readFile, - writeFile: writeFile, - watchFile: function (fileName, callback) { - _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged); - return { - close: function () { - _fs.unwatchFile(fileName, fileChanged); - } - }; - function fileChanged(curr, prev) { - if (+curr.mtime <= +prev.mtime) { - return; - } - callback(fileName); - } - ; - }, - resolvePath: function (path) { - return _path.resolve(path); - }, - fileExists: function (path) { - return _fs.existsSync(path); - }, - directoryExists: function (path) { - return _fs.existsSync(path) && _fs.statSync(path).isDirectory(); - }, - createDirectory: function (directoryName) { - if (!this.directoryExists(directoryName)) { - _fs.mkdirSync(directoryName); - } - }, - getExecutingFilePath: function () { - return process.mainModule.filename; - }, - getCurrentDirectory: function () { - return process.cwd(); - }, - getMemoryUsage: function () { - global.gc(); - return process.memoryUsage().heapUsed; - }, - exit: function (exitCode) { - process.exit(exitCode); - } - }; - } - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { - return getWScriptSystem(); - } - else if (typeof module !== "undefined" && module.exports) { - return getNodeSystem(); - } - else { - return undefined; - } -})(); var ts; (function (ts) { var nodeConstructors = new Array(180 /* Count */); @@ -2543,6 +2376,23 @@ var ts; ts.Debug.assert(isPrologueDirective(node)); return node.expression.text === "use strict"; } + function getLeadingCommentsOfNode(node, sourceFileOfNode) { + if (node.kind === 114 /* Parameter */ || node.kind === 113 /* TypeParameter */) { + return ts.concatenate(ts.getTrailingComments(sourceFileOfNode.text, node.pos), ts.getLeadingComments(sourceFileOfNode.text, node.pos)); + } + else { + return ts.getLeadingComments(sourceFileOfNode.text, node.pos); + } + } + ts.getLeadingCommentsOfNode = getLeadingCommentsOfNode; + function getJsDocComments(node, sourceFileOfNode) { + return ts.filter(getLeadingCommentsOfNode(node, sourceFileOfNode), function (comment) { return isJsDocComment(comment); }); + function isJsDocComment(comment) { + return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47 /* slash */; + } + } + ts.getJsDocComments = getJsDocComments; + ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/; function forEachChild(node, cbNode, cbNodes) { function child(node) { if (node) @@ -2776,7 +2626,6 @@ var ts; ControlBlockContext[ControlBlockContext["CrossingFunctionBoundary"] = 2] = "CrossingFunctionBoundary"; })(ControlBlockContext || (ControlBlockContext = {})); function createSourceFile(filename, sourceText, languageVersion, version, isOpen) { - if (version === void 0) { version = 0; } if (isOpen === void 0) { isOpen = false; } var file; var scanner; @@ -2873,6 +2722,12 @@ var ts; } return ts.getLineAndCharacterOfPosition(lineStarts, position); } + function getPositionFromSourceLineAndCharacter(line, character) { + if (!lineStarts) { + lineStarts = ts.getLineStarts(sourceText); + } + return ts.getPositionFromLineAndCharacter(lineStarts, line, character); + } function error(message, arg0, arg1, arg2) { var start = scanner.getTokenPos(); var length = scanner.getTextPos() - start; @@ -3651,11 +3506,14 @@ var ts; return parseAssignmentExpression(noIn); } function parseAssignmentExpression(noIn) { - var arrowExpression = tryParseArrowFunctionExpression(); + var arrowExpression = tryParseParenthesizedArrowFunctionExpression(); if (arrowExpression) { return arrowExpression; } var expr = parseConditionalExpression(noIn); + if (expr.kind === 55 /* Identifier */ && token === 23 /* EqualsGreaterThanToken */) { + return parseSimpleArrowFunctionExpression(expr); + } if (isLeftHandSideExpression(expr) && isAssignmentOperator()) { if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { reportInvalidUseInStrictMode(expr); @@ -3692,23 +3550,7 @@ var ts; } return false; } - function tryParseArrowFunctionExpression() { - return isSimpleArrowFunctionExpression() ? parseSimpleArrowFunctionExpression() : tryParseParenthesizedArrowFunctionExpression(); - } - function isSimpleArrowFunctionExpression() { - if (token === 23 /* EqualsGreaterThanToken */) { - return true; - } - if (token === 55 /* Identifier */) { - return lookAhead(function () { - return nextToken() === 23 /* EqualsGreaterThanToken */; - }); - } - return false; - } - function parseSimpleArrowFunctionExpression() { - ts.Debug.assert(token === 55 /* Identifier */ || token === 23 /* EqualsGreaterThanToken */); - var identifier = parseIdentifier(); + function parseSimpleArrowFunctionExpression(identifier) { ts.Debug.assert(token === 23 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); parseExpected(23 /* EqualsGreaterThanToken */); var parameter = createNode(114 /* Parameter */, identifier.pos); @@ -3722,11 +3564,11 @@ var ts; return parseArrowExpressionTail(identifier.pos, signature, false); } function tryParseParenthesizedArrowFunctionExpression() { - var pos = getNodePos(); var triState = isParenthesizedArrowFunctionExpression(); if (triState === 0 /* False */) { return undefined; } + var pos = getNodePos(); if (triState === 1 /* True */) { var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); if (parseExpected(23 /* EqualsGreaterThanToken */) || token === 5 /* OpenBraceToken */) { @@ -3782,6 +3624,9 @@ var ts; } }); } + if (token === 23 /* EqualsGreaterThanToken */) { + return 1 /* True */; + } return 0 /* False */; } function tryParseSignatureIfArrowOrBraceFollows() { @@ -3912,7 +3757,7 @@ var ts; var primaryExpression = parsePrimaryExpression(); var illegalUsageOfSuperKeyword = primaryExpression.kind === 81 /* SuperKeyword */ && token !== 7 /* OpenParenToken */ && token !== 11 /* DotToken */; if (illegalUsageOfSuperKeyword) { - error(ts.Diagnostics.super_must_be_followed_by_argument_list_or_member_access); + error(ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); } var expr = parseCallAndAccess(primaryExpression, false); ts.Debug.assert(isLeftHandSideExpression(expr)); @@ -4288,8 +4133,6 @@ var ts; function parseBreakOrContinueStatement(kind) { var node = createNode(kind); var errorCountBeforeStatement = file.syntacticErrors.length; - var keywordStart = scanner.getTokenPos(); - var keywordLength = scanner.getTextPos() - keywordStart; parseExpected(kind === 153 /* BreakStatement */ ? 56 /* BreakKeyword */ : 61 /* ContinueKeyword */); if (!canParseSemicolon()) node.label = parseIdentifier(); @@ -5211,12 +5054,11 @@ var ts; file.hasNoDefaultLib = true; } else { - var fullReferenceRegEx = /^(\/\/\/\s*/; - var matchResult = fullReferenceRegEx.exec(comment); + var matchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment); if (!matchResult) { var start = range.pos; var length = range.end - start; - errorAtPos(start, length, ts.Diagnostics.Invalid_reference_comment); + errorAtPos(start, length, ts.Diagnostics.Invalid_reference_directive_syntax); } else { referencedFiles.push({ @@ -5254,6 +5096,7 @@ var ts; file.filename = ts.normalizePath(filename); file.text = sourceText; file.getLineAndCharacterFromPosition = getLineAndCharacterlFromSourcePosition; + file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; file.syntacticErrors = []; file.semanticErrors = []; var referenceComments = processReferenceComments(); @@ -5289,7 +5132,7 @@ var ts; getCompilerHost: function () { return host; }, getDiagnostics: getDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, - getTypeChecker: function () { return ts.createTypeChecker(program); }, + getTypeChecker: function (fullTypeCheckMode) { return ts.createTypeChecker(program, fullTypeCheckMode); }, getCommonSourceDirectory: function () { return commonSourceDirectory; } }; return program; @@ -5769,9 +5612,15 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { - var indentStrings = []; + var indentStrings = ["", " "]; function getIndentString(level) { - return indentStrings[level] || (indentStrings[level] = level === 0 ? "" : getIndentString(level - 1) + " "); + if (indentStrings[level] === undefined) { + indentStrings[level] = getIndentString(level - 1) + indentStrings[1]; + } + return indentStrings[level]; + } + function getIndentSize() { + return indentStrings[1].length; } function emitFiles(resolver) { var program = resolver.getProgram(); @@ -5849,6 +5698,14 @@ var ts; output += s; } } + function rawWrite(s) { + if (s !== undefined) { + if (lineStart) { + lineStart = false; + } + output += s; + } + } function writeLiteral(s) { if (s && s.length) { write(s); @@ -5878,13 +5735,15 @@ var ts; return { write: write, writeSymbol: writeSymbol, + rawWrite: rawWrite, writeLiteral: writeLiteral, writeLine: writeLine, increaseIndent: function () { return indent++; }, decreaseIndent: function () { return indent--; }, + getIndent: function () { return indent; }, getTextPos: function () { return output.length; }, getLine: function () { return lineCount + 1; }, - getColumn: function () { return lineStart ? indent * 4 + 1 : output.length - linePos + 1; }, + getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; }, getText: function () { return output; } }; } @@ -5893,11 +5752,97 @@ var ts; var text = currentSourceFile.text; return text.substring(ts.skipTrivia(text, node.pos), node.end); } + function getLineOfLocalPosition(pos) { + return currentSourceFile.getLineAndCharacterFromPosition(pos).line; + } function writeFile(filename, data, writeByteOrderMark) { compilerHost.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); }); } + function emitComments(comments, trailingSeparator, writer, writeComment) { + var emitLeadingSpace = !trailingSeparator; + ts.forEach(comments, function (comment) { + if (emitLeadingSpace) { + writer.write(" "); + emitLeadingSpace = false; + } + writeComment(comment, writer); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } + else if (trailingSeparator) { + writer.write(" "); + } + else { + emitLeadingSpace = true; + } + }); + } + function emitNewLineBeforeLeadingComments(node, leadingComments, writer) { + if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && getLineOfLocalPosition(node.pos) !== getLineOfLocalPosition(leadingComments[0].pos)) { + writer.writeLine(); + } + } + function writeCommentRange(comment, writer) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { + var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); + var firstCommentLineIndent; + for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { + var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1); + if (pos !== comment.pos) { + if (firstCommentLineIndent === undefined) { + firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos); + } + var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); + var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); + if (spacesToEmit > 0) { + var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); + var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); + writer.rawWrite(indentSizeSpaceString); + while (numberOfSingleSpacesToEmit) { + writer.rawWrite(" "); + numberOfSingleSpacesToEmit--; + } + } + else { + writer.rawWrite(""); + } + } + writeTrimmedCurrentLine(pos, nextLineStart); + pos = nextLineStart; + } + } + else { + writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); + } + function writeTrimmedCurrentLine(pos, nextLineStart) { + var end = Math.min(comment.end, nextLineStart - 1); + var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); + if (currentLineText) { + writer.write(currentLineText); + if (end !== comment.end) { + writer.writeLine(); + } + } + else { + writer.writeLiteral(newLine); + } + } + function calculateIndent(pos, end) { + var currentLineIndent = 0; + while (pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos))) { + pos++; + if (currentSourceFile.text.charCodeAt(pos) === 9 /* tab */) { + currentLineIndent += getIndentSize(); + } + else { + currentLineIndent++; + } + } + return currentLineIndent; + } + } function emitJavaScript(jsFilePath, root) { var writer = createTextWriter(writeSymbol); var write = writer.write; @@ -5906,14 +5851,24 @@ var ts; var decreaseIndent = writer.decreaseIndent; var extendsEmitted = false; var writeEmittedFiles = writeJavaScriptFile; + var emitLeadingComments = compilerOptions.removeComments ? function (node) { + } : emitLeadingDeclarationComments; + var emitTrailingComments = compilerOptions.removeComments ? function (node) { + } : emitTrailingDeclarationComments; + var emitLeadingCommentsOfPosition = compilerOptions.removeComments ? function (pos) { + } : emitLeadingCommentsOfLocalPosition; + var detachedCommentsInfo; + var emitDetachedComments = compilerOptions.removeComments ? function (node) { + } : emitDetachedCommentsAtPosition; + var emitPinnedOrTripleSlashComments = compilerOptions.removeComments ? function (node) { + } : emitPinnedOrTripleSlashCommentsOfNode; + var writeComment = writeCommentRange; var emit = emitNode; var emitStart = function (node) { }; var emitEnd = function (node) { }; var emitToken = emitTokenText; - var emitNewSourceFileStart = function (node) { - }; var scopeEmitStart = function (scopeDeclaration, scopeName) { }; var scopeEmitEnd = function () { @@ -5993,7 +5948,7 @@ var ts; var sourceLinePos = currentSourceFile.getLineAndCharacterFromPosition(pos); var emittedLine = writer.getLine(); var emittedColumn = writer.getColumn(); - if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)) { + if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) { encodeLastRecordedSourceMapSpan(); lastRecordedSourceMapSpan = { emittedLine: emittedLine, @@ -6007,10 +5962,11 @@ var ts; else { lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; + lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex; } } function recordEmitNodeStartSpan(node) { - recordSourceMapSpan(ts.getTokenPosOfNode(node)); + recordSourceMapSpan(ts.skipTrivia(currentSourceFile.text, node.pos)); } function recordEmitNodeEndSpan(node) { recordSourceMapSpan(node.end); @@ -6065,6 +6021,11 @@ var ts; sourceMapNameIndices.pop(); } ; + function writeCommentRangeWithMap(comment, writer) { + recordSourceMapSpan(comment.pos); + writeCommentRange(comment, writer); + recordSourceMapSpan(comment.end); + } function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) { encodeLastRecordedSourceMapSpan(); writeFile(sourceMapData.sourceMapFilePath, JSON.stringify({ @@ -6128,9 +6089,9 @@ var ts; emitStart = recordEmitNodeStartSpan; emitEnd = recordEmitNodeEndSpan; emitToken = writeTextWithSpanRecord; - emitNewSourceFileStart = recordNewSourceFileStart; scopeEmitStart = recordScopeNameOfNode; scopeEmitEnd = recordScopeNameEnd; + writeComment = writeCommentRangeWithMap; } function writeJavaScriptFile(emitOutput, writeByteOrderMark) { writeFile(jsFilePath, emitOutput, writeByteOrderMark); @@ -6298,9 +6259,11 @@ var ts; } } function emitPropertyAssignment(node) { + emitLeadingComments(node); emit(node.name); write(": "); emit(node.initializer); + emitTrailingComments(node); } function emitPropertyAccess(node) { var text = resolver.getPropertyAccessSubstitution(node); @@ -6431,14 +6394,17 @@ var ts; } function emitExpressionStatement(node) { var isArrowExpression = node.expression.kind === 137 /* ArrowFunction */; + emitLeadingComments(node); if (isArrowExpression) write("("); emit(node.expression); if (isArrowExpression) write(")"); write(";"); + emitTrailingComments(node); } function emitIfStatement(node) { + emitLeadingComments(node); var endPos = emitToken(74 /* IfKeyword */, node.pos); write(" "); endPos = emitToken(7 /* OpenParenToken */, endPos); @@ -6456,6 +6422,7 @@ var ts; emitEmbeddedStatement(node.elseStatement); } } + emitTrailingComments(node); } function emitDoStatement(node) { write("do"); @@ -6518,9 +6485,11 @@ var ts; write(";"); } function emitReturnStatement(node) { + emitLeadingComments(node); emitToken(80 /* ReturnKeyword */, node.pos); emitOptional(" ", node.expression); write(";"); + emitTrailingComments(node); } function emitWithStatement(node) { write("with ("); @@ -6606,17 +6575,23 @@ var ts; emitEnd(node.name); } function emitVariableDeclaration(node) { + emitLeadingComments(node); emitModuleMemberName(node); emitOptional(" = ", node.initializer); + emitTrailingComments(node); } function emitVariableStatement(node) { + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) write("var "); emitCommaList(node.declarations); write(";"); + emitTrailingComments(node); } function emitParameter(node) { + emitLeadingComments(node); emit(node.name); + emitTrailingComments(node); } function emitDefaultValueAssignments(node) { ts.forEach(node.parameters, function (param) { @@ -6642,11 +6617,13 @@ var ts; var restIndex = node.parameters.length - 1; var restParam = node.parameters[restIndex]; writeLine(); + emitLeadingComments(restParam); emitStart(restParam); write("var "); emitNode(restParam.name); write(" = [];"); emitEnd(restParam); + emitTrailingComments(restParam); writeLine(); write("for ("); emitStart(restParam); @@ -6673,18 +6650,27 @@ var ts; } } function emitAccessor(node) { + emitLeadingComments(node); write(node.kind === 118 /* GetAccessor */ ? "get " : "set "); emit(node.name); emitSignatureAndBody(node); + emitTrailingComments(node); } function emitFunctionDeclaration(node) { - if (!node.body) - return; + if (!node.body) { + return emitPinnedOrTripleSlashComments(node); + } + if (node.kind !== 116 /* Method */) { + emitLeadingComments(node); + } write("function "); if (node.kind === 167 /* FunctionDeclaration */ || (node.kind === 136 /* FunctionExpression */ && node.name)) { emit(node.name); } emitSignatureAndBody(node); + if (node.kind !== 116 /* Method */) { + emitTrailingComments(node); + } } function emitCaptureThisForNodeIfNecessary(node) { if (resolver.getNodeCheckFlags(node) & 4 /* CaptureThis */) { @@ -6695,17 +6681,20 @@ var ts; } } function emitSignatureParameters(node) { + increaseIndent(); write("("); if (node) { emitCommaList(node.parameters, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); } write(")"); + decreaseIndent(); } function emitSignatureAndBody(node) { emitSignatureParameters(node); write(" {"); scopeEmitStart(node); increaseIndent(); + emitDetachedComments(node.body.kind === 168 /* FunctionBlock */ ? node.body.statements : node.body); var startIndex = 0; if (node.body.kind === 168 /* FunctionBlock */) { startIndex = emitDirectivePrologues(node.body.statements, true); @@ -6732,16 +6721,20 @@ var ts; } else { writeLine(); + emitLeadingComments(node.body); write("return "); emit(node.body); write(";"); + emitTrailingComments(node.body); } - decreaseIndent(); writeLine(); if (node.body.kind === 168 /* FunctionBlock */) { + emitLeadingCommentsOfPosition(node.body.statements.end); + decreaseIndent(); emitToken(6 /* CloseBraceToken */, node.body.statements.end); } else { + decreaseIndent(); emitStart(node.body); write("}"); emitEnd(node.body); @@ -6803,6 +6796,7 @@ var ts; ts.forEach(node.members, function (member) { if (member.kind === 115 /* Property */ && (member.flags & 64 /* Static */) === staticFlag && member.initializer) { writeLine(); + emitLeadingComments(member); emitStart(member); emitStart(member.name); if (staticFlag) { @@ -6817,15 +6811,18 @@ var ts; emit(member.initializer); write(";"); emitEnd(member); + emitTrailingComments(member); } }); } function emitMemberFunctions(node) { ts.forEach(node.members, function (member) { if (member.kind === 116 /* Method */) { - if (!member.body) - return; + if (!member.body) { + return emitPinnedOrTripleSlashComments(member); + } writeLine(); + emitLeadingComments(member); emitStart(member); emitStart(member.name); emitNode(node.name); @@ -6840,6 +6837,7 @@ var ts; emitEnd(member); emitEnd(member); write(";"); + emitTrailingComments(member); } else if (member.kind === 118 /* GetAccessor */ || member.kind === 119 /* SetAccessor */) { var accessors = getAllAccessorDeclarations(node, member); @@ -6859,20 +6857,24 @@ var ts; increaseIndent(); if (accessors.getAccessor) { writeLine(); + emitLeadingComments(accessors.getAccessor); write("get: "); emitStart(accessors.getAccessor); write("function "); emitSignatureAndBody(accessors.getAccessor); emitEnd(accessors.getAccessor); + emitTrailingComments(accessors.getAccessor); write(","); } if (accessors.setAccessor) { writeLine(); + emitLeadingComments(accessors.setAccessor); write("set: "); emitStart(accessors.setAccessor); write("function "); emitSignatureAndBody(accessors.setAccessor); emitEnd(accessors.setAccessor); + emitTrailingComments(accessors.setAccessor); write(","); } writeLine(); @@ -6888,12 +6890,13 @@ var ts; }); } function emitClassDeclaration(node) { - var ctor = getFirstConstructorWithBody(node); + emitLeadingComments(node); write("var "); emit(node.name); write(" = (function ("); - if (node.baseType) + if (node.baseType) { write("_super"); + } write(") {"); increaseIndent(); scopeEmitStart(node); @@ -6906,46 +6909,7 @@ var ts; emitEnd(node.baseType); } writeLine(); - emitStart(ctor || node); - write("function "); - emit(node.name); - emitSignatureParameters(ctor); - write(" {"); - scopeEmitStart(node, "constructor"); - increaseIndent(); - emitCaptureThisForNodeIfNecessary(node); - if (ctor) { - emitDefaultValueAssignments(ctor); - emitRestParameter(ctor); - if (node.baseType) { - var superCall = findInitialSuperCall(ctor); - if (superCall) { - writeLine(); - emit(superCall); - } - } - emitParameterPropertyAssignments(ctor); - } - else { - if (node.baseType) { - writeLine(); - emitStart(node.baseType); - write("_super.apply(this, arguments);"); - emitEnd(node.baseType); - } - } - emitMemberAssignments(node, 0); - if (ctor) { - var statements = ctor.body.statements; - if (superCall) - statements = statements.slice(1); - emitLines(statements); - } - decreaseIndent(); - writeLine(); - emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); - scopeEmitEnd(); - emitEnd(ctor || node); + emitConstructorOfClass(); emitMemberFunctions(node); emitMemberAssignments(node, 64 /* Static */); writeLine(); @@ -6975,8 +6939,73 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); + function emitConstructorOfClass() { + ts.forEach(node.members, function (member) { + if (member.kind === 117 /* Constructor */ && !member.body) { + emitPinnedOrTripleSlashComments(member); + } + }); + var ctor = getFirstConstructorWithBody(node); + if (ctor) { + emitLeadingComments(ctor); + } + emitStart(ctor || node); + write("function "); + emit(node.name); + emitSignatureParameters(ctor); + write(" {"); + scopeEmitStart(node, "constructor"); + increaseIndent(); + if (ctor) { + emitDetachedComments(ctor.body.statements); + } + emitCaptureThisForNodeIfNecessary(node); + if (ctor) { + emitDefaultValueAssignments(ctor); + emitRestParameter(ctor); + if (node.baseType) { + var superCall = findInitialSuperCall(ctor); + if (superCall) { + writeLine(); + emit(superCall); + } + } + emitParameterPropertyAssignments(ctor); + } + else { + if (node.baseType) { + writeLine(); + emitStart(node.baseType); + write("_super.apply(this, arguments);"); + emitEnd(node.baseType); + } + } + emitMemberAssignments(node, 0); + if (ctor) { + var statements = ctor.body.statements; + if (superCall) + statements = statements.slice(1); + emitLines(statements); + } + writeLine(); + if (ctor) { + emitLeadingCommentsOfPosition(ctor.body.statements.end); + } + decreaseIndent(); + emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); + scopeEmitEnd(); + emitEnd(ctor || node); + if (ctor) { + emitTrailingComments(ctor); + } + } + } + function emitInterfaceDeclaration(node) { + emitPinnedOrTripleSlashComments(node); } function emitEnumDeclaration(node) { + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) { emitStart(node); write("var "); @@ -6993,26 +7022,7 @@ var ts; write(") {"); increaseIndent(); scopeEmitStart(node); - ts.forEach(node.members, function (member) { - writeLine(); - emitStart(member); - write(resolver.getLocalNameOfContainer(node)); - write("["); - write(resolver.getLocalNameOfContainer(node)); - write("["); - emitQuotedIdentifier(member.name); - write("] = "); - if (member.initializer) { - emit(member.initializer); - } - else { - write(resolver.getEnumMemberValue(member).toString()); - } - write("] = "); - emitQuotedIdentifier(member.name); - emitEnd(member); - write(";"); - }); + emitEnumMemberDeclarations(); decreaseIndent(); writeLine(); emitToken(6 /* CloseBraceToken */, node.members.end); @@ -7033,6 +7043,31 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); + function emitEnumMemberDeclarations() { + ts.forEach(node.members, function (member) { + writeLine(); + emitLeadingComments(member); + emitStart(member); + write(resolver.getLocalNameOfContainer(node)); + write("["); + write(resolver.getLocalNameOfContainer(node)); + write("["); + emitQuotedIdentifier(member.name); + write("] = "); + if (member.initializer) { + emit(member.initializer); + } + else { + write(resolver.getEnumMemberValue(member).toString()); + } + write("] = "); + emitQuotedIdentifier(member.name); + emitEnd(member); + write(";"); + emitTrailingComments(member); + }); + } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { if (moduleDeclaration.body.kind === 172 /* ModuleDeclaration */) { @@ -7041,8 +7076,10 @@ var ts; } } function emitModuleDeclaration(node) { - if (!ts.isInstantiated(node)) - return; + if (!ts.isInstantiated(node)) { + return emitPinnedOrTripleSlashComments(node); + } + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) { emitStart(node); write("var "); @@ -7089,6 +7126,7 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); } function emitImportDeclaration(node) { var emitImportDeclaration = resolver.isReferencedImportDeclaration(node); @@ -7099,16 +7137,19 @@ var ts; if (node.externalModuleName && node.parent.kind === 177 /* SourceFile */ && compilerOptions.module === 2 /* AMD */) { if (node.flags & 1 /* Export */) { writeLine(); + emitLeadingComments(node); emitStart(node); emitModuleMemberName(node); write(" = "); emit(node.name); write(";"); emitEnd(node); + emitTrailingComments(node); } } else { writeLine(); + emitLeadingComments(node); emitStart(node); if (!(node.flags & 1 /* Export */)) write("var "); @@ -7126,6 +7167,7 @@ var ts; } write(";"); emitEnd(node); + emitTrailingComments(node); } } } @@ -7215,6 +7257,8 @@ var ts; } function emitSourceFile(node) { currentSourceFile = node; + writeLine(); + emitDetachedComments(node); var startIndex = emitDirectivePrologues(node.statements, false); if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) { writeLine(); @@ -7247,8 +7291,12 @@ var ts; } } function emitNode(node) { - if (!node || node.flags & 2 /* Ambient */) + if (!node) { return; + } + if (node.flags & 2 /* Ambient */) { + return emitPinnedOrTripleSlashComments(node); + } switch (node.kind) { case 55 /* Identifier */: return emitIdentifier(node); @@ -7352,6 +7400,8 @@ var ts; return emitVariableDeclaration(node); case 169 /* ClassDeclaration */: return emitClassDeclaration(node); + case 170 /* InterfaceDeclaration */: + return emitInterfaceDeclaration(node); case 171 /* EnumDeclaration */: return emitEnumDeclaration(node); case 172 /* ModuleDeclaration */: @@ -7362,6 +7412,99 @@ var ts; return emitSourceFile(node); } } + function hasDetachedComments(pos) { + return detachedCommentsInfo !== undefined && detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos === pos; + } + function getLeadingCommentsWithoutDetachedComments() { + var leadingComments = ts.getLeadingComments(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); + if (detachedCommentsInfo.length - 1) { + detachedCommentsInfo.pop(); + } + else { + detachedCommentsInfo = undefined; + } + return leadingComments; + } + function getLeadingCommentsToEmit(node) { + if (node.parent.kind === 177 /* SourceFile */ || node.pos !== node.parent.pos) { + var leadingComments; + if (hasDetachedComments(node.pos)) { + leadingComments = getLeadingCommentsWithoutDetachedComments(); + } + else { + leadingComments = ts.getLeadingCommentsOfNode(node, currentSourceFile); + } + return leadingComments; + } + } + function emitLeadingDeclarationComments(node) { + var leadingComments = getLeadingCommentsToEmit(node); + emitNewLineBeforeLeadingComments(node, leadingComments, writer); + emitComments(leadingComments, true, writer, writeComment); + } + function emitTrailingDeclarationComments(node) { + if (node.parent.kind === 177 /* SourceFile */ || node.end !== node.parent.end) { + var trailingComments = ts.getTrailingComments(currentSourceFile.text, node.end); + emitComments(trailingComments, false, writer, writeComment); + } + } + function emitLeadingCommentsOfLocalPosition(pos) { + var leadingComments; + if (hasDetachedComments(pos)) { + leadingComments = getLeadingCommentsWithoutDetachedComments(); + } + else { + leadingComments = ts.getLeadingComments(currentSourceFile.text, pos); + } + emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer); + emitComments(leadingComments, true, writer, writeComment); + } + function emitDetachedCommentsAtPosition(node) { + var leadingComments = ts.getLeadingComments(currentSourceFile.text, node.pos); + if (leadingComments) { + var detachedComments = []; + var lastComment; + ts.forEach(leadingComments, function (comment) { + if (lastComment) { + var lastCommentLine = getLineOfLocalPosition(lastComment.end); + var commentLine = getLineOfLocalPosition(comment.pos); + if (commentLine >= lastCommentLine + 2) { + return detachedComments; + } + } + detachedComments.push(comment); + lastComment = comment; + }); + if (detachedComments.length) { + var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end); + var astLine = getLineOfLocalPosition(ts.skipTrivia(currentSourceFile.text, node.pos)); + if (astLine >= lastCommentLine + 2) { + emitNewLineBeforeLeadingComments(node, leadingComments, writer); + emitComments(detachedComments, true, writer, writeComment); + var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end }; + if (detachedCommentsInfo) { + detachedCommentsInfo.push(currentDetachedCommentInfo); + } + else { + detachedCommentsInfo = [currentDetachedCommentInfo]; + } + } + } + } + } + function emitPinnedOrTripleSlashCommentsOfNode(node) { + var pinnedComments = ts.filter(getLeadingCommentsToEmit(node), isPinnedOrTripleSlashComment); + function isPinnedOrTripleSlashComment(comment) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { + return currentSourceFile.text.charCodeAt(comment.pos + 2) === 33 /* exclamation */; + } + else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 /* slash */ && comment.pos + 2 < comment.end && currentSourceFile.text.charCodeAt(comment.pos + 2) === 47 /* slash */ && currentSourceFile.text.substring(comment.pos, comment.end).match(ts.fullTripleSlashReferencePathRegEx)) { + return true; + } + } + emitNewLineBeforeLeadingComments(node, pinnedComments, writer); + emitComments(pinnedComments, true, writer, writeComment); + } if (compilerOptions.sourceMap) { initializeEmitterWithSourceMaps(); } @@ -7386,16 +7529,42 @@ var ts; var decreaseIndent = writer.decreaseIndent; var enclosingDeclaration; var reportedDeclarationError = false; + var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { + } : writeJsDocComments; + var aliasDeclarationEmitInfo = []; var getSymbolVisibilityDiagnosticMessage; + function writeAsychronousImportDeclarations(importDeclarations) { + var oldWriter = writer; + ts.forEach(importDeclarations, function (aliasToWrite) { + var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); + writer = createTextWriter(writeSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); + }); + writer = oldWriter; + } function writeSymbol(symbol, enclosingDeclaration, meaning) { var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); - if (!getSymbolVisibilityDiagnosticMessage || symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { resolver.writeSymbol(symbol, enclosingDeclaration, meaning, writer); + if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } } else { reportedDeclarationError = true; var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); - diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + if (errorInfo) { + if (errorInfo.typeName) { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + else { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + } } } function emitLines(nodes) { @@ -7413,6 +7582,13 @@ var ts; eachNodeEmitFn(nodes[i]); } } + function writeJsDocComments(declaration) { + if (declaration) { + var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile); + emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer); + emitComments(jsDocComments, true, writer, writeCommentRange); + } + } function emitSourceTextOfNode(node) { write(getSourceTextOfLocalNode(node)); } @@ -7449,27 +7625,52 @@ var ts; } } function emitImportDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - if (node.flags & 1 /* Export */) { - write("export "); - } - write("import "); - emitSourceTextOfNode(node.name); - write(" = "); - if (node.entityName) { - emitSourceTextOfNode(node.entityName); - write(";"); + var nodeEmitInfo = { + declaration: node, + outputPos: writer.getTextPos(), + indent: writer.getIndent(), + hasWritten: resolver.isDeclarationVisible(node) + }; + aliasDeclarationEmitInfo.push(nodeEmitInfo); + if (nodeEmitInfo.hasWritten) { + writeImportDeclaration(node); + } + } + function writeImportDeclaration(node) { + emitJsDocComments(node); + if (node.flags & 1 /* Export */) { + writer.write("export "); + } + writer.write("import "); + writer.write(getSourceTextOfLocalNode(node.name)); + writer.write(" = "); + if (node.entityName) { + checkEntityNameAccessible(); + writer.write(getSourceTextOfLocalNode(node.entityName)); + writer.write(";"); + } + else { + writer.write("require("); + writer.write(getSourceTextOfLocalNode(node.externalModuleName)); + writer.write(");"); + } + writer.writeLine(); + function checkEntityNameAccessible() { + var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } } else { - write("require("); - emitSourceTextOfNode(node.externalModuleName); - write(");"); + reportedDeclarationError = true; + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Import_declaration_0_is_using_private_name_1, getSourceTextOfLocalNode(node.name), symbolAccesibilityResult.errorSymbolName)); } - writeLine(); } } function emitModuleDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("module "); emitSourceTextOfNode(node.name); @@ -7492,6 +7693,7 @@ var ts; } function emitEnumDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("enum "); emitSourceTextOfNode(node.name); @@ -7505,6 +7707,7 @@ var ts; } } function emitEnumMemberDeclaration(node) { + emitJsDocComments(node); emitSourceTextOfNode(node.name); var enumMemberValue = resolver.getEnumMemberValue(node); if (enumMemberValue !== undefined) { @@ -7554,12 +7757,14 @@ var ts; typeName: node.name }; } + increaseIndent(); + emitJsDocComments(node); + decreaseIndent(); emitSourceTextOfNode(node.name); if (node.constraint && (node.parent.kind !== 116 /* Method */ || !(node.parent.flags & 32 /* Private */))) { write(" extends "); getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; - resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 0 /* None */, writer); - getSymbolVisibilityDiagnosticMessage = undefined; + resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); } } if (typeParameters) { @@ -7575,32 +7780,23 @@ var ts; } function emitTypeOfTypeReference(node) { getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */, writer); - getSymbolVisibilityDiagnosticMessage = undefined; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */ | 2 /* UseTypeOfFunction */, writer); function getHeritageClauseVisibilityError(symbolAccesibilityResult) { var diagnosticMessage; if (node.parent.kind === 169 /* ClassDeclaration */) { - if (symbolAccesibilityResult.accessibility == 1 /* NotAccessible */) { - if (symbolAccesibilityResult.errorModuleName) { - diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; - } - else { - diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; - } + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; } else { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; } } else { - if (symbolAccesibilityResult.accessibility == 1 /* NotAccessible */) { - if (symbolAccesibilityResult.errorModuleName) { - diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; - } - else { - diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; - } + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; } else { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; } } return { @@ -7622,6 +7818,7 @@ var ts; } } if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("class "); emitSourceTextOfNode(node.name); @@ -7645,6 +7842,7 @@ var ts; } function emitInterfaceDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("interface "); emitSourceTextOfNode(node.name); @@ -7663,6 +7861,7 @@ var ts; } } function emitPropertyDeclaration(node) { + emitJsDocComments(node); emitDeclarationFlags(node); emitVariableDeclaration(node); write(";"); @@ -7676,13 +7875,37 @@ var ts; } if (!(node.flags & 32 /* Private */)) { write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); } } + function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 166 /* VariableDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; + } + else if (node.kind === 115 /* Property */) { + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; + } + } + return diagnosticMessage !== undefined ? { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + } : undefined; + } } function emitVariableStatement(node) { var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); if (hasDeclarationWithEmit) { + emitJsDocComments(node); emitDeclarationFlags(node); write("var "); emitCommaList(node.declarations, emitVariableDeclaration); @@ -7693,18 +7916,51 @@ var ts; function emitAccessorDeclaration(node) { var accessors = getAllAccessorDeclarations(node.parent, node); if (node === accessors.firstAccessor) { + emitJsDocComments(accessors.getAccessor); + emitJsDocComments(accessors.setAccessor); emitDeclarationFlags(node); emitSourceTextOfNode(node.name); if (!(node.flags & 32 /* Private */)) { write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); } write(";"); writeLine(); } + function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 119 /* SetAccessor */) { + if (node.parent.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.parameters[0], + typeName: node.name + }; + } + else { + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name, + typeName: undefined + }; + } + } } function emitFunctionDeclaration(node) { if ((node.kind !== 167 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); if (node.kind === 167 /* FunctionDeclaration */) { write("function "); @@ -7723,10 +7979,14 @@ var ts; } } function emitConstructSignatureDeclaration(node) { + emitJsDocComments(node); write("new "); emitSignatureDeclaration(node); } function emitSignatureDeclaration(node) { + if (node.kind === 120 /* CallSignature */ || node.kind === 122 /* IndexSignature */) { + emitJsDocComments(node); + } emitTypeParameters(node.typeParameters); if (node.kind === 122 /* IndexSignature */) { write("["); @@ -7743,12 +8003,49 @@ var ts; } if (node.kind !== 117 /* Constructor */ && !(node.flags & 32 /* Private */)) { write(": "); - resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 0 /* None */, writer); + getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; + resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); } write(";"); writeLine(); + function getReturnTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.kind) { + case 121 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 120 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 122 /* IndexSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 116 /* Method */: + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; + } + else if (node.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; + } + break; + case 167 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; + break; + default: + ts.Debug.fail("This is unknown kind for signature: " + ts.SyntaxKind[node.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name || node + }; + } } function emitParameterDeclaration(node) { + increaseIndent(); + emitJsDocComments(node); if (node.flags & 8 /* Rest */) { write("..."); } @@ -7756,9 +8053,46 @@ var ts; if (node.initializer || (node.flags & 4 /* QuestionMark */)) { write("?"); } + decreaseIndent(); if (!(node.parent.flags & 32 /* Private */)) { write(": "); - resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 117 /* Constructor */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; + break; + case 121 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 120 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 116 /* Method */: + if (node.parent.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 167 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + default: + ts.Debug.fail("This is unknown parent for parameter: " + ts.SyntaxKind[node.parent.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; } } function emitNode(node) { @@ -7836,7 +8170,18 @@ var ts; }); } if (!reportedDeclarationError) { - writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", referencePathsOutput + writer.getText(), compilerOptions.emitBOM); + var declarationOutput = referencePathsOutput; + var synchronousDeclarationOutput = writer.getText(); + var appliedSyncOutputPos = 0; + ts.forEach(aliasDeclarationEmitInfo, function (aliasEmitInfo) { + if (aliasEmitInfo.asynchronousOutput) { + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); + declarationOutput += aliasEmitInfo.asynchronousOutput; + appliedSyncOutputPos = aliasEmitInfo.outputPos; + } + }); + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); + writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); } } var shouldEmitDeclarations = resolver.shouldEmitDeclarations(); @@ -7855,6 +8200,8 @@ var ts; if (compilerOptions.out) { emitFile(compilerOptions.out); } + diagnostics.sort(ts.compareDiagnostics); + diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); return { errors: diagnostics, sourceMaps: sourceMapDataList @@ -7867,13 +8214,38 @@ var ts; var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; - function createTypeChecker(program) { + function createTypeChecker(program, fullTypeCheck) { var Symbol = ts.objectAllocator.getSymbolConstructor(); var Type = ts.objectAllocator.getTypeConstructor(); var Signature = ts.objectAllocator.getSignatureConstructor(); var typeCount = 0; var emptyArray = []; var emptySymbols = {}; + var checker = { + getProgram: function () { return program; }, + getDiagnostics: getDiagnostics, + getGlobalDiagnostics: getGlobalDiagnostics, + getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, + getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, + getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, + getTypeCount: function () { return typeCount; }, + checkProgram: checkProgram, + emitFiles: invokeEmitter, + getParentOfSymbol: getParentOfSymbol, + getTypeOfSymbol: getTypeOfSymbol, + getPropertiesOfType: getPropertiesOfType, + getPropertyOfType: getPropertyOfType, + getSignaturesOfType: getSignaturesOfType, + getIndexTypeOfType: getIndexTypeOfType, + getReturnTypeOfSignature: getReturnTypeOfSignature, + getSymbolsInScope: getSymbolsInScope, + getSymbolInfo: getSymbolInfo, + getTypeOfNode: getTypeOfNode, + getApparentType: getApparentType, + typeToString: typeToString, + symbolToString: symbolToString, + getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType + }; var undefinedSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "undefined"); var argumentsSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "arguments"); var unknownSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "unknown"); @@ -7902,7 +8274,6 @@ var ts; var globalBooleanType; var globalRegExpType; var stringLiteralTypes = {}; - var fullTypeCheck = false; var emitExtends = false; var mergedSymbols = []; var symbolLinks = []; @@ -7910,33 +8281,6 @@ var ts; var potentialThisCollisions = []; var diagnostics = []; var diagnosticsModified = false; - var checker = { - getProgram: function () { return program; }, - getDiagnostics: getDiagnostics, - getGlobalDiagnostics: getGlobalDiagnostics, - getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, - getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, - getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, - getTypeCount: function () { return typeCount; }, - checkProgram: checkProgram, - emitFiles: invokeEmitter, - getSymbolOfNode: getSymbolOfNode, - getParentOfSymbol: getParentOfSymbol, - getTypeOfSymbol: getTypeOfSymbol, - getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, - getPropertiesOfType: getPropertiesOfType, - getPropertyOfType: getPropertyOfType, - getSignaturesOfType: getSignaturesOfType, - getIndexTypeOfType: getIndexTypeOfType, - getReturnTypeOfSignature: getReturnTypeOfSignature, - resolveEntityName: resolveEntityName, - getSymbolsInScope: getSymbolsInScope, - getSymbolInfo: getSymbolInfo, - getTypeOfExpression: getTypeOfExpression, - typeToString: typeToString, - symbolToString: symbolToString, - getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType - }; function addDiagnostic(diagnostic) { diagnostics.push(diagnostic); diagnosticsModified = true; @@ -8178,7 +8522,7 @@ var ts; if (!links.target) { links.target = resolvingSymbol; var node = getDeclarationOfKind(symbol, 174 /* ImportDeclaration */); - var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : resolveEntityName(node, node.entityName, node.entityName.kind === 112 /* QualifiedName */ ? ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace : ts.SymbolFlags.Namespace); + var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : getSymbolOfPartOfRightHandSideOfImport(node.entityName, node); if (links.target === resolvingSymbol) { links.target = target || unknownSymbol; } @@ -8191,6 +8535,22 @@ var ts; } return links.target; } + function getSymbolOfPartOfRightHandSideOfImport(entityName, importDeclaration) { + if (!importDeclaration) { + importDeclaration = getAncestor(entityName, 174 /* ImportDeclaration */); + ts.Debug.assert(importDeclaration); + } + if (entityName.kind === 55 /* Identifier */ && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + entityName = entityName.parent; + } + if (entityName.kind === 55 /* Identifier */ || entityName.parent.kind === 112 /* QualifiedName */) { + return resolveEntityName(importDeclaration, entityName, ts.SymbolFlags.Namespace); + } + else { + ts.Debug.assert(entityName.parent.kind === 174 /* ImportDeclaration */); + return resolveEntityName(importDeclaration, entityName, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace); + } + } function getFullyQualifiedName(symbol) { return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); } @@ -8433,30 +8793,41 @@ var ts; } return callback(globals); } - function getAccessibleSymbol(symbol, enclosingDeclaration, meaning) { - function getAccessibleSymbolFromSymbolTable(symbols) { + function getQualifiedLeftMeaning(rightMeaning) { + return rightMeaning === ts.SymbolFlags.Value ? ts.SymbolFlags.Value : ts.SymbolFlags.Namespace; + } + function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning) { + function getAccessibleSymbolChainFromSymbolTable(symbols) { + function canQualifySymbol(symbolFromSymbolTable, meaning) { + if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { + return true; + } + var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning)); + return !!accessibleParent; + } function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) { - if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { - return true; - } - var accessibleParent = getAccessibleSymbol(symbolFromSymbolTable.parent, enclosingDeclaration, ts.SymbolFlags.Namespace); - return !!accessibleParent; + return !ts.forEach(symbolFromSymbolTable.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); }) && canQualifySymbol(symbolFromSymbolTable, meaning); } } if (isAccessible(ts.lookUp(symbols, symbol.name))) { - return symbol; + return [symbol]; } return ts.forEachValue(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 4194304 /* Import */) { + var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { - return symbolFromSymbolTable; + return [symbolFromSymbolTable]; + } + var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; + if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { + return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); } } }); } if (symbol) { - return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolFromSymbolTable); + return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); } } function needsQualification(symbol, enclosingDeclaration, meaning) { @@ -8483,26 +8854,80 @@ var ts; var initialSymbol = symbol; var meaningToLook = meaning; while (symbol) { - var accessibleSymbol = getAccessibleSymbol(symbol, enclosingDeclaration, meaningToLook); - if (accessibleSymbol) { - if (ts.forEach(accessibleSymbol.declarations, function (declaration) { return !isDeclarationVisible(declaration); })) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook); + if (accessibleSymbolChain) { + var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); + if (!hasAccessibleDeclarations) { return { accessibility: 1 /* NotAccessible */, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, ts.SymbolFlags.Namespace) : undefined }; } - return { accessibility: 0 /* Accessible */ }; + return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasAccessibleDeclarations.aliasesToMakeVisible }; + } + meaningToLook = getQualifiedLeftMeaning(meaning); + symbol = getParentOfSymbol(symbol); + } + var symbolExternalModule = ts.forEach(initialSymbol.declarations, function (declaration) { return getExternalModuleContainer(declaration); }); + if (symbolExternalModule) { + var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); + if (symbolExternalModule !== enclosingExternalModule) { + return { + accessibility: 2 /* CannotBeNamed */, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), + errorModuleName: symbolToString(symbolExternalModule) + }; } - meaningToLook = ts.SymbolFlags.Namespace; - symbol = symbol.parent; } return { - accessibility: 2 /* CannotBeNamed */, + accessibility: 1 /* NotAccessible */, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning) }; } return { accessibility: 0 /* Accessible */ }; + function getExternalModuleContainer(declaration) { + for (; declaration; declaration = declaration.parent) { + if (hasExternalModuleSymbol(declaration)) { + return getSymbolOfNode(declaration); + } + } + } + } + function hasExternalModuleSymbol(declaration) { + return (declaration.kind === 172 /* ModuleDeclaration */ && declaration.name.kind === 3 /* StringLiteral */) || (declaration.kind === 177 /* SourceFile */ && ts.isExternalModule(declaration)); + } + function hasVisibleDeclarations(symbol) { + var aliasesToMakeVisible; + if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) { + return undefined; + } + return { aliasesToMakeVisible: aliasesToMakeVisible }; + function getIsDeclarationVisible(declaration) { + if (!isDeclarationVisible(declaration)) { + if (declaration.kind === 174 /* ImportDeclaration */ && !(declaration.flags & 1 /* Export */) && isDeclarationVisible(declaration.parent)) { + getNodeLinks(declaration).isVisible = true; + if (aliasesToMakeVisible) { + if (!ts.contains(aliasesToMakeVisible, declaration)) { + aliasesToMakeVisible.push(declaration); + } + } + else { + aliasesToMakeVisible = [declaration]; + } + return true; + } + return false; + } + return true; + } + } + function isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName) { + var firstIdentifier = getFirstIdentifier(entityName); + var firstIdentifierName = ts.identifierToString(firstIdentifier); + var symbolOfNameSpace = resolveName(entityName.parent, firstIdentifier.text, ts.SymbolFlags.Namespace, ts.Diagnostics.Cannot_find_name_0, firstIdentifierName); + var hasNamespaceDeclarationsVisibile = hasVisibleDeclarations(symbolOfNameSpace); + return hasNamespaceDeclarationsVisibile ? { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasNamespaceDeclarationsVisibile.aliasesToMakeVisible } : { accessibility: 1 /* NotAccessible */, errorSymbolName: firstIdentifierName }; } function symbolToString(symbol, enclosingDeclaration, meaning) { function getSymbolName(symbol) { @@ -8514,17 +8939,27 @@ var ts; } return symbol.name; } - if (enclosingDeclaration && !(symbol.flags & ts.SymbolFlags.PropertyOrAccessor & ts.SymbolFlags.Signature & 4096 /* Constructor */ & 2048 /* Method */ & 262144 /* TypeParameter */)) { + if (enclosingDeclaration && !(symbol.flags & (ts.SymbolFlags.PropertyOrAccessor | ts.SymbolFlags.Signature | 4096 /* Constructor */ | 2048 /* Method */ | 262144 /* TypeParameter */))) { var symbolName; while (symbol) { var isFirstName = !symbolName; - var meaningToLook = isFirstName ? meaning : ts.SymbolFlags.Namespace; - var accessibleSymbol = getAccessibleSymbol(symbol, enclosingDeclaration, meaningToLook); - symbolName = getSymbolName(accessibleSymbol || symbol) + (isFirstName ? "" : ("." + symbolName)); - if (accessibleSymbol && !needsQualification(accessibleSymbol, enclosingDeclaration, meaningToLook)) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning); + var currentSymbolName; + if (accessibleSymbolChain) { + currentSymbolName = ts.map(accessibleSymbolChain, function (accessibleSymbol) { return getSymbolName(accessibleSymbol); }).join("."); + } + else { + if (!isFirstName && ts.forEach(symbol.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); })) { + break; + } + currentSymbolName = getSymbolName(symbol); + } + symbolName = currentSymbolName + (isFirstName ? "" : ("." + symbolName)); + if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { break; } - symbol = accessibleSymbol ? accessibleSymbol.parent : symbol.parent; + symbol = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); + meaning = getQualifiedLeftMeaning(meaning); } return symbolName; } @@ -8603,9 +9038,12 @@ var ts; if (type.symbol && type.symbol.flags & (16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { writeTypeofSymbol(type); } - else if (type.symbol && type.symbol.flags & (8 /* Function */ | 2048 /* Method */) && typeStack && ts.contains(typeStack, type)) { + else if (shouldWriteTypeOfFunctionSymbol()) { writeTypeofSymbol(type); } + else if (typeStack && ts.contains(typeStack, type)) { + writer.write("any"); + } else { if (!typeStack) { typeStack = []; @@ -8614,6 +9052,15 @@ var ts; writeLiteralType(type, allowFunctionOrConstructorTypeLiteral); typeStack.pop(); } + function shouldWriteTypeOfFunctionSymbol() { + if (type.symbol) { + var isStaticMethodSymbol = !!(type.symbol.flags & 2048 /* Method */ && ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 64 /* Static */; })); + var isNonLocalFunctionSymbol = !!(type.symbol.flags & 8 /* Function */) && (type.symbol.parent || ts.forEach(type.symbol.declarations, function (declaration) { return declaration.parent.kind === 177 /* SourceFile */ || declaration.parent.kind === 173 /* ModuleBlock */; })); + if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { + return !!(flags & 2 /* UseTypeOfFunction */) || (typeStack && ts.contains(typeStack, type)); + } + } + } } function writeTypeofSymbol(type) { writer.write("typeof "); @@ -8749,13 +9196,22 @@ var ts; if (externalModule) { var externalModuleSymbol = getSymbolOfNode(externalModule); var exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol); + var resolvedExportSymbol; var symbolOfNode = getSymbolOfNode(node); - if (exportAssignmentSymbol === symbolOfNode) { + if (isSymbolUsedInExportAssignment(symbolOfNode)) { + return true; + } + if (symbolOfNode.flags & 4194304 /* Import */) { + return isSymbolUsedInExportAssignment(resolveImport(symbolOfNode)); + } + } + function isSymbolUsedInExportAssignment(symbol) { + if (exportAssignmentSymbol === symbol) { return true; } if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 4194304 /* Import */)) { - var resolvedExportSymbol = resolveImport(exportAssignmentSymbol); - if (resolvedExportSymbol === symbolOfNode) { + resolvedExportSymbol = resolvedExportSymbol || resolveImport(exportAssignmentSymbol); + if (resolvedExportSymbol === symbol) { return true; } return ts.forEach(resolvedExportSymbol.declarations, function (declaration) { @@ -8772,20 +9228,17 @@ var ts; function determineIfDeclarationIsVisible() { switch (node.kind) { case 166 /* VariableDeclaration */: - if (!(node.flags & 1 /* Export */)) { - return isGlobalSourceFile(node.parent.parent) || isUsedInExportAssignment(node); - } - return isDeclarationVisible(node.parent.parent); case 172 /* ModuleDeclaration */: case 169 /* ClassDeclaration */: case 170 /* InterfaceDeclaration */: case 167 /* FunctionDeclaration */: case 171 /* EnumDeclaration */: case 174 /* ImportDeclaration */: - if (!(node.flags & 1 /* Export */)) { - return isGlobalSourceFile(node.parent) || isUsedInExportAssignment(node); + var parent = node.kind === 166 /* VariableDeclaration */ ? node.parent.parent : node.parent; + if (!(node.flags & 1 /* Export */) && !(node.kind !== 174 /* ImportDeclaration */ && parent.kind !== 177 /* SourceFile */ && ts.isInAmbientContext(parent))) { + return isGlobalSourceFile(parent) || isUsedInExportAssignment(node); } - return isDeclarationVisible(node.parent); + return isDeclarationVisible(parent); case 115 /* Property */: case 116 /* Method */: if (node.flags & 32 /* Private */) { @@ -8807,7 +9260,7 @@ var ts; if (node) { var links = getNodeLinks(node); if (links.isVisible === undefined) { - links.isVisible = determineIfDeclarationIsVisible(); + links.isVisible = !!determineIfDeclarationIsVisible(); } return links.isVisible; } @@ -8867,7 +9320,7 @@ var ts; checkImplicitAny(type); return type; function checkImplicitAny(type) { - if (!program.getCompilerOptions().noImplicitAny) { + if (!fullTypeCheck || !program.getCompilerOptions().noImplicitAny) { return; } if (getInnermostTypeOfNestedArrayTypes(type) !== anyType) { @@ -8969,7 +9422,7 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var type = links.type = createObjectType(8192 /* Anonymous */, symbol); + links.type = createObjectType(8192 /* Anonymous */, symbol); } return links.type; } @@ -9642,11 +10095,11 @@ var ts; } var type = getDeclaredTypeOfSymbol(symbol); if (!(type.flags & ts.TypeFlags.ObjectType)) { - error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, name); + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name); return emptyObjectType; } if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) { - error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, name, arity); + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity); return emptyObjectType; } return type; @@ -9717,6 +10170,10 @@ var ts; return getTypeFromArrayTypeNode(node); case 125 /* TypeLiteral */: return getTypeFromTypeLiteralNode(node); + case 55 /* Identifier */: + case 112 /* QualifiedName */: + var symbol = getSymbolInfo(node); + return getDeclaredTypeOfSymbol(symbol); default: return unknownType; } @@ -10774,7 +11231,8 @@ var ts; } return false; } - function checkSuperExpression(node, isCallExpression) { + function checkSuperExpression(node) { + var isCallExpression = node.parent.kind === 132 /* CallExpression */ && node.parent.func === node; var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); var baseClass; if (enclosingClass && enclosingClass.baseType) { @@ -11210,7 +11668,7 @@ var ts; var typeArgNode = typeArguments[i]; var typeArgument = getTypeFromTypeNode(typeArgNode); var constraint = getConstraintOfTypeParameter(typeParameters[i]); - if (constraint) { + if (constraint && fullTypeCheck) { checkTypeAssignableTo(typeArgument, constraint, typeArgNode, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); } result.push(typeArgument); @@ -11276,7 +11734,7 @@ var ts; } function resolveCallExpression(node) { if (node.func.kind === 81 /* SuperKeyword */) { - var superType = checkSuperExpression(node.func, true); + var superType = checkSuperExpression(node.func); if (superType !== unknownType) { return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */)); } @@ -11366,7 +11824,7 @@ var ts; function checkTypeAssertion(node) { var exprType = checkExpression(node.operand); var targetType = getTypeFromTypeNode(node.type); - if (targetType !== unknownType) { + if (fullTypeCheck && targetType !== unknownType) { var widenedType = getWidenedType(exprType); if (!(isTypeAssignableTo(exprType, targetType) || isTypeAssignableTo(targetType, widenedType))) { checkTypeAssignableTo(targetType, widenedType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other); @@ -11394,7 +11852,7 @@ var ts; if (func.body.kind !== 168 /* FunctionBlock */) { var unwidenedType = checkAndMarkExpression(func.body, contextualMapper); var widenedType = getWidenedType(unwidenedType); - if (program.getCompilerOptions().noImplicitAny && widenedType !== unwidenedType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && widenedType !== unwidenedType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeToString(widenedType)); } return widenedType; @@ -11407,7 +11865,7 @@ var ts; return unknownType; } var widenedType = getWidenedType(commonType); - if (program.getCompilerOptions().noImplicitAny && widenedType !== commonType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && widenedType !== commonType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { var typeName = typeToString(widenedType); if (func.name) { error(func, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.identifierToString(func.name), typeName); @@ -11468,6 +11926,9 @@ var ts; return (body.statements.length === 1) && (body.statements[0].kind === 160 /* ThrowStatement */); } function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) { + if (!fullTypeCheck) { + return; + } if (returnType === voidType || returnType === anyType) { return; } @@ -11699,7 +12160,7 @@ var ts; return rightType; } function checkAssignmentOperator(valueType) { - if (operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { + if (fullTypeCheck && operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression); if (ok) { checkTypeAssignableTo(valueType, leftType, node.left, undefined, undefined); @@ -11746,7 +12207,7 @@ var ts; case 83 /* ThisKeyword */: return checkThisExpression(node); case 81 /* SuperKeyword */: - return checkSuperExpression(node, false); + return checkSuperExpression(node); case 79 /* NullKeyword */: return nullType; case 85 /* TrueKeyword */: @@ -11790,24 +12251,28 @@ var ts; return unknownType; } function checkTypeParameter(node) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); checkSourceElement(node.constraint); - checkTypeParameterHasIllegalReferencesInConstraint(node); + if (fullTypeCheck) { + checkTypeParameterHasIllegalReferencesInConstraint(node); + checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); + } } function checkParameter(parameterDeclaration) { checkVariableDeclaration(parameterDeclaration); - checkCollisionWithIndexVariableInGeneratedCode(parameterDeclaration, parameterDeclaration.name); - if (parameterDeclaration.flags & (16 /* Public */ | 32 /* Private */) && !(parameterDeclaration.parent.kind === 117 /* Constructor */ && parameterDeclaration.parent.body)) { - error(parameterDeclaration, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } - if (parameterDeclaration.flags & 8 /* Rest */) { - if (!isArrayType(getTypeOfSymbol(parameterDeclaration.symbol))) { - error(parameterDeclaration, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); + if (fullTypeCheck) { + checkCollisionWithIndexVariableInGeneratedCode(parameterDeclaration, parameterDeclaration.name); + if (parameterDeclaration.flags & (16 /* Public */ | 32 /* Private */) && !(parameterDeclaration.parent.kind === 117 /* Constructor */ && parameterDeclaration.parent.body)) { + error(parameterDeclaration, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } - } - else { - if (parameterDeclaration.initializer && !parameterDeclaration.parent.body) { - error(parameterDeclaration, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); + if (parameterDeclaration.flags & 8 /* Rest */) { + if (!isArrayType(getTypeOfSymbol(parameterDeclaration.symbol))) { + error(parameterDeclaration, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); + } + } + else { + if (parameterDeclaration.initializer && !parameterDeclaration.parent.body) { + error(parameterDeclaration, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); + } } } function checkReferencesInInitializer(n) { @@ -11841,17 +12306,19 @@ var ts; if (node.type) { checkSourceElement(node.type); } - checkCollisionWithCapturedSuperVariable(node, node.name); - checkCollisionWithCapturedThisVariable(node, node.name); - checkCollisionWithArgumentsInGeneratedCode(node); - if (program.getCompilerOptions().noImplicitAny && !node.type) { - switch (node.kind) { - case 121 /* ConstructSignature */: - error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); - break; - case 120 /* CallSignature */: - error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); - break; + if (fullTypeCheck) { + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + checkCollisionWithArgumentsInGeneratedCode(node); + if (program.getCompilerOptions().noImplicitAny && !node.type) { + switch (node.kind) { + case 121 /* ConstructSignature */: + error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + case 120 /* CallSignature */: + error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + } } } checkSpecializedSignatureDeclaration(node); @@ -11909,6 +12376,9 @@ var ts; if (!node.body) { return; } + if (!fullTypeCheck) { + return; + } function isSuperCallExpression(n) { return n.kind === 132 /* CallExpression */ && n.func.kind === 81 /* SuperKeyword */; } @@ -11956,23 +12426,25 @@ var ts; } } function checkAccessorDeclaration(node) { - if (node.kind === 118 /* GetAccessor */) { - if (!ts.isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { - error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); + if (fullTypeCheck) { + if (node.kind === 118 /* GetAccessor */) { + if (!ts.isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { + error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); + } } - } - var otherKind = node.kind === 118 /* GetAccessor */ ? 119 /* SetAccessor */ : 118 /* GetAccessor */; - var otherAccessor = getDeclarationOfKind(node.symbol, otherKind); - if (otherAccessor) { - var visibilityFlags = 32 /* Private */ | 16 /* Public */; - if (((node.flags & visibilityFlags) !== (otherAccessor.flags & visibilityFlags))) { - error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); - } - var thisType = getAnnotatedAccessorType(node); - var otherType = getAnnotatedAccessorType(otherAccessor); - if (thisType && otherType) { - if (!isTypeIdenticalTo(thisType, otherType)) { - error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + var otherKind = node.kind === 118 /* GetAccessor */ ? 119 /* SetAccessor */ : 118 /* GetAccessor */; + var otherAccessor = getDeclarationOfKind(node.symbol, otherKind); + if (otherAccessor) { + var visibilityFlags = 32 /* Private */ | 16 /* Public */; + if (((node.flags & visibilityFlags) !== (otherAccessor.flags & visibilityFlags))) { + error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); + } + var thisType = getAnnotatedAccessorType(node); + var otherType = getAnnotatedAccessorType(otherAccessor); + if (thisType && otherType) { + if (!isTypeIdenticalTo(thisType, otherType)) { + error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + } } } } @@ -11986,7 +12458,7 @@ var ts; for (var i = 0; i < len; i++) { checkSourceElement(node.typeArguments[i]); var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]); - if (constraint) { + if (fullTypeCheck && constraint) { var typeArgument = type.typeArguments[i]; checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); } @@ -11998,9 +12470,11 @@ var ts; } function checkTypeLiteral(node) { ts.forEach(node.members, checkSourceElement); - var type = getTypeFromTypeLiteralNode(node); - checkIndexConstraints(type); - checkTypeForDuplicateIndexSignatures(node); + if (fullTypeCheck) { + var type = getTypeFromTypeLiteralNode(node); + checkIndexConstraints(type); + checkTypeForDuplicateIndexSignatures(node); + } } function checkArrayType(node) { getTypeFromArrayTypeNode(node); @@ -12009,6 +12483,9 @@ var ts; return (node.flags & 32 /* Private */) && ts.isInAmbientContext(node); } function checkSpecializedSignatureDeclaration(signatureDeclarationNode) { + if (!fullTypeCheck) { + return; + } var signature = getSignatureFromDeclaration(signatureDeclarationNode); if (!signature.hasStringLiterals) { return; @@ -12048,6 +12525,9 @@ var ts; return flags & flagsToCheck; } function checkFunctionOrConstructorSymbol(symbol) { + if (!fullTypeCheck) { + return; + } function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) { var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; if (someButNotAllOverloadFlags !== 0) { @@ -12170,6 +12650,9 @@ var ts; } } function checkExportsOnMergedDeclarations(node) { + if (!fullTypeCheck) { + return; + } var symbol; var symbol = node.localSymbol; if (!symbol) { @@ -12238,7 +12721,7 @@ var ts; if (node.type && !isAccessor(node.kind)) { checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); } - if (program.getCompilerOptions().noImplicitAny && !node.body && !node.type) { + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && !node.body && !node.type) { if (!isPrivateWithinAmbient(node)) { var typeName = typeToString(anyType); if (node.name) { @@ -12356,26 +12839,28 @@ var ts; function checkVariableDeclaration(node) { checkSourceElement(node.type); checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - var typeOfValueDeclaration = getTypeOfVariableOrParameterOrProperty(symbol); - var type; - var useTypeFromValueDeclaration = node === symbol.valueDeclaration; - if (useTypeFromValueDeclaration) { - type = typeOfValueDeclaration; - } - else { - type = getTypeOfVariableDeclaration(node); - } - if (node.initializer) { - if (!(getNodeLinks(node.initializer).flags & 1 /* TypeChecked */)) { - checkTypeAssignableTo(checkAndMarkExpression(node.initializer), type, node, undefined, undefined); + if (fullTypeCheck) { + var symbol = getSymbolOfNode(node); + var typeOfValueDeclaration = getTypeOfVariableOrParameterOrProperty(symbol); + var type; + var useTypeFromValueDeclaration = node === symbol.valueDeclaration; + if (useTypeFromValueDeclaration) { + type = typeOfValueDeclaration; } - } - checkCollisionWithCapturedSuperVariable(node, node.name); - checkCollisionWithCapturedThisVariable(node, node.name); - if (!useTypeFromValueDeclaration) { - if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { - error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); + else { + type = getTypeOfVariableDeclaration(node); + } + if (node.initializer) { + if (!(getNodeLinks(node.initializer).flags & 1 /* TypeChecked */)) { + checkTypeAssignableTo(checkAndMarkExpression(node.initializer), type, node, undefined, undefined); + } + } + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + if (!useTypeFromValueDeclaration) { + if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { + error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); + } } } } @@ -12472,7 +12957,7 @@ var ts; function checkSwitchStatement(node) { var expressionType = checkExpression(node.expression); ts.forEach(node.clauses, function (clause) { - if (clause.expression) { + if (fullTypeCheck && clause.expression) { var caseType = checkExpression(clause.expression); if (!isTypeAssignableTo(expressionType, caseType)) { checkTypeAssignableTo(caseType, expressionType, clause.expression, undefined, undefined); @@ -12556,9 +13041,11 @@ var ts; for (var i = 0; i < typeParameterDeclarations.length; i++) { var node = typeParameterDeclarations[i]; checkTypeParameter(node); - for (var j = 0; j < i; j++) { - if (typeParameterDeclarations[j].symbol === node.symbol) { - error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.identifierToString(node.name)); + if (fullTypeCheck) { + for (var j = 0; j < i; j++) { + if (typeParameterDeclarations[j].symbol === node.symbol) { + error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.identifierToString(node.name)); + } } } } @@ -12577,34 +13064,40 @@ var ts; checkTypeReference(node.baseType); } if (type.baseTypes.length) { - var baseType = type.baseTypes[0]; - checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1_Colon, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); - var staticBaseType = getTypeOfSymbol(baseType.symbol); - checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); - if (baseType.symbol !== resolveEntityName(node, node.baseType.typeName, ts.SymbolFlags.Value)) { - error(node.baseType, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); + if (fullTypeCheck) { + var baseType = type.baseTypes[0]; + checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1_Colon, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); + var staticBaseType = getTypeOfSymbol(baseType.symbol); + checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); + if (baseType.symbol !== resolveEntityName(node, node.baseType.typeName, ts.SymbolFlags.Value)) { + error(node.baseType, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); + } + checkKindsOfPropertyMemberOverrides(type, baseType); } checkExpression(node.baseType.typeName); - checkKindsOfPropertyMemberOverrides(type, baseType); } if (node.implementedTypes) { ts.forEach(node.implementedTypes, function (typeRefNode) { checkTypeReference(typeRefNode); - var t = getTypeFromTypeReferenceNode(typeRefNode); - if (t !== unknownType) { - var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t; - if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) { - checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1_Colon, ts.Diagnostics.Class_0_incorrectly_implements_interface_1); - } - else { - error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface); + if (fullTypeCheck) { + var t = getTypeFromTypeReferenceNode(typeRefNode); + if (t !== unknownType) { + var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t; + if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) { + checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1_Colon, ts.Diagnostics.Class_0_incorrectly_implements_interface_1); + } + else { + error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface); + } } } }); } - checkIndexConstraints(type); ts.forEach(node.members, checkSourceElement); - checkTypeForDuplicateIndexSignatures(node); + if (fullTypeCheck) { + checkIndexConstraints(type); + checkTypeForDuplicateIndexSignatures(node); + } } function getTargetSymbol(s) { return s.flags & 8388608 /* Instantiated */ ? getSymbolLinks(s).target : s; @@ -12681,28 +13174,32 @@ var ts; return true; } function checkInterfaceDeclaration(node) { - checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); checkTypeParameters(node.typeParameters); - checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - var firstInterfaceDecl = getDeclarationOfKind(symbol, 170 /* InterfaceDeclaration */); - if (symbol.declarations.length > 1) { - if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) { - error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters); + if (fullTypeCheck) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + var firstInterfaceDecl = getDeclarationOfKind(symbol, 170 /* InterfaceDeclaration */); + if (symbol.declarations.length > 1) { + if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) { + error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters); + } } - } - if (node === firstInterfaceDecl) { - var type = getDeclaredTypeOfSymbol(symbol); - if (checkInheritedPropertiesAreIdentical(type, node.name)) { - ts.forEach(type.baseTypes, function (baseType) { - checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1_Colon, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1); - }); - checkIndexConstraints(type); + if (node === firstInterfaceDecl) { + var type = getDeclaredTypeOfSymbol(symbol); + if (checkInheritedPropertiesAreIdentical(type, node.name)) { + ts.forEach(type.baseTypes, function (baseType) { + checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1_Colon, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1); + }); + checkIndexConstraints(type); + } } } ts.forEach(node.baseTypes, checkTypeReference); ts.forEach(node.members, checkSourceElement); - checkTypeForDuplicateIndexSignatures(node); + if (fullTypeCheck) { + checkTypeForDuplicateIndexSignatures(node); + } } function getConstantValue(node) { var isNegative = false; @@ -12720,6 +13217,9 @@ var ts; return undefined; } function checkEnumDeclaration(node) { + if (!fullTypeCheck) { + return; + } checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); checkCollisionWithCapturedThisVariable(node, node.name); checkExportsOnMergedDeclarations(node); @@ -12776,26 +13276,28 @@ var ts; return undefined; } function checkModuleDeclaration(node) { - checkCollisionWithCapturedThisVariable(node, node.name); - checkExportsOnMergedDeclarations(node); - var symbol = getSymbolOfNode(node); - if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { - var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); - if (classOrFunc) { - if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { - error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); - } - else if (node.pos < classOrFunc.pos) { - error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); + if (fullTypeCheck) { + checkCollisionWithCapturedThisVariable(node, node.name); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { + var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); + if (classOrFunc) { + if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { + error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); + } + else if (node.pos < classOrFunc.pos) { + error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); + } } } - } - if (node.name.kind === 3 /* StringLiteral */) { - if (!isGlobalSourceFile(node.parent)) { - error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); - } - if (isExternalModuleNameRelative(node.name.text)) { - error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); + if (node.name.kind === 3 /* StringLiteral */) { + if (!isGlobalSourceFile(node.parent)) { + error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); + } + if (isExternalModuleNameRelative(node.name.text)) { + error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); + } } } checkSourceElement(node.body); @@ -12941,7 +13443,6 @@ var ts; function checkSourceFile(node) { var links = getNodeLinks(node); if (!(links.flags & 1 /* TypeChecked */)) { - fullTypeCheck = true; emitExtends = false; potentialThisCollisions.length = 0; ts.forEach(node.statements, checkSourceElement); @@ -12958,13 +13459,13 @@ var ts; if (emitExtends) links.flags |= 8 /* EmitExtends */; links.flags |= 1 /* TypeChecked */; - fullTypeCheck = false; } } function checkProgram() { ts.forEach(program.getSourceFiles(), checkSourceFile); } function getSortedDiagnostics() { + ts.Debug.assert(fullTypeCheck, "diagnostics are available only in the full typecheck mode"); if (diagnosticsModified) { diagnostics.sort(ts.compareDiagnostics); diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); @@ -13055,29 +13556,49 @@ var ts; copySymbols(globals, meaning); return ts.mapToArray(symbols); } - function isDeclarationIdentifier(identifier) { - if (identifier.parent) { - switch (identifier.parent.kind) { - case 113 /* TypeParameter */: - case 114 /* Parameter */: - case 166 /* VariableDeclaration */: - case 115 /* Property */: - case 129 /* PropertyAssignment */: - case 176 /* EnumMember */: - case 116 /* Method */: - case 167 /* FunctionDeclaration */: - case 136 /* FunctionExpression */: - case 118 /* GetAccessor */: - case 119 /* SetAccessor */: - case 169 /* ClassDeclaration */: - case 170 /* InterfaceDeclaration */: - case 171 /* EnumDeclaration */: - case 172 /* ModuleDeclaration */: - case 174 /* ImportDeclaration */: - return identifier.parent.name === identifier; - case 163 /* CatchBlock */: - return identifier.parent.variable === identifier; - } + function isTypeDeclarationName(name) { + return name.kind == 55 /* Identifier */ && isTypeDeclaration(name.parent) && name.parent.name === name; + } + function isDeclarationOrFunctionExpressionOrCatchVariableName(name) { + if (name.kind !== 55 /* Identifier */ && name.kind !== 3 /* StringLiteral */ && name.kind !== 2 /* NumericLiteral */) { + return false; + } + var parent = name.parent; + if (isDeclaration(parent) || parent.kind === 136 /* FunctionExpression */) { + return parent.name === name; + } + if (parent.kind === 163 /* CatchBlock */) { + return parent.variable === name; + } + return false; + } + function isTypeDeclaration(node) { + switch (node.kind) { + case 113 /* TypeParameter */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + return true; + } + } + function isDeclaration(node) { + switch (node.kind) { + case 113 /* TypeParameter */: + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + case 115 /* Property */: + case 129 /* PropertyAssignment */: + case 176 /* EnumMember */: + case 116 /* Method */: + case 167 /* FunctionDeclaration */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 172 /* ModuleDeclaration */: + case 174 /* ImportDeclaration */: + return true; } return false; } @@ -13109,54 +13630,133 @@ var ts; case 139 /* PostfixOperator */: case 140 /* BinaryExpression */: case 141 /* ConditionalExpression */: + case 142 /* OmittedExpression */: return true; case 112 /* QualifiedName */: - while (node.parent && node.parent.kind === 112 /* QualifiedName */) + while (node.parent.kind === 112 /* QualifiedName */) node = node.parent; - return node.parent && node.parent.kind === 124 /* TypeQuery */; + return node.parent.kind === 124 /* TypeQuery */; case 55 /* Identifier */: + if (node.parent.kind === 124 /* TypeQuery */) { + return true; + } case 2 /* NumericLiteral */: case 3 /* StringLiteral */: var parent = node.parent; - if (parent) { - if (isExpression(parent)) - return true; - switch (parent.kind) { - case 166 /* VariableDeclaration */: - case 114 /* Parameter */: - case 115 /* Property */: - case 176 /* EnumMember */: - return parent.initializer === node; - case 146 /* ExpressionStatement */: - case 147 /* IfStatement */: - case 148 /* DoStatement */: - case 149 /* WhileStatement */: - case 154 /* ReturnStatement */: - case 155 /* WithStatement */: - case 156 /* SwitchStatement */: - case 157 /* CaseClause */: - case 160 /* ThrowStatement */: - case 156 /* SwitchStatement */: - return parent.expression === node; - case 150 /* ForStatement */: - return parent.initializer === node || parent.condition === node || parent.iterator === node; - case 151 /* ForInStatement */: - return parent.variable === node || parent.expression === node; - } + switch (parent.kind) { + case 166 /* VariableDeclaration */: + case 114 /* Parameter */: + case 115 /* Property */: + case 176 /* EnumMember */: + case 129 /* PropertyAssignment */: + return parent.initializer === node; + case 146 /* ExpressionStatement */: + case 147 /* IfStatement */: + case 148 /* DoStatement */: + case 149 /* WhileStatement */: + case 154 /* ReturnStatement */: + case 155 /* WithStatement */: + case 156 /* SwitchStatement */: + case 157 /* CaseClause */: + case 160 /* ThrowStatement */: + case 156 /* SwitchStatement */: + return parent.expression === node; + case 150 /* ForStatement */: + return parent.initializer === node || parent.condition === node || parent.iterator === node; + case 151 /* ForInStatement */: + return parent.variable === node || parent.expression === node; + case 134 /* TypeAssertion */: + return node === parent.operand; + default: + if (isExpression(parent)) { + return true; + } } } return false; } + function isTypeNode(node) { + if (node.kind >= ts.SyntaxKind.FirstTypeNode && node.kind <= ts.SyntaxKind.LastTypeNode) { + return true; + } + switch (node.kind) { + case 101 /* AnyKeyword */: + case 108 /* NumberKeyword */: + case 110 /* StringKeyword */: + case 102 /* BooleanKeyword */: + return true; + case 89 /* VoidKeyword */: + return node.parent.kind !== 138 /* PrefixOperator */; + case 3 /* StringLiteral */: + return node.parent.kind === 114 /* Parameter */; + case 55 /* Identifier */: + if (node.parent.kind === 112 /* QualifiedName */) { + node = node.parent; + } + case 112 /* QualifiedName */: + var parent = node.parent; + if (parent.kind === 124 /* TypeQuery */) { + return false; + } + if (parent.kind >= ts.SyntaxKind.FirstTypeNode && parent.kind <= ts.SyntaxKind.LastTypeNode) { + return true; + } + switch (parent.kind) { + case 113 /* TypeParameter */: + return node === parent.constraint; + case 115 /* Property */: + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + return node === parent.type; + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + case 117 /* Constructor */: + case 116 /* Method */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return node === parent.type; + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + return node === parent.type; + case 134 /* TypeAssertion */: + return node === parent.type; + case 132 /* CallExpression */: + case 133 /* NewExpression */: + return parent.typeArguments.indexOf(node) >= 0; + } + } + return false; + } + function isInRightSideOfImportOrExportAssignment(node) { + while (node.parent.kind === 112 /* QualifiedName */) { + node = node.parent; + } + if (node.parent.kind === 174 /* ImportDeclaration */) { + return node.parent.entityName === node; + } + if (node.parent.kind === 175 /* ExportAssignment */) { + return node.parent.exportName === node; + } + return false; + } function isRightSideOfQualifiedNameOrPropertyAccess(node) { return (node.parent.kind === 112 /* QualifiedName */ || node.parent.kind === 130 /* PropertyAccess */) && node.parent.right === node; } - function getSymbolOfIdentifier(identifier) { - if (isDeclarationIdentifier(identifier)) { - return getSymbolOfNode(identifier.parent); + function getSymbolOfEntityName(entityName) { + if (isDeclarationOrFunctionExpressionOrCatchVariableName(entityName)) { + return getSymbolOfNode(entityName.parent); } - var entityName = identifier; - while (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) + if (entityName.parent.kind === 175 /* ExportAssignment */) { + return resolveEntityName(entityName.parent.parent, entityName, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace | 4194304 /* Import */); + } + if (isInRightSideOfImportOrExportAssignment(entityName)) { + return getSymbolOfPartOfRightHandSideOfImport(entityName); + } + if (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; + } if (isExpression(entityName)) { if (entityName.kind === 55 /* Identifier */) { var meaning = ts.SymbolFlags.Value | 4194304 /* Import */; @@ -13178,11 +13778,14 @@ var ts; meaning |= 4194304 /* Import */; return resolveEntityName(entityName, entityName, meaning); } + return undefined; } function getSymbolInfo(node) { switch (node.kind) { case 55 /* Identifier */: - return getSymbolOfIdentifier(node); + case 130 /* PropertyAccess */: + case 112 /* QualifiedName */: + return getSymbolOfEntityName(node); case 83 /* ThisKeyword */: case 81 /* SuperKeyword */: var type = checkExpression(node); @@ -13215,15 +13818,42 @@ var ts; } return undefined; } - function getTypeOfExpression(node) { + function getTypeOfNode(node) { if (isExpression(node)) { - while (isRightSideOfQualifiedNameOrPropertyAccess(node)) { - node = node.parent; - } - return getApparentType(checkExpression(node)); + return getTypeOfExpression(node); + } + if (isTypeNode(node)) { + return getTypeFromTypeNode(node); + } + if (isTypeDeclaration(node)) { + var symbol = getSymbolOfNode(node); + return getDeclaredTypeOfSymbol(symbol); + } + if (isTypeDeclarationName(node)) { + var symbol = getSymbolInfo(node); + return getDeclaredTypeOfSymbol(symbol); + } + if (isDeclaration(node)) { + var symbol = getSymbolOfNode(node); + return getTypeOfSymbol(symbol); + } + if (isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + var symbol = getSymbolInfo(node); + return getTypeOfSymbol(symbol); + } + if (isInRightSideOfImportOrExportAssignment(node)) { + var symbol = getSymbolInfo(node); + var declaredType = getDeclaredTypeOfSymbol(symbol); + return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol); } return unknownType; } + function getTypeOfExpression(expr) { + if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) { + expr = expr.parent; + } + return checkExpression(expr); + } function getAugmentedPropertiesOfApparentType(type) { var apparentType = getApparentType(type); if (apparentType.flags & ts.TypeFlags.ObjectType) { @@ -13348,7 +13978,8 @@ var ts; function isImplementationOfOverload(node) { if (node.body) { var symbol = getSymbolOfNode(node); - return getSignaturesOfSymbol(symbol).length > 1; + var signaturesOfSymbol = getSignaturesOfSymbol(symbol); + return signaturesOfSymbol.length > 1 || (signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node); } return false; } @@ -13384,7 +14015,8 @@ var ts; writeTypeAtLocation: writeTypeAtLocation, writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, writeSymbol: writeSymbolToTextWriter, - isSymbolAccessible: isSymbolAccessible + isSymbolAccessible: isSymbolAccessible, + isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile }; checkProgram(); return ts.emitFiles(resolver); @@ -14602,7 +15234,7 @@ var TypeScript; })(Location); TypeScript.Diagnostic = Diagnostic; function newLine() { - return sys.newLine ? sys.newLine : "\r\n"; + return "\r\n"; } TypeScript.newLine = newLine; function getLargestIndex(diagnostic) { @@ -15035,7 +15667,7 @@ var TypeScript; } return this._lineStartPositions; }; - StringScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { + StringScriptSnapshot.prototype.getChangeRange = function (oldSnapshot) { throw TypeScript.Errors.notYetImplemented(); }; return StringScriptSnapshot; @@ -15209,6 +15841,9 @@ var TypeScript; this._start = start; this._length = length; } + TextSpan.prototype.toJSON = function (key) { + return { start: this._start, length: this._length }; + }; TextSpan.prototype.start = function () { return this._start; }; @@ -16059,23 +16694,26 @@ var TypeScript; TypeScript.Debug.assert(TypeScript.SyntaxKind.LastToken <= 127); var ScannerConstants; (function (ScannerConstants) { - ScannerConstants[ScannerConstants["LargeTokenFullStartShift"] = 2] = "LargeTokenFullStartShift"; + ScannerConstants[ScannerConstants["LargeTokenFullStartShift"] = 4] = "LargeTokenFullStartShift"; ScannerConstants[ScannerConstants["LargeTokenFullWidthShift"] = 7] = "LargeTokenFullWidthShift"; + ScannerConstants[ScannerConstants["LargeTokenLeadingTriviaBitMask"] = 0x01] = "LargeTokenLeadingTriviaBitMask"; + ScannerConstants[ScannerConstants["LargeTokenLeadingCommentBitMask"] = 0x02] = "LargeTokenLeadingCommentBitMask"; + ScannerConstants[ScannerConstants["LargeTokenTrailingTriviaBitMask"] = 0x04] = "LargeTokenTrailingTriviaBitMask"; + ScannerConstants[ScannerConstants["LargeTokenTrailingCommentBitMask"] = 0x08] = "LargeTokenTrailingCommentBitMask"; + ScannerConstants[ScannerConstants["LargeTokenTriviaBitMask"] = 0x0F] = "LargeTokenTriviaBitMask"; ScannerConstants[ScannerConstants["FixedWidthTokenFullStartShift"] = 7] = "FixedWidthTokenFullStartShift"; + ScannerConstants[ScannerConstants["FixedWidthTokenMaxFullStart"] = 0x7FFFFF] = "FixedWidthTokenMaxFullStart"; ScannerConstants[ScannerConstants["SmallTokenFullWidthShift"] = 7] = "SmallTokenFullWidthShift"; ScannerConstants[ScannerConstants["SmallTokenFullStartShift"] = 12] = "SmallTokenFullStartShift"; - ScannerConstants[ScannerConstants["KindMask"] = 0x7F] = "KindMask"; - ScannerConstants[ScannerConstants["IsVariableWidthMask"] = 0x80] = "IsVariableWidthMask"; - ScannerConstants[ScannerConstants["LargeTokenLeadingTriviaBitMask"] = 0x01] = "LargeTokenLeadingTriviaBitMask"; - ScannerConstants[ScannerConstants["LargeTokenTrailingTriviaBitMask"] = 0x02] = "LargeTokenTrailingTriviaBitMask"; - ScannerConstants[ScannerConstants["SmallTokenFullWidthMask"] = 0x1F] = "SmallTokenFullWidthMask"; - ScannerConstants[ScannerConstants["FixedWidthTokenMaxFullStart"] = 0x7FFFFF] = "FixedWidthTokenMaxFullStart"; ScannerConstants[ScannerConstants["SmallTokenMaxFullStart"] = 0x3FFFF] = "SmallTokenMaxFullStart"; ScannerConstants[ScannerConstants["SmallTokenMaxFullWidth"] = 0x1F] = "SmallTokenMaxFullWidth"; + ScannerConstants[ScannerConstants["SmallTokenFullWidthMask"] = 0x1F] = "SmallTokenFullWidthMask"; + ScannerConstants[ScannerConstants["KindMask"] = 0x7F] = "KindMask"; + ScannerConstants[ScannerConstants["IsVariableWidthMask"] = 0x80] = "IsVariableWidthMask"; })(ScannerConstants || (ScannerConstants = {})); - TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(1 << 28, 1, 1)) === (1 << 28)); - TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(3 << 27, 0, 1)) === (3 << 27)); - TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(10 << 25, 1, 0)) === (10 << 25)); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(1 << 26, 3)) === (1 << 26)); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(3 << 25, 1)) === (3 << 25)); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(10 << 23, 2)) === (10 << 23)); function fixedWidthTokenPackData(fullStart, kind) { return (fullStart << 7 /* FixedWidthTokenFullStartShift */) | kind; } @@ -16091,20 +16729,29 @@ var TypeScript; function smallTokenUnpackFullStart(packedData) { return packedData >> 12 /* SmallTokenFullStartShift */; } - function largeTokenPackFullStartAndInfo(fullStart, hasLeadingTriviaInfo, hasTrailingTriviaInfo) { - return (fullStart << 2 /* LargeTokenFullStartShift */) | hasLeadingTriviaInfo | hasTrailingTriviaInfo; + function largeTokenPackFullStartAndInfo(fullStart, triviaInfo) { + return (fullStart << 4 /* LargeTokenFullStartShift */) | triviaInfo; } function largeTokenUnpackFullWidth(packedFullWidthAndKind) { return packedFullWidthAndKind >> 7 /* LargeTokenFullWidthShift */; } function largeTokenUnpackFullStart(packedFullStartAndInfo) { - return packedFullStartAndInfo >> 2 /* LargeTokenFullStartShift */; + return packedFullStartAndInfo >> 4 /* LargeTokenFullStartShift */; } - function largeTokenUnpackHasLeadingTriviaInfo(packed) { - return packed & 1 /* LargeTokenLeadingTriviaBitMask */; + function largeTokenUnpackHasLeadingTrivia(packed) { + return (packed & 1 /* LargeTokenLeadingTriviaBitMask */) !== 0; } - function largeTokenUnpackHasTrailingTriviaInfo(packed) { - return packed & 2 /* LargeTokenTrailingTriviaBitMask */; + function largeTokenUnpackHasTrailingTrivia(packed) { + return (packed & 4 /* LargeTokenTrailingTriviaBitMask */) !== 0; + } + function largeTokenUnpackHasLeadingComment(packed) { + return (packed & 2 /* LargeTokenLeadingCommentBitMask */) !== 0; + } + function largeTokenUnpackHasTrailingComment(packed) { + return (packed & 8 /* LargeTokenTrailingCommentBitMask */) !== 0; + } + function largeTokenUnpackTriviaInfo(packed) { + return packed & 15 /* LargeTokenTriviaBitMask */; } var isKeywordStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, 0); var isIdentifierStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); @@ -16227,6 +16874,12 @@ var TypeScript; FixedWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { return false; }; + FixedWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () { + return false; + }; FixedWidthTokenWithNoTrivia.prototype.clone = function () { return new FixedWidthTokenWithNoTrivia(this._packedData); }; @@ -16241,7 +16894,7 @@ var TypeScript; } } LargeScannerToken.prototype.setFullStart = function (fullStart) { - this._packedFullStartAndInfo = largeTokenPackFullStartAndInfo(fullStart, largeTokenUnpackHasLeadingTriviaInfo(this._packedFullStartAndInfo), largeTokenUnpackHasTrailingTriviaInfo(this._packedFullStartAndInfo)); + this._packedFullStartAndInfo = largeTokenPackFullStartAndInfo(fullStart, largeTokenUnpackTriviaInfo(this._packedFullStartAndInfo)); }; LargeScannerToken.prototype.syntaxTreeText = function (text) { var result = text || TypeScript.syntaxTree(this).text; @@ -16286,10 +16939,16 @@ var TypeScript; return largeTokenUnpackFullStart(this._packedFullStartAndInfo); }; LargeScannerToken.prototype.hasLeadingTrivia = function () { - return largeTokenUnpackHasLeadingTriviaInfo(this._packedFullStartAndInfo) !== 0; + return largeTokenUnpackHasLeadingTrivia(this._packedFullStartAndInfo); }; LargeScannerToken.prototype.hasTrailingTrivia = function () { - return largeTokenUnpackHasTrailingTriviaInfo(this._packedFullStartAndInfo) !== 0; + return largeTokenUnpackHasTrailingTrivia(this._packedFullStartAndInfo); + }; + LargeScannerToken.prototype.hasLeadingComment = function () { + return largeTokenUnpackHasLeadingComment(this._packedFullStartAndInfo); + }; + LargeScannerToken.prototype.hasTrailingComment = function () { + return largeTokenUnpackHasTrailingComment(this._packedFullStartAndInfo); }; LargeScannerToken.prototype.clone = function () { return new LargeScannerToken(this._packedFullStartAndInfo, this._packedFullWidthAndKind, this.cachedText); @@ -16313,8 +16972,8 @@ var TypeScript; index = _index; } function reset(_text, _start, _end) { - TypeScript.Debug.assert(_start <= _text.length()); - TypeScript.Debug.assert(_end <= _text.length()); + TypeScript.Debug.assert(_start <= _text.length(), "Token's start was not within the bounds of text: " + _start + " - [0, " + _text.length() + ")"); + TypeScript.Debug.assert(_end <= _text.length(), "Token's end was not within the bounds of text: " + _end + " - [0, " + _text.length() + ")"); if (!str || text !== _text) { text = _text; str = _text.substr(0, _text.length()); @@ -16337,7 +16996,7 @@ var TypeScript; return new FixedWidthTokenWithNoTrivia((fullStart << 7 /* FixedWidthTokenFullStartShift */) | kind); } else { - var packedFullStartAndTriviaInfo = (fullStart << 2 /* LargeTokenFullStartShift */) | leadingTriviaInfo | (trailingTriviaInfo << 1); + var packedFullStartAndTriviaInfo = (fullStart << 4 /* LargeTokenFullStartShift */) | leadingTriviaInfo | (trailingTriviaInfo << 2); var packedFullWidthAndKind = (fullWidth << 7 /* LargeTokenFullWidthShift */) | kind; var cachedText = isFixedWidth ? undefined : text.substr(start, end - start); return new LargeScannerToken(packedFullStartAndTriviaInfo, packedFullWidthAndKind, cachedText); @@ -16419,7 +17078,7 @@ var TypeScript; case 11 /* verticalTab */: case 12 /* formFeed */: index++; - result = 1; + result |= 1; continue; case 13 /* carriageReturn */: if ((index + 1) < end && str.charCodeAt(index + 1) === 10 /* lineFeed */) { @@ -16427,21 +17086,21 @@ var TypeScript; } case 10 /* lineFeed */: index++; + result |= 1; if (isTrailing) { - return 1; + return result; } - result = 1; continue; case 47 /* slash */: if ((index + 1) < _end) { var ch2 = str.charCodeAt(index + 1); if (ch2 === 47 /* slash */) { - result = 1; + result |= 3; skipSingleLineCommentTrivia(); continue; } if (ch2 === 42 /* asterisk */) { - result = 1; + result |= 3; skipMultiLineCommentTrivia(); continue; } @@ -16449,7 +17108,7 @@ var TypeScript; return result; default: if (ch > 127 /* maxAsciiCharacter */ && slowScanTriviaInfo(ch)) { - result = 1; + result |= 1; continue; } return result; @@ -17118,7 +17777,7 @@ var TypeScript; var fullStart = token.fullStart(); var fullEnd = fullStart + token.fullWidth(); reset(text, fullStart, fullEnd); - var leadingTriviaInfo = scanTriviaInfo(false); + scanTriviaInfo(false); var start = index; scanSyntaxKind(isContextualToken(token)); var end = index; @@ -17229,6 +17888,7 @@ var TypeScript; _tokenDiagnostics.length = tokenDiagnosticsLength; } function resetToPosition(absolutePosition) { + TypeScript.Debug.assert(absolutePosition <= text.length(), "Trying to set the position outside the bounds of the text!"); _absolutePosition = absolutePosition; removeDiagnosticsOnOrAfterPosition(absolutePosition); slidingWindow.disgardAllItemsFromCurrentIndexOnwards(); @@ -18544,15 +19204,21 @@ var TypeScript; EmptyToken.prototype.hasLeadingTrivia = function () { return false; }; - EmptyToken.prototype.leadingTriviaWidth = function () { - return 0; - }; EmptyToken.prototype.hasTrailingTrivia = function () { return false; }; + EmptyToken.prototype.hasLeadingComment = function () { + return false; + }; + EmptyToken.prototype.hasTrailingComment = function () { + return false; + }; EmptyToken.prototype.hasSkippedToken = function () { return false; }; + EmptyToken.prototype.leadingTriviaWidth = function () { + return 0; + }; EmptyToken.prototype.trailingTriviaWidth = function () { return 0; }; @@ -18612,6 +19278,12 @@ var TypeScript; RealizedToken.prototype.hasTrailingTrivia = function () { return this._trailingTrivia.count() > 0; }; + RealizedToken.prototype.hasLeadingComment = function () { + return this._leadingTrivia.hasComment(); + }; + RealizedToken.prototype.hasTrailingComment = function () { + return this._trailingTrivia.hasComment(); + }; RealizedToken.prototype.leadingTriviaWidth = function () { return this._leadingTrivia.fullWidth(); }; @@ -18662,6 +19334,12 @@ var TypeScript; ConvertedKeywordToken.prototype.hasTrailingTrivia = function () { return this.underlyingToken.hasTrailingTrivia(); }; + ConvertedKeywordToken.prototype.hasLeadingComment = function () { + return this.underlyingToken.hasLeadingComment(); + }; + ConvertedKeywordToken.prototype.hasTrailingComment = function () { + return this.underlyingToken.hasTrailingComment(); + }; ConvertedKeywordToken.prototype.hasSkippedToken = function () { return this.underlyingToken.hasSkippedToken(); }; @@ -25151,203 +25829,249 @@ var TypeScript; })(TypeScript.IncrementalParser || (TypeScript.IncrementalParser = {})); var IncrementalParser = TypeScript.IncrementalParser; })(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var OutliningElementsCollector = (function (_super) { - __extends(OutliningElementsCollector, _super); - function OutliningElementsCollector() { - _super.call(this, OutliningElementsCollector.MaximumDepth); - this.inObjectLiteralExpression = false; - this.elements = []; +var ts; +(function (ts) { + (function (OutliningElementsCollector) { + function collectElements(sourceFile) { + var elements = []; + function addOutlineRange(hintSpanNode, startElement, endElement) { + if (hintSpanNode && startElement && endElement) { + var span = { + textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end), + hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end), + bannerText: "...", + autoCollapse: false + }; + elements.push(span); + } } - OutliningElementsCollector.prototype.visitClassDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitClassDeclaration.call(this, node); - }; - OutliningElementsCollector.prototype.visitInterfaceDeclaration = function (node) { - this.addOutlineRange(node, node.body.openBraceToken, node.body.closeBraceToken); - _super.prototype.visitInterfaceDeclaration.call(this, node); - }; - OutliningElementsCollector.prototype.visitModuleDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitModuleDeclaration.call(this, node); - }; - OutliningElementsCollector.prototype.visitEnumDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitEnumDeclaration.call(this, node); - }; - OutliningElementsCollector.prototype.visitFunctionDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitFunctionDeclaration.call(this, node); - }; - OutliningElementsCollector.prototype.visitFunctionExpression = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitFunctionExpression.call(this, node); - }; - OutliningElementsCollector.prototype.visitConstructorDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitConstructorDeclaration.call(this, node); - }; - OutliningElementsCollector.prototype.visitMemberFunctionDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitMemberFunctionDeclaration.call(this, node); - }; - OutliningElementsCollector.prototype.visitGetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); - } - _super.prototype.visitGetAccessor.call(this, node); - }; - OutliningElementsCollector.prototype.visitSetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); - } - _super.prototype.visitSetAccessor.call(this, node); - }; - OutliningElementsCollector.prototype.visitObjectLiteralExpression = function (node) { - var savedInObjectLiteralExpression = this.inObjectLiteralExpression; - this.inObjectLiteralExpression = true; - _super.prototype.visitObjectLiteralExpression.call(this, node); - this.inObjectLiteralExpression = savedInObjectLiteralExpression; - }; - OutliningElementsCollector.prototype.addOutlineRange = function (node, startElement, endElement) { - if (startElement && endElement && !TypeScript.isShared(startElement) && !TypeScript.isShared(endElement)) { - var start = TypeScript.start(startElement); - var end = TypeScript.end(endElement); - this.elements.push(TypeScript.TextSpan.fromBounds(start, end)); - } - }; - OutliningElementsCollector.collectElements = function (node) { - var collector = new OutliningElementsCollector(); - TypeScript.visitNodeOrToken(collector, node); - return collector.elements; - }; - OutliningElementsCollector.MaximumDepth = 10; - return OutliningElementsCollector; - })(TypeScript.DepthLimitedWalker); - Services.OutliningElementsCollector = OutliningElementsCollector; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var GetScriptLexicalStructureWalker = (function (_super) { - __extends(GetScriptLexicalStructureWalker, _super); - function GetScriptLexicalStructureWalker(fileName) { - _super.call(this); - this.fileName = fileName; - this.nameStack = []; - this.kindStack = []; - this.parentScopes = []; - this.currentScope = this.createScope(); - } - GetScriptLexicalStructureWalker.prototype.createScope = function () { - return { - items: TypeScript.createIntrinsicsObject(), - childScopes: TypeScript.createIntrinsicsObject(), - childScopeNames: [], - itemNames: [] - }; - }; - GetScriptLexicalStructureWalker.prototype.pushNewContainerScope = function (containerName, kind) { - TypeScript.Debug.assert(containerName, "No scope name provided"); - var key = kind + "+" + containerName; - this.nameStack.push(containerName); - this.kindStack.push(kind); - var parentScope = this.currentScope; - this.parentScopes.push(parentScope); - var scope = ts.lookUp(parentScope.childScopes, key); - if (!scope) { - scope = this.createScope(); - parentScope.childScopes[key] = scope; - parentScope.childScopeNames.push(key); - } - this.currentScope = scope; - return parentScope; - }; - GetScriptLexicalStructureWalker.prototype.popScope = function () { - TypeScript.Debug.assert(this.parentScopes.length > 0, "No parent scopes to return to"); - this.currentScope = this.parentScopes.pop(); - this.kindStack.pop(); - this.nameStack.pop(); - }; - GetScriptLexicalStructureWalker.prototype.collectItems = function (items, scope) { - var _this = this; - if (scope === void 0) { scope = this.currentScope; } - scope.itemNames.forEach(function (item) { - items.push(scope.items[item]); - }); - scope.childScopeNames.forEach(function (childScope) { - _this.collectItems(items, scope.childScopes[childScope]); - }); - }; - GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure = function (items, fileName, unit) { - var visitor = new GetScriptLexicalStructureWalker(fileName); - TypeScript.visitNodeOrToken(visitor, unit); - visitor.collectItems(items); - }; - GetScriptLexicalStructureWalker.prototype.createItem = function (node, modifiers, kind, name) { - var key = kind + "+" + name; - if (ts.lookUp(this.currentScope.items, key) !== undefined) { - this.addAdditionalSpan(node, key); + var depth = 0; + var maxDepth = 20; + function walk(n) { + if (depth > maxDepth) { return; } - var item = { - name: name, - kind: kind, - matchKind: ts.MatchKind.exact, - fileName: this.fileName, - kindModifiers: this.getKindModifiers(modifiers), - minChar: TypeScript.start(node), - limChar: TypeScript.end(node), - containerName: this.nameStack.join("."), - containerKind: this.kindStack.length === 0 ? "" : TypeScript.ArrayUtilities.last(this.kindStack) - }; - this.currentScope.items[key] = item; - this.currentScope.itemNames.push(key); - }; - GetScriptLexicalStructureWalker.prototype.addAdditionalSpan = function (node, key) { - var item = ts.lookUp(this.currentScope.items, key); - TypeScript.Debug.assert(item !== undefined); - var start = TypeScript.start(node); - var span = { - minChar: start, - limChar: start + TypeScript.width(node) - }; - if (item.additionalSpans) { - item.additionalSpans.push(span); + switch (n.kind) { + case 143 /* Block */: + case 168 /* FunctionBlock */: + case 173 /* ModuleBlock */: + case 162 /* TryBlock */: + case 162 /* TryBlock */: + case 163 /* CatchBlock */: + case 164 /* FinallyBlock */: + var openBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 5 /* OpenBraceToken */ && c; }); + var closeBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 6 /* CloseBraceToken */ && c; }); + addOutlineRange(n.parent, openBrace, closeBrace); + break; + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 128 /* ObjectLiteral */: + var openBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 5 /* OpenBraceToken */ && c; }); + var closeBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 6 /* CloseBraceToken */ && c; }); + addOutlineRange(n, openBrace, closeBrace); + break; } - else { - item.additionalSpans = [span]; + depth++; + ts.forEachChild(n, walk); + depth--; + } + walk(sourceFile); + return elements; + } + OutliningElementsCollector.collectElements = collectElements; + })(ts.OutliningElementsCollector || (ts.OutliningElementsCollector = {})); + var OutliningElementsCollector = ts.OutliningElementsCollector; +})(ts || (ts = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + var NavigationBarItemGetter = (function () { + function NavigationBarItemGetter() { + this.hasGlobalNode = false; + } + NavigationBarItemGetter.prototype.getIndent = function (node) { + var indent = this.hasGlobalNode ? 1 : 0; + var current = node.parent; + while (current != null) { + if (current.kind() == 130 /* ModuleDeclaration */ || current.kind() === 129 /* FunctionDeclaration */) { + indent++; + } + current = current.parent; } + return indent; }; - GetScriptLexicalStructureWalker.prototype.getKindModifiers = function (modifiers) { + NavigationBarItemGetter.prototype.getKindModifiers = function (modifiers) { var result = []; for (var i = 0, n = modifiers.length; i < n; i++) { result.push(modifiers[i].text()); } return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; }; - GetScriptLexicalStructureWalker.prototype.visitModuleDeclaration = function (node) { - var names = this.getModuleNames(node); - this.visitModuleDeclarationWorker(node, names, 0); + NavigationBarItemGetter.prototype.getItems = function (node) { + var _this = this; + return this.getItemsWorker(function () { return _this.getTopLevelNodes(node); }, function (n) { return _this.createTopLevelItem(n); }); }; - GetScriptLexicalStructureWalker.prototype.visitModuleDeclarationWorker = function (node, names, nameIndex) { - if (nameIndex === names.length) { - _super.prototype.visitModuleDeclaration.call(this, node); + NavigationBarItemGetter.prototype.getChildNodes = function (nodes) { + var childNodes = []; + for (var i = 0, n = nodes.length; i < n; i++) { + var node = nodes[i]; + if (node.kind() === 129 /* FunctionDeclaration */) { + childNodes.push(node); + } + else if (node.kind() === 148 /* VariableStatement */) { + var variableDeclaration = node.variableDeclaration; + childNodes.push.apply(childNodes, variableDeclaration.variableDeclarators); + } } - else { - var name = names[nameIndex]; - var kind = ts.ScriptElementKind.moduleElement; - this.createItem(node, node.modifiers, kind, name); - this.pushNewContainerScope(name, kind); - this.visitModuleDeclarationWorker(node, names, nameIndex + 1); - this.popScope(); + return childNodes; + }; + NavigationBarItemGetter.prototype.getTopLevelNodes = function (node) { + var topLevelNodes = []; + topLevelNodes.push(node); + this.addTopLevelNodes(node.moduleElements, topLevelNodes); + return topLevelNodes; + }; + NavigationBarItemGetter.prototype.addTopLevelNodes = function (nodes, topLevelNodes) { + for (var i = 0, n = nodes.length; i < n; i++) { + var node = nodes[i]; + switch (node.kind()) { + case 131 /* ClassDeclaration */: + case 132 /* EnumDeclaration */: + case 128 /* InterfaceDeclaration */: + topLevelNodes.push(node); + break; + case 130 /* ModuleDeclaration */: + var moduleDeclaration = node; + topLevelNodes.push(node); + this.addTopLevelNodes(moduleDeclaration.moduleElements, topLevelNodes); + break; + case 129 /* FunctionDeclaration */: + var functionDeclaration = node; + if (this.isTopLevelFunctionDeclaration(functionDeclaration)) { + topLevelNodes.push(node); + this.addTopLevelNodes(functionDeclaration.block.statements, topLevelNodes); + } + break; + } } }; - GetScriptLexicalStructureWalker.prototype.getModuleNames = function (node) { + NavigationBarItemGetter.prototype.isTopLevelFunctionDeclaration = function (functionDeclaration) { + return functionDeclaration.block && TypeScript.ArrayUtilities.any(functionDeclaration.block.statements, function (s) { return s.kind() === 129 /* FunctionDeclaration */; }); + }; + NavigationBarItemGetter.prototype.getItemsWorker = function (getNodes, createItem) { + var items = []; + var keyToItem = TypeScript.createIntrinsicsObject(); + var nodes = getNodes(); + for (var i = 0, n = nodes.length; i < n; i++) { + var child = nodes[i]; + var item = createItem(child); + if (item != null) { + if (item.text.length > 0) { + var key = item.text + "-" + item.kind; + var itemWithSameName = keyToItem[key]; + if (itemWithSameName) { + this.merge(itemWithSameName, item); + } + else { + keyToItem[key] = item; + items.push(item); + } + } + } + } + return items; + }; + NavigationBarItemGetter.prototype.merge = function (target, source) { + target.spans.push.apply(target.spans, source.spans); + if (source.childItems) { + if (!target.childItems) { + target.childItems = []; + } + outer: for (var i = 0, n = source.childItems.length; i < n; i++) { + var sourceChild = source.childItems[i]; + for (var j = 0, m = target.childItems.length; j < m; j++) { + var targetChild = target.childItems[j]; + if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) { + this.merge(targetChild, sourceChild); + continue outer; + } + } + target.childItems.push(sourceChild); + } + } + }; + NavigationBarItemGetter.prototype.createChildItem = function (node) { + switch (node.kind()) { + case 242 /* Parameter */: + var parameter = node; + if (parameter.modifiers.length === 0) { + return null; + } + return new ts.NavigationBarItem(parameter.identifier.text(), ts.ScriptElementKind.memberVariableElement, this.getKindModifiers(parameter.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 135 /* MemberFunctionDeclaration */: + var memberFunction = node; + return new ts.NavigationBarItem(memberFunction.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, this.getKindModifiers(memberFunction.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 139 /* GetAccessor */: + var getAccessor = node; + return new ts.NavigationBarItem(getAccessor.propertyName.text(), ts.ScriptElementKind.memberGetAccessorElement, this.getKindModifiers(getAccessor.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 140 /* SetAccessor */: + var setAccessor = node; + return new ts.NavigationBarItem(setAccessor.propertyName.text(), ts.ScriptElementKind.memberSetAccessorElement, this.getKindModifiers(setAccessor.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 144 /* IndexSignature */: + var indexSignature = node; + return new ts.NavigationBarItem("[]", ts.ScriptElementKind.indexSignatureElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 243 /* EnumElement */: + var enumElement = node; + return new ts.NavigationBarItem(enumElement.propertyName.text(), ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 142 /* CallSignature */: + var callSignature = node; + return new ts.NavigationBarItem("()", ts.ScriptElementKind.callSignatureElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 143 /* ConstructSignature */: + var constructSignature = node; + return new ts.NavigationBarItem("new()", ts.ScriptElementKind.constructSignatureElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 145 /* MethodSignature */: + var methodSignature = node; + return new ts.NavigationBarItem(methodSignature.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 141 /* PropertySignature */: + var propertySignature = node; + return new ts.NavigationBarItem(propertySignature.propertyName.text(), ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + case 129 /* FunctionDeclaration */: + var functionDeclaration = node; + if (!this.isTopLevelFunctionDeclaration(functionDeclaration)) { + return new ts.NavigationBarItem(functionDeclaration.identifier.text(), ts.ScriptElementKind.functionElement, this.getKindModifiers(functionDeclaration.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + } + break; + case 136 /* MemberVariableDeclaration */: + var memberVariableDeclaration = node; + return new ts.NavigationBarItem(memberVariableDeclaration.variableDeclarator.propertyName.text(), ts.ScriptElementKind.memberVariableElement, this.getKindModifiers(memberVariableDeclaration.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(memberVariableDeclaration.variableDeclarator), TypeScript.end(memberVariableDeclaration.variableDeclarator))]); + case 225 /* VariableDeclarator */: + var variableDeclarator = node; + return new ts.NavigationBarItem(variableDeclarator.propertyName.text(), ts.ScriptElementKind.variableElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(variableDeclarator), TypeScript.end(variableDeclarator))]); + case 137 /* ConstructorDeclaration */: + var constructorDeclaration = node; + return new ts.NavigationBarItem("constructor", ts.ScriptElementKind.constructorImplementationElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); + } + return null; + }; + NavigationBarItemGetter.prototype.createTopLevelItem = function (node) { + switch (node.kind()) { + case 120 /* SourceUnit */: + return this.createSourceUnitItem(node); + case 131 /* ClassDeclaration */: + return this.createClassItem(node); + case 132 /* EnumDeclaration */: + return this.createEnumItem(node); + case 128 /* InterfaceDeclaration */: + return this.createIterfaceItem(node); + case 130 /* ModuleDeclaration */: + return this.createModuleItem(node); + case 129 /* FunctionDeclaration */: + return this.createFunctionItem(node); + } + return null; + }; + NavigationBarItemGetter.prototype.getModuleNames = function (node) { var result = []; if (node.stringLiteral) { result.push(node.stringLiteral.text()); @@ -25357,7 +26081,7 @@ var TypeScript; } return result; }; - GetScriptLexicalStructureWalker.prototype.getModuleNamesHelper = function (name, result) { + NavigationBarItemGetter.prototype.getModuleNamesHelper = function (name, result) { if (name.kind() === 121 /* QualifiedName */) { var qualifiedName = name; this.getModuleNamesHelper(qualifiedName.left, result); @@ -25367,106 +26091,46 @@ var TypeScript; result.push(name.text()); } }; - GetScriptLexicalStructureWalker.prototype.visitClassDeclaration = function (node) { - var name = node.identifier.text(); - var kind = ts.ScriptElementKind.classElement; - this.createItem(node, node.modifiers, kind, name); - this.pushNewContainerScope(name, kind); - _super.prototype.visitClassDeclaration.call(this, node); - this.popScope(); + NavigationBarItemGetter.prototype.createModuleItem = function (node) { + var _this = this; + var moduleNames = this.getModuleNames(node); + var childItems = this.getItemsWorker(function () { return _this.getChildNodes(node.moduleElements); }, function (n) { return _this.createChildItem(n); }); + return new ts.NavigationBarItem(moduleNames.join("."), ts.ScriptElementKind.moduleElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); }; - GetScriptLexicalStructureWalker.prototype.visitInterfaceDeclaration = function (node) { - var name = node.identifier.text(); - var kind = ts.ScriptElementKind.interfaceElement; - this.createItem(node, node.modifiers, kind, name); - this.pushNewContainerScope(name, kind); - _super.prototype.visitInterfaceDeclaration.call(this, node); - this.popScope(); + NavigationBarItemGetter.prototype.createFunctionItem = function (node) { + var _this = this; + var childItems = this.getItemsWorker(function () { return node.block.statements; }, function (n) { return _this.createChildItem(n); }); + return new ts.NavigationBarItem(node.identifier.text(), ts.ScriptElementKind.functionElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); }; - GetScriptLexicalStructureWalker.prototype.visitObjectType = function (node) { - if (node.parent.kind() === 128 /* InterfaceDeclaration */) { - _super.prototype.visitObjectType.call(this, node); + NavigationBarItemGetter.prototype.createSourceUnitItem = function (node) { + var _this = this; + var childItems = this.getItemsWorker(function () { return _this.getChildNodes(node.moduleElements); }, function (n) { return _this.createChildItem(n); }); + if (childItems === null || childItems.length === 0) { + return null; } + this.hasGlobalNode = true; + return new ts.NavigationBarItem("", ts.ScriptElementKind.moduleElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems); }; - GetScriptLexicalStructureWalker.prototype.visitEnumDeclaration = function (node) { - var name = node.identifier.text(); - var kind = ts.ScriptElementKind.enumElement; - this.createItem(node, node.modifiers, kind, name); - this.pushNewContainerScope(name, kind); - _super.prototype.visitEnumDeclaration.call(this, node); - this.popScope(); + NavigationBarItemGetter.prototype.createClassItem = function (node) { + var _this = this; + var constructor = TypeScript.ArrayUtilities.firstOrDefault(node.classElements, function (n) { return n.kind() === 137 /* ConstructorDeclaration */; }); + var nodes = constructor ? constructor.callSignature.parameterList.parameters.concat(node.classElements) : node.classElements; + var childItems = this.getItemsWorker(function () { return nodes; }, function (n) { return _this.createChildItem(n); }); + return new ts.NavigationBarItem(node.identifier.text(), ts.ScriptElementKind.classElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); }; - GetScriptLexicalStructureWalker.prototype.visitConstructorDeclaration = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.constructorImplementationElement, "constructor"); - var parameters = node.callSignature.parameterList.parameters; - if (parameters) { - for (var i = 0, n = parameters.length; i < n; i++) { - var parameter = parameters[i]; - TypeScript.Debug.assert(parameter.kind() === 242 /* Parameter */); - if (TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 57 /* PublicKeyword */) || TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 55 /* PrivateKeyword */)) { - this.createItem(node, parameter.modifiers, ts.ScriptElementKind.memberVariableElement, parameter.identifier.text()); - } - } - } + NavigationBarItemGetter.prototype.createEnumItem = function (node) { + var _this = this; + var childItems = this.getItemsWorker(function () { return node.enumElements; }, function (n) { return _this.createChildItem(n); }); + return new ts.NavigationBarItem(node.identifier.text(), ts.ScriptElementKind.enumElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); }; - GetScriptLexicalStructureWalker.prototype.visitMemberFunctionDeclaration = function (node) { - this.createItem(node, node.modifiers, ts.ScriptElementKind.memberFunctionElement, node.propertyName.text()); + NavigationBarItemGetter.prototype.createIterfaceItem = function (node) { + var _this = this; + var childItems = this.getItemsWorker(function () { return node.body.typeMembers; }, function (n) { return _this.createChildItem(n); }); + return new ts.NavigationBarItem(node.identifier.text(), ts.ScriptElementKind.interfaceElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); }; - GetScriptLexicalStructureWalker.prototype.visitGetAccessor = function (node) { - this.createItem(node, node.modifiers, ts.ScriptElementKind.memberGetAccessorElement, node.propertyName.text()); - }; - GetScriptLexicalStructureWalker.prototype.visitSetAccessor = function (node) { - this.createItem(node, node.modifiers, ts.ScriptElementKind.memberSetAccessorElement, node.propertyName.text()); - }; - GetScriptLexicalStructureWalker.prototype.visitVariableDeclarator = function (node) { - var modifiers = node.parent.kind() === 136 /* MemberVariableDeclaration */ ? node.parent.modifiers : TypeScript.Syntax.emptyList(); - var kind = node.parent.kind() === 136 /* MemberVariableDeclaration */ ? ts.ScriptElementKind.memberVariableElement : ts.ScriptElementKind.variableElement; - this.createItem(node, modifiers, kind, node.propertyName.text()); - }; - GetScriptLexicalStructureWalker.prototype.visitIndexSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.indexSignatureElement, "[]"); - }; - GetScriptLexicalStructureWalker.prototype.visitEnumElement = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberVariableElement, node.propertyName.text()); - }; - GetScriptLexicalStructureWalker.prototype.visitCallSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.callSignatureElement, "()"); - }; - GetScriptLexicalStructureWalker.prototype.visitConstructSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.constructSignatureElement, "new()"); - }; - GetScriptLexicalStructureWalker.prototype.visitMethodSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberFunctionElement, node.propertyName.text()); - }; - GetScriptLexicalStructureWalker.prototype.visitPropertySignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberVariableElement, node.propertyName.text()); - }; - GetScriptLexicalStructureWalker.prototype.visitFunctionDeclaration = function (node) { - if (TypeScript.width(node.identifier) > 0) { - this.createItem(node, node.modifiers, ts.ScriptElementKind.functionElement, node.identifier.text()); - } - }; - GetScriptLexicalStructureWalker.prototype.visitBlock = function (node) { - }; - GetScriptLexicalStructureWalker.prototype.visitIfStatement = function (node) { - }; - GetScriptLexicalStructureWalker.prototype.visitExpressionStatement = function (node) { - }; - GetScriptLexicalStructureWalker.prototype.visitThrowStatement = function (node) { - }; - GetScriptLexicalStructureWalker.prototype.visitReturnStatement = function (node) { - }; - GetScriptLexicalStructureWalker.prototype.visitSwitchStatement = function (node) { - }; - GetScriptLexicalStructureWalker.prototype.visitWithStatement = function (node) { - }; - GetScriptLexicalStructureWalker.prototype.visitTryStatement = function (node) { - }; - GetScriptLexicalStructureWalker.prototype.visitLabeledStatement = function (node) { - }; - return GetScriptLexicalStructureWalker; - })(TypeScript.SyntaxWalker); - Services.GetScriptLexicalStructureWalker = GetScriptLexicalStructureWalker; + return NavigationBarItemGetter; + })(); + Services.NavigationBarItemGetter = NavigationBarItemGetter; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {})); @@ -25478,59 +26142,33 @@ var TypeScript; } BraceMatcher.getMatchSpans = function (syntaxTree, position) { var result = []; - var currentToken = TypeScript.findToken(syntaxTree.sourceUnit(), position); - BraceMatcher.getMatchingCloseBrace(currentToken, position, result); - BraceMatcher.getMatchingOpenBrace(currentToken, position, result); + var token = TypeScript.findToken(syntaxTree.sourceUnit(), position); + if (TypeScript.start(token) === position) { + var matchKind = BraceMatcher.getMatchingTokenKind(token); + if (matchKind !== null) { + var parentElement = token.parent; + for (var i = 0, n = TypeScript.childCount(parentElement); i < n; i++) { + var current = TypeScript.childAt(parentElement, i); + if (current !== null && TypeScript.fullWidth(current) > 0) { + if (current.kind() === matchKind) { + var range1 = new TypeScript.TextSpan(TypeScript.start(token), TypeScript.width(token)); + var range2 = new TypeScript.TextSpan(TypeScript.start(current), TypeScript.width(current)); + if (range1.start() < range2.start()) { + result.push(range1, range2); + } + else { + result.push(range2, range1); + } + break; + } + } + } + } + } return result; }; - BraceMatcher.getMatchingCloseBrace = function (currentToken, position, result) { - if (TypeScript.start(currentToken) === position) { - var closingBraceKind = BraceMatcher.getMatchingCloseBraceTokenKind(currentToken); - if (closingBraceKind !== null) { - var parentElement = currentToken.parent; - var currentPosition = TypeScript.fullStart(currentToken.parent); - for (var i = 0, n = TypeScript.childCount(parentElement); i < n; i++) { - var element = TypeScript.childAt(parentElement, i); - if (element !== null && TypeScript.fullWidth(element) > 0) { - if (element.kind() === closingBraceKind) { - var range1 = new TypeScript.TextSpan(position, TypeScript.width(currentToken)); - var range2 = new TypeScript.TextSpan(currentPosition + TypeScript.leadingTriviaWidth(element), TypeScript.width(element)); - result.push(range1, range2); - break; - } - currentPosition += TypeScript.fullWidth(element); - } - } - } - } - }; - BraceMatcher.getMatchingOpenBrace = function (currentToken, position, result) { - if (currentToken.fullStart() === position) { - currentToken = TypeScript.previousToken(currentToken); - } - if (currentToken !== null && TypeScript.start(currentToken) === (position - 1)) { - var openBraceKind = BraceMatcher.getMatchingOpenBraceTokenKind(currentToken); - if (openBraceKind !== null) { - var parentElement = currentToken.parent; - var currentPosition = TypeScript.fullStart(currentToken.parent) + TypeScript.fullWidth(parentElement); - for (var i = TypeScript.childCount(parentElement) - 1; i >= 0; i--) { - var element = TypeScript.childAt(parentElement, i); - if (element !== null && TypeScript.fullWidth(element) > 0) { - if (element.kind() === openBraceKind) { - var range1 = new TypeScript.TextSpan(position - 1, TypeScript.width(currentToken)); - var range2 = new TypeScript.TextSpan(currentPosition - TypeScript.lastToken(element).trailingTriviaWidth() - TypeScript.width(element), TypeScript.width(element)); - result.push(range1, range2); - break; - } - currentPosition -= TypeScript.fullWidth(element); - } - } - } - } - }; - BraceMatcher.getMatchingCloseBraceTokenKind = function (positionedElement) { - var element = positionedElement !== null && positionedElement; - switch (element.kind()) { + BraceMatcher.getMatchingTokenKind = function (token) { + switch (token.kind()) { case 70 /* OpenBraceToken */: return 71 /* CloseBraceToken */; case 72 /* OpenParenToken */: @@ -25538,13 +26176,7 @@ var TypeScript; case 74 /* OpenBracketToken */: return 75 /* CloseBracketToken */; case 80 /* LessThanToken */: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 81 /* GreaterThanToken */ : null; - } - return null; - }; - BraceMatcher.getMatchingOpenBraceTokenKind = function (positionedElement) { - var element = positionedElement !== null && positionedElement; - switch (element.kind()) { + return 81 /* GreaterThanToken */; case 71 /* CloseBraceToken */: return 70 /* OpenBraceToken */; case 73 /* CloseParenToken */: @@ -25552,7 +26184,7 @@ var TypeScript; case 75 /* CloseBracketToken */: return 74 /* OpenBracketToken */; case 81 /* GreaterThanToken */: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 80 /* LessThanToken */ : null; + return 80 /* LessThanToken */; } return null; }; @@ -25575,10 +26207,7 @@ var TypeScript; return null; } if (childElements.length == 0) { - return { - minChar: TypeScript.start(parentElement), - limChar: TypeScript.end(parentElement) - }; + return TypeScript.TextSpan.fromBounds(TypeScript.start(parentElement), TypeScript.end(parentElement)); } var start; var end; @@ -25591,16 +26220,10 @@ var TypeScript; end = TypeScript.end(element); } } - return { - minChar: start, - limChar: end - }; + return TypeScript.TextSpan.fromBounds(start, end); } function createBreakpointSpanInfoWithLimChar(startElement, limChar) { - return { - minChar: TypeScript.start(startElement), - limChar: limChar - }; + return TypeScript.TextSpan.fromBounds(TypeScript.start(startElement), limChar); } var BreakpointResolver = (function () { function BreakpointResolver(posLine, lineMap) { @@ -26569,6 +27192,9 @@ var TypeScript; this.snapshot = snapshot; this.lines = []; } + TextSnapshot.prototype.getLength = function () { + return this.snapshot.length(); + }; TextSnapshot.prototype.getText = function (span) { return this.snapshot.substr(span.start(), span.length()); }; @@ -26795,14 +27421,10 @@ var TypeScript; var span = TypeScript.TextSpan.fromBounds(minChar, limChar); return this.formatSpan(span, 1 /* FormatSelection */); }; - FormattingManager.prototype.formatDocument = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); + FormattingManager.prototype.formatDocument = function () { + var span = TypeScript.TextSpan.fromBounds(0, this.snapshot.getLength()); return this.formatSpan(span, 0 /* FormatDocument */); }; - FormattingManager.prototype.formatOnPaste = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 5 /* FormatOnPaste */); - }; FormattingManager.prototype.formatOnSemicolon = function (caretPosition) { var sourceUnit = this.syntaxTree.sourceUnit(); var semicolonPositionedToken = TypeScript.findToken(sourceUnit, caretPosition - 1); @@ -26845,11 +27467,8 @@ var TypeScript; var result = []; var formattingEdits = Formatting.Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind); formattingEdits.forEach(function (item) { - result.push({ - minChar: item.position, - limChar: item.position + item.length, - text: item.replaceWith - }); + var edit = new ts.TextChange(new TypeScript.TextSpan(item.position, item.length), item.replaceWith); + result.push(edit); }); return result; }; @@ -27533,14 +28152,9 @@ var TypeScript; return this.rulesMap; }; RulesProvider.prototype.ensureUpToDate = function (options) { - var _this = this; if (this.options == null || !ts.compareDataObjects(this.options, options)) { - var activeRules = TypeScript.timeFunction(this.logger, "RulesProvider: createActiveRules()", function () { - return _this.createActiveRules(options); - }); - var rulesMap = TypeScript.timeFunction(this.logger, "RulesProvider: RulesMap.create()", function () { - return Formatting.RulesMap.create(activeRules); - }); + var activeRules = this.createActiveRules(options); + var rulesMap = Formatting.RulesMap.create(activeRules); this.activeRules = activeRules; this.rulesMap = rulesMap; this.options = ts.clone(options); @@ -28560,36 +29174,11 @@ var TypeScript; var NullLogger = (function () { function NullLogger() { } - NullLogger.prototype.information = function () { - return false; - }; - NullLogger.prototype.debug = function () { - return false; - }; - NullLogger.prototype.warning = function () { - return false; - }; - NullLogger.prototype.error = function () { - return false; - }; - NullLogger.prototype.fatal = function () { - return false; - }; NullLogger.prototype.log = function (s) { }; return NullLogger; })(); TypeScript.NullLogger = NullLogger; - function timeFunction(logger, funcDescription, func) { - var start = (new Date()).getTime(); - var result = func(); - var end = (new Date()).getTime(); - if (logger.information()) { - logger.log(funcDescription + " completed in " + (end - start) + " msec"); - } - return result; - } - TypeScript.timeFunction = timeFunction; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { @@ -29781,17 +30370,17 @@ var TypeScript; return false; } ASTHelpers.isLastNameOfModule = isLastNameOfModule; - function getNameOfIdenfierOrQualifiedName(name) { + function getNameOfIdentifierOrQualifiedName(name) { if (name.kind() === 11 /* IdentifierName */) { return name.text(); } else { TypeScript.Debug.assert(name.kind() == 121 /* QualifiedName */); var dotExpr = name; - return getNameOfIdenfierOrQualifiedName(dotExpr.left) + "." + getNameOfIdenfierOrQualifiedName(dotExpr.right); + return getNameOfIdentifierOrQualifiedName(dotExpr.left) + "." + getNameOfIdentifierOrQualifiedName(dotExpr.right); } } - ASTHelpers.getNameOfIdenfierOrQualifiedName = getNameOfIdenfierOrQualifiedName; + ASTHelpers.getNameOfIdentifierOrQualifiedName = getNameOfIdentifierOrQualifiedName; function getModuleNames(name, result) { result = result || []; if (name.kind() === 121 /* QualifiedName */) { @@ -30273,9 +30862,15 @@ var ts; SourceFileObject.prototype.getLineAndCharacterFromPosition = function (position) { return null; }; + SourceFileObject.prototype.getPositionFromLineAndCharacter = function (line, character) { + return -1; + }; SourceFileObject.prototype.getSourceUnit = function () { return this.getSyntaxTree().sourceUnit(); }; + SourceFileObject.prototype.getScriptSnapshot = function () { + return this.scriptSnapshot; + }; SourceFileObject.prototype.getLineMap = function () { return this.getSyntaxTree().lineMap(); }; @@ -30330,9 +30925,9 @@ var ts; } var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); var newSyntaxTree = !textChangeRange || !oldSyntaxTree ? TypeScript.Parser.parse(this.filename, text, this.languageVersion, TypeScript.isDTSFile(this.filename)) : TypeScript.IncrementalParser.parse(oldSyntaxTree, textChangeRange, text); - return SourceFileObject.createSourceFileObject(this.languageVersion, this.filename, scriptSnapshot, version, isOpen, newSyntaxTree); + return SourceFileObject.createSourceFileObject(this.filename, scriptSnapshot, this.languageVersion, version, isOpen, newSyntaxTree); }; - SourceFileObject.createSourceFileObject = function (languageVersion, filename, scriptSnapshot, version, isOpen, syntaxTree) { + SourceFileObject.createSourceFileObject = function (filename, scriptSnapshot, languageVersion, version, isOpen, syntaxTree) { var newSourceFile = ts.createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), languageVersion, version, isOpen); newSourceFile.scriptSnapshot = scriptSnapshot; newSourceFile.syntaxTree = syntaxTree; @@ -30340,6 +30935,164 @@ var ts; }; return SourceFileObject; })(NodeObject); + var NavigationBarItem = (function () { + function NavigationBarItem(text, kind, kindModifiers, spans, childItems, indent, bolded, grayed) { + if (childItems === void 0) { childItems = null; } + if (indent === void 0) { indent = 0; } + if (bolded === void 0) { bolded = false; } + if (grayed === void 0) { grayed = false; } + this.text = text; + this.kind = kind; + this.kindModifiers = kindModifiers; + this.spans = spans; + this.childItems = childItems; + this.indent = indent; + this.bolded = bolded; + this.grayed = grayed; + } + return NavigationBarItem; + })(); + ts.NavigationBarItem = NavigationBarItem; + var TodoCommentDescriptor = (function () { + function TodoCommentDescriptor(text, priority) { + this.text = text; + this.priority = priority; + } + return TodoCommentDescriptor; + })(); + ts.TodoCommentDescriptor = TodoCommentDescriptor; + var TodoComment = (function () { + function TodoComment(descriptor, message, position) { + this.descriptor = descriptor; + this.message = message; + this.position = position; + } + return TodoComment; + })(); + ts.TodoComment = TodoComment; + var TextChange = (function () { + function TextChange(span, newText) { + this.span = span; + this.newText = newText; + } + TextChange.createInsert = function (pos, newText) { + return new TextChange(new TypeScript.TextSpan(pos, 0), newText); + }; + TextChange.createDelete = function (start, end) { + return new TextChange(TypeScript.TextSpan.fromBounds(start, end), ""); + }; + TextChange.createReplace = function (start, end, newText) { + return new TextChange(TypeScript.TextSpan.fromBounds(start, end), newText); + }; + return TextChange; + })(); + ts.TextChange = TextChange; + var ReferenceEntry = (function () { + function ReferenceEntry(fileName, textSpan, isWriteAccess) { + this.fileName = ""; + this.isWriteAccess = false; + this.fileName = fileName; + this.textSpan = textSpan; + this.isWriteAccess = isWriteAccess; + } + return ReferenceEntry; + })(); + ts.ReferenceEntry = ReferenceEntry; + var NavigateToItem = (function () { + function NavigateToItem(name, kind, kindModifiers, matchKind, fileName, textSpan, containerName, containerKind) { + this.name = name; + this.kind = kind; + this.kindModifiers = kindModifiers; + this.matchKind = matchKind; + this.fileName = fileName; + this.textSpan = textSpan; + this.containerName = containerName; + this.containerKind = containerKind; + } + return NavigateToItem; + })(); + ts.NavigateToItem = NavigateToItem; + var DefinitionInfo = (function () { + function DefinitionInfo(fileName, textSpan, kind, name, containerKind, containerName) { + this.fileName = fileName; + this.textSpan = textSpan; + this.kind = kind; + this.name = name; + this.containerKind = containerKind; + this.containerName = containerName; + } + return DefinitionInfo; + })(); + ts.DefinitionInfo = DefinitionInfo; + var TypeInfo = (function () { + function TypeInfo(memberName, docComment, fullSymbolName, kind, textSpan) { + this.memberName = memberName; + this.docComment = docComment; + this.fullSymbolName = fullSymbolName; + this.kind = kind; + this.textSpan = textSpan; + } + return TypeInfo; + })(); + ts.TypeInfo = TypeInfo; + var RenameInfo = (function () { + function RenameInfo(canRename, localizedErrorMessage, displayName, fullDisplayName, kind, kindModifiers, triggerSpan) { + this.canRename = canRename; + this.localizedErrorMessage = localizedErrorMessage; + this.displayName = displayName; + this.fullDisplayName = fullDisplayName; + this.kind = kind; + this.kindModifiers = kindModifiers; + this.triggerSpan = triggerSpan; + } + RenameInfo.CreateError = function (localizedErrorMessage) { + return new RenameInfo(false, localizedErrorMessage, null, null, null, null, null); + }; + RenameInfo.Create = function (displayName, fullDisplayName, kind, kindModifiers, triggerSpan) { + return new RenameInfo(true, null, displayName, fullDisplayName, kind, kindModifiers, triggerSpan); + }; + return RenameInfo; + })(); + ts.RenameInfo = RenameInfo; + var SignatureHelpParameter = (function () { + function SignatureHelpParameter(name, documentation, display, isOptional) { + this.name = name; + this.documentation = documentation; + this.display = display; + this.isOptional = isOptional; + } + return SignatureHelpParameter; + })(); + ts.SignatureHelpParameter = SignatureHelpParameter; + var SignatureHelpItem = (function () { + function SignatureHelpItem(isVariadic, prefix, suffix, separator, parameters, documentation) { + this.isVariadic = isVariadic; + this.prefix = prefix; + this.suffix = suffix; + this.separator = separator; + this.parameters = parameters; + this.documentation = documentation; + } + return SignatureHelpItem; + })(); + ts.SignatureHelpItem = SignatureHelpItem; + var SignatureHelpItems = (function () { + function SignatureHelpItems(items, applicableSpan, selectedItemIndex) { + this.items = items; + this.applicableSpan = applicableSpan; + this.selectedItemIndex = selectedItemIndex; + } + return SignatureHelpItems; + })(); + ts.SignatureHelpItems = SignatureHelpItems; + var SignatureHelpState = (function () { + function SignatureHelpState(argumentIndex, argumentCount) { + this.argumentIndex = argumentIndex; + this.argumentCount = argumentCount; + } + return SignatureHelpState; + })(); + ts.SignatureHelpState = SignatureHelpState; (function (EmitOutputResult) { EmitOutputResult[EmitOutputResult["Succeeded"] = 0] = "Succeeded"; EmitOutputResult[EmitOutputResult["FailedBecauseOfSyntaxErrors"] = 1] = "FailedBecauseOfSyntaxErrors"; @@ -30358,6 +31111,7 @@ var ts; EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; + EndOfLineState[EndOfLineState["EndingWithDotToken"] = 4] = "EndingWithDotToken"; })(ts.EndOfLineState || (ts.EndOfLineState = {})); var EndOfLineState = ts.EndOfLineState; (function (TokenClass) { @@ -30519,61 +31273,87 @@ var ts; } return file.sourceText; }; - HostCache.prototype.getScriptTextChangeRangeSinceVersion = function (filename, lastKnownVersion) { + HostCache.prototype.getChangeRange = function (filename, lastKnownVersion, oldScriptSnapshot) { var currentVersion = this.getVersion(filename); if (lastKnownVersion === currentVersion) { return TypeScript.TextChangeRange.unchanged; } var scriptSnapshot = this.getScriptSnapshot(filename); - return scriptSnapshot.getTextChangeRangeSinceVersion(lastKnownVersion); + return scriptSnapshot.getChangeRange(oldScriptSnapshot); }; return HostCache; })(); var SyntaxTreeCache = (function () { function SyntaxTreeCache(host) { this.host = host; - this.currentfilename = ""; - this.currentFileVersion = -1; + this.currentFilename = ""; + this.currentFileVersion = null; + this.currentSourceFile = null; this.currentFileSyntaxTree = null; - this.currentFileScriptSnapshot = null; this.hostCache = new HostCache(host); } - SyntaxTreeCache.prototype.getCurrentFileSyntaxTree = function (filename) { + SyntaxTreeCache.prototype.initialize = function (filename) { + ts.Debug.assert(!!this.currentFileSyntaxTree === !!this.currentSourceFile); this.hostCache = new HostCache(this.host); var version = this.hostCache.getVersion(filename); var syntaxTree = null; - if (this.currentFileSyntaxTree === null || this.currentfilename !== filename) { + var sourceFile; + if (this.currentFileSyntaxTree === null || this.currentFilename !== filename) { var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); syntaxTree = this.createSyntaxTree(filename, scriptSnapshot); + sourceFile = createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, true); + fixupParentReferences(sourceFile); } else if (this.currentFileVersion !== version) { var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); - syntaxTree = this.updateSyntaxTree(filename, scriptSnapshot, this.currentFileSyntaxTree, this.currentFileVersion); + syntaxTree = this.updateSyntaxTree(filename, scriptSnapshot, this.currentSourceFile.getScriptSnapshot(), this.currentFileSyntaxTree, this.currentFileVersion); + var editRange = this.hostCache.getChangeRange(filename, this.currentFileVersion, this.currentSourceFile.getScriptSnapshot()); + sourceFile = !editRange ? createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, true) : this.currentSourceFile.update(scriptSnapshot, version, true, editRange); + fixupParentReferences(sourceFile); } if (syntaxTree !== null) { - this.currentFileScriptSnapshot = scriptSnapshot; + ts.Debug.assert(sourceFile); this.currentFileVersion = version; - this.currentfilename = filename; + this.currentFilename = filename; this.currentFileSyntaxTree = syntaxTree; + this.currentSourceFile = sourceFile; } + function fixupParentReferences(sourceFile) { + var parent = sourceFile; + function walk(n) { + n.parent = parent; + var saveParent = parent; + parent = n; + ts.forEachChild(n, walk); + parent = saveParent; + } + ts.forEachChild(sourceFile, walk); + } + }; + SyntaxTreeCache.prototype.getCurrentFileSyntaxTree = function (filename) { + this.initialize(filename); return this.currentFileSyntaxTree; }; + SyntaxTreeCache.prototype.getCurrentSourceFile = function (filename) { + this.initialize(filename); + return this.currentSourceFile; + }; SyntaxTreeCache.prototype.getCurrentScriptSnapshot = function (filename) { this.getCurrentFileSyntaxTree(filename); - return this.currentFileScriptSnapshot; + return this.getCurrentSourceFile(filename).getScriptSnapshot(); }; SyntaxTreeCache.prototype.createSyntaxTree = function (filename, scriptSnapshot) { var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); var syntaxTree = TypeScript.Parser.parse(filename, text, getDefaultCompilerOptions().target, TypeScript.isDTSFile(filename)); return syntaxTree; }; - SyntaxTreeCache.prototype.updateSyntaxTree = function (filename, scriptSnapshot, previousSyntaxTree, previousFileVersion) { - var editRange = this.hostCache.getScriptTextChangeRangeSinceVersion(filename, previousFileVersion); + SyntaxTreeCache.prototype.updateSyntaxTree = function (filename, scriptSnapshot, previousScriptSnapshot, previousSyntaxTree, previousFileVersion) { + var editRange = this.hostCache.getChangeRange(filename, previousFileVersion, previousScriptSnapshot); if (editRange === null) { return this.createSyntaxTree(filename, scriptSnapshot); } var nextSyntaxTree = TypeScript.IncrementalParser.parse(previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot)); - this.ensureInvariants(filename, editRange, nextSyntaxTree, this.currentFileScriptSnapshot, scriptSnapshot); + this.ensureInvariants(filename, editRange, nextSyntaxTree, previousScriptSnapshot, scriptSnapshot); return nextSyntaxTree; }; SyntaxTreeCache.prototype.ensureInvariants = function (filename, editRange, incrementalTree, oldScriptSnapshot, newScriptSnapshot) { @@ -30607,6 +31387,9 @@ var ts; }; return SyntaxTreeCache; })(); + function createSourceFileFromScriptSnapshot(filename, scriptSnapshot, settings, version, isOpen) { + return SourceFileObject.createSourceFileObject(filename, scriptSnapshot, settings.target, version, isOpen); + } function createDocumentRegistry() { var buckets = {}; function getKeyFromCompilationSettings(settings) { @@ -30644,7 +31427,7 @@ var ts; var bucket = getBucketForCompilationSettings(compilationSettings, true); var entry = ts.lookUp(bucket, filename); if (!entry) { - var sourceFile = ts.createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), compilationSettings.target, version, isOpen); + var sourceFile = createSourceFileFromScriptSnapshot(filename, scriptSnapshot, compilationSettings, version, isOpen); bucket[filename] = entry = { sourceFile: sourceFile, refCount: 0, @@ -30696,7 +31479,8 @@ var ts; var formattingRulesProvider; var hostCache; var program; - var typeChecker; + var typeInfoResolver; + var fullTypeCheckChecker_doNotAccessDirectly; var useCaseSensitivefilenames = false; var sourceFilesByName = {}; var documentRegistry = documentRegistry; @@ -30708,6 +31492,9 @@ var ts; function getSourceFile(filename) { return ts.lookUp(sourceFilesByName, filename); } + function getFullTypeCheckChecker() { + return fullTypeCheckChecker_doNotAccessDirectly || (fullTypeCheckChecker_doNotAccessDirectly = program.getTypeChecker(true)); + } function createCompilerHost() { return { getSourceFile: function (filename, languageVersion) { @@ -30782,21 +31569,23 @@ var ts; } var textChangeRange = null; if (sourceFile.isOpen && isOpen) { - textChangeRange = hostCache.getScriptTextChangeRangeSinceVersion(filename, sourceFile.version); + textChangeRange = hostCache.getChangeRange(filename, sourceFile.version, sourceFile.getScriptSnapshot()); } sourceFile = documentRegistry.updateDocument(sourceFile, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange); } else { - sourceFile = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen, []); + sourceFile = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen); } sourceFilesByName[filename] = sourceFile; } program = ts.createProgram(hostfilenames, compilationSettings, createCompilerHost()); - typeChecker = program.getTypeChecker(); + typeInfoResolver = program.getTypeChecker(false); + fullTypeCheckChecker_doNotAccessDirectly = undefined; } function cleanupSemanticCache() { if (program) { - typeChecker = program.getTypeChecker(); + typeInfoResolver = program.getTypeChecker(false); + fullTypeCheckChecker_doNotAccessDirectly = undefined; } } function dispose() { @@ -30814,7 +31603,7 @@ var ts; function getSemanticDiagnostics(filename) { synchronizeHostData(); filename = TypeScript.switchToForwardSlashes(filename); - return typeChecker.getDiagnostics(getSourceFile(filename).getSourceFile()); + return getFullTypeCheckChecker().getDiagnostics(getSourceFile(filename)); } function getCompilerOptionsDiagnostics() { synchronizeHostData(); @@ -30976,10 +31765,10 @@ var ts; entries: [], symbols: {}, location: mappedNode, - typeChecker: typeChecker + typeChecker: typeInfoResolver }; if (isRightOfDot) { - var type = typeChecker.getTypeOfExpression(mappedNode); + var type = typeInfoResolver.getApparentType(typeInfoResolver.getTypeOfNode(mappedNode)); if (!type) { return undefined; } @@ -31003,7 +31792,7 @@ var ts; else { isMemberCompletion = false; var symbolMeanings = ts.SymbolFlags.Type | ts.SymbolFlags.Value | ts.SymbolFlags.Namespace; - var symbols = typeChecker.getSymbolsInScope(mappedNode, symbolMeanings); + var symbols = typeInfoResolver.getSymbolsInScope(mappedNode, symbolMeanings); getCompletionEntriesFromSymbols(symbols, activeCompletionSession); } } @@ -31031,7 +31820,7 @@ var ts; kind: completionEntry.kind, kindModifiers: completionEntry.kindModifiers, type: session.typeChecker.typeToString(type, session.location), - fullSymbolName: typeChecker.symbolToString(symbol, session.location), + fullSymbolName: typeInfoResolver.symbolToString(symbol, session.location), docComment: "" }; } @@ -31148,24 +31937,17 @@ var ts; result.push(ScriptElementKindModifier.ambientModifier); return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; } - function getTypeAtPosition(filename, position) { + function getTypeAtPosition(fileName, position) { synchronizeHostData(); - filename = TypeScript.switchToForwardSlashes(filename); - var sourceFile = getSourceFile(filename); + fileName = TypeScript.switchToForwardSlashes(fileName); + var sourceFile = getSourceFile(fileName); var node = getNodeAtPosition(sourceFile.getSourceFile(), position); if (!node) return undefined; - var symbol = typeChecker.getSymbolInfo(node); - var type = symbol && typeChecker.getTypeOfSymbol(symbol); + var symbol = typeInfoResolver.getSymbolInfo(node); + var type = symbol && typeInfoResolver.getTypeOfSymbol(symbol); if (type) { - return { - memberName: new TypeScript.MemberNameString(typeChecker.typeToString(type)), - docComment: "", - fullSymbolName: typeChecker.symbolToString(symbol, getContainerNode(node)), - kind: getSymbolKind(symbol), - minChar: node.pos, - limChar: node.end - }; + return new TypeInfo(new TypeScript.MemberNameString(typeInfoResolver.typeToString(type)), "", typeInfoResolver.symbolToString(symbol, getContainerNode(node)), getSymbolKind(symbol), TypeScript.TextSpan.fromBounds(node.pos, node.end)); } return undefined; } @@ -31208,15 +31990,7 @@ var ts; return node.kind === 55 /* Identifier */ && isFunctionDeclaration(node.parent) && node.parent.name === node; } function getDefinitionInfo(node, symbolKind, symbolName, containerName) { - return { - fileName: node.getSourceFile().filename, - minChar: node.getStart(), - limChar: node.getEnd(), - kind: symbolKind, - name: symbolName, - containerName: containerName, - containerKind: undefined - }; + return new DefinitionInfo(node.getSourceFile().filename, TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()), symbolKind, symbolName, undefined, containerName); } function tryAddSignature(signatureDeclarations, selectConstructors, symbolKind, symbolName, containerName, result) { var declarations = []; @@ -31270,28 +32044,20 @@ var ts; if (comment) { var targetFilename = ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(filename), comment.filename)); if (program.getSourceFile(targetFilename)) { - return [{ - fileName: targetFilename, - minChar: 0, - limChar: 0, - kind: ScriptElementKind.scriptElement, - name: comment.filename, - containerName: undefined, - containerKind: undefined - }]; + return [new DefinitionInfo(targetFilename, TypeScript.TextSpan.fromBounds(0, 0), ScriptElementKind.scriptElement, comment.filename, undefined, undefined)]; } return undefined; } - var symbol = typeChecker.getSymbolInfo(node); + var symbol = typeInfoResolver.getSymbolInfo(node); if (!symbol || !(symbol.getDeclarations())) { return undefined; } var result = []; var declarations = symbol.getDeclarations(); - var symbolName = typeChecker.symbolToString(symbol, node); + var symbolName = typeInfoResolver.symbolToString(symbol, node); var symbolKind = getSymbolKind(symbol); var containerSymbol = symbol.parent; - var containerName = containerSymbol ? typeChecker.symbolToString(containerSymbol, node) : ""; + var containerName = containerSymbol ? typeInfoResolver.symbolToString(containerSymbol, node) : ""; var containerKind = containerSymbol ? getSymbolKind(symbol) : ""; if (!tryAddConstructSignature(symbol, node, symbolKind, symbolName, containerName, result) && !tryAddCallSignature(symbol, node, symbolKind, symbolName, containerName, result)) { ts.forEach(declarations, function (declaration) { @@ -31304,6 +32070,11 @@ var ts; filename = TypeScript.switchToForwardSlashes(filename); return syntaxTreeCache.getCurrentFileSyntaxTree(filename); } + function getCurrentSourceFile(filename) { + filename = TypeScript.switchToForwardSlashes(filename); + var currentSourceFile = syntaxTreeCache.getCurrentSourceFile(filename); + return currentSourceFile; + } function getNameOrDottedNameSpan(filename, startPos, endPos) { function getTypeInfoEligiblePath(filename, position, isConstructorValidPosition) { var sourceUnit = syntaxTreeCache.getCurrentFileSyntaxTree(filename).sourceUnit(); @@ -31348,27 +32119,22 @@ var ts; break; } } - return { - minChar: TypeScript.start(node), - limChar: TypeScript.end(node) - }; + return TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node)); } function getBreakpointStatementAtPosition(filename, position) { filename = TypeScript.switchToForwardSlashes(filename); var syntaxtree = getSyntaxTree(filename); return TypeScript.Services.Breakpoints.getBreakpointLocation(syntaxtree, position); } - function getScriptLexicalStructure(filename) { + function getNavigationBarItems(filename) { filename = TypeScript.switchToForwardSlashes(filename); var syntaxTree = getSyntaxTree(filename); - var items = []; - TypeScript.Services.GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure(items, filename, syntaxTree.sourceUnit()); - return items; + return new TypeScript.Services.NavigationBarItemGetter().getItems(syntaxTree.sourceUnit()); } - function getOutliningRegions(filename) { + function getOutliningSpans(filename) { filename = TypeScript.switchToForwardSlashes(filename); - var syntaxTree = getSyntaxTree(filename); - return TypeScript.Services.OutliningElementsCollector.collectElements(syntaxTree.sourceUnit()); + var sourceFile = getCurrentSourceFile(filename); + return ts.OutliningElementsCollector.collectElements(sourceFile); } function getBraceMatchingAtPosition(filename, position) { filename = TypeScript.switchToForwardSlashes(filename); @@ -31396,37 +32162,103 @@ var ts; var manager = new TypeScript.Services.Formatting.FormattingManager(syntaxTree, textSnapshot, formattingRulesProvider, options); return manager; } - function getFormattingEditsForRange(filename, minChar, limChar, options) { - filename = TypeScript.switchToForwardSlashes(filename); - var manager = getFormattingManager(filename, options); - return manager.formatSelection(minChar, limChar); + function getFormattingEditsForRange(fileName, start, end, options) { + fileName = TypeScript.switchToForwardSlashes(fileName); + var manager = getFormattingManager(fileName, options); + return manager.formatSelection(start, end); } - function getFormattingEditsForDocument(filename, minChar, limChar, options) { - filename = TypeScript.switchToForwardSlashes(filename); - var manager = getFormattingManager(filename, options); - return manager.formatDocument(minChar, limChar); + function getFormattingEditsForDocument(fileName, options) { + fileName = TypeScript.switchToForwardSlashes(fileName); + var manager = getFormattingManager(fileName, options); + return manager.formatDocument(); } - function getFormattingEditsOnPaste(filename, minChar, limChar, options) { - filename = TypeScript.switchToForwardSlashes(filename); - var manager = getFormattingManager(filename, options); - return manager.formatOnPaste(minChar, limChar); - } - function getFormattingEditsAfterKeystroke(filename, position, key, options) { - filename = TypeScript.switchToForwardSlashes(filename); - var manager = getFormattingManager(filename, options); - if (key === "}") + function getFormattingEditsAfterKeystroke(fileName, position, key, options) { + fileName = TypeScript.switchToForwardSlashes(fileName); + var manager = getFormattingManager(fileName, options); + if (key === "}") { return manager.formatOnClosingCurlyBrace(position); - else if (key === ";") + } + else if (key === ";") { return manager.formatOnSemicolon(position); - else if (key === "\n") + } + else if (key === "\n") { return manager.formatOnEnter(position); - else - return []; + } + return []; + } + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + function getTodoCommentsRegExp(descriptors) { + var singleLineCommentStart = /(?:\/\/+\s*)/.source; + var multiLineCommentStart = /(?:\/\*+\s*)/.source; + var anyNumberOfSpacesAndAsterixesAtStartOfLine = /(?:^(?:\s|\*)*)/.source; + var preamble = "(" + anyNumberOfSpacesAndAsterixesAtStartOfLine + "|" + singleLineCommentStart + "|" + multiLineCommentStart + ")"; + var literals = "(?:" + descriptors.map(function (d) { return "(" + escapeRegExp(d.text) + ")"; }).join("|") + ")"; + var endOfLineOrEndOfComment = /(?:$|\*\/)/.source; + var messageRemainder = /(?:.*?)/.source; + var messagePortion = "(" + literals + messageRemainder + ")"; + var regExpString = preamble + messagePortion + endOfLineOrEndOfComment; + return new RegExp(regExpString, "gim"); + } + function getTodoComments(fileName, descriptors) { + fileName = TypeScript.switchToForwardSlashes(fileName); + var sourceFile = getCurrentSourceFile(fileName); + var syntaxTree = sourceFile.getSyntaxTree(); + cancellationToken.throwIfCancellationRequested(); + var text = syntaxTree.text; + var fileContents = text.substr(0, text.length()); + cancellationToken.throwIfCancellationRequested(); + var result = []; + if (descriptors.length > 0) { + var regExp = getTodoCommentsRegExp(descriptors); + var matchArray; + while (matchArray = regExp.exec(fileContents)) { + cancellationToken.throwIfCancellationRequested(); + var firstDescriptorCaptureIndex = 3; + ts.Debug.assert(matchArray.length === descriptors.length + firstDescriptorCaptureIndex); + var preamble = matchArray[1]; + var matchPosition = matchArray.index + preamble.length; + var token = TypeScript.findToken(syntaxTree.sourceUnit(), matchPosition); + if (matchPosition >= TypeScript.start(token) && matchPosition < TypeScript.end(token)) { + continue; + } + var triviaList = matchPosition < TypeScript.start(token) ? token.leadingTrivia(syntaxTree.text) : token.trailingTrivia(syntaxTree.text); + var trivia = findContainingComment(triviaList, matchPosition); + if (trivia === null) { + continue; + } + var descriptor = undefined; + for (var i = 0, n = descriptors.length; i < n; i++) { + if (matchArray[i + firstDescriptorCaptureIndex]) { + descriptor = descriptors[i]; + } + } + ts.Debug.assert(descriptor); + if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor.text.length))) { + continue; + } + var message = matchArray[2]; + result.push(new TodoComment(descriptor, message, matchPosition)); + } + } + return result; + } + function isLetterOrDigit(char) { + return (char >= 97 /* a */ && char <= 122 /* z */) || (char >= 65 /* A */ && char <= 90 /* Z */) || (char >= 48 /* _0 */ && char <= 57 /* _9 */); + } + function findContainingComment(triviaList, position) { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + var fullEnd = trivia.fullStart() + trivia.fullWidth(); + if (trivia.isComment() && trivia.fullStart() <= position && position < fullEnd) { + return trivia; + } + } + return null; } return { dispose: dispose, - refresh: function () { - }, cleanupSemanticCache: cleanupSemanticCache, getSyntacticDiagnostics: getSyntacticDiagnostics, getSemanticDiagnostics: getSemanticDiagnostics, @@ -31434,7 +32266,8 @@ var ts; getCompletionsAtPosition: getCompletionsAtPosition, getCompletionEntryDetails: getCompletionEntryDetails, getTypeAtPosition: getTypeAtPosition, - getSignatureAtPosition: function (filename, position) { return undefined; }, + getSignatureHelpItems: function (filename, position) { return null; }, + getSignatureHelpCurrentArgumentState: function (fileName, position, applicableSpanStart) { return null; }, getDefinitionAtPosition: getDefinitionAtPosition, getReferencesAtPosition: function (filename, position) { return []; }, getOccurrencesAtPosition: function (filename, position) { return []; }, @@ -31442,127 +32275,199 @@ var ts; getNameOrDottedNameSpan: getNameOrDottedNameSpan, getBreakpointStatementAtPosition: getBreakpointStatementAtPosition, getNavigateToItems: function (searchValue) { return []; }, - getScriptLexicalStructure: getScriptLexicalStructure, - getOutliningRegions: getOutliningRegions, + getRenameInfo: function (fileName, position) { return RenameInfo.CreateError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key)); }, + getNavigationBarItems: getNavigationBarItems, + getOutliningSpans: getOutliningSpans, + getTodoComments: getTodoComments, getBraceMatchingAtPosition: getBraceMatchingAtPosition, getIndentationAtPosition: getIndentationAtPosition, getFormattingEditsForRange: getFormattingEditsForRange, getFormattingEditsForDocument: getFormattingEditsForDocument, - getFormattingEditsOnPaste: getFormattingEditsOnPaste, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, - getEmitOutput: function (filename) { return undefined; } + getEmitOutput: function (filename) { return null; } }; } ts.createLanguageService = createLanguageService; function createClassifier(host) { var scanner; - var lastDiagnosticKey = null; var noRegexTable; - var reportDiagnostic = function (position, fullWidth, key, args) { - lastDiagnosticKey = key; - }; if (!noRegexTable) { noRegexTable = []; - noRegexTable[11 /* IdentifierName */] = true; - noRegexTable[14 /* StringLiteral */] = true; - noRegexTable[13 /* NumericLiteral */] = true; - noRegexTable[12 /* RegularExpressionLiteral */] = true; - noRegexTable[35 /* ThisKeyword */] = true; - noRegexTable[93 /* PlusPlusToken */] = true; - noRegexTable[94 /* MinusMinusToken */] = true; - noRegexTable[73 /* CloseParenToken */] = true; - noRegexTable[75 /* CloseBracketToken */] = true; - noRegexTable[71 /* CloseBraceToken */] = true; - noRegexTable[37 /* TrueKeyword */] = true; - noRegexTable[24 /* FalseKeyword */] = true; + noRegexTable[55 /* Identifier */] = true; + noRegexTable[3 /* StringLiteral */] = true; + noRegexTable[2 /* NumericLiteral */] = true; + noRegexTable[4 /* RegularExpressionLiteral */] = true; + noRegexTable[83 /* ThisKeyword */] = true; + noRegexTable[29 /* PlusPlusToken */] = true; + noRegexTable[30 /* MinusMinusToken */] = true; + noRegexTable[8 /* CloseParenToken */] = true; + noRegexTable[10 /* CloseBracketToken */] = true; + noRegexTable[6 /* CloseBraceToken */] = true; + noRegexTable[85 /* TrueKeyword */] = true; + noRegexTable[70 /* FalseKeyword */] = true; } function getClassificationsForLine(text, lexState) { var offset = 0; - if (lexState !== 0 /* Start */) { - if (lexState === 3 /* InDoubleQuoteStringLiteral */) { + var lastTokenOrCommentEnd = 0; + var lastToken = 0 /* Unknown */; + var inUnterminatedMultiLineComment = false; + switch (lexState) { + case 3 /* InDoubleQuoteStringLiteral */: text = '"\\\n' + text; - } - else if (lexState === 2 /* InSingleQuoteStringLiteral */) { + offset = 3; + break; + case 2 /* InSingleQuoteStringLiteral */: text = "'\\\n" + text; - } - else if (lexState === 1 /* InMultiLineCommentTrivia */) { + offset = 3; + break; + case 1 /* InMultiLineCommentTrivia */: text = "/*\n" + text; - } - offset = 3; + offset = 3; + break; + case 4 /* EndingWithDotToken */: + lastToken = 11 /* DotToken */; + break; } var result = { finalLexState: 0 /* Start */, entries: [] }; - var simpleText = TypeScript.SimpleText.fromString(text); - scanner = TypeScript.Scanner.createScanner(1 /* ES5 */, simpleText, reportDiagnostic); - var lastTokenKind = 0 /* None */; - var token = null; + scanner = ts.createScanner(1 /* ES5 */, text, onError, processComment); + var token = 0 /* Unknown */; do { - lastDiagnosticKey = null; - token = scanner.scan(!noRegexTable[lastTokenKind]); - lastTokenKind = token.kind(); - processToken(text, simpleText, offset, token, result); - } while (token.kind() !== 10 /* EndOfFileToken */); - lastDiagnosticKey = null; - return result; - } - function processToken(text, simpleText, offset, token, result) { - processTriviaList(text, offset, token.leadingTrivia(simpleText), result); - addResult(text, offset, result, TypeScript.width(token), token.kind()); - processTriviaList(text, offset, token.trailingTrivia(simpleText), result); - if (TypeScript.fullEnd(token) >= text.length) { - if (lastDiagnosticKey === TypeScript.DiagnosticCode.AsteriskSlash_expected) { - result.finalLexState = 1 /* InMultiLineCommentTrivia */; - return; + token = scanner.scan(); + if ((token === 27 /* SlashToken */ || token === 47 /* SlashEqualsToken */) && !noRegexTable[lastToken]) { + if (scanner.reScanSlashToken() === 4 /* RegularExpressionLiteral */) { + token = 4 /* RegularExpressionLiteral */; + } } - if (token.kind() === 14 /* StringLiteral */) { - var tokenText = token.text(); - if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) { - var quoteChar = tokenText.charCodeAt(0); - result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; - return; + else if (lastToken === 11 /* DotToken */) { + token = 55 /* Identifier */; + } + lastToken = token; + processToken(); + } while (token !== 1 /* EndOfFileToken */); + return result; + function onError(message) { + inUnterminatedMultiLineComment = message.key === ts.Diagnostics.Asterisk_Slash_expected.key; + } + function processComment(start, end) { + addLeadingWhiteSpace(start, end); + addResult(end - start, 3 /* Comment */); + } + function processToken() { + var start = scanner.getTokenPos(); + var end = scanner.getTextPos(); + addLeadingWhiteSpace(start, end); + addResult(end - start, classFromKind(token)); + if (end >= text.length) { + if (inUnterminatedMultiLineComment) { + result.finalLexState = 1 /* InMultiLineCommentTrivia */; + } + else if (token === 3 /* StringLiteral */) { + var tokenText = scanner.getTokenText(); + if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) { + var quoteChar = tokenText.charCodeAt(0); + result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; + } + } + else if (token === 11 /* DotToken */) { + result.finalLexState = 4 /* EndingWithDotToken */; } } } - } - function processTriviaList(text, offset, triviaList, result) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - addResult(text, offset, result, trivia.fullWidth(), trivia.kind()); + function addLeadingWhiteSpace(start, end) { + if (start > lastTokenOrCommentEnd) { + addResult(start - lastTokenOrCommentEnd, 4 /* Whitespace */); + } + lastTokenOrCommentEnd = end; } - } - function addResult(text, offset, result, length, kind) { - if (length > 0) { - if (result.entries.length === 0) { - length -= offset; + function addResult(length, classification) { + if (length > 0) { + if (result.entries.length === 0) { + length -= offset; + } + result.entries.push({ length: length, classification: classification }); } - result.entries.push({ length: length, classification: classFromKind(kind) }); } } - function classFromKind(kind) { - if (TypeScript.SyntaxFacts.isAnyKeyword(kind)) { + function isBinaryExpressionOperatorToken(token) { + switch (token) { + case 26 /* AsteriskToken */: + case 27 /* SlashToken */: + case 28 /* PercentToken */: + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 31 /* LessThanLessThanToken */: + case 32 /* GreaterThanGreaterThanToken */: + case 33 /* GreaterThanGreaterThanGreaterThanToken */: + case 15 /* LessThanToken */: + case 16 /* GreaterThanToken */: + case 17 /* LessThanEqualsToken */: + case 18 /* GreaterThanEqualsToken */: + case 77 /* InstanceOfKeyword */: + case 76 /* InKeyword */: + case 19 /* EqualsEqualsToken */: + case 20 /* ExclamationEqualsToken */: + case 21 /* EqualsEqualsEqualsToken */: + case 22 /* ExclamationEqualsEqualsToken */: + case 34 /* AmpersandToken */: + case 36 /* CaretToken */: + case 35 /* BarToken */: + case 39 /* AmpersandAmpersandToken */: + case 40 /* BarBarToken */: + case 53 /* BarEqualsToken */: + case 52 /* AmpersandEqualsToken */: + case 54 /* CaretEqualsToken */: + case 49 /* LessThanLessThanEqualsToken */: + case 50 /* GreaterThanGreaterThanEqualsToken */: + case 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 44 /* PlusEqualsToken */: + case 45 /* MinusEqualsToken */: + case 46 /* AsteriskEqualsToken */: + case 47 /* SlashEqualsToken */: + case 48 /* PercentEqualsToken */: + case 43 /* EqualsToken */: + case 14 /* CommaToken */: + return true; + default: + return false; + } + } + function isPrefixUnaryExpressionOperatorToken(token) { + switch (token) { + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 38 /* TildeToken */: + case 37 /* ExclamationToken */: + case 29 /* PlusPlusToken */: + case 30 /* MinusMinusToken */: + return true; + default: + return false; + } + } + function isKeyword(token) { + return token >= ts.SyntaxKind.FirstKeyword && token <= ts.SyntaxKind.LastKeyword; + } + function classFromKind(token) { + if (isKeyword(token)) { return 1 /* Keyword */; } - else if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(kind) || TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(kind)) { + else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) { return 2 /* Operator */; } - else if (TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { + else if (token >= ts.SyntaxKind.FirstPunctuation && token <= ts.SyntaxKind.LastPunctuation) { return 0 /* Punctuation */; } - switch (kind) { - case 4 /* WhitespaceTrivia */: - return 4 /* Whitespace */; - case 6 /* MultiLineCommentTrivia */: - case 7 /* SingleLineCommentTrivia */: - return 3 /* Comment */; - case 13 /* NumericLiteral */: + switch (token) { + case 2 /* NumericLiteral */: return 6 /* NumberLiteral */; - case 14 /* StringLiteral */: + case 3 /* StringLiteral */: return 7 /* StringLiteral */; - case 12 /* RegularExpressionLiteral */: + case 4 /* RegularExpressionLiteral */: return 8 /* RegExpLiteral */; - case 11 /* IdentifierName */: + case 55 /* Identifier */: default: return 5 /* Identifier */; } @@ -31599,7 +32504,7 @@ var TypeScript; var isNoDefaultLibRegex = /^(\/\/\/\s*/gim; return isNoDefaultLibRegex.exec(comment); } - TypeScript.tripleSlashReferenceRegExp = /^(\/\/\/\s*/; + TypeScript.tripleSlashReferenceRegExp = /^(\/\/\/\s*/; function getFileReferenceFromReferencePath(fileName, text, position, comment, diagnostics) { var lineMap = text.lineMap(); var simpleReferenceRegEx = /^\/\/\/\s* extLen && path.substr(pathLen - extLen, extLen).toLocaleLowerCase() === extension.toLocaleLowerCase(); +} + +function copyFileSync(source, destination) { + var text = fs.readFileSync(source); + fs.writeFileSync(destination, text); +} + +function importDefinitelyTypedTest(testCaseName: string, testFiles: string[], responseFile: string ) { + var cmd = "node " + tscPath + " --module commonjs " + testFiles.join(" "); + if (responseFile) cmd += " @" + responseFile; + + var testDirectoryName = testCaseName + "_" + Math.floor((Math.random() * 10000) + 1); + var testDirectoryPath = path.join(process.env["temp"], testDirectoryName); + if (fs.existsSync(testDirectoryPath)) { + throw new Error("Could not create test directory"); + } + fs.mkdirSync(testDirectoryPath); + + child_process.exec(cmd, { + maxBuffer: 1 * 1024 * 1024, + cwd: testDirectoryPath + }, (error, stdout, stderr) => { + //console.log("importing " + testCaseName + " ..."); + //console.log(cmd); + + if (error) { + console.log("importing " + testCaseName + " ..."); + console.log(cmd); + console.log("==> error " + JSON.stringify(error)); + console.log("==> stdout " + String(stdout)); + console.log("==> stderr " + String(stderr)); + console.log("\r\n"); + return; + } + + // copy generated file to output location + var outputFilePath = path.join(testDirectoryPath, "iocapture0.json"); + var testCasePath = path.join(rwcTestPath, "DefinitelyTyped_" + testCaseName + ".json"); + copyFileSync(outputFilePath, testCasePath); + + //console.log("output generated at: " + outputFilePath); + + if (!fs.existsSync(testCasePath)) { + throw new Error("could not find test case at: " + testCasePath); + } + else { + fs.unlinkSync(outputFilePath); + fs.rmdirSync(testDirectoryPath); + //console.log("testcase generated at: " + testCasePath); + //console.log("Done."); + } + //console.log("\r\n"); + + }) + .on('error', function (error) { + console.log("==> error " + JSON.stringify(error)); + console.log("\r\n"); + }); +} + +function importDefinitelyTypedTests(definitelyTypedRoot: string): void { + fs.readdir(definitelyTypedRoot, (err, subDirectorys) => { + if (err) throw err; + + subDirectorys + .filter(d => ["_infrastructure", "node_modules", ".git"].indexOf(d) >= 0) + .filter(i => fs.statSync(path.join(definitelyTypedRoot, i)).isDirectory()) + .forEach(d => { + var directoryPath = path.join(definitelyTypedRoot, d); + fs.readdir(directoryPath, function (err, files) { + if (err) throw err; + + var tsFiles = []; + var testFiles = []; + var paramFile; + + files + .map(f => path.join(directoryPath, f)) + .forEach(f => { + if (fileExtensionIs(f, ".ts")) tsFiles.push(f); + else if (fileExtensionIs(f, ".tscparams")) paramFile = f; + + if (fileExtensionIs(f, "-tests.ts")) testFiles.push(f); + }); + + if (testFiles.length === 0) { + // no test files but multiple d.ts's, e.g. winjs + var regexp = new RegExp(d + "(([-][0-9])|([\.]d[\.]ts))"); + if (tsFiles.length > 1 && tsFiles.every(t => fileExtensionIs(t, ".d.ts") && regexp.test(t))) { + tsFiles.forEach(filename => { + importDefinitelyTypedTest(path.basename(filename, ".d.ts"), [filename], paramFile); + }); + } + else { + importDefinitelyTypedTest(d, tsFiles, paramFile); + } + } + else { + testFiles.forEach(filename => { + importDefinitelyTypedTest(path.basename(filename, "-tests.ts"), [filename], paramFile); + }); + } + }); + }) + }); +} + +importDefinitelyTypedTests(definitelyTypedRoot); \ No newline at end of file diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6a2fab1312b..c8825ed1152 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11,6 +11,18 @@ module ts { var nextNodeId = 1; var nextMergeId = 1; + export function getDeclarationOfKind(symbol: Symbol, kind: SyntaxKind): Declaration { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + if (declaration.kind === kind) { + return declaration; + } + } + + return undefined; + } + /// fullTypeCheck denotes if this instance of the typechecker will be used to get semantic diagnostics. /// If fullTypeCheck === true - then typechecker should do every possible check to produce all errors /// If fullTypeCheck === false - typechecker can shortcut and skip checks that only produce errors. @@ -25,6 +37,34 @@ module ts { var emptyArray: any[] = []; var emptySymbols: SymbolTable = {}; + + var checker: TypeChecker = { + getProgram: () => program, + getDiagnostics: getDiagnostics, + getGlobalDiagnostics: getGlobalDiagnostics, + getNodeCount: () => sum(program.getSourceFiles(), "nodeCount"), + getIdentifierCount: () => sum(program.getSourceFiles(), "identifierCount"), + getSymbolCount: () => sum(program.getSourceFiles(), "symbolCount"), + getTypeCount: () => typeCount, + checkProgram: checkProgram, + emitFiles: invokeEmitter, + getParentOfSymbol: getParentOfSymbol, + getTypeOfSymbol: getTypeOfSymbol, + getPropertiesOfType: getPropertiesOfType, + getPropertyOfType: getPropertyOfType, + getSignaturesOfType: getSignaturesOfType, + getIndexTypeOfType: getIndexTypeOfType, + getReturnTypeOfSignature: getReturnTypeOfSignature, + getSymbolsInScope: getSymbolsInScope, + getSymbolInfo: getSymbolInfo, + getTypeOfNode: getTypeOfNode, + getApparentType: getApparentType, + typeToString: typeToString, + symbolToString: symbolToString, + getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType, + getRootSymbol: getRootSymbol, + getContextualType: getContextualType + }; var undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined"); var argumentsSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "arguments"); @@ -72,34 +112,6 @@ module ts { var diagnostics: Diagnostic[] = []; var diagnosticsModified: boolean = false; - var checker: TypeChecker = { - getProgram: () => program, - getDiagnostics: getDiagnostics, - getGlobalDiagnostics: getGlobalDiagnostics, - getNodeCount: () => sum(program.getSourceFiles(), "nodeCount"), - getIdentifierCount: () => sum(program.getSourceFiles(), "identifierCount"), - getSymbolCount: () => sum(program.getSourceFiles(), "symbolCount"), - getTypeCount: () => typeCount, - checkProgram: checkProgram, - emitFiles: invokeEmitter, - getSymbolOfNode: getSymbolOfNode, - getParentOfSymbol: getParentOfSymbol, - getTypeOfSymbol: getTypeOfSymbol, - getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, - getPropertiesOfType: getPropertiesOfType, - getPropertyOfType: getPropertyOfType, - getSignaturesOfType: getSignaturesOfType, - getIndexTypeOfType: getIndexTypeOfType, - getReturnTypeOfSignature: getReturnTypeOfSignature, - resolveEntityName: resolveEntityName, - getSymbolsInScope: getSymbolsInScope, - getSymbolInfo: getSymbolInfo, - getTypeOfExpression: getTypeOfExpression, - typeToString: typeToString, - symbolToString: symbolToString, - getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType - }; - function addDiagnostic(diagnostic: Diagnostic) { diagnostics.push(diagnostic); diagnosticsModified = true; @@ -359,8 +371,7 @@ module ts { var node = getDeclarationOfKind(symbol, SyntaxKind.ImportDeclaration); var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : - resolveEntityName(node, node.entityName, node.entityName.kind === SyntaxKind.QualifiedName ? - SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace : SymbolFlags.Namespace); + getSymbolOfPartOfRightHandSideOfImport(node.entityName, node); if (links.target === resolvingSymbol) { links.target = target || unknownSymbol; } @@ -374,6 +385,33 @@ module ts { return links.target; } + // This function is only for imports with entity names + function getSymbolOfPartOfRightHandSideOfImport(entityName: EntityName, importDeclaration?: ImportDeclaration): Symbol { + if (!importDeclaration) { + importDeclaration = getAncestor(entityName, SyntaxKind.ImportDeclaration); + Debug.assert(importDeclaration); + } + // There are three things we might try to look for. In the following examples, + // the search term is enclosed in |...|: + // + // import a = |b|; // Namespace + // import a = |b.c|; // Value, type, namespace + // import a = |b.c|.d; // Namespace + if (entityName.kind === SyntaxKind.Identifier && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + entityName = entityName.parent; + } + // Check for case 1 and 3 in the above example + if (entityName.kind === SyntaxKind.Identifier || entityName.parent.kind === SyntaxKind.QualifiedName) { + return resolveEntityName(importDeclaration, entityName, SymbolFlags.Namespace); + } + else { + // Case 2 in above example + // entityName.kind could be a QualifiedName or a Missing identifier + Debug.assert(entityName.parent.kind === SyntaxKind.ImportDeclaration); + return resolveEntityName(importDeclaration, entityName, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace); + } + } + function getFullyQualifiedName(symbol: Symbol) { return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); } @@ -545,18 +583,6 @@ module ts { return false; } - function getDeclarationOfKind(symbol: Symbol, kind: SyntaxKind): Declaration { - var declarations = symbol.declarations; - for (var i = 0; i < declarations.length; i++) { - var declaration = declarations[i]; - if (declaration.kind === kind) { - return declaration; - } - } - - return undefined; - } - function findConstructorDeclaration(node: ClassDeclaration): ConstructorDeclaration { var members = node.members; for (var i = 0; i < members.length; i++) { @@ -780,7 +806,7 @@ module ts { // But it cant, hence the accessible is going to be undefined, but that doesnt mean m.c is accessible // It is accessible if the parent m is accessible because then m.c can be accessed through qualification meaningToLook = getQualifiedLeftMeaning(meaning); - symbol = symbol.parent; + symbol = getParentOfSymbol(symbol); } // This could be a symbol that is not exported in the external module @@ -882,7 +908,7 @@ module ts { // Get qualified name if (enclosingDeclaration && // Properties/methods/Signatures/Constructors/TypeParameters do not need qualification - !(symbol.flags & SymbolFlags.PropertyOrAccessor & SymbolFlags.Signature & SymbolFlags.Constructor & SymbolFlags.Method & SymbolFlags.TypeParameter)) { + !(symbol.flags & (SymbolFlags.PropertyOrAccessor | SymbolFlags.Signature | SymbolFlags.Constructor | SymbolFlags.Method | SymbolFlags.TypeParameter))) { var symbolName: string; while (symbol) { var isFirstName = !symbolName; @@ -903,7 +929,7 @@ module ts { if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { break; } - symbol = accessibleSymbolChain ? accessibleSymbolChain[0].parent : symbol.parent; + symbol = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); meaning = getQualifiedLeftMeaning(meaning); } @@ -1459,7 +1485,7 @@ module ts { function getTypeOfFuncClassEnumModule(symbol: Symbol): Type { var links = getSymbolLinks(symbol); if (!links.type) { - var type = links.type = createObjectType(TypeFlags.Anonymous, symbol); + links.type = createObjectType(TypeFlags.Anonymous, symbol); } return links.type; } @@ -1805,27 +1831,39 @@ module ts { function resolveAnonymousTypeMembers(type: ObjectType) { var symbol = type.symbol; - var members = emptySymbols; - var callSignatures = emptyArray; - var constructSignatures = emptyArray; - if (symbol.flags & SymbolFlags.HasExports) { - members = symbol.exports; + if (symbol.flags & SymbolFlags.TypeLiteral) { + var members = symbol.members; + var callSignatures = getSignaturesOfSymbol(members["__call"]); + var constructSignatures = getSignaturesOfSymbol(members["__new"]); + var stringIndexType = getIndexTypeOfSymbol(symbol, IndexKind.String); + var numberIndexType = getIndexTypeOfSymbol(symbol, IndexKind.Number); } - if (symbol.flags & (SymbolFlags.Function | SymbolFlags.Method)) { - callSignatures = getSignaturesOfSymbol(symbol); - } - if (symbol.flags & SymbolFlags.Class) { - var classType = getDeclaredTypeOfClass(symbol); - constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]); - if (!constructSignatures.length) constructSignatures = getDefaultConstructSignatures(classType); - if (classType.baseTypes.length) { - var members = createSymbolTable(getNamedMembers(members)); - addInheritedMembers(members, getPropertiesOfType(getTypeOfSymbol(classType.baseTypes[0].symbol))); + else { + // Combinations of function, class, enum and module + var members = emptySymbols; + var callSignatures: Signature[] = emptyArray; + var constructSignatures: Signature[] = emptyArray; + if (symbol.flags & SymbolFlags.HasExports) { + members = symbol.exports; } + if (symbol.flags & (SymbolFlags.Function | SymbolFlags.Method)) { + callSignatures = getSignaturesOfSymbol(symbol); + } + if (symbol.flags & SymbolFlags.Class) { + var classType = getDeclaredTypeOfClass(symbol); + constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]); + if (!constructSignatures.length) { + constructSignatures = getDefaultConstructSignatures(classType); + } + if (classType.baseTypes.length) { + members = createSymbolTable(getNamedMembers(members)); + addInheritedMembers(members, getPropertiesOfType(getTypeOfSymbol(classType.baseTypes[0].symbol))); + } + } + var stringIndexType: Type = undefined; + var numberIndexType: Type = (symbol.flags & SymbolFlags.Enum) ? stringType : undefined; } - var numberIndexType = (symbol.flags & SymbolFlags.Enum) ? stringType : undefined; - - setObjectTypeMembers(type, members, callSignatures, constructSignatures, /* stringIndexType */ undefined, numberIndexType); + setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); } function resolveObjectTypeMembers(type: ObjectType): ResolvedObjectType { @@ -2246,11 +2284,11 @@ module ts { } var type = getDeclaredTypeOfSymbol(symbol); if (!(type.flags & TypeFlags.ObjectType)) { - error(getTypeDeclaration(symbol), Diagnostics.Global_type_0_must_be_a_class_or_interface_type, name); + error(getTypeDeclaration(symbol), Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name); return emptyObjectType; } if (((type).typeParameters ? (type).typeParameters.length : 0) !== arity) { - error(getTypeDeclaration(symbol), Diagnostics.Global_type_0_must_have_1_type_parameter_s, name, arity); + error(getTypeDeclaration(symbol), Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity); return emptyObjectType; } return type; @@ -2301,13 +2339,8 @@ module ts { function getTypeFromTypeLiteralNode(node: TypeLiteralNode): Type { var links = getNodeLinks(node); if (!links.resolvedType) { - var symbol = node.symbol; - var members = symbol.members; - var callSignatures = getSignaturesOfSymbol(members["__call"]); - var constructSignatures = getSignaturesOfSymbol(members["__new"]); - var stringIndexType = getIndexTypeOfSymbol(symbol, IndexKind.String); - var numberIndexType = getIndexTypeOfSymbol(symbol, IndexKind.Number); - links.resolvedType = createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + // Deferred resolution of members is handled by resolveObjectTypeMembers + links.resolvedType = createObjectType(TypeFlags.Anonymous, node.symbol); } return links.resolvedType; } @@ -2351,6 +2384,12 @@ module ts { return getTypeFromTupleTypeNode(node); case SyntaxKind.TypeLiteral: return getTypeFromTypeLiteralNode(node); + // This function assumes that an identifier or qualified name is a type expression + // Callers should first ensure this by calling isTypeNode + case SyntaxKind.Identifier: + case SyntaxKind.QualifiedName: + var symbol = getSymbolInfo(node); + return getDeclaredTypeOfSymbol(symbol); default: return unknownType; } @@ -3174,6 +3213,7 @@ module ts { symbol.declarations = p.declarations; symbol.parent = p.parent; symbol.type = widenedTypes[index++]; + symbol.target = p; if (p.valueDeclaration) symbol.valueDeclaration = p.valueDeclaration; members[symbol.name] = symbol; }); @@ -3566,7 +3606,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) { @@ -3876,6 +3917,7 @@ module ts { prop.parent = member.parent; if (member.valueDeclaration) prop.valueDeclaration = member.valueDeclaration; prop.type = type; + prop.target = member; member = prop; } else { @@ -4236,7 +4278,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)); } @@ -4884,7 +4926,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: @@ -5003,6 +5045,7 @@ module ts { if (fullTypeCheck) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithArgumentsInGeneratedCode(node); if (program.getCompilerOptions().noImplicitAny && !node.type) { switch (node.kind) { @@ -5749,6 +5792,24 @@ module ts { } } + function checkCollistionWithRequireExportsInGeneratedCode(node: Node, name: Identifier) { + if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { + return; + } + + // Uninstantiated modules shouldnt do this check + if (node.kind === SyntaxKind.ModuleDeclaration && !isInstantiated(node)) { + return; + } + + // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent + var parent = node.kind === SyntaxKind.VariableDeclaration ? node.parent.parent : node.parent; + if (parent.kind === SyntaxKind.SourceFile && isExternalModule(parent)) { + // If the declaration happens to be in external module, report error that require and exports are reserved keywords + error(name, Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, name.text, name.text); + } + } + function checkVariableDeclaration(node: VariableDeclaration) { checkSourceElement(node.type); checkExportsOnMergedDeclarations(node); @@ -5776,6 +5837,7 @@ module ts { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); if (!useTypeFromValueDeclaration) { // TypeScript 1.0 spec (April 2014): 5.1 // Multiple declarations for the same variable name in the same declaration space are permitted, @@ -6045,6 +6107,7 @@ module ts { checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0); checkTypeParameters(node.typeParameters); checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); var type = getDeclaredTypeOfSymbol(symbol); @@ -6260,6 +6323,7 @@ module ts { } checkTypeNameIsReserved(node.name, Diagnostics.Enum_name_cannot_be_0); checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var enumSymbol = getSymbolOfNode(node); var enumType = getDeclaredTypeOfSymbol(enumSymbol); @@ -6333,6 +6397,7 @@ module ts { function checkModuleDeclaration(node: ModuleDeclaration) { if (fullTypeCheck) { checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); if (symbol.flags & SymbolFlags.ValueModule && symbol.declarations.length > 1 && !isInAmbientContext(node)) { @@ -6367,6 +6432,7 @@ module ts { function checkImportDeclaration(node: ImportDeclaration) { checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); var symbol = getSymbolOfNode(node); var target: Symbol; @@ -6640,32 +6706,21 @@ module ts { return mapToArray(symbols); } - // True if the given identifier is the identifier of a declaration node - function isDeclarationIdentifier(identifier: Identifier): boolean { - if (identifier.parent) { - switch (identifier.parent.kind) { - case SyntaxKind.TypeParameter: - case SyntaxKind.Parameter: - case SyntaxKind.VariableDeclaration: - case SyntaxKind.Property: - case SyntaxKind.PropertyAssignment: - case SyntaxKind.EnumMember: - case SyntaxKind.Method: - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.FunctionExpression: - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - case SyntaxKind.ClassDeclaration: - case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.EnumDeclaration: - case SyntaxKind.ModuleDeclaration: - case SyntaxKind.ImportDeclaration: - return (identifier.parent).name === identifier; - case SyntaxKind.CatchBlock: - return (identifier.parent).variable === identifier; - } + // True if the given identifier is the name of a type declaration node (class, interface, enum, type parameter, etc) + function isTypeDeclarationName(name: Node): boolean { + return name.kind == SyntaxKind.Identifier && + isTypeDeclaration(name.parent) && + (name.parent).name === name; + } + + function isTypeDeclaration(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.TypeParameter: + case SyntaxKind.ClassDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.EnumDeclaration: + return true; } - return false; } // True if the given identifier is part of a type reference @@ -6697,57 +6752,162 @@ module ts { case SyntaxKind.PostfixOperator: case SyntaxKind.BinaryExpression: case SyntaxKind.ConditionalExpression: + case SyntaxKind.OmittedExpression: return true; case SyntaxKind.QualifiedName: - while (node.parent && node.parent.kind === SyntaxKind.QualifiedName) node = node.parent; - return node.parent && node.parent.kind === SyntaxKind.TypeQuery; + while (node.parent.kind === SyntaxKind.QualifiedName) node = node.parent; + return node.parent.kind === SyntaxKind.TypeQuery; case SyntaxKind.Identifier: + if (node.parent.kind === SyntaxKind.TypeQuery) { + return true; + } + // Fall through case SyntaxKind.NumericLiteral: case SyntaxKind.StringLiteral: var parent = node.parent; - if (parent) { - if (isExpression(parent)) return true; - switch (parent.kind) { - case SyntaxKind.VariableDeclaration: - case SyntaxKind.Parameter: - case SyntaxKind.Property: - case SyntaxKind.EnumMember: - return (parent).initializer === node; - case SyntaxKind.ExpressionStatement: - case SyntaxKind.IfStatement: - case SyntaxKind.DoStatement: - case SyntaxKind.WhileStatement: - case SyntaxKind.ReturnStatement: - case SyntaxKind.WithStatement: - case SyntaxKind.SwitchStatement: - case SyntaxKind.CaseClause: - case SyntaxKind.ThrowStatement: - case SyntaxKind.SwitchStatement: - return (parent).expression === node; - case SyntaxKind.ForStatement: - return (parent).initializer === node || (parent).condition === node || - (parent).iterator === node; - case SyntaxKind.ForInStatement: - return (parent).variable === node || (parent).expression === node; - } + switch (parent.kind) { + case SyntaxKind.VariableDeclaration: + case SyntaxKind.Parameter: + case SyntaxKind.Property: + case SyntaxKind.EnumMember: + case SyntaxKind.PropertyAssignment: + return (parent).initializer === node; + case SyntaxKind.ExpressionStatement: + case SyntaxKind.IfStatement: + case SyntaxKind.DoStatement: + case SyntaxKind.WhileStatement: + case SyntaxKind.ReturnStatement: + case SyntaxKind.WithStatement: + case SyntaxKind.SwitchStatement: + case SyntaxKind.CaseClause: + case SyntaxKind.ThrowStatement: + case SyntaxKind.SwitchStatement: + return (parent).expression === node; + case SyntaxKind.ForStatement: + return (parent).initializer === node || + (parent).condition === node || + (parent).iterator === node; + case SyntaxKind.ForInStatement: + return (parent).variable === node || + (parent).expression === node; + case SyntaxKind.TypeAssertion: + return node === (parent).operand; + default: + if (isExpression(parent)) { + return true; + } } } return false; } + function isTypeNode(node: Node): boolean { + if (node.kind >= SyntaxKind.FirstTypeNode && node.kind <= SyntaxKind.LastTypeNode) { + return true; + } + + switch (node.kind) { + case SyntaxKind.AnyKeyword: + case SyntaxKind.NumberKeyword: + case SyntaxKind.StringKeyword: + case SyntaxKind.BooleanKeyword: + return true; + case SyntaxKind.VoidKeyword: + return node.parent.kind !== SyntaxKind.PrefixOperator; + case SyntaxKind.StringLiteral: + // Specialized signatures can have string literals as their parameters' type names + return node.parent.kind === SyntaxKind.Parameter; + // Identifiers and qualified names may be type nodes, depending on their context. Climb + // above them to find the lowest container + case SyntaxKind.Identifier: + // If the identifier is the RHS of a qualified name, then it's a type iff its parent is. + if (node.parent.kind === SyntaxKind.QualifiedName) { + node = node.parent; + } + // Fall through + case SyntaxKind.QualifiedName: + // At this point, node is either a qualified name or an identifier + var parent = node.parent; + if (parent.kind === SyntaxKind.TypeQuery) { + return false; + } + // Do not recursively call isTypeNode on the parent. In the example: + // + // var a: A.B.C; + // + // Calling isTypeNode would consider the qualified name A.B a type node. Only C or + // A.B.C is a type node. + if (parent.kind >= SyntaxKind.FirstTypeNode && parent.kind <= SyntaxKind.LastTypeNode) { + return true; + } + switch (parent.kind) { + case SyntaxKind.TypeParameter: + return node === (parent).constraint; + case SyntaxKind.Property: + case SyntaxKind.Parameter: + case SyntaxKind.VariableDeclaration: + return node === (parent).type; + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + case SyntaxKind.ArrowFunction: + case SyntaxKind.Constructor: + case SyntaxKind.Method: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + return node === (parent).type; + case SyntaxKind.CallSignature: + case SyntaxKind.ConstructSignature: + case SyntaxKind.IndexSignature: + return node === (parent).type; + case SyntaxKind.TypeAssertion: + return node === (parent).type; + case SyntaxKind.CallExpression: + case SyntaxKind.NewExpression: + return (parent).typeArguments.indexOf(node) >= 0; + } + } + + return false; + } + + function isInRightSideOfImportOrExportAssignment(node: EntityName) { + while (node.parent.kind === SyntaxKind.QualifiedName) { + node = node.parent; + } + + if (node.parent.kind === SyntaxKind.ImportDeclaration) { + return (node.parent).entityName === node; + } + if (node.parent.kind === SyntaxKind.ExportAssignment) { + return (node.parent).exportName === node; + } + + return false; + } + function isRightSideOfQualifiedNameOrPropertyAccess(node: Node) { return (node.parent.kind === SyntaxKind.QualifiedName || node.parent.kind === SyntaxKind.PropertyAccess) && (node.parent).right === node; } - function getSymbolOfIdentifier(identifier: Identifier) { - if (isDeclarationIdentifier(identifier)) { - return getSymbolOfNode(identifier.parent); + function getSymbolOfEntityName(entityName: EntityName): Symbol { + if (isDeclarationOrFunctionExpressionOrCatchVariableName(entityName)) { + return getSymbolOfNode(entityName.parent); } - var entityName: Node = identifier; - while (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) + if (entityName.parent.kind === SyntaxKind.ExportAssignment) { + return resolveEntityName(/*location*/ entityName.parent.parent, entityName, + /*all meanings*/ SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Import); + } + + if (isInRightSideOfImportOrExportAssignment(entityName)) { + // Since we already checked for ExportAssignment, this really could only be an Import + return getSymbolOfPartOfRightHandSideOfImport(entityName); + } + + if (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; + } if (isExpression(entityName)) { if (entityName.kind === SyntaxKind.Identifier) { @@ -6775,18 +6935,34 @@ module ts { meaning |= SymbolFlags.Import; return resolveEntityName(entityName, entityName, meaning); } + + // Do we want to return undefined here? + return undefined; } function getSymbolInfo(node: Node) { + if (isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + // This is a declaration, call getSymbolOfNode + return getSymbolOfNode(node.parent); + } + + if (node.kind === SyntaxKind.Identifier && isInRightSideOfImportOrExportAssignment(node)) { + return node.parent.kind === SyntaxKind.ExportAssignment + ? getSymbolOfEntityName(node) + : getSymbolOfPartOfRightHandSideOfImport(node); + } + switch (node.kind) { case SyntaxKind.Identifier: - return getSymbolOfIdentifier(node); + case SyntaxKind.PropertyAccess: + case SyntaxKind.QualifiedName: + return getSymbolOfEntityName(node); case SyntaxKind.ThisKeyword: case SyntaxKind.SuperKeyword: var type = checkExpression(node); return type.symbol; - + case SyntaxKind.ConstructorKeyword: // constructor keyword for an overload, should take us to the definition if it exist var constructorDeclaration = node.parent; @@ -6796,39 +6972,74 @@ module ts { return undefined; case SyntaxKind.StringLiteral: - // Property access - if (node.parent.kind === SyntaxKind.IndexedAccess && (node.parent).index === node) { + // External module name in an import declaration + if (node.parent.kind === SyntaxKind.ImportDeclaration && (node.parent).externalModuleName === node) { + var importSymbol = getSymbolOfNode(node.parent); + var moduleType = getTypeOfSymbol(importSymbol); + return moduleType ? moduleType.symbol : undefined; + } + + // Intentinal fallthrough + case SyntaxKind.NumericLiteral: + // index access + if (node.parent.kind == SyntaxKind.IndexedAccess && (node.parent).index === node) { var objectType = checkExpression((node.parent).object); if (objectType === unknownType) return undefined; var apparentType = getApparentType(objectType); if (apparentType === unknownType) return undefined; return getPropertyOfApparentType(apparentType, (node).text); } - // External module name in an import declaration - else if (node.parent.kind === SyntaxKind.ImportDeclaration && (node.parent).externalModuleName === node) { - var importSymbol = getSymbolOfNode(node.parent); - var moduleType = getTypeOfSymbol(importSymbol); - return moduleType ? moduleType.symbol : undefined; - } - // External module name in an ambient declaration - else if (node.parent.kind === SyntaxKind.ModuleDeclaration) { - return getSymbolOfNode(node.parent); - } break; } return undefined; } - function getTypeOfExpression(node: Node) { + function getTypeOfNode(node: Node): Type { if (isExpression(node)) { - while (isRightSideOfQualifiedNameOrPropertyAccess(node)) { - node = node.parent; - } - return getApparentType(checkExpression(node)); + return getTypeOfExpression(node); } + if (isTypeNode(node)) { + return getTypeFromTypeNode(node); + } + + if (isTypeDeclaration(node)) { + // In this case, we call getSymbolOfNode instead of getSymbolInfo because it is a declaration + var symbol = getSymbolOfNode(node); + return getDeclaredTypeOfSymbol(symbol); + } + + if (isTypeDeclarationName(node)) { + var symbol = getSymbolInfo(node); + return getDeclaredTypeOfSymbol(symbol); + } + + if (isDeclaration(node)) { + // In this case, we call getSymbolOfNode instead of getSymbolInfo because it is a declaration + var symbol = getSymbolOfNode(node); + return getTypeOfSymbol(symbol); + } + + if (isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + var symbol = getSymbolInfo(node); + return getTypeOfSymbol(symbol); + } + + if (isInRightSideOfImportOrExportAssignment(node)) { + var symbol = getSymbolInfo(node); + var declaredType = getDeclaredTypeOfSymbol(symbol); + return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol); + } + return unknownType; } + function getTypeOfExpression(expr: Expression): Type { + if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) { + expr = expr.parent; + } + return checkExpression(expr); + } + function getAugmentedPropertiesOfApparentType(type: Type): Symbol[]{ var apparentType = getApparentType(type); @@ -6837,13 +7048,13 @@ module ts { var propertiesByName: Map = {}; var results: Symbol[] = []; - forEach(getPropertiesOfType(apparentType), (s) => { + forEach(getPropertiesOfType(apparentType), s => { propertiesByName[s.name] = s; results.push(s); }); var resolved = resolveObjectTypeMembers(type); - forEachValue(resolved.members, (s) => { + forEachValue(resolved.members, s => { if (symbolIsValue(s) && !propertiesByName[s.name]) { propertiesByName[s.name] = s; results.push(s); @@ -6851,7 +7062,7 @@ module ts { }); if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { - forEach(getPropertiesOfType(globalFunctionType), (s) => { + forEach(getPropertiesOfType(globalFunctionType), s => { if (!propertiesByName[s.name]) { propertiesByName[s.name] = s; results.push(s); @@ -6866,6 +7077,10 @@ module ts { } } + function getRootSymbol(symbol: Symbol) { + return (symbol.flags & SymbolFlags.Transient) ? getSymbolLinks(symbol).target : symbol; + } + // Emitter support function isExternalModuleSymbol(symbol: Symbol): boolean { @@ -6984,7 +7199,20 @@ module ts { function isImplementationOfOverload(node: FunctionDeclaration) { if (node.body) { var symbol = getSymbolOfNode(node); - return getSignaturesOfSymbol(symbol).length > 1; + var signaturesOfSymbol = getSignaturesOfSymbol(symbol); + // If this function body corresponds to function with multiple signature, it is implementation of overload + // eg: function foo(a: string): string; + // function foo(a: number): number; + // function foo(a: any) { // This is implementation of the overloads + // return a; + // } + return signaturesOfSymbol.length > 1 || + // If there is single signature for the symbol, it is overload if that signature isnt coming from the node + // eg: function foo(a: string): string; + // function foo(a: any) { // This is implementation of the overloads + // return a; + // } + (signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node); } return false; } diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 221b6016ce5..cd8a3dc0666 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -63,8 +63,8 @@ module ts { } export function concatenate(array1: T[], array2: T[]): T[] { - if (!array2.length) return array1; - if (!array1.length) return array2; + if (!array2 || !array2.length) return array1; + if (!array1 || !array1.length) return array2; return array1.concat(array2); } @@ -194,14 +194,11 @@ module ts { export var localizedDiagnosticMessages: Map = undefined; - function getLocaleSpecificMessage(message: string) { + export function getLocaleSpecificMessage(message: string) { if (ts.localizedDiagnosticMessages) { message = localizedDiagnosticMessages[message]; } - /* Check to see that we got an actual value back. */ - Debug.assert(message, "Diagnostic message does not exist in locale map."); - return message; } @@ -518,12 +515,6 @@ module ts { return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } - export function getCanonicalFileName(fileName: string): string { - // if underlying system can distinguish between two files whose names differs only in cases then file name already in canonical form. - // otherwise use toLowerCase as a canonical form. - return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); - } - export interface ObjectAllocator { getNodeConstructor(kind: SyntaxKind): new () => Node; getSymbolConstructor(): new (flags: SymbolFlags, name: string) => Symbol; @@ -573,7 +564,7 @@ module ts { var currentAssertionLevel = AssertionLevel.None; export function shouldAssert(level: AssertionLevel): boolean { - return this.currentAssertionLevel >= level; + return currentAssertionLevel >= level; } export function assert(expression: any, message?: string, verboseDebugInfo?: () => string): void { diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index cc98becda33..80c582fd555 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -2,20 +2,11 @@ /// module ts { export var Diagnostics = { - Unknown_compiler_option_0: { code: 6001, category: DiagnosticCategory.Error, key: "Unknown compiler option '{0}'." }, - File_0_not_found: { code: 6002, category: DiagnosticCategory.Error, key: "File '{0}' not found." }, - File_0_must_have_extension_ts_or_d_ts: { code: 6003, category: DiagnosticCategory.Error, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, - Unrecognized_escape_sequence: { code: 1000, category: DiagnosticCategory.Error, key: "Unrecognized escape sequence." }, - Unexpected_character_0: { code: 1001, category: DiagnosticCategory.Error, key: "Unexpected character {0}." }, - Missing_close_quote_character: { code: 1002, category: DiagnosticCategory.Error, key: "Missing close quote character." }, - Identifier_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Identifier expected." }, - _0_keyword_expected: { code: 1004, category: DiagnosticCategory.Error, key: "'{0}' keyword expected." }, - _0_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "'{0}' expected." }, - Identifier_expected_0_is_a_keyword: { code: 1006, category: DiagnosticCategory.Error, key: "Identifier expected; '{0}' is a keyword." }, - Automatic_semicolon_insertion_not_allowed: { code: 1007, category: DiagnosticCategory.Error, key: "Automatic semicolon insertion not allowed." }, + Unterminated_string_literal: { code: 1002, category: DiagnosticCategory.Error, key: "Unterminated string literal." }, + Identifier_expected: { code: 1003, category: DiagnosticCategory.Error, key: "Identifier expected." }, + _0_expected: { code: 1005, category: DiagnosticCategory.Error, key: "'{0}' expected." }, Trailing_comma_not_allowed: { code: 1009, category: DiagnosticCategory.Error, key: "Trailing comma not allowed." }, Asterisk_Slash_expected: { code: 1010, category: DiagnosticCategory.Error, key: "'*/' expected." }, - public_or_private_modifier_must_precede_static: { code: 1011, category: DiagnosticCategory.Error, key: "'public' or 'private' modifier must precede 'static'." }, Unexpected_token: { code: 1012, category: DiagnosticCategory.Error, key: "Unexpected token." }, Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: DiagnosticCategory.Error, key: "Catch clause parameter cannot have a type annotation." }, A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: DiagnosticCategory.Error, key: "A rest parameter must be last in a parameter list." }, @@ -28,16 +19,16 @@ module ts { An_index_signature_must_have_a_type_annotation: { code: 1021, category: DiagnosticCategory.Error, key: "An index signature must have a type annotation." }, An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: DiagnosticCategory.Error, key: "An index signature parameter must have a type annotation." }, An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: DiagnosticCategory.Error, key: "An index signature parameter type must be 'string' or 'number'." }, - extends_clause_already_seen: { code: 1024, category: DiagnosticCategory.Error, key: "'extends' clause already seen." }, - extends_clause_must_precede_implements_clause: { code: 1025, category: DiagnosticCategory.Error, key: "'extends' clause must precede 'implements' clause." }, - Classes_can_only_extend_a_single_class: { code: 1026, category: DiagnosticCategory.Error, key: "Classes can only extend a single class." }, - implements_clause_already_seen: { code: 1027, category: DiagnosticCategory.Error, key: "'implements' clause already seen." }, + A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: DiagnosticCategory.Error, key: "A class or interface declaration can only have one 'extends' clause." }, + An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: DiagnosticCategory.Error, key: "An 'extends' clause must precede an 'implements' clause." }, + A_class_can_only_extend_a_single_class: { code: 1026, category: DiagnosticCategory.Error, key: "A class can only extend a single class." }, + A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: DiagnosticCategory.Error, key: "A class declaration can only have one 'implements' clause." }, Accessibility_modifier_already_seen: { code: 1028, category: DiagnosticCategory.Error, key: "Accessibility modifier already seen." }, _0_modifier_must_precede_1_modifier: { code: 1029, category: DiagnosticCategory.Error, key: "'{0}' modifier must precede '{1}' modifier." }, _0_modifier_already_seen: { code: 1030, category: DiagnosticCategory.Error, key: "'{0}' modifier already seen." }, _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a class element." }, - Interface_declaration_cannot_have_implements_clause: { code: 1032, category: DiagnosticCategory.Error, key: "Interface declaration cannot have 'implements' clause." }, - super_invocation_cannot_have_type_arguments: { code: 1034, category: DiagnosticCategory.Error, key: "'super' invocation cannot have type arguments." }, + An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: DiagnosticCategory.Error, key: "An interface declaration cannot have an 'implements' clause." }, + super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: DiagnosticCategory.Error, key: "'super' must be followed by an argument list or member access." }, Only_ambient_modules_can_use_quoted_names: { code: 1035, category: DiagnosticCategory.Error, key: "Only ambient modules can use quoted names." }, Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: DiagnosticCategory.Error, key: "Statements are not allowed in ambient contexts." }, A_function_implementation_cannot_be_declared_in_an_ambient_context: { code: 1037, category: DiagnosticCategory.Error, key: "A function implementation cannot be declared in an ambient context." }, @@ -53,23 +44,11 @@ module ts { A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: DiagnosticCategory.Error, key: "A 'set' accessor parameter cannot have an initializer." }, A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: DiagnosticCategory.Error, key: "A 'set' accessor cannot have rest parameter." }, A_get_accessor_cannot_have_parameters: { code: 1054, category: DiagnosticCategory.Error, key: "A 'get' accessor cannot have parameters." }, - Modifiers_cannot_appear_here: { code: 1055, category: DiagnosticCategory.Error, key: "Modifiers cannot appear here." }, Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: DiagnosticCategory.Error, key: "Accessors are only available when targeting ECMAScript 5 and higher." }, - Enum_member_must_have_initializer: { code: -9999999, category: DiagnosticCategory.Error, key: "Enum member must have initializer." }, + Enum_member_must_have_initializer: { code: 1061, category: DiagnosticCategory.Error, key: "Enum member must have initializer." }, An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: DiagnosticCategory.Error, key: "An export assignment cannot be used in an internal module." }, Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: DiagnosticCategory.Error, key: "Ambient enum elements can only have integer literal initializers." }, - module_class_interface_enum_import_or_statement: { code: 1067, category: DiagnosticCategory.NoPrefix, key: "module, class, interface, enum, import or statement" }, Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: DiagnosticCategory.Error, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, - statement: { code: 1069, category: DiagnosticCategory.NoPrefix, key: "statement" }, - case_or_default_clause: { code: 1070, category: DiagnosticCategory.NoPrefix, key: "case or default clause" }, - identifier: { code: 1071, category: DiagnosticCategory.NoPrefix, key: "identifier" }, - call_construct_index_property_or_function_signature: { code: 1072, category: DiagnosticCategory.NoPrefix, key: "call, construct, index, property or function signature" }, - expression: { code: 1073, category: DiagnosticCategory.NoPrefix, key: "expression" }, - type_name: { code: 1074, category: DiagnosticCategory.NoPrefix, key: "type name" }, - property_or_accessor: { code: 1075, category: DiagnosticCategory.NoPrefix, key: "property or accessor" }, - parameter: { code: 1076, category: DiagnosticCategory.NoPrefix, key: "parameter" }, - type: { code: 1077, category: DiagnosticCategory.NoPrefix, key: "type" }, - type_parameter: { code: 1078, category: DiagnosticCategory.NoPrefix, key: "type parameter" }, A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used with an import declaration." }, Invalid_reference_directive_syntax: { code: 1084, category: DiagnosticCategory.Error, key: "Invalid 'reference' directive syntax." }, Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: DiagnosticCategory.Error, key: "Octal literals are not available when targeting ECMAScript 5 and higher." }, @@ -88,13 +67,12 @@ module ts { Invalid_use_of_0_in_strict_mode: { code: 1100, category: DiagnosticCategory.Error, key: "Invalid use of '{0}' in strict mode." }, with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: DiagnosticCategory.Error, key: "'with' statements are not allowed in strict mode." }, delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: DiagnosticCategory.Error, key: "'delete' cannot be called on an identifier in strict mode." }, - Invalid_left_hand_side_in_for_in_statement: { code: 1103, category: DiagnosticCategory.Error, key: "Invalid left-hand side in 'for...in' statement." }, A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: DiagnosticCategory.Error, key: "A 'continue' statement can only be used within an enclosing iteration statement." }, A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: DiagnosticCategory.Error, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, Jump_target_cannot_cross_function_boundary: { code: 1107, category: DiagnosticCategory.Error, key: "Jump target cannot cross function boundary." }, A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: DiagnosticCategory.Error, key: "A 'return' statement can only be used within a function body." }, - Expression_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Expression expected." }, - Type_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Type expected." }, + Expression_expected: { code: 1109, category: DiagnosticCategory.Error, key: "Expression expected." }, + Type_expected: { code: 1110, category: DiagnosticCategory.Error, key: "Type expected." }, A_constructor_implementation_cannot_be_declared_in_an_ambient_context: { code: 1111, category: DiagnosticCategory.Error, key: "A constructor implementation cannot be declared in an ambient context." }, A_class_member_cannot_be_declared_optional: { code: 1112, category: DiagnosticCategory.Error, key: "A class member cannot be declared optional." }, A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: DiagnosticCategory.Error, key: "A 'default' clause cannot appear more than once in a 'switch' statement." }, @@ -107,193 +85,260 @@ module ts { An_export_assignment_cannot_have_modifiers: { code: 1120, category: DiagnosticCategory.Error, key: "An export assignment cannot have modifiers." }, Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: DiagnosticCategory.Error, key: "Octal literals are not allowed in strict mode." }, A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: DiagnosticCategory.Error, key: "A tuple type element list cannot be empty." }, - Duplicate_identifier_0: { code: 2000, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." }, - Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 2018, category: DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, - Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 2019, category: DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, - Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 2020, category: DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, - Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 2021, category: DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, - Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 2022, category: DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, - Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 2023, category: DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." }, - Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 2024, category: DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using private name '{1}'." }, - Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 2025, category: DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using private name '{1}'." }, - Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 2026, category: DiagnosticCategory.Error, key: "Property '{0}' of exported interface has or is using private name '{1}'." }, - Exported_variable_0_has_or_is_using_private_name_1: { code: 2027, category: DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using private name '{1}'." }, - Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2028, category: DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, - Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2029, category: DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, - Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2030, category: DiagnosticCategory.Error, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, - Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 2031, category: DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 2032, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." }, - Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 2033, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, - Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 2034, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, - Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2035, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, - Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2036, category: DiagnosticCategory.Error, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 2037, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, - Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 2038, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." }, - Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 2039, category: DiagnosticCategory.Error, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." }, - Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 2040, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, - Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2041, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2042, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2043, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2044, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2045, category: DiagnosticCategory.Error, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2046, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2047, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2048, category: DiagnosticCategory.Error, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 2049, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 2050, category: DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using private name '{0}'." }, - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 2051, category: DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using private name '{0}'." }, - Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 2052, category: DiagnosticCategory.Error, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." }, - Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 2053, category: DiagnosticCategory.Error, key: "Return type of call signature from exported interface has or is using private name '{0}'." }, - Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 2054, category: DiagnosticCategory.Error, key: "Return type of index signature from exported interface has or is using private name '{0}'." }, - Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 2055, category: DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using private name '{0}'." }, - Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 2056, category: DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using private name '{0}'." }, - Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 2057, category: DiagnosticCategory.Error, key: "Return type of method from exported interface has or is using private name '{0}'." }, - Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 2058, category: DiagnosticCategory.Error, key: "Return type of exported function has or is using private name '{0}'." }, - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 2059, category: DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 2060, category: DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, - Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 2061, category: DiagnosticCategory.Error, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." }, - Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 2062, category: DiagnosticCategory.Error, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." }, - Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 2063, category: DiagnosticCategory.Error, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." }, - Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 2064, category: DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." }, - Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 2065, category: DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." }, - Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 2066, category: DiagnosticCategory.Error, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." }, - Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 2067, category: DiagnosticCategory.Error, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." }, - Import_declaration_0_is_using_private_name_1: { code: 2181, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, - Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2208, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2209, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 2210, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, - Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 2211, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, - Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 2212, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 2213, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, - Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2214, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2215, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2216, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2217, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2218, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 2219, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 2220, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, - Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 2221, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2222, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, - Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2223, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, - new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 2068, category: DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, - Multiple_constructor_implementations_are_not_allowed: { code: 2070, category: DiagnosticCategory.Error, key: "Multiple constructor implementations are not allowed." }, - A_class_may_only_implement_another_class_or_interface: { code: 2074, category: DiagnosticCategory.Error, key: "A class may only implement another class or interface." }, - get_and_set_accessor_must_have_the_same_type: { code: 2096, category: DiagnosticCategory.Error, key: "'get' and 'set' accessor must have the same type." }, - Static_members_cannot_reference_class_type_parameters: { code: 2099, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." }, - super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2102, category: DiagnosticCategory.Error, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, - The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2112, category: DiagnosticCategory.Error, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2113, category: DiagnosticCategory.Error, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2114, category: DiagnosticCategory.Error, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, - The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2115, category: DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, - The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2116, category: DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, - The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2117, category: DiagnosticCategory.Error, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, - The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2118, category: DiagnosticCategory.Error, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, - The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2119, category: DiagnosticCategory.Error, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, - A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2126, category: DiagnosticCategory.Error, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, - Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2127, category: DiagnosticCategory.Error, key: "Getter and setter accessors do not agree in visibility." }, - A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2131, category: DiagnosticCategory.Error, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, - Untyped_function_calls_may_not_accept_type_arguments: { code: 2158, category: DiagnosticCategory.Error, key: "Untyped function calls may not accept type arguments." }, - The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2120, category: DiagnosticCategory.Error, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2121, category: DiagnosticCategory.Error, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, - Setters_cannot_return_a_value: { code: 2122, category: DiagnosticCategory.Error, key: "Setters cannot return a value." }, - Invalid_left_hand_side_of_assignment_expression: { code: 2130, category: DiagnosticCategory.Error, key: "Invalid left-hand side of assignment expression." }, - Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2134, category: DiagnosticCategory.Error, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, - All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2135, category: DiagnosticCategory.Error, key: "All symbols within a 'with' block will be resolved to 'any'." }, - The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2139, category: DiagnosticCategory.Error, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, - Overload_signatures_must_all_be_public_or_private: { code: 2150, category: DiagnosticCategory.Error, key: "Overload signatures must all be public or private." }, - Overload_signatures_must_all_be_exported_or_not_exported: { code: 2151, category: DiagnosticCategory.Error, key: "Overload signatures must all be exported or not exported." }, - Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2152, category: DiagnosticCategory.Error, key: "Overload signatures must all be ambient or non-ambient." }, - Overload_signatures_must_all_be_optional_or_required: { code: 2153, category: DiagnosticCategory.Error, key: "Overload signatures must all be optional or required." }, - this_cannot_be_referenced_in_constructor_arguments: { code: 2155, category: DiagnosticCategory.Error, key: "'this' cannot be referenced in constructor arguments." }, - Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2161, category: DiagnosticCategory.Error, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, - A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2163, category: DiagnosticCategory.Error, key: "A signature with an implementation cannot use a string literal type." }, - Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2189, category: DiagnosticCategory.Error, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, - Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2190, category: DiagnosticCategory.Error, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, - Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2192, category: DiagnosticCategory.Error, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, - super_cannot_be_referenced_in_constructor_arguments: { code: 2193, category: DiagnosticCategory.Error, key: "'super' cannot be referenced in constructor arguments." }, - Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2194, category: DiagnosticCategory.Error, key: "Return type of constructor signature must be assignable to the instance type of the class" }, - Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2196, category: DiagnosticCategory.Error, key: "Ambient external module declaration cannot specify relative module name." }, - Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2197, category: DiagnosticCategory.Error, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, - Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2200, category: DiagnosticCategory.Error, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, - Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2205, category: DiagnosticCategory.Error, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, - Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2206, category: DiagnosticCategory.Error, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, - Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2207, category: DiagnosticCategory.Error, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, - Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2224, category: DiagnosticCategory.Error, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, - Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2225, category: DiagnosticCategory.Error, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, - Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2229, category: DiagnosticCategory.Error, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, - Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2230, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, - Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2231, category: DiagnosticCategory.Error, key: "Parameter '{0}' cannot be referenced in its initializer." }, - Duplicate_string_index_signature: { code: 2232, category: DiagnosticCategory.Error, key: "Duplicate string index signature." }, - Duplicate_number_index_signature: { code: 2233, category: DiagnosticCategory.Error, key: "Duplicate number index signature." }, - All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2234, category: DiagnosticCategory.Error, key: "All declarations of an interface must have identical type parameters." }, - Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2235, category: DiagnosticCategory.Error, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, - Function_implementation_name_must_be_0: { code: 2239, category: DiagnosticCategory.Error, key: "Function implementation name must be '{0}'." }, - Constructor_implementation_is_missing: { code: 2240, category: DiagnosticCategory.Error, key: "Constructor implementation is missing." }, - An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2245, category: DiagnosticCategory.Error, key: "An export assignment cannot be used in a module with other exported elements." }, - A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2246, category: DiagnosticCategory.Error, key: "A parameter property is only allowed in a constructor implementation." }, - Function_overload_must_be_static: { code: 2247, category: DiagnosticCategory.Error, key: "Function overload must be static." }, - Function_overload_must_not_be_static: { code: 2248, category: DiagnosticCategory.Error, key: "Function overload must not be static." }, - Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 2249, category: DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 2250, category: DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 2251, category: DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." }, - Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 2252, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 2253, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 2254, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 2255, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." }, - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 2256, category: DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 2257, category: DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 2258, category: DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 2259, category: DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 2260, category: DiagnosticCategory.Error, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." }, - Circular_definition_of_import_alias_0: { code: 3000, category: DiagnosticCategory.Error, key: "Circular definition of import alias '{0}'." }, - Cannot_find_name_0: { code: 3001, category: DiagnosticCategory.Error, key: "Cannot find name '{0}'." }, - Module_0_has_no_exported_member_1: { code: 3002, category: DiagnosticCategory.Error, key: "Module '{0}' has no exported member '{1}'." }, - Cannot_find_external_module_0: { code: 3003, category: DiagnosticCategory.Error, key: "Cannot find external module '{0}'." }, - A_module_cannot_have_more_than_one_export_assignment: { code: 3004, category: DiagnosticCategory.Error, key: "A module cannot have more than one export assignment." }, - Type_0_recursively_references_itself_as_a_base_type: { code: 3005, category: DiagnosticCategory.Error, key: "Type '{0}' recursively references itself as a base type." }, - A_class_may_only_extend_another_class: { code: 3006, category: DiagnosticCategory.Error, key: "A class may only extend another class." }, - An_interface_may_only_extend_a_class_or_another_interface: { code: 3007, category: DiagnosticCategory.Error, key: "An interface may only extend a class or another interface." }, - Generic_type_0_requires_1_type_argument_s: { code: 3008, category: DiagnosticCategory.Error, key: "Generic type '{0}' requires {1} type argument(s)." }, - Type_0_is_not_generic: { code: 3009, category: DiagnosticCategory.Error, key: "Type '{0}' is not generic." }, - Cannot_find_global_type_0: { code: 3010, category: DiagnosticCategory.Error, key: "Cannot find global type '{0}'." }, - Global_type_0_must_be_a_class_or_interface_type: { code: 3011, category: DiagnosticCategory.Error, key: "Global type '{0}' must be a class or interface type." }, - Global_type_0_must_have_1_type_parameter_s: { code: 3012, category: DiagnosticCategory.Error, key: "Global type '{0}' must have {1} type parameter(s)." }, - this_cannot_be_referenced_in_a_module_body: { code: 3013, category: DiagnosticCategory.Error, key: "'this' cannot be referenced in a module body." }, - this_cannot_be_referenced_in_a_static_property_initializer: { code: 3014, category: DiagnosticCategory.Error, key: "'this' cannot be referenced in a static property initializer." }, - this_cannot_be_referenced_in_current_location: { code: -9999999, category: DiagnosticCategory.Error, key: "'this' cannot be referenced in current location." }, - super_can_only_be_referenced_in_a_derived_class: { code: 3015, category: DiagnosticCategory.Error, key: "'super' can only be referenced in a derived class." }, - Property_0_does_not_exist_on_type_1: { code: 3017, category: DiagnosticCategory.Error, key: "Property '{0}' does not exist on type '{1}'." }, - An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 3018, category: DiagnosticCategory.Error, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, - Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 3019, category: DiagnosticCategory.Error, key: "Type '{0}' does not satisfy the constraint '{1}':" }, - Type_0_does_not_satisfy_the_constraint_1: { code: 3019, category: DiagnosticCategory.Error, key: "Type '{0}' does not satisfy the constraint '{1}'." }, - Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 3020, category: DiagnosticCategory.Error, key: "Supplied parameters do not match any signature of call target." }, - Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 3021, category: DiagnosticCategory.Error, key: "Cannot invoke an expression whose type lacks a call signature." }, - Only_a_void_function_can_be_called_with_the_new_keyword: { code: 3022, category: DiagnosticCategory.Error, key: "Only a void function can be called with the 'new' keyword." }, - Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 3023, category: DiagnosticCategory.Error, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, - Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 3024, category: DiagnosticCategory.Error, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, - Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 3024, category: DiagnosticCategory.Error, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, - No_best_common_type_exists_among_return_expressions: { code: 3027, category: DiagnosticCategory.Error, key: "No best common type exists among return expressions." }, - Operator_0_cannot_be_applied_to_types_1_and_2: { code: 3028, category: DiagnosticCategory.Error, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, - No_best_common_type_exists_between_0_and_1: { code: 3029, category: DiagnosticCategory.Error, key: "No best common type exists between '{0}' and '{1}'." }, - No_best_common_type_exists_between_0_1_and_2: { code: 3030, category: DiagnosticCategory.Error, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, - A_rest_parameter_must_be_of_an_array_type: { code: 3031, category: DiagnosticCategory.Error, key: "A rest parameter must be of an array type." }, - A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 3032, category: DiagnosticCategory.Error, key: "A parameter initializer is only allowed in a function or constructor implementation." }, - Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 3033, category: DiagnosticCategory.Error, key: "Specialized overload signature is not assignable to any non-specialized signature." }, - Duplicate_function_implementation: { code: 3034, category: DiagnosticCategory.Error, key: "Duplicate function implementation." }, - Overload_signature_is_not_compatible_with_function_implementation: { code: 3035, category: DiagnosticCategory.Error, key: "Overload signature is not compatible with function implementation." }, - Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 3036, category: DiagnosticCategory.Error, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, - Index_signature_is_missing_in_type_0: { code: 4003, category: DiagnosticCategory.Error, key: "Index signature is missing in type '{0}'." }, - Index_signatures_are_incompatible_Colon: { code: 4004, category: DiagnosticCategory.Error, key: "Index signatures are incompatible:" }, - Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4016, category: DiagnosticCategory.NoPrefix, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4017, category: DiagnosticCategory.NoPrefix, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 4018, category: DiagnosticCategory.NoPrefix, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 4019, category: DiagnosticCategory.NoPrefix, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, - In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 4024, category: DiagnosticCategory.Error, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, - Named_properties_0_of_types_1_and_2_are_not_identical: { code: 4032, category: DiagnosticCategory.NoPrefix, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Variable_declaration_list_cannot_be_empty: { code: 1123, category: DiagnosticCategory.Error, key: "Variable declaration list cannot be empty." }, + Digit_expected: { code: 1124, category: DiagnosticCategory.Error, key: "Digit expected." }, + Hexadecimal_digit_expected: { code: 1125, category: DiagnosticCategory.Error, key: "Hexadecimal digit expected." }, + Unexpected_end_of_text: { code: 1126, category: DiagnosticCategory.Error, key: "Unexpected end of text." }, + Invalid_character: { code: 1127, category: DiagnosticCategory.Error, key: "Invalid character." }, + Declaration_or_statement_expected: { code: 1128, category: DiagnosticCategory.Error, key: "Declaration or statement expected." }, + Statement_expected: { code: 1129, category: DiagnosticCategory.Error, key: "Statement expected." }, + case_or_default_expected: { code: 1130, category: DiagnosticCategory.Error, key: "'case' or 'default' expected." }, + Property_or_signature_expected: { code: 1131, category: DiagnosticCategory.Error, key: "Property or signature expected." }, + Enum_member_expected: { code: 1132, category: DiagnosticCategory.Error, key: "Enum member expected." }, + Type_reference_expected: { code: 1133, category: DiagnosticCategory.Error, key: "Type reference expected." }, + Variable_declaration_expected: { code: 1134, category: DiagnosticCategory.Error, key: "Variable declaration expected." }, + Argument_expression_expected: { code: 1135, category: DiagnosticCategory.Error, key: "Argument expression expected." }, + Property_assignment_expected: { code: 1136, category: DiagnosticCategory.Error, key: "Property assignment expected." }, + Expression_or_comma_expected: { code: 1137, category: DiagnosticCategory.Error, key: "Expression or comma expected." }, + Parameter_declaration_expected: { code: 1138, category: DiagnosticCategory.Error, key: "Parameter declaration expected." }, + Type_parameter_declaration_expected: { code: 1139, category: DiagnosticCategory.Error, key: "Type parameter declaration expected." }, + Type_argument_expected: { code: 1140, category: DiagnosticCategory.Error, key: "Type argument expected." }, + String_literal_expected: { code: 1141, category: DiagnosticCategory.Error, key: "String literal expected." }, + Line_break_not_permitted_here: { code: 1142, category: DiagnosticCategory.Error, key: "Line break not permitted here." }, + catch_or_finally_expected: { code: 1143, category: DiagnosticCategory.Error, key: "'catch' or 'finally' expected." }, + Block_or_expected: { code: 1144, category: DiagnosticCategory.Error, key: "Block or ';' expected." }, + Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: DiagnosticCategory.Error, key: "Modifiers not permitted on index signature members." }, + Declaration_expected: { code: 1146, category: DiagnosticCategory.Error, key: "Declaration expected." }, + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: DiagnosticCategory.Error, key: "Import declarations in an internal module cannot reference an external module." }, + Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: DiagnosticCategory.Error, key: "Cannot compile external modules unless the '--module' flag is provided." }, + Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: DiagnosticCategory.Error, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + Duplicate_identifier_0: { code: 2300, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." }, + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, + Static_members_cannot_reference_class_type_parameters: { code: 2302, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." }, + Circular_definition_of_import_alias_0: { code: 2303, category: DiagnosticCategory.Error, key: "Circular definition of import alias '{0}'." }, + Cannot_find_name_0: { code: 2304, category: DiagnosticCategory.Error, key: "Cannot find name '{0}'." }, + Module_0_has_no_exported_member_1: { code: 2305, category: DiagnosticCategory.Error, key: "Module '{0}' has no exported member '{1}'." }, + File_0_is_not_an_external_module: { code: 2306, category: DiagnosticCategory.Error, key: "File '{0}' is not an external module." }, + Cannot_find_external_module_0: { code: 2307, category: DiagnosticCategory.Error, key: "Cannot find external module '{0}'." }, + A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: DiagnosticCategory.Error, key: "A module cannot have more than one export assignment." }, + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: DiagnosticCategory.Error, key: "An export assignment cannot be used in a module with other exported elements." }, + Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: DiagnosticCategory.Error, key: "Type '{0}' recursively references itself as a base type." }, + A_class_may_only_extend_another_class: { code: 2311, category: DiagnosticCategory.Error, key: "A class may only extend another class." }, + An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: DiagnosticCategory.Error, key: "An interface may only extend a class or another interface." }, + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: DiagnosticCategory.Error, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, + Generic_type_0_requires_1_type_argument_s: { code: 2314, category: DiagnosticCategory.Error, key: "Generic type '{0}' requires {1} type argument(s)." }, + Type_0_is_not_generic: { code: 2315, category: DiagnosticCategory.Error, key: "Type '{0}' is not generic." }, + Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: DiagnosticCategory.Error, key: "Global type '{0}' must be a class or interface type." }, + Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: DiagnosticCategory.Error, key: "Global type '{0}' must have {1} type parameter(s)." }, + Cannot_find_global_type_0: { code: 2318, category: DiagnosticCategory.Error, key: "Cannot find global type '{0}'." }, + Named_properties_0_of_types_1_and_2_are_not_identical: { code: 2319, category: DiagnosticCategory.Error, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2320, category: DiagnosticCategory.Error, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, + Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: DiagnosticCategory.Error, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, + Type_0_is_not_assignable_to_type_1_Colon: { code: 2322, category: DiagnosticCategory.Error, key: "Type '{0}' is not assignable to type '{1}':" }, + Type_0_is_not_assignable_to_type_1: { code: 2323, category: DiagnosticCategory.Error, key: "Type '{0}' is not assignable to type '{1}'." }, + Property_0_is_missing_in_type_1: { code: 2324, category: DiagnosticCategory.Error, key: "Property '{0}' is missing in type '{1}'." }, + Private_property_0_cannot_be_reimplemented: { code: 2325, category: DiagnosticCategory.Error, key: "Private property '{0}' cannot be reimplemented." }, + Types_of_property_0_are_incompatible_Colon: { code: 2326, category: DiagnosticCategory.Error, key: "Types of property '{0}' are incompatible:" }, + Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2327, category: DiagnosticCategory.Error, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, + Types_of_parameters_0_and_1_are_incompatible_Colon: { code: 2328, category: DiagnosticCategory.Error, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, + Index_signature_is_missing_in_type_0: { code: 2329, category: DiagnosticCategory.Error, key: "Index signature is missing in type '{0}'." }, + Index_signatures_are_incompatible_Colon: { code: 2330, category: DiagnosticCategory.Error, key: "Index signatures are incompatible:" }, + this_cannot_be_referenced_in_a_module_body: { code: 2331, category: DiagnosticCategory.Error, key: "'this' cannot be referenced in a module body." }, + this_cannot_be_referenced_in_current_location: { code: 2332, category: DiagnosticCategory.Error, key: "'this' cannot be referenced in current location." }, + this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: DiagnosticCategory.Error, key: "'this' cannot be referenced in constructor arguments." }, + this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: DiagnosticCategory.Error, key: "'this' cannot be referenced in a static property initializer." }, + super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: DiagnosticCategory.Error, key: "'super' can only be referenced in a derived class." }, + super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: DiagnosticCategory.Error, key: "'super' cannot be referenced in constructor arguments." }, + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: DiagnosticCategory.Error, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: DiagnosticCategory.Error, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, + Property_0_does_not_exist_on_type_1: { code: 2339, category: DiagnosticCategory.Error, key: "Property '{0}' does not exist on type '{1}'." }, + Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: DiagnosticCategory.Error, key: "Only public methods of the base class are accessible via the 'super' keyword" }, + Property_0_is_inaccessible: { code: 2341, category: DiagnosticCategory.Error, key: "Property '{0}' is inaccessible." }, + An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 2342, category: DiagnosticCategory.Error, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, + Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 2343, category: DiagnosticCategory.Error, key: "Type '{0}' does not satisfy the constraint '{1}':" }, + Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: DiagnosticCategory.Error, key: "Type '{0}' does not satisfy the constraint '{1}'." }, + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: DiagnosticCategory.Error, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, + Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: DiagnosticCategory.Error, key: "Supplied parameters do not match any signature of call target." }, + Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: DiagnosticCategory.Error, key: "Untyped function calls may not accept type arguments." }, + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: DiagnosticCategory.Error, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: DiagnosticCategory.Error, key: "Cannot invoke an expression whose type lacks a call signature." }, + Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: DiagnosticCategory.Error, key: "Only a void function can be called with the 'new' keyword." }, + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: DiagnosticCategory.Error, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: DiagnosticCategory.Error, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 2353, category: DiagnosticCategory.Error, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, + No_best_common_type_exists_among_return_expressions: { code: 2354, category: DiagnosticCategory.Error, key: "No best common type exists among return expressions." }, + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: DiagnosticCategory.Error, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: DiagnosticCategory.Error, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: DiagnosticCategory.Error, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: DiagnosticCategory.Error, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: DiagnosticCategory.Error, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2360, category: DiagnosticCategory.Error, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: DiagnosticCategory.Error, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: DiagnosticCategory.Error, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: DiagnosticCategory.Error, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: DiagnosticCategory.Error, key: "Invalid left-hand side of assignment expression." }, + Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: DiagnosticCategory.Error, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, + No_best_common_type_exists_between_0_1_and_2: { code: 2366, category: DiagnosticCategory.Error, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, + No_best_common_type_exists_between_0_and_1: { code: 2367, category: DiagnosticCategory.Error, key: "No best common type exists between '{0}' and '{1}'." }, + Type_parameter_name_cannot_be_0: { code: 2368, category: DiagnosticCategory.Error, key: "Type parameter name cannot be '{0}'" }, + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: DiagnosticCategory.Error, key: "A parameter property is only allowed in a constructor implementation." }, + A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: DiagnosticCategory.Error, key: "A rest parameter must be of an array type." }, + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: DiagnosticCategory.Error, key: "A parameter initializer is only allowed in a function or constructor implementation." }, + Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: DiagnosticCategory.Error, key: "Parameter '{0}' cannot be referenced in its initializer." }, + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: DiagnosticCategory.Error, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, + Duplicate_string_index_signature: { code: 2374, category: DiagnosticCategory.Error, key: "Duplicate string index signature." }, + Duplicate_number_index_signature: { code: 2375, category: DiagnosticCategory.Error, key: "Duplicate number index signature." }, + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: DiagnosticCategory.Error, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, + Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: DiagnosticCategory.Error, key: "Constructors for derived classes must contain a 'super' call." }, + A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: DiagnosticCategory.Error, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, + Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: DiagnosticCategory.Error, key: "Getter and setter accessors do not agree in visibility." }, + get_and_set_accessor_must_have_the_same_type: { code: 2380, category: DiagnosticCategory.Error, key: "'get' and 'set' accessor must have the same type." }, + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: DiagnosticCategory.Error, key: "A signature with an implementation cannot use a string literal type." }, + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: DiagnosticCategory.Error, key: "Specialized overload signature is not assignable to any non-specialized signature." }, + Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: DiagnosticCategory.Error, key: "Overload signatures must all be exported or not exported." }, + Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: DiagnosticCategory.Error, key: "Overload signatures must all be ambient or non-ambient." }, + Overload_signatures_must_all_be_public_or_private: { code: 2385, category: DiagnosticCategory.Error, key: "Overload signatures must all be public or private." }, + Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: DiagnosticCategory.Error, key: "Overload signatures must all be optional or required." }, + Function_overload_must_be_static: { code: 2387, category: DiagnosticCategory.Error, key: "Function overload must be static." }, + Function_overload_must_not_be_static: { code: 2388, category: DiagnosticCategory.Error, key: "Function overload must not be static." }, + Function_implementation_name_must_be_0: { code: 2389, category: DiagnosticCategory.Error, key: "Function implementation name must be '{0}'." }, + Constructor_implementation_is_missing: { code: 2390, category: DiagnosticCategory.Error, key: "Constructor implementation is missing." }, + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: DiagnosticCategory.Error, key: "Function implementation is missing or not immediately following the declaration." }, + Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: DiagnosticCategory.Error, key: "Multiple constructor implementations are not allowed." }, + Duplicate_function_implementation: { code: 2393, category: DiagnosticCategory.Error, key: "Duplicate function implementation." }, + Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: DiagnosticCategory.Error, key: "Overload signature is not compatible with function implementation." }, + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: DiagnosticCategory.Error, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: DiagnosticCategory.Error, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, + Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2397, category: DiagnosticCategory.Error, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, + Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2398, category: DiagnosticCategory.Error, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: DiagnosticCategory.Error, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: DiagnosticCategory.Error, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: DiagnosticCategory.Error, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: DiagnosticCategory.Error, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: DiagnosticCategory.Error, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: DiagnosticCategory.Error, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, + Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: DiagnosticCategory.Error, key: "Invalid left-hand side in 'for...in' statement." }, + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: DiagnosticCategory.Error, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, + Setters_cannot_return_a_value: { code: 2408, category: DiagnosticCategory.Error, key: "Setters cannot return a value." }, + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: DiagnosticCategory.Error, key: "Return type of constructor signature must be assignable to the instance type of the class" }, + All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: DiagnosticCategory.Error, key: "All symbols within a 'with' block will be resolved to 'any'." }, + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: DiagnosticCategory.Error, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: DiagnosticCategory.Error, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: DiagnosticCategory.Error, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, + Class_name_cannot_be_0: { code: 2414, category: DiagnosticCategory.Error, key: "Class name cannot be '{0}'" }, + Class_0_incorrectly_extends_base_class_1: { code: 2415, category: DiagnosticCategory.Error, key: "Class '{0}' incorrectly extends base class '{1}'." }, + Class_0_incorrectly_extends_base_class_1_Colon: { code: 2416, category: DiagnosticCategory.Error, key: "Class '{0}' incorrectly extends base class '{1}':" }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: DiagnosticCategory.Error, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: 2418, category: DiagnosticCategory.Error, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: DiagnosticCategory.Error, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, + Class_0_incorrectly_implements_interface_1: { code: 2420, category: DiagnosticCategory.Error, key: "Class '{0}' incorrectly implements interface '{1}'." }, + Class_0_incorrectly_implements_interface_1_Colon: { code: 2421, category: DiagnosticCategory.Error, key: "Class '{0}' incorrectly implements interface '{1}':" }, + A_class_may_only_implement_another_class_or_interface: { code: 2422, category: DiagnosticCategory.Error, key: "A class may only implement another class or interface." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: DiagnosticCategory.Error, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: DiagnosticCategory.Error, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: DiagnosticCategory.Error, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: DiagnosticCategory.Error, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, + Interface_name_cannot_be_0: { code: 2427, category: DiagnosticCategory.Error, key: "Interface name cannot be '{0}'" }, + All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: DiagnosticCategory.Error, key: "All declarations of an interface must have identical type parameters." }, + Interface_0_incorrectly_extends_interface_1_Colon: { code: 2429, category: DiagnosticCategory.Error, key: "Interface '{0}' incorrectly extends interface '{1}':" }, + Interface_0_incorrectly_extends_interface_1: { code: 2430, category: DiagnosticCategory.Error, key: "Interface '{0}' incorrectly extends interface '{1}'." }, + Enum_name_cannot_be_0: { code: 2431, category: DiagnosticCategory.Error, key: "Enum name cannot be '{0}'" }, + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: DiagnosticCategory.Error, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, + A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: DiagnosticCategory.Error, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, + A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: DiagnosticCategory.Error, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, + Ambient_external_modules_cannot_be_nested_in_other_modules: { code: 2435, category: DiagnosticCategory.Error, key: "Ambient external modules cannot be nested in other modules." }, + Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: DiagnosticCategory.Error, key: "Ambient external module declaration cannot specify relative module name." }, + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: DiagnosticCategory.Error, key: "Module '{0}' is hidden by a local declaration with the same name" }, + Import_name_cannot_be_0: { code: 2438, category: DiagnosticCategory.Error, key: "Import name cannot be '{0}'" }, + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: DiagnosticCategory.Error, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, + Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: DiagnosticCategory.Error, key: "Import declaration conflicts with local declaration of '{0}'" }, + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: { code: 2441, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module." }, + Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4003, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4005, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4007, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4009, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4011, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4013, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4015, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4017, category: DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4018, category: DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 4021, category: DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, + Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." }, + Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, + Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using private name '{1}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: DiagnosticCategory.Error, key: "Public static property '{0}' of exported class has or is using private name '{1}'." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: DiagnosticCategory.Error, key: "Public property '{0}' of exported class has or is using private name '{1}'." }, + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: DiagnosticCategory.Error, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: DiagnosticCategory.Error, key: "Property '{0}' of exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: DiagnosticCategory.Error, key: "Return type of public static property getter from exported class has or is using private name '{0}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: DiagnosticCategory.Error, key: "Return type of public property getter from exported class has or is using private name '{0}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: DiagnosticCategory.Error, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: DiagnosticCategory.Error, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: DiagnosticCategory.Error, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: DiagnosticCategory.Error, key: "Return type of call signature from exported interface has or is using private name '{0}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: DiagnosticCategory.Error, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: DiagnosticCategory.Error, key: "Return type of index signature from exported interface has or is using private name '{0}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: DiagnosticCategory.Error, key: "Return type of public static method from exported class has or is using private name '{0}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: DiagnosticCategory.Error, key: "Return type of public method from exported class has or is using private name '{0}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: DiagnosticCategory.Error, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: DiagnosticCategory.Error, key: "Return type of method from exported interface has or is using private name '{0}'." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: DiagnosticCategory.Error, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: DiagnosticCategory.Error, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." }, + Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: DiagnosticCategory.Error, key: "Return type of exported function has or is using private name '{0}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: DiagnosticCategory.Error, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: DiagnosticCategory.Error, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: DiagnosticCategory.Error, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: DiagnosticCategory.Error, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: DiagnosticCategory.Error, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: DiagnosticCategory.Error, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, The_current_host_does_not_support_the_0_option: { code: 5001, category: DiagnosticCategory.Error, key: "The current host does not support the '{0}' option." }, Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: DiagnosticCategory.Error, key: "Cannot find the common subdirectory path for the input files." }, Cannot_read_file_0_Colon_1: { code: 5012, category: DiagnosticCategory.Error, key: "Cannot read file '{0}': {1}" }, - Unsupported_file_encoding: { code: 5013, category: DiagnosticCategory.NoPrefix, key: "Unsupported file encoding." }, + Unsupported_file_encoding: { code: 5013, category: DiagnosticCategory.Error, key: "Unsupported file encoding." }, + Unknown_compiler_option_0: { code: 5023, category: DiagnosticCategory.Error, key: "Unknown compiler option '{0}'." }, Could_not_write_file_0_Colon_1: { code: 5033, category: DiagnosticCategory.Error, key: "Could not write file '{0}': {1}" }, Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: DiagnosticCategory.Error, key: "Option mapRoot cannot be specified without specifying sourcemap option." }, Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: DiagnosticCategory.Error, key: "Option sourceRoot cannot be specified without specifying sourcemap option." }, @@ -304,13 +349,10 @@ module ts { Watch_input_files: { code: 6005, category: DiagnosticCategory.Message, key: "Watch input files." }, Redirect_output_structure_to_the_directory: { code: 6006, category: DiagnosticCategory.Message, key: "Redirect output structure to the directory." }, Do_not_emit_comments_to_output: { code: 6009, category: DiagnosticCategory.Message, key: "Do not emit comments to output." }, - Skip_resolution_and_preprocessing: { code: 6010, category: DiagnosticCategory.Message, key: "Skip resolution and preprocessing." }, Specify_ECMAScript_target_version_Colon_ES3_default_or_ES5: { code: 6015, category: DiagnosticCategory.Message, key: "Specify ECMAScript target version: 'ES3' (default), or 'ES5'" }, Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: DiagnosticCategory.Message, key: "Specify module code generation: 'commonjs' or 'amd'" }, Print_this_message: { code: 6017, category: DiagnosticCategory.Message, key: "Print this message." }, Print_the_compiler_s_version: { code: 6019, category: DiagnosticCategory.Message, key: "Print the compiler's version." }, - Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: { code: 6021, category: DiagnosticCategory.Message, key: "Allow use of deprecated '{0}' keyword when referencing an external module." }, - Specify_locale_for_errors_and_messages_For_example_0_or_1: { code: 6022, category: DiagnosticCategory.Message, key: "Specify locale for errors and messages. For example '{0}' or '{1}'" }, Syntax_Colon_0: { code: 6023, category: DiagnosticCategory.Message, key: "Syntax: {0}" }, options: { code: 6024, category: DiagnosticCategory.Message, key: "options" }, file: { code: 6025, category: DiagnosticCategory.Message, key: "file" }, @@ -318,29 +360,25 @@ module ts { Options_Colon: { code: 6027, category: DiagnosticCategory.Message, key: "Options:" }, Version_0: { code: 6029, category: DiagnosticCategory.Message, key: "Version {0}" }, Insert_command_line_options_and_files_from_a_file: { code: 6030, category: DiagnosticCategory.Message, key: "Insert command line options and files from a file." }, - Use_the_0_flag_to_see_options: { code: 6031, category: DiagnosticCategory.Message, key: "Use the '{0}' flag to see options." }, File_change_detected_Compiling: { code: 6032, category: DiagnosticCategory.Message, key: "File change detected. Compiling..." }, - STRING: { code: 6033, category: DiagnosticCategory.Message, key: "STRING" }, KIND: { code: 6034, category: DiagnosticCategory.Message, key: "KIND" }, FILE: { code: 6035, category: DiagnosticCategory.Message, key: "FILE" }, VERSION: { code: 6036, category: DiagnosticCategory.Message, key: "VERSION" }, LOCATION: { code: 6037, category: DiagnosticCategory.Message, key: "LOCATION" }, DIRECTORY: { code: 6038, category: DiagnosticCategory.Message, key: "DIRECTORY" }, - NUMBER: { code: 6039, category: DiagnosticCategory.Message, key: "NUMBER" }, - Specify_the_codepage_to_use_when_opening_source_files: { code: 6040, category: DiagnosticCategory.Message, key: "Specify the codepage to use when opening source files." }, - Additional_locations_Colon: { code: 6041, category: DiagnosticCategory.Message, key: "Additional locations:" }, Compilation_complete_Watching_for_file_changes: { code: 6042, category: DiagnosticCategory.Message, key: "Compilation complete. Watching for file changes." }, Generates_corresponding_map_file: { code: 6043, category: DiagnosticCategory.Message, key: "Generates corresponding '.map' file." }, Compiler_option_0_expects_an_argument: { code: 6044, category: DiagnosticCategory.Error, key: "Compiler option '{0}' expects an argument." }, Unterminated_quoted_string_in_response_file_0: { code: 6045, category: DiagnosticCategory.Error, key: "Unterminated quoted string in response file '{0}'." }, - Argument_for_module_option_must_be_commonjs_or_amd: { code: 6045, category: DiagnosticCategory.Error, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, - Argument_for_target_option_must_be_es3_or_es5: { code: 6046, category: DiagnosticCategory.Error, key: "Argument for '--target' option must be 'es3' or 'es5'." }, - Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6047, category: DiagnosticCategory.Error, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, - Unsupported_locale_0: { code: 6048, category: DiagnosticCategory.Error, key: "Unsupported locale '{0}'." }, - Unable_to_open_file_0: { code: 6049, category: DiagnosticCategory.Error, key: "Unable to open file '{0}'." }, - Corrupted_locale_file_0: { code: 6050, category: DiagnosticCategory.Error, key: "Corrupted locale file {0}." }, - No_input_files_specified: { code: 6051, category: DiagnosticCategory.Error, key: "No input files specified." }, - Warn_on_expressions_and_declarations_with_an_implied_any_type: { code: 7004, category: DiagnosticCategory.Message, key: "Warn on expressions and declarations with an implied 'any' type." }, + Argument_for_module_option_must_be_commonjs_or_amd: { code: 6046, category: DiagnosticCategory.Error, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, + Argument_for_target_option_must_be_es3_or_es5: { code: 6047, category: DiagnosticCategory.Error, key: "Argument for '--target' option must be 'es3' or 'es5'." }, + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: DiagnosticCategory.Error, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, + Unsupported_locale_0: { code: 6049, category: DiagnosticCategory.Error, key: "Unsupported locale '{0}'." }, + Unable_to_open_file_0: { code: 6050, category: DiagnosticCategory.Error, key: "Unable to open file '{0}'." }, + Corrupted_locale_file_0: { code: 6051, category: DiagnosticCategory.Error, key: "Corrupted locale file {0}." }, + Warn_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: DiagnosticCategory.Message, key: "Warn on expressions and declarations with an implied 'any' type." }, + File_0_not_found: { code: 6053, category: DiagnosticCategory.Error, key: "File '{0}' not found." }, + File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: DiagnosticCategory.Error, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: DiagnosticCategory.Error, key: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: DiagnosticCategory.Error, key: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: DiagnosticCategory.Error, key: "Member '{0}' implicitly has an '{1}' type." }, @@ -348,83 +386,11 @@ module ts { _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: DiagnosticCategory.Error, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: DiagnosticCategory.Error, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: DiagnosticCategory.Error, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Lambda_function_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7014, category: DiagnosticCategory.Error, key: "Lambda function, which lacks return-type annotation, implicitly has an '{0}' return type." }, - Array_literal_implicitly_has_an_0_type: { code: 7015, category: DiagnosticCategory.Error, key: "Array literal implicitly has an '{0}' type." }, Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: DiagnosticCategory.Error, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: DiagnosticCategory.Error, key: "Index signature of object type implicitly has an 'any' type." }, Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: DiagnosticCategory.Error, key: "Object literal's property '{0}' implicitly has an '{1}' type." }, Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: DiagnosticCategory.Error, key: "Rest parameter '{0}' implicitly has an 'any[]' type." }, Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: DiagnosticCategory.Error, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Variable_declaration_list_cannot_be_empty: { code: -9999999, category: DiagnosticCategory.Error, key: "Variable declaration list cannot be empty." }, - Digit_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Digit expected." }, - Hexadecimal_digit_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Hexadecimal digit expected." }, - Unexpected_end_of_text: { code: -9999999, category: DiagnosticCategory.Error, key: "Unexpected end of text." }, - Unterminated_string_constant: { code: -9999999, category: DiagnosticCategory.Error, key: "Unterminated string constant." }, - Invalid_character: { code: -9999999, category: DiagnosticCategory.Error, key: "Invalid character." }, - Declaration_or_statement_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Declaration or statement expected." }, - Statement_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Statement expected." }, - case_or_default_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "'case' or 'default' expected." }, - Property_or_signature_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Property or signature expected." }, - Enum_member_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Enum member expected." }, - Type_reference_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Type reference expected." }, - Variable_declaration_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Variable declaration expected." }, - Argument_expression_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Argument expression expected." }, - Property_assignment_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Property assignment expected." }, - Expression_or_comma_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Expression or comma expected." }, - Parameter_declaration_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Parameter declaration expected." }, - Type_parameter_declaration_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Type parameter declaration expected." }, - Type_argument_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Type argument expected." }, - String_literal_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "String literal expected." }, - not_preceded_by_parameter_list: { code: -9999999, category: DiagnosticCategory.Error, key: "'=>' not preceded by parameter list." }, - Invalid_assignment_target: { code: -9999999, category: DiagnosticCategory.Error, key: "Invalid assignment target." }, - super_must_be_followed_by_argument_list_or_member_access: { code: -9999999, category: DiagnosticCategory.Error, key: "'super' must be followed by argument list or member access." }, - Line_break_not_permitted_here: { code: -9999999, category: DiagnosticCategory.Error, key: "Line break not permitted here." }, - catch_or_finally_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "'catch' or 'finally' expected." }, - Block_or_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Block or ';' expected." }, - Modifiers_not_permitted_on_index_signature_members: { code: -9999999, category: DiagnosticCategory.Error, key: "Modifiers not permitted on index signature members." }, - Class_member_declaration_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Class member declaration expected." }, - Declaration_expected: { code: -9999999, category: DiagnosticCategory.Error, key: "Declaration expected." }, - Invalid_reference_comment: { code: -9999999, category: DiagnosticCategory.Error, key: "Invalid reference comment." }, - File_0_is_not_an_external_module: { code: -9999999, category: DiagnosticCategory.Error, key: "File '{0}' is not an external module." }, - Excessive_stack_depth_comparing_types_0_and_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, - Type_0_is_not_assignable_to_type_1_Colon: { code: -9999999, category: DiagnosticCategory.Error, key: "Type '{0}' is not assignable to type '{1}':" }, - Type_0_is_not_assignable_to_type_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Type '{0}' is not assignable to type '{1}'." }, - Property_0_is_missing_in_type_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Property '{0}' is missing in type '{1}'." }, - Private_property_0_cannot_be_reimplemented: { code: -9999999, category: DiagnosticCategory.Error, key: "Private property '{0}' cannot be reimplemented." }, - Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2012, category: DiagnosticCategory.Error, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, - Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: -9999999, category: DiagnosticCategory.Error, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, - Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: -9999999, category: DiagnosticCategory.Error, key: "Only public methods of the base class are accessible via the 'super' keyword" }, - A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: -9999999, category: DiagnosticCategory.Error, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, - Constructors_for_derived_classes_must_contain_a_super_call: { code: -9999999, category: DiagnosticCategory.Error, key: "Constructors for derived classes must contain a 'super' call." }, - Import_name_cannot_be_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Import name cannot be '{0}'" }, - Type_parameter_name_cannot_be_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Type parameter name cannot be '{0}'" }, - Class_name_cannot_be_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Class name cannot be '{0}'" }, - Interface_name_cannot_be_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Interface name cannot be '{0}'" }, - Enum_name_cannot_be_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Enum name cannot be '{0}'" }, - Types_of_property_0_are_incompatible_Colon: { code: -9999999, category: DiagnosticCategory.Error, key: "Types of property '{0}' are incompatible:" }, - Types_of_parameters_0_and_1_are_incompatible_Colon: { code: -9999999, category: DiagnosticCategory.Error, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, - Unknown_identifier_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Unknown identifier '{0}'." }, - Property_0_is_inaccessible: { code: -9999999, category: DiagnosticCategory.Error, key: "Property '{0}' is inaccessible." }, - Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: -9999999, category: DiagnosticCategory.Error, key: "Function implementation is missing or not immediately following the declaration." }, - Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: -9999999, category: DiagnosticCategory.Error, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, - Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: -9999999, category: DiagnosticCategory.Error, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, - Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, - Class_0_incorrectly_extends_base_class_1_Colon: { code: -9999999, category: DiagnosticCategory.Error, key: "Class '{0}' incorrectly extends base class '{1}':" }, - Class_0_incorrectly_extends_base_class_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Class '{0}' incorrectly extends base class '{1}'." }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: -9999999, category: DiagnosticCategory.Error, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, - Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, - Class_0_incorrectly_implements_interface_1_Colon: { code: -9999999, category: DiagnosticCategory.Error, key: "Class '{0}' incorrectly implements interface '{1}':" }, - Class_0_incorrectly_implements_interface_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Class '{0}' incorrectly implements interface '{1}'." }, - Interface_0_incorrectly_extends_interface_1_Colon: { code: -9999999, category: DiagnosticCategory.Error, key: "Interface '{0}' incorrectly extends interface '{1}':" }, - Interface_0_incorrectly_extends_interface_1: { code: -9999999, category: DiagnosticCategory.Error, key: "Interface '{0}' incorrectly extends interface '{1}'." }, - Ambient_external_modules_cannot_be_nested_in_other_modules: { code: -9999999, category: DiagnosticCategory.Error, key: "Ambient external modules cannot be nested in other modules." }, - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: -9999999, category: DiagnosticCategory.Error, key: "Import declarations in an internal module cannot reference an external module." }, - A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: DiagnosticCategory.Error, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, - A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: DiagnosticCategory.Error, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, - Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: -9999999, category: DiagnosticCategory.Error, key: "Cannot compile external modules unless the '--module' flag is provided." }, - Import_declaration_conflicts_with_local_declaration_of_0: { code: -9999999, category: DiagnosticCategory.Error, key: "Import declaration conflicts with local declaration of '{0}'" }, - Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: -9999999, category: DiagnosticCategory.Error, key: "Module '{0}' is hidden by a local declaration with the same name" }, - Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: -9999999, category: DiagnosticCategory.Error, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, + You_cannot_rename_this_element: { code: 8000, category: DiagnosticCategory.Error, key: "You cannot rename this element." }, }; } \ No newline at end of file diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 9e4bf8c09e3..97490648774 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1,26 +1,5 @@ { - "Unknown compiler option '{0}'.": { - "category": "Error", - "code": 6001 - }, - "File '{0}' not found.": { - "category": "Error", - "code": 6002 - }, - "File '{0}' must have extension '.ts' or '.d.ts'.": { - "category": "Error", - "code": 6003 - }, - - "Unrecognized escape sequence.": { - "category": "Error", - "code": 1000 - }, - "Unexpected character {0}.": { - "category": "Error", - "code": 1001 - }, - "Missing close quote character.": { + "Unterminated string literal.": { "category": "Error", "code": 1002 }, @@ -28,22 +7,10 @@ "category": "Error", "code": 1003 }, - "'{0}' keyword expected.": { - "category": "Error", - "code": 1004 - }, "'{0}' expected.": { "category": "Error", "code": 1005 }, - "Identifier expected; '{0}' is a keyword.": { - "category": "Error", - "code": 1006 - }, - "Automatic semicolon insertion not allowed.": { - "category": "Error", - "code": 1007 - }, "Trailing comma not allowed.": { "category": "Error", "code": 1009 @@ -52,10 +19,6 @@ "category": "Error", "code": 1010 }, - "'public' or 'private' modifier must precede 'static'.": { - "category": "Error", - "code": 1011 - }, "Unexpected token.": { "category": "Error", "code": 1012 @@ -104,19 +67,19 @@ "category": "Error", "code": 1023 }, - "'extends' clause already seen.": { + "A class or interface declaration can only have one 'extends' clause.": { "category": "Error", "code": 1024 }, - "'extends' clause must precede 'implements' clause.": { + "An 'extends' clause must precede an 'implements' clause.": { "category": "Error", "code": 1025 }, - "Classes can only extend a single class.": { + "A class can only extend a single class.": { "category": "Error", "code": 1026 }, - "'implements' clause already seen.": { + "A class declaration can only have one 'implements' clause.": { "category": "Error", "code": 1027 }, @@ -136,11 +99,11 @@ "category": "Error", "code": 1031 }, - "Interface declaration cannot have 'implements' clause.": { + "An interface declaration cannot have an 'implements' clause.": { "category": "Error", "code": 1032 }, - "'super' invocation cannot have type arguments.": { + "'super' must be followed by an argument list or member access.": { "category": "Error", "code": 1034 }, @@ -204,10 +167,6 @@ "category": "Error", "code": 1054 }, - "Modifiers cannot appear here.": { - "category": "Error", - "code": 1055 - }, "Accessors are only available when targeting ECMAScript 5 and higher.": { "category": "Error", "code": 1056 @@ -224,54 +183,10 @@ "category": "Error", "code": 1066 }, - "module, class, interface, enum, import or statement": { - "category": "NoPrefix", - "code": 1067 - }, "Unexpected token. A constructor, method, accessor, or property was expected." : { "category": "Error", "code": 1068 }, - "statement": { - "category": "NoPrefix", - "code": 1069 - }, - "case or default clause": { - "category": "NoPrefix", - "code": 1070 - }, - "identifier": { - "category": "NoPrefix", - "code": 1071 - }, - "call, construct, index, property or function signature": { - "category": "NoPrefix", - "code": 1072 - }, - "expression": { - "category": "NoPrefix", - "code": 1073 - }, - "type name": { - "category": "NoPrefix", - "code": 1074 - }, - "property or accessor": { - "category": "NoPrefix", - "code": 1075 - }, - "parameter": { - "category": "NoPrefix", - "code": 1076 - }, - "type": { - "category": "NoPrefix", - "code": 1077 - }, - "type parameter": { - "category": "NoPrefix", - "code": 1078 - }, "A 'declare' modifier cannot be used with an import declaration.": { "category": "Error", "code": 1079 @@ -344,10 +259,6 @@ "category": "Error", "code": 1102 }, - "Invalid left-hand side in 'for...in' statement.": { - "category": "Error", - "code": 1103 - }, "A 'continue' statement can only be used within an enclosing iteration statement.": { "category": "Error", "code": 1104 @@ -420,740 +331,1007 @@ "category": "Error", "code": 1122 }, - "Duplicate identifier '{0}'.": { + "Variable declaration list cannot be empty.": { "category": "Error", - "code": 2000 + "code": 1123 }, - "Extends clause of exported class '{0}' has or is using private name '{1}'.": { + "Digit expected.": { "category": "Error", - "code": 2018 + "code": 1124 }, - "Implements clause of exported class '{0}' has or is using private name '{1}'.": { + "Hexadecimal digit expected.": { "category": "Error", - "code": 2019 + "code": 1125 }, - "Extends clause of exported interface '{0}' has or is using private name '{1}'.": { + "Unexpected end of text.": { "category": "Error", - "code": 2020 + "code": 1126 }, - "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'.": { + "Invalid character.": { "category": "Error", - "code": 2021 + "code": 1127 }, - "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'.": { + "Declaration or statement expected.": { "category": "Error", - "code": 2022 + "code": 1128 }, - "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'.": { + "Statement expected.": { "category": "Error", - "code": 2023 + "code": 1129 }, - "Public static property '{0}' of exported class has or is using private name '{1}'.": { + "'case' or 'default' expected.": { "category": "Error", - "code": 2024 + "code": 1130 }, - "Public property '{0}' of exported class has or is using private name '{1}'.": { + "Property or signature expected.": { "category": "Error", - "code": 2025 + "code": 1131 }, - "Property '{0}' of exported interface has or is using private name '{1}'.": { + "Enum member expected.": { "category": "Error", - "code": 2026 + "code": 1132 }, - "Exported variable '{0}' has or is using private name '{1}'.": { + "Type reference expected.": { "category": "Error", - "code": 2027 + "code": 1133 }, - "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "Variable declaration expected.": { "category": "Error", - "code": 2028 + "code": 1134 }, - "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "Argument expression expected.": { "category": "Error", - "code": 2029 + "code": 1135 }, - "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { + "Property assignment expected.": { "category": "Error", - "code": 2030 + "code": 1136 }, - "Exported variable '{0}' has or is using name '{1}' from private module '{2}'.": { + "Expression or comma expected.": { "category": "Error", - "code": 2031 + "code": 1137 }, - "Parameter '{0}' of constructor from exported class has or is using private name '{1}'.": { + "Parameter declaration expected.": { "category": "Error", - "code": 2032 + "code": 1138 }, - "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'.": { + "Type parameter declaration expected.": { "category": "Error", - "code": 2033 + "code": 1139 }, - "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'.": { + "Type argument expected.": { "category": "Error", - "code": 2034 + "code": 1140 }, - "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { + "String literal expected.": { "category": "Error", - "code": 2035 + "code": 1141 }, - "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { + "Line break not permitted here.": { "category": "Error", - "code": 2036 + "code": 1142 }, - "Parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { + "'catch' or 'finally' expected.": { "category": "Error", - "code": 2037 + "code": 1143 }, - "Parameter '{0}' of public method from exported class has or is using private name '{1}'.": { + "Block or ';' expected.": { "category": "Error", - "code": 2038 + "code": 1144 }, - "Parameter '{0}' of method from exported interface has or is using private name '{1}'.": { + "Modifiers not permitted on index signature members.": { "category": "Error", - "code": 2039 + "code": 1145 }, - "Parameter '{0}' of exported function has or is using private name '{1}'.": { + "Declaration expected.": { "category": "Error", - "code": 2040 + "code": 1146 }, - "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'.": { + "Import declarations in an internal module cannot reference an external module.": { "category": "Error", - "code": 2041 + "code": 1147 }, - "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'.": { + "Cannot compile external modules unless the '--module' flag is provided.": { "category": "Error", - "code": 2042 + "code": 1148 }, - "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'.": { + "Filename '{0}' differs from already included filename '{1}' only in casing": { "category": "Error", - "code": 2043 - }, - "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2044 - }, - "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2045 - }, - "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2046 - }, - "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2047 - }, - "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2048 - }, - "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2049 - }, - "Return type of public static property getter from exported class has or is using private name '{0}'.": { - "category": "Error", - "code": 2050 - }, - "Return type of public property getter from exported class has or is using private name '{0}'.": { - "category": "Error", - "code": 2051 - }, - "Return type of constructor signature from exported interface has or is using private name '{0}'.": { - "category": "Error", - "code": 2052 - }, - "Return type of call signature from exported interface has or is using private name '{0}'.": { - "category": "Error", - "code": 2053 - }, - "Return type of index signature from exported interface has or is using private name '{0}'.": { - "category": "Error", - "code": 2054 - }, - "Return type of public static method from exported class has or is using private name '{0}'.": { - "category": "Error", - "code": 2055 - }, - "Return type of public method from exported class has or is using private name '{0}'.": { - "category": "Error", - "code": 2056 - }, - "Return type of method from exported interface has or is using private name '{0}'.": { - "category": "Error", - "code": 2057 - }, - "Return type of exported function has or is using private name '{0}'.": { - "category": "Error", - "code": 2058 - }, - "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2059 - }, - "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2060 - }, - "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2061 - }, - "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2062 - }, - "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2063 - }, - "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2064 - }, - "Return type of public method from exported class has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2065 - }, - "Return type of method from exported interface has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2066 - }, - "Return type of exported function has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 2067 - }, - "Import declaration '{0}' is using private name '{1}'.": { - "category": "Error", - "code": 2181 - }, - "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 2208 - }, - "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 2209 - }, - "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 2210 - }, - "Type parameter '{0}' of public method from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 2211 - }, - "Type parameter '{0}' of method from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 2212 - }, - "Type parameter '{0}' of exported function has or is using private name '{1}'.": { - "category": "Error", - "code": 2213 - }, - "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2214 - }, - "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2215 - }, - "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2216 - }, - "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2217 - }, - "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2218 - }, - "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2219 - }, - "Type parameter '{0}' of exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 2220 - }, - "Type parameter '{0}' of exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 2221 - }, - "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2222 - }, - "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 2223 + "code": 1149 }, "'new T[]' cannot be used to create an array. Use 'new Array()' instead.": { + "category": "Error", + "code": 1150 + }, + + "Duplicate identifier '{0}'.": { "category": "Error", - "code": 2068 - }, - "Multiple constructor implementations are not allowed.": { - "category": "Error", - "code": 2070 - }, - "A class may only implement another class or interface.": { - "category": "Error", - "code": 2074 - }, - "'get' and 'set' accessor must have the same type.": { - "category": "Error", - "code": 2096 - }, - "Static members cannot reference class type parameters.": { - "category": "Error", - "code": 2099 - }, - "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class": { - "category": "Error", - "code": 2102 - }, - "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { - "category": "Error", - "code": 2112 - }, - "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { - "category": "Error", - "code": 2113 - }, - "An arithmetic operand must be of type 'any', 'number' or an enum type.": { - "category": "Error", - "code": 2114 - }, - "The left-hand side of a 'for...in' statement cannot use a type annotation.": { - "category": "Error", - "code": 2115 - }, - "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'.": { - "category": "Error", - "code": 2116 - }, - "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": { - "category": "Error", - "code": 2117 - }, - "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": { - "category": "Error", - "code": 2118 - }, - "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter": { - "category": "Error", - "code": 2119 - }, - "A 'get' accessor must return a value or consist of a single 'throw' statement.": { - "category": "Error", - "code": 2126 - }, - "Getter and setter accessors do not agree in visibility.": { - "category": "Error", - "code": 2127 - }, - "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement.": { - "category": "Error", - "code": 2131 - }, - "Untyped function calls may not accept type arguments.": { - "category": "Error", - "code": 2158 - }, - "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { - "category": "Error", - "code": 2120 - }, - "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": { - "category": "Error", - "code": 2121 - }, - "Setters cannot return a value.": { - "category": "Error", - "code": 2122 - }, - "Invalid left-hand side of assignment expression.": { - "category": "Error", - "code": 2130 - }, - "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { - "category": "Error", - "code": 2134 - }, - "All symbols within a 'with' block will be resolved to 'any'.": { - "category": "Error", - "code": 2135 - }, - "The operand of an increment or decrement operator must be a variable, property or indexer.": { - "category": "Error", - "code": 2139 - }, - "Overload signatures must all be public or private.": { - "category": "Error", - "code": 2150 - }, - "Overload signatures must all be exported or not exported.": { - "category": "Error", - "code": 2151 - }, - "Overload signatures must all be ambient or non-ambient.": { - "category": "Error", - "code": 2152 - }, - "Overload signatures must all be optional or required.": { - "category": "Error", - "code": 2153 - }, - "'this' cannot be referenced in constructor arguments.": { - "category": "Error", - "code": 2155 - }, - "Value of type '{0}' is not callable. Did you mean to include 'new'?": { - "category": "Error", - "code": 2161 - }, - "A signature with an implementation cannot use a string literal type.": { - "category": "Error", - "code": 2163 - }, - "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':": { - "category": "Error", - "code": 2189 - }, - "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": { - "category": "Error", - "code": 2190 - }, - "Individual declarations in merged declaration {0} must be all exported or all local.": { - "category": "Error", - "code": 2192 - }, - "'super' cannot be referenced in constructor arguments.":{ - "category": "Error", - "code": 2193 - }, - "Return type of constructor signature must be assignable to the instance type of the class":{ - "category": "Error", - "code": 2194 - }, - "Ambient external module declaration cannot specify relative module name.":{ - "category": "Error", - "code": 2196 - }, - "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": { - "category": "Error", - "code": 2197 - }, - "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { - "category": "Error", - "code": 2200 - }, - "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": { - "category": "Error", - "code": 2205 - }, - "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { - "category": "Error", - "code": 2206 - }, - "Expression resolves to '_super' that compiler uses to capture base class reference.": { - "category": "Error", - "code": 2207 - }, - "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": { - "category": "Error", - "code": 2224 - }, - "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { - "category": "Error", - "code": 2225 - }, - "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": { - "category": "Error", - "code": 2229 + "code": 2300 }, "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { "category": "Error", - "code": 2230 + "code": 2301 }, - "Parameter '{0}' cannot be referenced in its initializer.": { + "Static members cannot reference class type parameters.": { "category": "Error", - "code": 2231 - }, - "Duplicate string index signature.": { - "category": "Error", - "code": 2232 - }, - "Duplicate number index signature.": { - "category": "Error", - "code": 2233 - }, - "All declarations of an interface must have identical type parameters.": { - "category": "Error", - "code": 2234 - }, - "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": { - "category": "Error", - "code": 2235 - }, - "Function implementation name must be '{0}'.": { - "category": "Error", - "code": 2239 - }, - "Constructor implementation is missing.": { - "category": "Error", - "code": 2240 - }, - "An export assignment cannot be used in a module with other exported elements.": { - "category": "Error", - "code": 2245 - }, - "A parameter property is only allowed in a constructor implementation.": { - "category": "Error", - "code": 2246 - }, - "Function overload must be static.": { - "category": "Error", - "code": 2247 - }, - "Function overload must not be static.": { - "category": "Error", - "code": 2248 - }, - "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 2249 - }, - "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 2250 - }, - "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 2251 - }, - "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 2252 - }, - "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 2253 - }, - "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 2254 - }, - "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 2255 - }, - "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named.": { - "category": "Error", - "code": 2256 - }, - "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named.": { - "category": "Error", - "code": 2257 - }, - "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named.": { - "category": "Error", - "code": 2258 - }, - "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named.": { - "category": "Error", - "code": 2259 - }, - "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named.": { - "category": "Error", - "code": 2260 + "code": 2302 }, "Circular definition of import alias '{0}'.": { "category": "Error", - "code": 3000 + "code": 2303 }, "Cannot find name '{0}'.": { "category": "Error", - "code": 3001 + "code": 2304 }, "Module '{0}' has no exported member '{1}'.": { "category": "Error", - "code": 3002 + "code": 2305 + }, + "File '{0}' is not an external module.": { + "category": "Error", + "code": 2306 }, "Cannot find external module '{0}'.": { "category": "Error", - "code": 3003 + "code": 2307 }, "A module cannot have more than one export assignment.": { "category": "Error", - "code": 3004 + "code": 2308 + }, + "An export assignment cannot be used in a module with other exported elements.": { + "category": "Error", + "code": 2309 }, "Type '{0}' recursively references itself as a base type.": { "category": "Error", - "code": 3005 + "code": 2310 }, "A class may only extend another class.": { "category": "Error", - "code": 3006 + "code": 2311 }, "An interface may only extend a class or another interface.": { "category": "Error", - "code": 3007 + "code": 2312 + }, + "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": { + "category": "Error", + "code": 2313 }, "Generic type '{0}' requires {1} type argument(s).": { "category": "Error", - "code": 3008 + "code": 2314 }, "Type '{0}' is not generic.": { "category": "Error", - "code": 3009 - }, - "Cannot find global type '{0}'.": { - "category": "Error", - "code": 3010 + "code": 2315 }, "Global type '{0}' must be a class or interface type.": { "category": "Error", - "code": 3011 + "code": 2316 }, "Global type '{0}' must have {1} type parameter(s).": { "category": "Error", - "code": 3012 + "code": 2317 }, - "'this' cannot be referenced in a module body.": { + "Cannot find global type '{0}'.": { "category": "Error", - "code": 3013 + "code": 2318 }, - "'this' cannot be referenced in a static property initializer.": { + "Named properties '{0}' of types '{1}' and '{2}' are not identical.": { "category": "Error", - "code": 3014 + "code": 2319 }, - "'this' cannot be referenced in current location.": { + "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':": { "category": "Error", - "code": -9999999 + "code": 2320 }, - "'super' can only be referenced in a derived class.": { + "Excessive stack depth comparing types '{0}' and '{1}'.": { "category": "Error", - "code": 3015 + "code": 2321 }, - "Property '{0}' does not exist on type '{1}'.": { + "Type '{0}' is not assignable to type '{1}':": { "category": "Error", - "code": 3017 + "code": 2322 }, - "An index expression argument must be of type 'string', 'number', or 'any'.": { + "Type '{0}' is not assignable to type '{1}'.": { "category": "Error", - "code": 3018 + "code": 2323 }, - "Type '{0}' does not satisfy the constraint '{1}':": { + "Property '{0}' is missing in type '{1}'.": { "category": "Error", - "code": 3019 + "code": 2324 }, - "Type '{0}' does not satisfy the constraint '{1}'.": { + "Private property '{0}' cannot be reimplemented.": { "category": "Error", - "code": 3019 + "code": 2325 }, - "Supplied parameters do not match any signature of call target.": { + "Types of property '{0}' are incompatible:": { "category": "Error", - "code": 3020 + "code": 2326 }, - "Cannot invoke an expression whose type lacks a call signature.": { + "Required property '{0}' cannot be reimplemented with optional property in '{1}'.": { "category": "Error", - "code": 3021 + "code": 2327 }, - "Only a void function can be called with the 'new' keyword.": { + "Types of parameters '{0}' and '{1}' are incompatible:": { "category": "Error", - "code": 3022 + "code": 2328 }, - "Cannot use 'new' with an expression whose type lacks a call or construct signature.": { - "category": "Error", - "code": 3023 - }, - "Neither type '{0}' nor type '{1}' is assignable to the other:": { - "category": "Error", - "code": 3024 - }, - "Neither type '{0}' nor type '{1}' is assignable to the other.": { - "category": "Error", - "code": 3024 - }, - "No best common type exists among return expressions.": { - "category": "Error", - "code": 3027 - }, - "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { - "category": "Error", - "code": 3028 - }, - "No best common type exists between '{0}' and '{1}'.": { - "category": "Error", - "code": 3029 - }, - "No best common type exists between '{0}', '{1}', and '{2}'.": { - "category": "Error", - "code": 3030 - }, - "A rest parameter must be of an array type.": { - "category": "Error", - "code": 3031 - }, - "A parameter initializer is only allowed in a function or constructor implementation.": { - "category": "Error", - "code": 3032 - }, - "Specialized overload signature is not assignable to any non-specialized signature.": { - "category": "Error", - "code": 3033 - }, - "Duplicate function implementation.": { - "category": "Error", - "code": 3034 - }, - "Overload signature is not compatible with function implementation.": { - "category": "Error", - "code": 3035 - }, - "Argument of type '{0}' is not assignable to parameter of type '{1}'.": { - "category": "Error", - "code": 3036 - }, - - "Index signature is missing in type '{0}'.": { "category": "Error", - "code": 4003 + "code": 2329 }, "Index signatures are incompatible:": { "category": "Error", - "code": 4004 + "code": 2330 }, - "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { - "category": "NoPrefix", - "code": 4016 + "'this' cannot be referenced in a module body.": { + "category": "Error", + "code": 2331 }, - "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { - "category": "NoPrefix", - "code": 4017 + "'this' cannot be referenced in current location.": { + "category": "Error", + "code": 2332 + }, + "'this' cannot be referenced in constructor arguments.": { + "category": "Error", + "code": 2333 + }, + "'this' cannot be referenced in a static property initializer.": { + "category": "Error", + "code": 2334 + }, + "'super' can only be referenced in a derived class.": { + "category": "Error", + "code": 2335 + }, + "'super' cannot be referenced in constructor arguments.": { + "category": "Error", + "code": 2336 + }, + "Super calls are not permitted outside constructors or in nested functions inside constructors": { + "category": "Error", + "code": 2337 + }, + "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class": { + "category": "Error", + "code": 2338 + }, + "Property '{0}' does not exist on type '{1}'.": { + "category": "Error", + "code": 2339 + }, + "Only public methods of the base class are accessible via the 'super' keyword": { + "category": "Error", + "code": 2340 + }, + "Property '{0}' is inaccessible.": { + "category": "Error", + "code": 2341 + }, + "An index expression argument must be of type 'string', 'number', or 'any'.": { + "category": "Error", + "code": 2342 + }, + "Type '{0}' does not satisfy the constraint '{1}':": { + "category": "Error", + "code": 2343 + }, + "Type '{0}' does not satisfy the constraint '{1}'.": { + "category": "Error", + "code": 2344 + }, + "Argument of type '{0}' is not assignable to parameter of type '{1}'.": { + "category": "Error", + "code": 2345 + }, + "Supplied parameters do not match any signature of call target.": { + "category": "Error", + "code": 2346 + }, + "Untyped function calls may not accept type arguments.": { + "category": "Error", + "code": 2347 + }, + "Value of type '{0}' is not callable. Did you mean to include 'new'?": { + "category": "Error", + "code": 2348 + }, + "Cannot invoke an expression whose type lacks a call signature.": { + "category": "Error", + "code": 2349 + }, + "Only a void function can be called with the 'new' keyword.": { + "category": "Error", + "code": 2350 + }, + "Cannot use 'new' with an expression whose type lacks a call or construct signature.": { + "category": "Error", + "code": 2351 + }, + "Neither type '{0}' nor type '{1}' is assignable to the other.": { + "category": "Error", + "code": 2352 + }, + "Neither type '{0}' nor type '{1}' is assignable to the other:": { + "category": "Error", + "code": 2353 + }, + "No best common type exists among return expressions.": { + "category": "Error", + "code": 2354 + }, + "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement.": { + "category": "Error", + "code": 2355 + }, + "An arithmetic operand must be of type 'any', 'number' or an enum type.": { + "category": "Error", + "code": 2356 + }, + "The operand of an increment or decrement operator must be a variable, property or indexer.": { + "category": "Error", + "code": 2357 + }, + "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { + "category": "Error", + "code": 2358 + }, + "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": { + "category": "Error", + "code": 2359 + }, + "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": { + "category": "Error", + "code": 2360 + }, + "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter": { + "category": "Error", + "code": 2361 + }, + "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { + "category": "Error", + "code": 2362 + }, + "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { + "category": "Error", + "code": 2363 + }, + "Invalid left-hand side of assignment expression.": { + "category": "Error", + "code": 2364 + }, + "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { + "category": "Error", + "code": 2365 + }, + "No best common type exists between '{0}', '{1}', and '{2}'.": { + "category": "Error", + "code": 2366 + }, + "No best common type exists between '{0}' and '{1}'.": { + "category": "Error", + "code": 2367 + }, + "Type parameter name cannot be '{0}'": { + "category": "Error", + "code": 2368 + }, + "A parameter property is only allowed in a constructor implementation.": { + "category": "Error", + "code": 2369 + }, + "A rest parameter must be of an array type.": { + "category": "Error", + "code": 2370 + }, + "A parameter initializer is only allowed in a function or constructor implementation.": { + "category": "Error", + "code": 2371 + }, + "Parameter '{0}' cannot be referenced in its initializer.": { + "category": "Error", + "code": 2372 + }, + "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": { + "category": "Error", + "code": 2373 + }, + "Duplicate string index signature.": { + "category": "Error", + "code": 2374 + }, + "Duplicate number index signature.": { + "category": "Error", + "code": 2375 + }, + "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": { + "category": "Error", + "code": 2376 + }, + "Constructors for derived classes must contain a 'super' call.": { + "category": "Error", + "code": 2377 + }, + "A 'get' accessor must return a value or consist of a single 'throw' statement.": { + "category": "Error", + "code": 2378 + }, + "Getter and setter accessors do not agree in visibility.": { + "category": "Error", + "code": 2379 + }, + "'get' and 'set' accessor must have the same type.": { + "category": "Error", + "code": 2380 + }, + "A signature with an implementation cannot use a string literal type.": { + "category": "Error", + "code": 2381 + }, + "Specialized overload signature is not assignable to any non-specialized signature.": { + "category": "Error", + "code": 2382 + }, + "Overload signatures must all be exported or not exported.": { + "category": "Error", + "code": 2383 + }, + "Overload signatures must all be ambient or non-ambient.": { + "category": "Error", + "code": 2384 + }, + "Overload signatures must all be public or private.": { + "category": "Error", + "code": 2385 + }, + "Overload signatures must all be optional or required.": { + "category": "Error", + "code": 2386 + }, + "Function overload must be static.": { + "category": "Error", + "code": 2387 + }, + "Function overload must not be static.": { + "category": "Error", + "code": 2388 + }, + "Function implementation name must be '{0}'.": { + "category": "Error", + "code": 2389 + }, + "Constructor implementation is missing.": { + "category": "Error", + "code": 2390 + }, + "Function implementation is missing or not immediately following the declaration.": { + "category": "Error", + "code": 2391 + }, + "Multiple constructor implementations are not allowed.": { + "category": "Error", + "code": 2392 + }, + "Duplicate function implementation.": { + "category": "Error", + "code": 2393 + }, + "Overload signature is not compatible with function implementation.": { + "category": "Error", + "code": 2394 + }, + "Individual declarations in merged declaration {0} must be all exported or all local.": { + "category": "Error", + "code": 2395 + }, + "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { + "category": "Error", + "code": 2396 + }, + "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": { + "category": "Error", + "code": 2397 + }, + "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": { + "category": "Error", + "code": 2398 + }, + "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { + "category": "Error", + "code": 2399 + }, + "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { + "category": "Error", + "code": 2400 + }, + "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": { + "category": "Error", + "code": 2401 + }, + "Expression resolves to '_super' that compiler uses to capture base class reference.": { + "category": "Error", + "code": 2402 + }, + "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { + "category": "Error", + "code": 2403 + }, + "The left-hand side of a 'for...in' statement cannot use a type annotation.": { + "category": "Error", + "code": 2404 + }, + "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'.": { + "category": "Error", + "code": 2405 + }, + "Invalid left-hand side in 'for...in' statement.": { + "category": "Error", + "code": 2406 + }, + "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": { + "category": "Error", + "code": 2407 + }, + "Setters cannot return a value.": { + "category": "Error", + "code": 2408 + }, + "Return type of constructor signature must be assignable to the instance type of the class": { + "category": "Error", + "code": 2409 + }, + "All symbols within a 'with' block will be resolved to 'any'.": { + "category": "Error", + "code": 2410 + }, + "Property '{0}' of type '{1}' is not assignable to string index type '{2}'.": { + "category": "Error", + "code": 2411 + }, + "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'.": { + "category": "Error", + "code": 2412 + }, + "Numeric index type '{0}' is not assignable to string index type '{1}'.": { + "category": "Error", + "code": 2413 + }, + "Class name cannot be '{0}'": { + "category": "Error", + "code": 2414 + }, + "Class '{0}' incorrectly extends base class '{1}'.": { + "category": "Error", + "code": 2415 + }, + "Class '{0}' incorrectly extends base class '{1}':": { + "category": "Error", + "code": 2416 + }, + "Class static side '{0}' incorrectly extends base class static side '{1}'.": { + "category": "Error", + "code": 2417 + }, + "Class static side '{0}' incorrectly extends base class static side '{1}':": { + "category": "Error", + "code": 2418 + }, + "Type name '{0}' in extends clause does not reference constructor function for '{0}'.": { + "category": "Error", + "code": 2419 + }, + "Class '{0}' incorrectly implements interface '{1}'.": { + "category": "Error", + "code": 2420 + }, + "Class '{0}' incorrectly implements interface '{1}':": { + "category": "Error", + "code": 2421 + }, + "A class may only implement another class or interface.": { + "category": "Error", + "code": 2422 }, "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { - "category": "NoPrefix", - "code": 4018 + "category": "Error", + "code": 2423 }, "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.": { - "category": "NoPrefix", - "code": 4019 + "category": "Error", + "code": 2424 + }, + "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { + "category": "Error", + "code": 2425 + }, + "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { + "category": "Error", + "code": 2426 + }, + "Interface name cannot be '{0}'": { + "category": "Error", + "code": 2427 + }, + "All declarations of an interface must have identical type parameters.": { + "category": "Error", + "code": 2428 + }, + "Interface '{0}' incorrectly extends interface '{1}':": { + "category": "Error", + "code": 2429 + }, + "Interface '{0}' incorrectly extends interface '{1}'.": { + "category": "Error", + "code": 2430 + }, + "Enum name cannot be '{0}'": { + "category": "Error", + "code": 2431 }, "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.": { + "category": "Error", + "code": 2432 + }, + "A module declaration cannot be in a different file from a class or function with which it is merged": { + "category": "Error", + "code": 2433 + }, + "A module declaration cannot be located prior to a class or function with which it is merged": { + "category": "Error", + "code": 2434 + }, + "Ambient external modules cannot be nested in other modules.": { + "category": "Error", + "code": 2435 + }, + "Ambient external module declaration cannot specify relative module name.": { + "category": "Error", + "code": 2436 + }, + "Module '{0}' is hidden by a local declaration with the same name": { + "category": "Error", + "code": 2437 + }, + "Import name cannot be '{0}'": { + "category": "Error", + "code": 2438 + }, + "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": { + "category": "Error", + "code": 2439 + }, + "Import declaration conflicts with local declaration of '{0}'": { + "category": "Error", + "code": 2440 + }, + "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": { + "category": "Error", + "code": 2441 + }, + + + "Import declaration '{0}' is using private name '{1}'.": { + "category": "Error", + "code": 4000 + }, + "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4001 + }, + "Type parameter '{0}' of exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4002 + }, + "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4003 + }, + "Type parameter '{0}' of exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4004 + }, + "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4005 + }, + "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4006 + }, + "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4007 + }, + "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4008 + }, + "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4009 + }, + "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4010 + }, + "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4011 + }, + "Type parameter '{0}' of public method from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4012 + }, + "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4013 + }, + "Type parameter '{0}' of method from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4014 + }, + "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4015 + }, + "Type parameter '{0}' of exported function has or is using private name '{1}'.": { + "category": "Error", + "code": 4016 + }, + "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4017 + }, + "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4018 + }, + "Implements clause of exported class '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4019 + }, + "Extends clause of exported class '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4020 + }, + "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4021 + }, + "Extends clause of exported interface '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4022 + }, + "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4023 + }, + "Exported variable '{0}' has or is using name '{1}' from private module '{2}'.": { "category": "Error", "code": 4024 }, - "Named properties '{0}' of types '{1}' and '{2}' are not identical.": { - "category": "NoPrefix", + "Exported variable '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4025 + }, + "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4026 + }, + "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4027 + }, + "Public static property '{0}' of exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4028 + }, + "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4029 + }, + "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4030 + }, + "Public property '{0}' of exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4031 + }, + "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", "code": 4032 }, + "Property '{0}' of exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4033 + }, + "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4034 + }, + "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4035 + }, + "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4036 + }, + "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4037 + }, + "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named.": { + "category": "Error", + "code": 4038 + }, + "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4039 + }, + "Return type of public static property getter from exported class has or is using private name '{0}'.": { + "category": "Error", + "code": 4040 + }, + "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named.": { + "category": "Error", + "code": 4041 + }, + "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4042 + }, + "Return type of public property getter from exported class has or is using private name '{0}'.": { + "category": "Error", + "code": 4043 + }, + "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4044 + }, + "Return type of constructor signature from exported interface has or is using private name '{0}'.": { + "category": "Error", + "code": 4045 + }, + "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4046 + }, + "Return type of call signature from exported interface has or is using private name '{0}'.": { + "category": "Error", + "code": 4047 + }, + "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4048 + }, + "Return type of index signature from exported interface has or is using private name '{0}'.": { + "category": "Error", + "code": 4049 + }, + "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named.": { + "category": "Error", + "code": 4050 + }, + "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4051 + }, + "Return type of public static method from exported class has or is using private name '{0}'.": { + "category": "Error", + "code": 4052 + }, + "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named.": { + "category": "Error", + "code": 4053 + }, + "Return type of public method from exported class has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4054 + }, + "Return type of public method from exported class has or is using private name '{0}'.": { + "category": "Error", + "code": 4055 + }, + "Return type of method from exported interface has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4056 + }, + "Return type of method from exported interface has or is using private name '{0}'.": { + "category": "Error", + "code": 4057 + }, + "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named.": { + "category": "Error", + "code": 4058 + }, + "Return type of exported function has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4059 + }, + "Return type of exported function has or is using private name '{0}'.": { + "category": "Error", + "code": 4060 + }, + "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4061 + }, + "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4062 + }, + "Parameter '{0}' of constructor from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4063 + }, + "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4064 + }, + "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4065 + }, + "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4066 + }, + "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4067 + }, + "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4068 + }, + "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4069 + }, + "Parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4070 + }, + "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4071 + }, + "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4072 + }, + "Parameter '{0}' of public method from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4073 + }, + "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4074 + }, + "Parameter '{0}' of method from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4075 + }, + "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4076 + }, + "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4077 + }, + "Parameter '{0}' of exported function has or is using private name '{1}'.": { + "category": "Error", + "code": 4078 + }, + + "The current host does not support the '{0}' option.": { "category": "Error", "code": 5001 @@ -1167,9 +1345,13 @@ "code": 5012 }, "Unsupported file encoding.": { - "category": "NoPrefix", + "category": "Error", "code": 5013 }, + "Unknown compiler option '{0}'.": { + "category": "Error", + "code": 5023 + }, "Could not write file '{0}': {1}": { "category": "Error", "code": 5033 @@ -1210,10 +1392,6 @@ "category": "Message", "code": 6009 }, - "Skip resolution and preprocessing.": { - "category": "Message", - "code": 6010 - }, "Specify ECMAScript target version: 'ES3' (default), or 'ES5'": { "category": "Message", "code": 6015 @@ -1230,14 +1408,6 @@ "category": "Message", "code": 6019 }, - "Allow use of deprecated '{0}' keyword when referencing an external module.": { - "category": "Message", - "code": 6021 - }, - "Specify locale for errors and messages. For example '{0}' or '{1}'": { - "category": "Message", - "code": 6022 - }, "Syntax: {0}": { "category": "Message", "code": 6023 @@ -1258,7 +1428,6 @@ "category": "Message", "code": 6027 }, - "Version {0}": { "category": "Message", "code": 6029 @@ -1267,18 +1436,10 @@ "category": "Message", "code": 6030 }, - "Use the '{0}' flag to see options.": { - "category": "Message", - "code": 6031 - }, "File change detected. Compiling...": { "category": "Message", "code": 6032 }, - "STRING": { - "category": "Message", - "code": 6033 - }, "KIND": { "category": "Message", "code": 6034 @@ -1299,18 +1460,6 @@ "category": "Message", "code": 6038 }, - "NUMBER": { - "category": "Message", - "code": 6039 - }, - "Specify the codepage to use when opening source files.": { - "category": "Message", - "code": 6040 - }, - "Additional locations:": { - "category": "Message", - "code": 6041 - }, "Compilation complete. Watching for file changes.": { "category": "Message", "code": 6042 @@ -1329,36 +1478,41 @@ }, "Argument for '--module' option must be 'commonjs' or 'amd'.": { "category": "Error", - "code": 6045 + "code": 6046 }, "Argument for '--target' option must be 'es3' or 'es5'.": { "category": "Error", - "code": 6046 + "code": 6047 }, "Locale must be of the form or -. For example '{0}' or '{1}'.": { "category": "Error", - "code": 6047 + "code": 6048 }, "Unsupported locale '{0}'.": { "category": "Error", - "code": 6048 + "code": 6049 }, "Unable to open file '{0}'.": { - "category": "Error", - "code": 6049 - }, - "Corrupted locale file {0}.": { "category": "Error", "code": 6050 }, - "No input files specified.": { + "Corrupted locale file {0}.": { "category": "Error", "code": 6051 }, "Warn on expressions and declarations with an implied 'any' type.": { "category": "Message", - "code": 7004 + "code": 6052 }, + "File '{0}' not found.": { + "category": "Error", + "code": 6053 + }, + "File '{0}' must have extension '.ts' or '.d.ts'.": { + "category": "Error", + "code": 6054 + }, + "Variable '{0}' implicitly has an '{1}' type.": { "category": "Error", "code": 7005 @@ -1387,14 +1541,6 @@ "category": "Error", "code": 7013 }, - "Lambda function, which lacks return-type annotation, implicitly has an '{0}' return type.": { - "category": "Error", - "code": 7014 - }, - "Array literal implicitly has an '{0}' type.": { - "category": "Error", - "code": 7015 - }, "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation.": { "category": "Error", "code": 7016 @@ -1415,312 +1561,8 @@ "category": "Error", "code": 7020 }, - "Variable declaration list cannot be empty.": { + "You cannot rename this element.": { "category": "Error", - "code": -9999999 - }, - "Digit expected.": { - "category": "Error", - "code": -9999999 - }, - "Hexadecimal digit expected.": { - "category": "Error", - "code": -9999999 - }, - "Unexpected end of text.": { - "category": "Error", - "code": -9999999 - }, - "Unterminated string constant.": { - "category": "Error", - "code": -9999999 - }, - "Invalid character.": { - "category": "Error", - "code": -9999999 - }, - "Declaration or statement expected.": { - "category": "Error", - "code": -9999999 - }, - "Statement expected.": { - "category": "Error", - "code": -9999999 - }, - "'case' or 'default' expected.": { - "category": "Error", - "code": -9999999 - }, - "Property or signature expected.": { - "category": "Error", - "code": -9999999 - }, - "Enum member expected.": { - "category": "Error", - "code": -9999999 - }, - "Type reference expected.": { - "category": "Error", - "code": -9999999 - }, - "Variable declaration expected.": { - "category": "Error", - "code": -9999999 - }, - "Argument expression expected.": { - "category": "Error", - "code": -9999999 - }, - "Property assignment expected.": { - "category": "Error", - "code": -9999999 - }, - "Expression or comma expected.": { - "category": "Error", - "code": -9999999 - }, - "Parameter declaration expected.": { - "category": "Error", - "code": -9999999 - }, - "Type parameter declaration expected.": { - "category": "Error", - "code": -9999999 - }, - "Type argument expected.": { - "category": "Error", - "code": -9999999 - }, - "'{0}' expected.": { - "category": "Error", - "code": -9999999 - }, - "Identifier expected.": { - "category": "Error", - "code": -9999999 - }, - "String literal expected.": { - "category": "Error", - "code": -9999999 - }, - "Type expected.": { - "category": "Error", - "code": -9999999 - }, - "'=>' not preceded by parameter list.": { - "category": "Error", - "code": -9999999 - }, - "Invalid assignment target.": { - "category": "Error", - "code": -9999999 - }, - "'super' must be followed by argument list or member access.": { - "category": "Error", - "code": -9999999 - }, - "Expression expected.": { - "category": "Error", - "code": -9999999 - }, - "Line break not permitted here.": { - "category": "Error", - "code": -9999999 - }, - "'catch' or 'finally' expected.": { - "category": "Error", - "code": -9999999 - }, - "Block or ';' expected.": { - "category": "Error", - "code": -9999999 - }, - "Modifiers not permitted on index signature members.": { - "category": "Error", - "code": -9999999 - }, - "Class member declaration expected.": { - "category": "Error", - "code": -9999999 - }, - "Declaration expected.": { - "category": "Error", - "code": -9999999 - }, - "Invalid reference comment.": { - "category": "Error", - "code": -9999999 - }, - "File '{0}' is not an external module.": { - "category": "Error", - "code": -9999999 - }, - "Excessive stack depth comparing types '{0}' and '{1}'.": { - "category": "Error", - "code": -9999999 - }, - "Type '{0}' is not assignable to type '{1}':": { - "category": "Error", - "code": -9999999 - }, - "Type '{0}' is not assignable to type '{1}'.": { - "category": "Error", - "code": -9999999 - }, - "Property '{0}' is missing in type '{1}'.": { - "category": "Error", - "code": -9999999 - }, - "Private property '{0}' cannot be reimplemented.": { - "category": "Error", - "code": -9999999 - }, - "Required property '{0}' cannot be reimplemented with optional property in '{1}'.": { - "category": "Error", - "code": 2012 - }, - "Super calls are not permitted outside constructors or in nested functions inside constructors": { - "category": "Error", - "code": -9999999 - }, - "Only public methods of the base class are accessible via the 'super' keyword": { - "category": "Error", - "code": -9999999 - }, - "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": { - "category": "Error", - "code": -9999999 - }, - "Constructors for derived classes must contain a 'super' call.": { - "category": "Error", - "code": -9999999 - }, - "Only public methods of the base class are accessible via the 'super' keyword": { - "category": "Error", - "code": -9999999 - }, - "Import name cannot be '{0}'": { - "category": "Error", - "code": -9999999 - }, - "Type parameter name cannot be '{0}'": { - "category": "Error", - "code": -9999999 - }, - "Class name cannot be '{0}'": { - "category": "Error", - "code": -9999999 - }, - "Interface name cannot be '{0}'": { - "category": "Error", - "code": -9999999 - }, - "Enum name cannot be '{0}'": { - "category": "Error", - "code": -9999999 - }, - "Types of property '{0}' are incompatible:": { - "category": "Error", - "code": -9999999 - }, - "Types of parameters '{0}' and '{1}' are incompatible:": { - "category": "Error", - "code": -9999999 - }, - "Unknown identifier '{0}'.": { - "category": "Error", - "code": -9999999 - }, - "Property '{0}' is inaccessible.": { - "category": "Error", - "code": -9999999 - }, - "Function implementation is missing or not immediately following the declaration.": { - "category": "Error", - "code": -9999999 - }, - "Property '{0}' of type '{1}' is not assignable to string index type '{2}'.": { - "category": "Error", - "code": -9999999 - }, - "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'.": { - "category": "Error", - "code": -9999999 - }, - "Numeric index type '{0}' is not assignable to string index type '{1}'.": { - "category": "Error", - "code": -9999999 - }, - "Class '{0}' incorrectly extends base class '{1}':": { - "category": "Error", - "code": -9999999 - }, - "Class '{0}' incorrectly extends base class '{1}'.": { - "category": "Error", - "code": -9999999 - }, - "Class static side '{0}' incorrectly extends base class static side '{1}':": { - "category": "Error", - "code": -9999999 - }, - "Class static side '{0}' incorrectly extends base class static side '{1}'.": { - "category": "Error", - "code": -9999999 - }, - "Type name '{0}' in extends clause does not reference constructor function for '{0}'.": { - "category": "Error", - "code": -9999999 - }, - "Class '{0}' incorrectly implements interface '{1}':": { - "category": "Error", - "code": -9999999 - }, - "Class '{0}' incorrectly implements interface '{1}'.": { - "category": "Error", - "code": -9999999 - }, - "Interface '{0}' incorrectly extends interface '{1}':": { - "category": "Error", - "code": -9999999 - }, - "Interface '{0}' incorrectly extends interface '{1}'.": { - "category": "Error", - "code": -9999999 - }, - "Enum member must have initializer.": { - "category": "Error", - "code": -9999999 - }, - "Ambient external modules cannot be nested in other modules.": { - "category": "Error", - "code": -9999999 - }, - "Import declarations in an internal module cannot reference an external module.": { - "category": "Error", - "code": -9999999 - }, - "A module declaration cannot be in a different file from a class or function with which it is merged": { - "category": "Error", - "code": -9999999 - }, - "A module declaration cannot be located prior to a class or function with which it is merged": { - "category": "Error", - "code": -9999999 - }, - "Cannot compile external modules unless the '--module' flag is provided.": { - "category": "Error", - "code": -9999999 - }, - "Import declaration conflicts with local declaration of '{0}'": { - "category": "Error", - "code": -9999999 - }, - "Module '{0}' is hidden by a local declaration with the same name": { - "category": "Error", - "code": -9999999 - }, - "Filename '{0}' differs from already included filename '{1}' only in casing": { - "category": "Error", - "code": -9999999 + "code": 8000 } } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 7e11b978c67..e55163c3c12 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -5,6 +5,7 @@ module ts { interface EmitTextWriter extends TextWriter { + rawWrite(s: string): void; writeLiteral(s: string): void; getTextPos(): number; getLine(): number; @@ -12,9 +13,16 @@ module ts { getIndent(): number; } - var indentStrings: string[] = []; + var indentStrings: string[] = ["", " "]; function getIndentString(level: number) { - return indentStrings[level] || (indentStrings[level] = level === 0 ? "" : getIndentString(level - 1) + " "); + if (indentStrings[level] === undefined) { + indentStrings[level] = getIndentString(level - 1) + indentStrings[1]; + } + return indentStrings[level]; + } + + function getIndentSize() { + return indentStrings[1].length; } export function emitFiles(resolver: EmitResolver): EmitResult { @@ -107,21 +115,22 @@ module ts { } } + function rawWrite(s: string) { + if (s !== undefined) { + if (lineStart) { + lineStart = false; + } + output += s; + } + } + function writeLiteral(s: string) { if (s && s.length) { write(s); - var pos = 0; - while (pos < s.length) { - switch (s.charCodeAt(pos++)) { - case CharacterCodes.carriageReturn: - if (pos < s.length && s.charCodeAt(pos) === CharacterCodes.lineFeed) { - pos++; - } - case CharacterCodes.lineFeed: - lineCount++; - linePos = output.length - s.length + pos; - break; - } + var lineStartsOfS = getLineStarts(s); + if (lineStartsOfS.length > 1) { + lineCount = lineCount + lineStartsOfS.length - 1; + linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1]; } } } @@ -138,6 +147,7 @@ module ts { return { write: write, writeSymbol: writeSymbol, + rawWrite: rawWrite, writeLiteral: writeLiteral, writeLine: writeLine, increaseIndent: () => indent++, @@ -145,8 +155,8 @@ module ts { getIndent: () => indent, getTextPos: () => output.length, getLine: () => lineCount + 1, - getColumn: () => lineStart ? indent * 4 + 1 : output.length - linePos + 1, - getText: () => output + getColumn: () => lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1, + getText: () => output, }; } @@ -159,12 +169,140 @@ module ts { return text.substring(skipTrivia(text, node.pos), node.end); } + function getLineOfLocalPosition(pos: number) { + return currentSourceFile.getLineAndCharacterFromPosition(pos).line; + } + function writeFile(filename: string, data: string, writeByteOrderMark: boolean) { compilerHost.writeFile(filename, data, writeByteOrderMark, hostErrorMessage => { diagnostics.push(createCompilerDiagnostic(Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); }); } + function emitComments(comments: Comment[], trailingSeparator: boolean, writer: EmitTextWriter, writeComment: (comment: Comment, writer: EmitTextWriter) => void) { + var emitLeadingSpace = !trailingSeparator; + forEach(comments, comment => { + if (emitLeadingSpace) { + writer.write(" "); + emitLeadingSpace = false; + } + writeComment(comment, writer); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } + else if (trailingSeparator) { + writer.write(" "); + } + else { + // Emit leading space to separate comment during next comment emit + emitLeadingSpace = true; + } + }); + } + + function emitNewLineBeforeLeadingComments(node: TextRange, leadingComments: Comment[], writer: EmitTextWriter) { + // If the leading comments start on different line than the start of node, write new line + if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && + getLineOfLocalPosition(node.pos) !== getLineOfLocalPosition(leadingComments[0].pos)) { + writer.writeLine(); + } + } + + function writeCommentRange(comment: Comment, writer: EmitTextWriter) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === CharacterCodes.asterisk) { + var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); + var firstCommentLineIndent: number; + for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { + var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, /*character*/1); + + if (pos !== comment.pos) { + // If we are not emitting first line, we need to write the spaces to adjust the alignment + if (firstCommentLineIndent === undefined) { + firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, /*character*/1), + comment.pos); + } + + // These are number of spaces writer is going to write at current indent + var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); + + // Number of spaces we want to be writing + // eg: Assume writer indent + // module m { + // /* starts at character 9 this is line 1 + // * starts at character pos 4 line --1 = 8 - 8 + 3 + // More left indented comment */ --2 = 8 - 8 + 2 + // class c { } + // } + // module m { + // /* this is line 1 -- Assume current writer indent 8 + // * line --3 = 8 - 4 + 5 + // More right indented comment */ --4 = 8 - 4 + 11 + // class c { } + // } + var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); + if (spacesToEmit > 0) { + var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); + var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); + + // Write indent size string ( in eg 1: = "", 2: "" , 3: string with 8 spaces 4: string with 12 spaces + writer.rawWrite(indentSizeSpaceString); + + // Emit the single spaces (in eg: 1: 3 spaces, 2: 2 spaces, 3: 1 space, 4: 3 spaces) + while (numberOfSingleSpacesToEmit) { + writer.rawWrite(" "); + numberOfSingleSpacesToEmit--; + } + } + else { + // No spaces to emit write empty string + writer.rawWrite(""); + } + } + + // Write the comment line text + writeTrimmedCurrentLine(pos, nextLineStart); + + pos = nextLineStart; + } + } + else { + // Single line comment of styly //.... + writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); + } + + function writeTrimmedCurrentLine(pos: number, nextLineStart: number) { + var end = Math.min(comment.end, nextLineStart - 1); + var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); + if (currentLineText) { + // trimmed forward and ending spaces text + writer.write(currentLineText); + if (end !== comment.end) { + writer.writeLine(); + } + } + else { + // Empty string - make sure we write empty line + writer.writeLiteral(newLine); + } + } + + function calculateIndent(pos: number, end: number) { + var currentLineIndent = 0; + for (; pos < end && isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) { + if (currentSourceFile.text.charCodeAt(pos) === CharacterCodes.tab) { + // Tabs = TabSize = indent size and go to next tabStop + currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); + } + else { + // Single space + currentLineIndent++; + } + } + + return currentLineIndent; + } + } + function emitJavaScript(jsFilePath: string, root?: SourceFile) { var writer = createTextWriter(writeSymbol); var write = writer.write; @@ -177,14 +315,31 @@ module ts { /** write emitted output to disk*/ var writeEmittedFiles = writeJavaScriptFile; + /** Emit leading comments of the node */ + var emitLeadingComments = compilerOptions.removeComments ? (node: Node) => { } : emitLeadingDeclarationComments; + + /** Emit Trailing comments of the node */ + var emitTrailingComments = compilerOptions.removeComments ? (node: Node) => { } : emitTrailingDeclarationComments; + + var emitLeadingCommentsOfPosition = compilerOptions.removeComments ? (pos: number) => { } : emitLeadingCommentsOfLocalPosition; + + var detachedCommentsInfo: { nodePos: number; detachedCommentEndPos: number }[]; + /** Emit detached comments of the node */ + var emitDetachedComments = compilerOptions.removeComments ? (node: TextRange) => { } : emitDetachedCommentsAtPosition; + + /** Emits /// or pinned which is comment starting with /*! comments */ + var emitPinnedOrTripleSlashComments = compilerOptions.removeComments ? (node: Node) => { } : emitPinnedOrTripleSlashCommentsOfNode; + + var writeComment = writeCommentRange; + /** Emit a node */ var emit = emitNode; /** Called just before starting emit of a node */ - var emitStart = function (node: Node) { } + var emitStart = function (node: Node) { }; /** Called once the emit of the node is done */ - var emitEnd = function (node: Node) { } + var emitEnd = function (node: Node) { }; /** Emit the text for the given token that comes after startPos * This by default writes the text provided with the given tokenKind @@ -194,9 +349,6 @@ module ts { * @param emitFn if given will be invoked to emit the text instead of actual token emit */ var emitToken = emitTokenText; - /** Called to notify start of new source file emit */ - var emitNewSourceFileStart = function (node: SourceFile) { } - /** Called to before starting the lexical scopes as in function/class in the emitted code because of node * @param scopeDeclaration node that starts the lexical scope * @param scopeName Optional name of this scope instead of deducing one from the declaration node */ @@ -322,8 +474,9 @@ module ts { if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || - lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || - (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)) { + (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && + (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || + (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) { // Encode the last recordedSpan before assigning new encodeLastRecordedSourceMapSpan(); @@ -341,12 +494,13 @@ module ts { // Take the new pos instead since there is no change in emittedLine and column since last location lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; + lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex; } } function recordEmitNodeStartSpan(node: Node) { // Get the token pos after skipping to the token (ignoring the leading trivia) - recordSourceMapSpan(ts.getTokenPosOfNode(node)); + recordSourceMapSpan(skipTrivia(currentSourceFile.text, node.pos)); } function recordEmitNodeEndSpan(node: Node) { @@ -428,6 +582,12 @@ module ts { sourceMapNameIndices.pop(); }; + function writeCommentRangeWithMap(comment: Comment, writer: EmitTextWriter) { + recordSourceMapSpan(comment.pos); + writeCommentRange(comment, writer); + recordSourceMapSpan(comment.end); + } + function writeJavaScriptAndSourceMapFile(emitOutput: string, writeByteOrderMark: boolean) { // Write source map file encodeLastRecordedSourceMapSpan(); @@ -510,9 +670,9 @@ module ts { emitStart = recordEmitNodeStartSpan; emitEnd = recordEmitNodeEndSpan; emitToken = writeTextWithSpanRecord; - emitNewSourceFileStart = recordNewSourceFileStart; scopeEmitStart = recordScopeNameOfNode; scopeEmitEnd = recordScopeNameEnd; + writeComment = writeCommentRangeWithMap; } function writeJavaScriptFile(emitOutput: string, writeByteOrderMark: boolean) { @@ -697,9 +857,11 @@ module ts { } function emitPropertyAssignment(node: PropertyDeclaration) { + emitLeadingComments(node); emit(node.name); write(": "); emit(node.initializer); + emitTrailingComments(node); } function emitPropertyAccess(node: PropertyAccess) { @@ -866,13 +1028,16 @@ module ts { function emitExpressionStatement(node: ExpressionStatement) { var isArrowExpression = node.expression.kind === SyntaxKind.ArrowFunction; + emitLeadingComments(node); if (isArrowExpression) write("("); emit(node.expression); if (isArrowExpression) write(")"); write(";"); + emitTrailingComments(node); } function emitIfStatement(node: IfStatement) { + emitLeadingComments(node); var endPos = emitToken(SyntaxKind.IfKeyword, node.pos); write(" "); endPos = emitToken(SyntaxKind.OpenParenToken, endPos); @@ -890,6 +1055,7 @@ module ts { emitEmbeddedStatement(node.elseStatement); } } + emitTrailingComments(node); } function emitDoStatement(node: DoStatement) { @@ -958,9 +1124,11 @@ module ts { } function emitReturnStatement(node: ReturnStatement) { + emitLeadingComments(node); emitToken(SyntaxKind.ReturnKeyword, node.pos); emitOptional(" ", node.expression); write(";"); + emitTrailingComments(node); } function emitWithStatement(node: WhileStatement) { @@ -1057,18 +1225,24 @@ module ts { } function emitVariableDeclaration(node: VariableDeclaration) { + emitLeadingComments(node); emitModuleMemberName(node); emitOptional(" = ", node.initializer); + emitTrailingComments(node); } function emitVariableStatement(node: VariableStatement) { + emitLeadingComments(node); if (!(node.flags & NodeFlags.Export)) write("var "); emitCommaList(node.declarations); write(";"); + emitTrailingComments(node); } function emitParameter(node: ParameterDeclaration) { + emitLeadingComments(node); emit(node.name); + emitTrailingComments(node); } function emitDefaultValueAssignments(node: FunctionDeclaration) { @@ -1096,11 +1270,13 @@ module ts { var restIndex = node.parameters.length - 1; var restParam = node.parameters[restIndex]; writeLine(); + emitLeadingComments(restParam); emitStart(restParam); write("var "); emitNode(restParam.name); write(" = [];"); emitEnd(restParam); + emitTrailingComments(restParam); writeLine(); write("for ("); emitStart(restParam); @@ -1128,18 +1304,30 @@ module ts { } function emitAccessor(node: AccessorDeclaration) { + emitLeadingComments(node); write(node.kind === SyntaxKind.GetAccessor ? "get " : "set "); emit(node.name); emitSignatureAndBody(node); + emitTrailingComments(node); } function emitFunctionDeclaration(node: FunctionDeclaration) { - if (!node.body) return; + if (!node.body) { + return emitPinnedOrTripleSlashComments(node); + } + + if (node.kind !== SyntaxKind.Method) { + // Methods will emit the comments as part of emitting method declaration + emitLeadingComments(node); + } write("function "); if (node.kind === SyntaxKind.FunctionDeclaration || (node.kind === SyntaxKind.FunctionExpression && node.name)) { emit(node.name); } emitSignatureAndBody(node); + if (node.kind !== SyntaxKind.Method) { + emitTrailingComments(node); + } } function emitCaptureThisForNodeIfNecessary(node: Node): void { @@ -1152,11 +1340,13 @@ module ts { } function emitSignatureParameters(node: FunctionDeclaration) { + increaseIndent(); write("("); if (node) { emitCommaList(node.parameters, node.parameters.length - (hasRestParameters(node) ? 1 : 0)); } write(")"); + decreaseIndent(); } function emitSignatureAndBody(node: FunctionDeclaration) { @@ -1165,6 +1355,8 @@ module ts { scopeEmitStart(node); increaseIndent(); + emitDetachedComments(node.body.kind === SyntaxKind.FunctionBlock ? (node.body).statements : node.body); + var startIndex = 0; if (node.body.kind === SyntaxKind.FunctionBlock) { startIndex = emitDirectivePrologues((node.body).statements, /*startWithNewLine*/ true); @@ -1191,16 +1383,20 @@ module ts { } else { writeLine(); + emitLeadingComments(node.body); write("return "); emit(node.body); write(";"); + emitTrailingComments(node.body); } - decreaseIndent(); writeLine(); if (node.body.kind === SyntaxKind.FunctionBlock) { + emitLeadingCommentsOfPosition((node.body).statements.end); + decreaseIndent(); emitToken(SyntaxKind.CloseBraceToken, (node.body).statements.end); } else { + decreaseIndent(); emitStart(node.body); write("}"); emitEnd(node.body); @@ -1266,6 +1462,7 @@ module ts { forEach(node.members, member => { if (member.kind === SyntaxKind.Property && (member.flags & NodeFlags.Static) === staticFlag && (member).initializer) { writeLine(); + emitLeadingComments(member); emitStart(member); emitStart((member).name); if (staticFlag) { @@ -1280,6 +1477,7 @@ module ts { emit((member).initializer); write(";"); emitEnd(member); + emitTrailingComments(member); } }); } @@ -1287,8 +1485,12 @@ module ts { function emitMemberFunctions(node: ClassDeclaration) { forEach(node.members, member => { if (member.kind === SyntaxKind.Method) { - if (!(member).body) return; + if (!(member).body) { + return emitPinnedOrTripleSlashComments(member); + } + writeLine(); + emitLeadingComments(member); emitStart(member); emitStart((member).name); emitNode(node.name); @@ -1303,6 +1505,7 @@ module ts { emitEnd(member); emitEnd(member); write(";"); + emitTrailingComments(member); } else if (member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) { var accessors = getAllAccessorDeclarations(node, member); @@ -1322,20 +1525,24 @@ module ts { increaseIndent(); if (accessors.getAccessor) { writeLine(); + emitLeadingComments(accessors.getAccessor); write("get: "); emitStart(accessors.getAccessor); write("function "); emitSignatureAndBody(accessors.getAccessor); emitEnd(accessors.getAccessor); + emitTrailingComments(accessors.getAccessor); write(","); } if (accessors.setAccessor) { writeLine(); + emitLeadingComments(accessors.setAccessor); write("set: "); emitStart(accessors.setAccessor); write("function "); emitSignatureAndBody(accessors.setAccessor); emitEnd(accessors.setAccessor); + emitTrailingComments(accessors.setAccessor); write(","); } writeLine(); @@ -1352,11 +1559,13 @@ module ts { } function emitClassDeclaration(node: ClassDeclaration) { - var ctor = getFirstConstructorWithBody(node); + emitLeadingComments(node); write("var "); emit(node.name); write(" = (function ("); - if (node.baseType) write("_super"); + if (node.baseType) { + write("_super"); + } write(") {"); increaseIndent(); scopeEmitStart(node); @@ -1369,45 +1578,7 @@ module ts { emitEnd(node.baseType); } writeLine(); - emitStart(ctor || node); - write("function "); - emit(node.name); - emitSignatureParameters(ctor); - write(" {"); - scopeEmitStart(node, "constructor"); - increaseIndent(); - emitCaptureThisForNodeIfNecessary(node); - if (ctor) { - emitDefaultValueAssignments(ctor); - emitRestParameter(ctor); - if (node.baseType) { - var superCall = findInitialSuperCall(ctor); - if (superCall) { - writeLine(); - emit(superCall); - } - } - emitParameterPropertyAssignments(ctor); - } - else { - if (node.baseType) { - writeLine(); - emitStart(node.baseType); - write("_super.apply(this, arguments);"); - emitEnd(node.baseType); - } - } - emitMemberAssignments(node, /*nonstatic*/0); - if (ctor) { - var statements: Node[] = (ctor.body).statements; - if (superCall) statements = statements.slice(1); - emitLines(statements); - } - decreaseIndent(); - writeLine(); - emitToken(SyntaxKind.CloseBraceToken, ctor ? (ctor.body).statements.end : node.members.end); - scopeEmitEnd(); - emitEnd(ctor || node); + emitConstructorOfClass(); emitMemberFunctions(node); emitMemberAssignments(node, NodeFlags.Static); writeLine(); @@ -1437,9 +1608,77 @@ module ts { emitEnd(node); write(";"); } + emitTrailingComments(node); + + function emitConstructorOfClass() { + // Emit the constructor overload pinned comments + forEach(node.members, member => { + if (member.kind === SyntaxKind.Constructor && !(member).body) { + emitPinnedOrTripleSlashComments(member); + } + }); + + var ctor = getFirstConstructorWithBody(node); + if (ctor) { + emitLeadingComments(ctor); + } + emitStart(ctor || node); + write("function "); + emit(node.name); + emitSignatureParameters(ctor); + write(" {"); + scopeEmitStart(node, "constructor"); + increaseIndent(); + if (ctor) { + emitDetachedComments((ctor.body).statements); + } + emitCaptureThisForNodeIfNecessary(node); + if (ctor) { + emitDefaultValueAssignments(ctor); + emitRestParameter(ctor); + if (node.baseType) { + var superCall = findInitialSuperCall(ctor); + if (superCall) { + writeLine(); + emit(superCall); + } + } + emitParameterPropertyAssignments(ctor); + } + else { + if (node.baseType) { + writeLine(); + emitStart(node.baseType); + write("_super.apply(this, arguments);"); + emitEnd(node.baseType); + } + } + emitMemberAssignments(node, /*nonstatic*/0); + if (ctor) { + var statements: Node[] = (ctor.body).statements; + if (superCall) statements = statements.slice(1); + emitLines(statements); + } + writeLine(); + if (ctor) { + emitLeadingCommentsOfPosition((ctor.body).statements.end); + } + decreaseIndent(); + emitToken(SyntaxKind.CloseBraceToken, ctor ? (ctor.body).statements.end : node.members.end); + scopeEmitEnd(); + emitEnd(ctor || node); + if (ctor) { + emitTrailingComments(ctor); + } + } + } + + function emitInterfaceDeclaration(node: InterfaceDeclaration) { + emitPinnedOrTripleSlashComments(node); } function emitEnumDeclaration(node: EnumDeclaration) { + emitLeadingComments(node); if (!(node.flags & NodeFlags.Export)) { emitStart(node); write("var "); @@ -1456,26 +1695,7 @@ module ts { write(") {"); increaseIndent(); scopeEmitStart(node); - forEach(node.members, member => { - writeLine(); - emitStart(member); - write(resolver.getLocalNameOfContainer(node)); - write("["); - write(resolver.getLocalNameOfContainer(node)); - write("["); - emitQuotedIdentifier(member.name); - write("] = "); - if (member.initializer) { - emit(member.initializer); - } - else { - write(resolver.getEnumMemberValue(member).toString()); - } - write("] = "); - emitQuotedIdentifier(member.name); - emitEnd(member); - write(";"); - }); + emitEnumMemberDeclarations(); decreaseIndent(); writeLine(); emitToken(SyntaxKind.CloseBraceToken, node.members.end); @@ -1496,6 +1716,32 @@ module ts { emitEnd(node); write(";"); } + emitTrailingComments(node); + + function emitEnumMemberDeclarations() { + forEach(node.members, member => { + writeLine(); + emitLeadingComments(member); + emitStart(member); + write(resolver.getLocalNameOfContainer(node)); + write("["); + write(resolver.getLocalNameOfContainer(node)); + write("["); + emitQuotedIdentifier(member.name); + write("] = "); + if (member.initializer) { + emit(member.initializer); + } + else { + write(resolver.getEnumMemberValue(member).toString()); + } + write("] = "); + emitQuotedIdentifier(member.name); + emitEnd(member); + write(";"); + emitTrailingComments(member); + }); + } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration: ModuleDeclaration): ModuleDeclaration { @@ -1506,7 +1752,11 @@ module ts { } function emitModuleDeclaration(node: ModuleDeclaration) { - if (!isInstantiated(node)) return; + if (!isInstantiated(node)) { + return emitPinnedOrTripleSlashComments(node); + } + + emitLeadingComments(node); if (!(node.flags & NodeFlags.Export)) { emitStart(node); write("var "); @@ -1553,6 +1803,7 @@ module ts { emitEnd(node); write(";"); } + emitTrailingComments(node); } function emitImportDeclaration(node: ImportDeclaration) { @@ -1569,16 +1820,19 @@ module ts { if (node.externalModuleName && node.parent.kind === SyntaxKind.SourceFile && compilerOptions.module === ModuleKind.AMD) { if (node.flags & NodeFlags.Export) { writeLine(); + emitLeadingComments(node); emitStart(node); emitModuleMemberName(node); write(" = "); emit(node.name); write(";"); emitEnd(node); + emitTrailingComments(node); } } else { writeLine(); + emitLeadingComments(node); emitStart(node); if (!(node.flags & NodeFlags.Export)) write("var "); emitModuleMemberName(node); @@ -1595,6 +1849,7 @@ module ts { } write(";"); emitEnd(node); + emitTrailingComments(node); } } } @@ -1691,6 +1946,9 @@ module ts { function emitSourceFile(node: SourceFile) { currentSourceFile = node; + // 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) { @@ -1725,7 +1983,14 @@ module ts { } function emitNode(node: Node) { - if (!node || node.flags & NodeFlags.Ambient) return; + if (!node) { + return; + } + + if (node.flags & NodeFlags.Ambient) { + return emitPinnedOrTripleSlashComments(node); + } + switch (node.kind) { case SyntaxKind.Identifier: return emitIdentifier(node); @@ -1829,6 +2094,8 @@ module ts { return emitVariableDeclaration(node); case SyntaxKind.ClassDeclaration: return emitClassDeclaration(node); + case SyntaxKind.InterfaceDeclaration: + return emitInterfaceDeclaration(node); case SyntaxKind.EnumDeclaration: return emitEnumDeclaration(node); case SyntaxKind.ModuleDeclaration: @@ -1840,6 +2107,137 @@ module ts { } } + function hasDetachedComments(pos: number) { + return detachedCommentsInfo !== undefined && detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos === pos; + } + + function getLeadingCommentsWithoutDetachedComments() { + // get the leading comments from detachedPos + var leadingComments = getLeadingComments(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); + if (detachedCommentsInfo.length - 1) { + detachedCommentsInfo.pop(); + } + else { + detachedCommentsInfo = undefined; + } + + return leadingComments; + } + + function getLeadingCommentsToEmit(node: Node) { + // Emit the leading comments only if the parent's pos doesnt match because parent should take care of emitting these comments + if (node.parent.kind === SyntaxKind.SourceFile || node.pos !== node.parent.pos) { + var leadingComments: Comment[]; + if (hasDetachedComments(node.pos)) { + // get comments without detached comments + leadingComments = getLeadingCommentsWithoutDetachedComments(); + } + else { + // get the leading comments from the node + leadingComments = getLeadingCommentsOfNode(node, currentSourceFile); + } + return leadingComments; + } + } + + function emitLeadingDeclarationComments(node: Node) { + var leadingComments = getLeadingCommentsToEmit(node); + emitNewLineBeforeLeadingComments(node, leadingComments, writer); + // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space + emitComments(leadingComments, /*trailingSeparator*/ true, writer, writeComment); + } + + function emitTrailingDeclarationComments(node: Node) { + // Emit the trailing comments only if the parent's end doesnt match + if (node.parent.kind === SyntaxKind.SourceFile || node.end !== node.parent.end) { + var trailingComments = getTrailingComments(currentSourceFile.text, node.end); + // trailing comments are emitted at space/*trailing comment1 */space/*trailing comment*/ + emitComments(trailingComments, /*trailingSeparator*/ false, writer, writeComment); + } + } + + function emitLeadingCommentsOfLocalPosition(pos: number) { + var leadingComments: Comment[]; + if (hasDetachedComments(pos)) { + // get comments without detached comments + leadingComments = getLeadingCommentsWithoutDetachedComments(); + } + else { + // get the leading comments from the node + leadingComments = getLeadingComments(currentSourceFile.text, pos); + } + emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer); + // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space + emitComments(leadingComments, /*trailingSeparator*/ true, writer, writeComment); + } + + function emitDetachedCommentsAtPosition(node: TextRange) { + var leadingComments = getLeadingComments(currentSourceFile.text, node.pos); + if (leadingComments) { + var detachedComments: Comment[] = []; + var lastComment: Comment; + + forEach(leadingComments, comment => { + if (lastComment) { + var lastCommentLine = getLineOfLocalPosition(lastComment.end); + var commentLine = getLineOfLocalPosition(comment.pos); + + if (commentLine >= lastCommentLine + 2) { + // There was a blank line between the last comment and this comment. This + // comment is not part of the copyright comments. Return what we have so + // far. + return detachedComments; + } + } + + detachedComments.push(comment); + lastComment = comment; + }); + + if (detachedComments.length) { + // All comments look like they could have been part of the copyright header. Make + // sure there is at least one blank line between it and the node. If not, it's not + // a copyright header. + var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end); + var astLine = getLineOfLocalPosition(skipTrivia(currentSourceFile.text, node.pos)); + if (astLine >= lastCommentLine + 2) { + // Valid detachedComments + emitNewLineBeforeLeadingComments(node, leadingComments, writer); + emitComments(detachedComments, /*trailingSeparator*/ true, writer, writeComment); + var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end }; + if (detachedCommentsInfo) { + detachedCommentsInfo.push(currentDetachedCommentInfo); + } + else { + detachedCommentsInfo = [currentDetachedCommentInfo]; + } + } + } + } + } + + function emitPinnedOrTripleSlashCommentsOfNode(node: Node) { + var pinnedComments = ts.filter(getLeadingCommentsToEmit(node), isPinnedOrTripleSlashComment); + + function isPinnedOrTripleSlashComment(comment: Comment) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === CharacterCodes.asterisk) { + return currentSourceFile.text.charCodeAt(comment.pos + 2) === CharacterCodes.exclamation; + } + // Verify this is /// comment, but do the regexp match only when we first can find /// in the comment text + // so that we dont end up computing comment string and doing match for all // comments + else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === CharacterCodes.slash && + comment.pos + 2 < comment.end && + currentSourceFile.text.charCodeAt(comment.pos + 2) === CharacterCodes.slash && + currentSourceFile.text.substring(comment.pos, comment.end).match(fullTripleSlashReferencePathRegEx)) { + return true; + } + } + + emitNewLineBeforeLeadingComments(node, pinnedComments, writer); + // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space + emitComments(pinnedComments, /*trailingSeparator*/ true, writer, writeComment); + } + if (compilerOptions.sourceMap) { initializeEmitterWithSourceMaps(); } @@ -1869,6 +2267,8 @@ module ts { var enclosingDeclaration: Node; var reportedDeclarationError = false; + var emitJsDocComments = compilerOptions.removeComments ? function (declaration: Declaration) { } : writeJsDocComments; + var aliasDeclarationEmitInfo: { declaration: ImportDeclaration; outputPos: number; @@ -1946,6 +2346,15 @@ module ts { } } + function writeJsDocComments(declaration: Declaration) { + if (declaration) { + var jsDocComments = getJsDocComments(declaration, currentSourceFile); + emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer); + // jsDoc comments are emitted at /*leading comment1 */space/*leading comment*/space + emitComments(jsDocComments, /*trailingSeparator*/ true, writer, writeCommentRange); + } + } + function emitSourceTextOfNode(node: Node) { write(getSourceTextOfLocalNode(node)); } @@ -2004,6 +2413,7 @@ module ts { function writeImportDeclaration(node: ImportDeclaration) { // note usage of writer. methods instead of aliases created, just to make sure we are using // correct writer especially to handle asynchronous alias writing + emitJsDocComments(node); if (node.flags & NodeFlags.Export) { writer.write("export "); } @@ -2043,6 +2453,7 @@ module ts { function emitModuleDeclaration(node: ModuleDeclaration) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("module "); emitSourceTextOfNode(node.name); @@ -2066,6 +2477,7 @@ module ts { function emitEnumDeclaration(node: EnumDeclaration) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("enum "); emitSourceTextOfNode(node.name); @@ -2080,6 +2492,7 @@ module ts { } function emitEnumMemberDeclaration(node: EnumMember) { + emitJsDocComments(node); emitSourceTextOfNode(node.name); var enumMemberValue = resolver.getEnumMemberValue(node); if (enumMemberValue !== undefined) { @@ -2155,6 +2568,9 @@ module ts { }; } + increaseIndent(); + emitJsDocComments(node); + decreaseIndent(); emitSourceTextOfNode(node.name); // If there is constraint present and this is not a type parameter of the private method emit the constraint if (node.constraint && (node.parent.kind !== SyntaxKind.Method || !(node.parent.flags & NodeFlags.Private))) { @@ -2231,6 +2647,7 @@ module ts { } if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("class "); emitSourceTextOfNode(node.name); @@ -2255,6 +2672,7 @@ module ts { function emitInterfaceDeclaration(node: InterfaceDeclaration) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("interface "); emitSourceTextOfNode(node.name); @@ -2274,6 +2692,7 @@ module ts { } function emitPropertyDeclaration(node: PropertyDeclaration) { + emitJsDocComments(node); emitDeclarationFlags(node); emitVariableDeclaration(node); write(";"); @@ -2340,6 +2759,7 @@ module ts { function emitVariableStatement(node: VariableStatement) { var hasDeclarationWithEmit = forEach(node.declarations, varDeclaration => resolver.isDeclarationVisible(varDeclaration)); if (hasDeclarationWithEmit) { + emitJsDocComments(node); emitDeclarationFlags(node); write("var "); emitCommaList(node.declarations, emitVariableDeclaration); @@ -2351,6 +2771,8 @@ module ts { function emitAccessorDeclaration(node: AccessorDeclaration) { var accessors = getAllAccessorDeclarations(node.parent, node); if (node === accessors.firstAccessor) { + emitJsDocComments(accessors.getAccessor); + emitJsDocComments(accessors.setAccessor); emitDeclarationFlags(node); emitSourceTextOfNode(node.name); if (!(node.flags & NodeFlags.Private)) { @@ -2411,6 +2833,7 @@ module ts { // so no need to verify if the declaration is visible if ((node.kind !== SyntaxKind.FunctionDeclaration || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); if (node.kind === SyntaxKind.FunctionDeclaration) { write("function "); @@ -2430,11 +2853,16 @@ module ts { } function emitConstructSignatureDeclaration(node: SignatureDeclaration) { + emitJsDocComments(node); write("new "); emitSignatureDeclaration(node); } function emitSignatureDeclaration(node: SignatureDeclaration) { + if (node.kind === SyntaxKind.CallSignature || node.kind === SyntaxKind.IndexSignature) { + // Only index and call signatures are emitted directly, so emit their js doc comments, rest will do that in their own functions + emitJsDocComments(node); + } emitTypeParameters(node.typeParameters); if (node.kind === SyntaxKind.IndexSignature) { write("["); @@ -2529,6 +2957,8 @@ module ts { } function emitParameterDeclaration(node: ParameterDeclaration) { + increaseIndent(); + emitJsDocComments(node); if (node.flags & NodeFlags.Rest) { write("..."); } @@ -2536,6 +2966,7 @@ module ts { if (node.initializer || (node.flags & NodeFlags.QuestionMark)) { write("?"); } + decreaseIndent(); if (!(node.parent.flags & NodeFlags.Private)) { write(": "); @@ -2672,7 +3103,7 @@ module ts { compilerHost.getCurrentDirectory(), /*isAbsolutePathAnUrl*/ false); - referencePathsOutput += "/// " + newLine; + referencePathsOutput += "/// " + newLine; } if (root) { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index d8d9352b546..5f466eb7bce 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1,4 +1,3 @@ -/// /// /// /// @@ -9,7 +8,7 @@ module ts { export function getNodeConstructor(kind: SyntaxKind): new () => Node { return nodeConstructors[kind] || (nodeConstructors[kind] = objectAllocator.getNodeConstructor(kind)); } - + function createRootNode(kind: SyntaxKind, pos: number, end: number, flags: NodeFlags): Node { var node = new (getNodeConstructor(kind))(); node.pos = pos; @@ -139,6 +138,34 @@ module ts { return ((node).expression).text === "use strict"; } + export function getLeadingCommentsOfNode(node: Node, sourceFileOfNode: SourceFile) { + // If parameter/type parameter, the prev token trailing comments are part of this node too + if (node.kind === SyntaxKind.Parameter || node.kind === SyntaxKind.TypeParameter) { + // eg (/** blah */ a, /** blah */ b); + return concatenate(getTrailingComments(sourceFileOfNode.text, node.pos), + // eg: ( + // /** blah */ a, + // /** blah */ b); + getLeadingComments(sourceFileOfNode.text, node.pos)); + } + else { + return getLeadingComments(sourceFileOfNode.text, node.pos); + } + } + + export function getJsDocComments(node: Declaration, sourceFileOfNode: SourceFile) { + return filter(getLeadingCommentsOfNode(node, sourceFileOfNode), comment => isJsDocComment(comment)); + + function isJsDocComment(comment: Comment) { + // js doc is if comment is starting with /** but not if it is /**/ + return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === CharacterCodes.asterisk && + sourceFileOfNode.text.charCodeAt(comment.pos + 2) === CharacterCodes.asterisk && + sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== CharacterCodes.slash; + } + } + + export var fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/ + // Invokes a callback for each child of the given node. The 'cbNode' callback is invoked for all child nodes // stored in properties. If a 'cbNodes' callback is specified, it is invoked for embedded arrays; otherwise, // embedded arrays are flattened and the 'cbNode' callback is invoked for each element. If a callback returns @@ -337,6 +364,46 @@ module ts { return false; } + export function isDeclaration(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.TypeParameter: + case SyntaxKind.Parameter: + case SyntaxKind.VariableDeclaration: + case SyntaxKind.Property: + case SyntaxKind.PropertyAssignment: + case SyntaxKind.EnumMember: + case SyntaxKind.Method: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.ClassDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.EnumDeclaration: + case SyntaxKind.ModuleDeclaration: + case SyntaxKind.ImportDeclaration: + return true; + } + return false; + } + + // True if the given identifier, string literal, or number literal is the name of a declaration node + export function isDeclarationOrFunctionExpressionOrCatchVariableName(name: Node): boolean { + if (name.kind !== SyntaxKind.Identifier && name.kind !== SyntaxKind.StringLiteral && name.kind !== SyntaxKind.NumericLiteral) { + return false; + } + + var parent = name.parent; + if (isDeclaration(parent) || parent.kind === SyntaxKind.FunctionExpression) { + return (parent).name === name; + } + + if (parent.kind === SyntaxKind.CatchBlock) { + return (parent).variable === name; + } + + return false; + } + enum ParsingContext { SourceElements, // Elements in source file ModuleElements, // Elements in module declaration @@ -421,7 +488,23 @@ module ts { nodeIsNestedInLabel(label: Identifier, requireIterationStatement: boolean, stopAtFunctionBoundary: boolean): ControlBlockContext; } - export function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, version: number = 0, isOpen: boolean = false): SourceFile { + export function isKeyword(token: SyntaxKind): boolean { + return SyntaxKind.FirstKeyword <= token && token <= SyntaxKind.LastKeyword; + } + + export function isModifier(token: SyntaxKind): boolean { + switch (token) { + case SyntaxKind.PublicKeyword: + case SyntaxKind.PrivateKeyword: + case SyntaxKind.StaticKeyword: + case SyntaxKind.ExportKeyword: + case SyntaxKind.DeclareKeyword: + return true; + } + return false; + } + + export function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, version: string, isOpen: boolean = false): SourceFile { var file: SourceFile; var scanner: Scanner; var token: SyntaxKind; @@ -550,6 +633,13 @@ module ts { return getLineAndCharacterOfPosition(lineStarts, position); } + function getPositionFromSourceLineAndCharacter(line: number, character: number): number { + if (!lineStarts) { + lineStarts = getLineStarts(sourceText); + } + return getPositionFromLineAndCharacter(lineStarts, line, character); + } + function error(message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { var start = scanner.getTokenPos(); var length = scanner.getTextPos() - start; @@ -745,6 +835,10 @@ module ts { return createNode(SyntaxKind.Missing); } + function internIdentifier(text: string): string { + return hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text); + } + // An identifier that starts with two underscores has an extra underscore character prepended to it to avoid issues // with magic property names like '__proto__'. The 'identifiers' object is used to share a single string instance for // each identifier in order to reduce memory consumption. @@ -753,7 +847,7 @@ module ts { if (isIdentifier) { var node = createNode(SyntaxKind.Identifier); var text = escapeIdentifier(scanner.getTokenValue()); - node.text = hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text); + node.text = internIdentifier(text); nextToken(); return finishNode(node); } @@ -775,28 +869,11 @@ module ts { function parsePropertyName(): Identifier { if (token === SyntaxKind.StringLiteral || token === SyntaxKind.NumericLiteral) { - return parsePrimaryExpression(); + return parseLiteralNode(/*internName:*/ true); } return parseIdentifierName(); } - - function isKeyword(token: SyntaxKind): boolean { - return SyntaxKind.FirstKeyword <= token && token <= SyntaxKind.LastKeyword; - } - - function isModifier(token: SyntaxKind): boolean { - switch (token) { - case SyntaxKind.PublicKeyword: - case SyntaxKind.PrivateKeyword: - case SyntaxKind.StaticKeyword: - case SyntaxKind.ExportKeyword: - case SyntaxKind.DeclareKeyword: - return true; - } - return false; - } - function parseContextualModifier(t: SyntaxKind): boolean { return token === t && tryParse(() => { nextToken(); @@ -1058,9 +1135,11 @@ module ts { return finishNode(node); } - function parseLiteralNode(): LiteralExpression { + function parseLiteralNode(internName?:boolean): LiteralExpression { var node = createNode(token); - node.text = scanner.getTokenValue(); + var text = scanner.getTokenValue(); + node.text = internName ? internIdentifier(text) : text; + var tokenPos = scanner.getTokenPos(); nextToken(); finishNode(node); @@ -1087,7 +1166,7 @@ module ts { } function parseStringLiteral(): LiteralExpression { - if (token === SyntaxKind.StringLiteral) return parseLiteralNode(); + if (token === SyntaxKind.StringLiteral) return parseLiteralNode(/*internName:*/ true); error(Diagnostics.String_literal_expected); return createMissingNode(); } @@ -1944,7 +2023,7 @@ module ts { primaryExpression.kind === SyntaxKind.SuperKeyword && token !== SyntaxKind.OpenParenToken && token !== SyntaxKind.DotToken; if (illegalUsageOfSuperKeyword) { - error(Diagnostics.super_must_be_followed_by_argument_list_or_member_access); + error(Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); } var expr = parseCallAndAccess(primaryExpression, /* inNewExpression */ false); @@ -1997,15 +2076,18 @@ module ts { var indexedAccess = createNode(SyntaxKind.IndexedAccess, expr.pos); indexedAccess.object = expr; - // It's not uncommon for a user to write: "new Type[]". Check for that common pattern - // and report a better error message. + // It's not uncommon for a user to write: "new Type[]". + // Check for that common pattern and report a better error message. if (inNewExpression && parseOptional(SyntaxKind.CloseBracketToken)) { indexedAccess.index = createMissingNode(); grammarErrorAtPos(bracketStart, scanner.getStartPos() - bracketStart, Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); } - // Otherwise parse the indexed access normally. else { indexedAccess.index = parseExpression(); + if (indexedAccess.index.kind === SyntaxKind.StringLiteral || indexedAccess.index.kind === SyntaxKind.NumericLiteral) { + var literal = indexedAccess.index; + literal.text = internIdentifier(literal.text); + } parseExpected(SyntaxKind.CloseBracketToken); } @@ -2393,8 +2475,6 @@ module ts { function parseBreakOrContinueStatement(kind: SyntaxKind): BreakOrContinueStatement { var node = createNode(kind); var errorCountBeforeStatement = file.syntacticErrors.length; - var keywordStart = scanner.getTokenPos(); - var keywordLength = scanner.getTextPos() - keywordStart; parseExpected(kind === SyntaxKind.BreakStatement ? SyntaxKind.BreakKeyword : SyntaxKind.ContinueKeyword); if (!canParseSemicolon()) node.label = parseIdentifier(); parseSemicolon(); @@ -3496,12 +3576,11 @@ module ts { file.hasNoDefaultLib = true; } else { - var fullReferenceRegEx = /^(\/\/\/\s*/; - var matchResult = fullReferenceRegEx.exec(comment); + var matchResult = fullTripleSlashReferencePathRegEx.exec(comment); if (!matchResult) { var start = range.pos; var length = range.end - start; - errorAtPos(start, length, Diagnostics.Invalid_reference_comment); + errorAtPos(start, length, Diagnostics.Invalid_reference_directive_syntax); } else { referencedFiles.push({ @@ -3546,6 +3625,7 @@ module ts { file.filename = normalizePath(filename); file.text = sourceText; file.getLineAndCharacterFromPosition = getLineAndCharacterlFromSourcePosition; + file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; file.syntacticErrors = []; file.semanticErrors = []; var referenceComments = processReferenceComments(); @@ -3558,6 +3638,7 @@ module ts { file.version = version; file.isOpen = isOpen; file.languageVersion = languageVersion; + file.identifiers = identifiers; return file; } @@ -3630,23 +3711,22 @@ module ts { // Get source file from normalized filename function findSourceFile(filename: string, isDefaultLib: boolean, refFile?: SourceFile, refStart?: number, refLength?: number): SourceFile { - // Look through existing source files to see if we've encountered it. var canonicalName = host.getCanonicalFileName(filename); - var file = getSourceFile(filename); - if (file) { - if (host.useCaseSensitiveFileNames() && canonicalName !== file.filename) { + if (hasProperty(filesByName, canonicalName)) { + // We've already looked for this file, use cached result + var file = filesByName[canonicalName]; + if (file && host.useCaseSensitiveFileNames() && canonicalName !== file.filename) { errors.push(createFileDiagnostic(refFile, refStart, refLength, Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, file.filename)); - } + } } else { - // If we haven't, read the file. - file = host.getSourceFile(filename, options.target, hostErrorMessage => { + // We haven't looked for this file, do so now and cache result + var file = filesByName[canonicalName] = host.getSourceFile(filename, options.target, hostErrorMessage => { errors.push(createFileDiagnostic(refFile, refStart, refLength, Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage)); }); if (file) { - filesByName[host.getCanonicalFileName(filename)] = file; seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib; if (!options.noResolve) { var basePath = getDirectoryPath(filename); @@ -3664,7 +3744,6 @@ module ts { }); } } - return file; } diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 2de92ed02cc..614c190d426 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -249,7 +249,8 @@ module ts { var pos = 0; var lineStart = 0; while (pos < text.length) { - switch (text.charCodeAt(pos++)) { + var ch = text.charCodeAt(pos++); + switch (ch) { case CharacterCodes.carriageReturn: if (text.charCodeAt(pos) === CharacterCodes.lineFeed) { pos++; @@ -258,12 +259,23 @@ module ts { result.push(lineStart); lineStart = pos; break; + default: + if (ch > CharacterCodes.maxAsciiCharacter && isLineBreak(ch)) { + result.push(lineStart); + lineStart = pos; + } + break; } } result.push(lineStart); return result; } + export function getPositionFromLineAndCharacter(lineStarts: number[], line: number, character: number): number { + Debug.assert(line > 0); + return lineStarts[line - 1] + character - 1; + } + export function getLineAndCharacterOfPosition(lineStarts: number[], position: number) { var lineNumber = binarySearch(lineStarts, position); if (lineNumber < 0) { @@ -286,14 +298,14 @@ module ts { var hasOwnProperty = Object.prototype.hasOwnProperty; - function isWhiteSpace(ch: number): boolean { + export function isWhiteSpace(ch: number): boolean { return ch === CharacterCodes.space || ch === CharacterCodes.tab || ch === CharacterCodes.verticalTab || ch === CharacterCodes.formFeed || ch === CharacterCodes.nonBreakingSpace || ch === CharacterCodes.ogham || ch >= CharacterCodes.enQuad && ch <= CharacterCodes.zeroWidthSpace || ch === CharacterCodes.narrowNoBreakSpace || ch === CharacterCodes.mathematicalSpace || ch === CharacterCodes.ideographicSpace || ch === CharacterCodes.byteOrderMark; } - function isLineBreak(ch: number): boolean { - return ch === CharacterCodes.lineFeed || ch === CharacterCodes.carriageReturn || ch === CharacterCodes.lineSeparator || ch === CharacterCodes.paragraphSeparator; + export function isLineBreak(ch: number): boolean { + return ch === CharacterCodes.lineFeed || ch === CharacterCodes.carriageReturn || ch === CharacterCodes.lineSeparator || ch === CharacterCodes.paragraphSeparator || ch === CharacterCodes.nextLine; } function isDigit(ch: number): boolean { @@ -359,9 +371,9 @@ module ts { // between the given position and the next line break are returned. The return value is an array containing a TextRange for each // comment. Single-line comment ranges include the the beginning '//' characters but not the ending line break. Multi-line comment // ranges include the beginning '/* and ending '*/' characters. The return value is undefined if no comments were found. - function getCommentRanges(text: string, pos: number, trailing: boolean): TextRange[] { - var result: TextRange[]; - var collecting = trailing; + function getCommentRanges(text: string, pos: number, trailing: boolean): Comment[] { + var result: Comment[]; + var collecting = trailing || pos === 0; while (true) { var ch = text.charCodeAt(pos); switch (ch) { @@ -373,6 +385,9 @@ module ts { return result; } collecting = true; + if (result && result.length) { + result[result.length - 1].hasTrailingNewLine = true; + } continue; case CharacterCodes.tab: case CharacterCodes.verticalTab: @@ -382,12 +397,14 @@ module ts { continue; case CharacterCodes.slash: var nextChar = text.charCodeAt(pos + 1); + var hasTrailingNewLine = false; if (nextChar === CharacterCodes.slash || nextChar === CharacterCodes.asterisk) { var startPos = pos; pos += 2; if (nextChar === CharacterCodes.slash) { while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { + hasTrailingNewLine = true; break; } pos++; @@ -404,13 +421,16 @@ module ts { } if (collecting) { if (!result) result = []; - result.push({ pos: startPos, end: pos }); + result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine }); } continue; } break; default: if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (result && result.length && isLineBreak(ch)) { + result[result.length - 1].hasTrailingNewLine = true; + } pos++; continue; } @@ -420,14 +440,26 @@ module ts { } } - export function getLeadingComments(text: string, pos: number): TextRange[] { + export function getLeadingComments(text: string, pos: number): Comment[] { return getCommentRanges(text, pos, /*trailing*/ false); } - export function getTrailingComments(text: string, pos: number): TextRange[] { + export function getTrailingComments(text: string, pos: number): Comment[] { return getCommentRanges(text, pos, /*trailing*/ true); } + export function isIdentifierStart(ch: number, languageVersion: ScriptTarget): boolean { + return ch >= CharacterCodes.A && ch <= CharacterCodes.Z || ch >= CharacterCodes.a && ch <= CharacterCodes.z || + ch === CharacterCodes.$ || ch === CharacterCodes._ || + ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierStart(ch, languageVersion); + } + + export function isIdentifierPart(ch: number, languageVersion: ScriptTarget): boolean { + return ch >= CharacterCodes.A && ch <= CharacterCodes.Z || ch >= CharacterCodes.a && ch <= CharacterCodes.z || + ch >= CharacterCodes._0 && ch <= CharacterCodes._9 || ch === CharacterCodes.$ || ch === CharacterCodes._ || + ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierPart(ch, languageVersion); + } + export function createScanner(languageVersion: ScriptTarget, text?: string, onError?: ErrorCallback, onComment?: CommentCallback): Scanner { var pos: number; // Current position (end position of text of current token) var len: number; // Length of text @@ -589,7 +621,7 @@ module ts { } if (isLineBreak(ch)) { result += text.substring(start, pos); - error(Diagnostics.Unterminated_string_constant); + error(Diagnostics.Unterminated_string_literal); break; } pos++; @@ -750,9 +782,8 @@ module ts { if (text.charCodeAt(pos + 1) === CharacterCodes.asterisk) { pos += 2; - var safeLength = len - 1; // For lookahead. var commentClosed = false; - while (pos < safeLength) { + while (pos < len) { var ch = text.charCodeAt(pos); if (ch === CharacterCodes.asterisk && text.charCodeAt(pos + 1) === CharacterCodes.slash) { @@ -768,7 +799,6 @@ module ts { } if (!commentClosed) { - pos++; error(Diagnostics.Asterisk_Slash_expected); } diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index b0c58f06736..8188cb8e4d1 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -38,7 +38,7 @@ module ts { } function trySetLanguageAndTerritory(language: string, territory: string, errors: Diagnostic[]): boolean { - var compilerFilePath = sys.getExecutingFilePath(); + var compilerFilePath = normalizePath(sys.getExecutingFilePath()); var containingDirectoryPath = getDirectoryPath(compilerFilePath); var filePath = combinePaths(containingDirectoryPath, language); @@ -62,7 +62,7 @@ module ts { return false; } try { - localizedDiagnosticMessages = JSON.parse(fileContents); + ts.localizedDiagnosticMessages = JSON.parse(fileContents); } catch (e) { errors.push(createCompilerDiagnostic(Diagnostics.Corrupted_locale_file_0, filePath)); @@ -86,13 +86,18 @@ module ts { } function reportDiagnostic(diagnostic: Diagnostic) { + var output = ""; + if (diagnostic.file) { var loc = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - sys.write(diagnostic.file.filename + "(" + loc.line + "," + loc.character + "): " + diagnostic.messageText + sys.newLine); - } - else { - sys.write(diagnostic.messageText + sys.newLine); + + output += diagnostic.file.filename + "(" + loc.line + "," + loc.character + "): "; } + + var category = DiagnosticCategory[diagnostic.category].toLowerCase(); + output += category + " TS" + diagnostic.code + ": " + diagnostic.messageText + sys.newLine; + + sys.write(output); } function reportDiagnostics(diagnostics: Diagnostic[]) { @@ -132,6 +137,12 @@ module ts { var currentDirectory: string; var existingDirectories: Map = {}; + function getCanonicalFileName(fileName: string): string { + // if underlying system can distinguish between two files whose names differs only in cases then file name already in canonical form. + // otherwise use toLowerCase as a canonical form. + return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } + function getSourceFile(filename: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile { try { var text = sys.readFile(filename, options.charset); @@ -142,7 +153,7 @@ module ts { } text = ""; } - return text !== undefined ? createSourceFile(filename, text, languageVersion) : undefined; + return text !== undefined ? createSourceFile(filename, text, languageVersion, /*version:*/ "0") : undefined; } function writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void) { @@ -318,6 +329,7 @@ module ts { function compile(commandLine: ParsedCommandLine, compilerHost: CompilerHost) { var parseStart = new Date().getTime(); var program = createProgram(commandLine.filenames, commandLine.options, compilerHost); + var bindStart = new Date().getTime(); var errors = program.getDiagnostics(); if (errors.length) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 34d877c620f..226f0c357cf 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -218,7 +218,11 @@ module ts { FirstKeyword = BreakKeyword, LastKeyword = StringKeyword, FirstFutureReservedWord = ImplementsKeyword, - LastFutureReservedWord = YieldKeyword + LastFutureReservedWord = YieldKeyword, + FirstTypeNode = TypeReference, + LastTypeNode = ArrayType, + FirstPunctuation= OpenBraceToken, + LastPunctuation = CaretEqualsToken } export enum NodeFlags { @@ -517,10 +521,15 @@ module ts { filename: string; } + export interface Comment extends TextRange { + hasTrailingNewLine?: boolean; + } + export interface SourceFile extends Block { filename: string; text: string; getLineAndCharacterFromPosition(position: number): { line: number; character: number }; + getPositionFromLineAndCharacter(line: number, character: number): number; amdDependencies: string[]; referencedFiles: FileReference[]; syntacticErrors: Diagnostic[]; @@ -531,8 +540,9 @@ module ts { identifierCount: number; symbolCount: number; isOpen: boolean; - version: number; + version: string; languageVersion: ScriptTarget; + identifiers: Map; } export interface Program { @@ -598,22 +608,22 @@ module ts { getTypeCount(): number; checkProgram(): void; emitFiles(): EmitResult; - getSymbolOfNode(node: Node): Symbol; getParentOfSymbol(symbol: Symbol): Symbol; getTypeOfSymbol(symbol: Symbol): Type; - getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; getPropertyOfType(type: Type, propetyName: string): Symbol; getSignaturesOfType(type: Type, kind: SignatureKind): Signature[]; getIndexTypeOfType(type: Type, kind: IndexKind): Type; getReturnTypeOfSignature(signature: Signature): Type; - resolveEntityName(location: Node, name: EntityName, meaning: SymbolFlags): Symbol; getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; getSymbolInfo(node: Node): Symbol; - getTypeOfExpression(node: Expression, contextualType?: Type, contextualMapper?: TypeMapper): Type; + getTypeOfNode(node: Node): Type; + getApparentType(type: Type): ApparentType; typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string; getAugmentedPropertiesOfApparentType(type: Type): Symbol[]; + getRootSymbol(symbol: Symbol): Symbol; + getContextualType(node: Node): Type; } export interface TextWriter { @@ -946,7 +956,6 @@ module ts { Warning, Error, Message, - NoPrefix } export interface CompilerOptions { @@ -1009,9 +1018,6 @@ module ts { carriageReturn = 0x0D, // \r lineSeparator = 0x2028, paragraphSeparator = 0x2029, - - // REVIEW: do we need to support this? The scanner doesn't, but our IText does. This seems - // like an odd disparity? (Or maybe it's completely fine for them to be different). nextLine = 0x0085, // Unicode 3.0 space characters diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index 81802516532..60da87b1dfc 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -39,19 +39,21 @@ class CompilerBaselineRunner extends RunnerBase { public checkTestCodeOutput(fileName: string) { describe('compiler tests for ' + fileName, () => { - // strips the fileName from the path. - var justName = fileName.replace(/^.*[\\\/]/, ''); - var content = Harness.IO.readFile(fileName); - var testCaseContent = Harness.TestCaseParser.makeUnitsFromTest(content, 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: 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; var options: ts.CompilerOptions; // equivalent to the files that will be passed on the command line var toBeCompiled: { unitName: string; content: string }[]; @@ -66,6 +68,14 @@ class CompilerBaselineRunner extends RunnerBase { var createNewInstance = false; before(() => { + justName = fileName.replace(/^.*[\\\/]/, ''); // strips the fileName from the path. + content = Harness.IO.readFile(fileName); + testCaseContent = Harness.TestCaseParser.makeUnitsFromTest(content, fileName); + units = testCaseContent.testUnitData; + tcSettings = testCaseContent.settings; + createNewInstance = false; + lastUnit = units[units.length - 1]; + rootDir = lastUnit.originalFilePath.indexOf('conformance') === -1 ? 'tests/cases/compiler/' : lastUnit.originalFilePath.substring(0, lastUnit.originalFilePath.lastIndexOf('/')) + '/'; harnessCompiler = Harness.Compiler.getCompiler(); // We need to assemble the list of input files for the compiler and other related files on the 'filesystem' (ie in a multi-file test) // If the last file in a test uses require or a triple slash reference we'll assume all other files will be brought in via references, @@ -85,8 +95,10 @@ class CompilerBaselineRunner extends RunnerBase { }); } - options = harnessCompiler.compileFiles(toBeCompiled, otherFiles, function (compileResult) { + options = harnessCompiler.compileFiles(toBeCompiled, otherFiles, function (compileResult, _checker) { result = compileResult; + // The checker will be used by typeWriter + checker = _checker; }, function (settings) { harnessCompiler.setCompilerSettings(tcSettings); }); @@ -97,6 +109,7 @@ class CompilerBaselineRunner extends RunnerBase { a fresh compiler instance for themselves and then create a fresh one for the next test. Would be nice to get dev fixes eventually to remove this limitation. */ for (var i = 0; i < tcSettings.length; ++i) { + // noImplicitAny is passed to getCompiler, but target is just passed in the settings blob to setCompilerSettings if (!createNewInstance && (tcSettings[i].flag == "noimplicitany" || tcSettings[i].flag === 'target')) { harnessCompiler = Harness.Compiler.getCompiler({ useExistingInstance: false, @@ -118,6 +131,27 @@ class CompilerBaselineRunner extends RunnerBase { } }); + after(() => { + // Mocha holds onto the closure environment of the describe callback even after the test is done. + // Therefore we have to clean out large objects after the test is done. + justName = undefined; + content = undefined; + testCaseContent = undefined; + units = undefined; + tcSettings = undefined; + lastUnit = undefined; + rootDir = undefined; + result = undefined; + checker = undefined; + options = undefined; + toBeCompiled = undefined; + otherFiles = undefined; + harnessCompiler = undefined; + declToBeCompiled = undefined; + declOtherFiles = undefined; + declResult = undefined; + }); + function getByteOrderMarkText(file: Harness.Compiler.GeneratedFile): string { return file.writeByteOrderMark ? "\u00EF\u00BB\u00BF" : ""; } @@ -157,19 +191,40 @@ class CompilerBaselineRunner extends RunnerBase { // if the .d.ts is non-empty, confirm it compiles correctly as well if (options.declaration && result.errors.length === 0 && result.declFilesCode.length > 0) { - function getDtsFile(file: { unitName: string; content: string }) { + function addDtsFile(file: { unitName: string; content: string }, dtsFiles: { unitName: string; content: string }[]) { if (Harness.Compiler.isDTS(file.unitName)) { - return file; - } else { - var declFile = ts.forEach(result.declFilesCode, - declFile => declFile.fileName === (file.unitName.substr(0, file.unitName.length - ".ts".length) + ".d.ts") + dtsFiles.push(file); + } + else { + var declFile = findResultCodeFile(file.unitName); + // Look if there is --out file corresponding to this ts file + if (!declFile && options.out) { + declFile = findResultCodeFile(options.out); + if (!declFile || findUnit(declFile.fileName, declToBeCompiled) || + findUnit(declFile.fileName, declOtherFiles)) { + return; + } + } + + if (declFile) { + dtsFiles.push({ unitName: declFile.fileName, content: declFile.code }); + return; + } + } + + function findResultCodeFile(fileName: string) { + return ts.forEach(result.declFilesCode, + declFile => declFile.fileName === (fileName.substr(0, fileName.length - ".ts".length) + ".d.ts") ? declFile : undefined); - return { unitName: declFile.fileName, content: declFile.code }; + } + + function findUnit(fileName: string, units: { unitName: string; content: string }[]) { + return ts.forEach(units, unit => unit.unitName === fileName ? unit : undefined); } } - ts.forEach(toBeCompiled, file => { declToBeCompiled.push(getDtsFile(file)); }); - ts.forEach(otherFiles, file => { declOtherFiles.push(getDtsFile(file)); }); + ts.forEach(toBeCompiled, file => addDtsFile(file, declToBeCompiled)); + ts.forEach(otherFiles, file => addDtsFile(file, declOtherFiles)); harnessCompiler.compileFiles(declToBeCompiled, declOtherFiles, function (compileResult) { declResult = compileResult; }, function (settings) { @@ -251,33 +306,16 @@ class CompilerBaselineRunner extends RunnerBase { it('Correct type baselines for ' + fileName, () => { // NEWTODO: Type baselines - if (/* ! */ false && /* ! */ result.errors.length === 0) { + if (result.errors.length === 0) { Harness.Baseline.runBaseline('Correct expression types for ' + fileName, justName.replace(/\.ts/, '.types'), () => { - // TODO: Rewrite this part - //var compiler = new TypeScript.TypeScriptCompiler( - // new TypeScript.NullLogger(), TypeScript.ImmutableCompilationSettings.defaultSettings()); - - //compiler.addFile('lib.d.ts', TypeScript.ScriptSnapshot.fromString(Harness.Compiler.libTextMinimal), - // TypeScript.ByteOrderMark.None, /*version:*/ "0", /*isOpen:*/ true); - - //var allFiles = toBeCompiled.concat(otherFiles); - //allFiles.forEach(file => { - // compiler.addFile(file.unitName, TypeScript.ScriptSnapshot.fromString(file.content), - // TypeScript.ByteOrderMark.None, /*version:*/ "0", /*isOpen:*/ true); - //}); - - var allFiles: any[] = []; - var compiler: any = undefined; - - var typeBaselineText = ''; + var allFiles = toBeCompiled.concat(otherFiles).filter(file => !!checker.getProgram().getSourceFile(file.unitName)); var typeLines: string[] = []; var typeMap: { [fileName: string]: { [lineNum: number]: string[]; } } = {}; + var walker = new TypeWriterWalker(checker); allFiles.forEach(file => { var codeLines = file.content.split('\n'); - var walker = new TypeWriterWalker(file.unitName, compiler); - walker.run(); - walker.results.forEach(result => { - var formattedLine = result.identifierName + " : " + result.type; + walker.getTypes(file.unitName).forEach(result => { + var formattedLine = result.sourceText.replace(/\r?\n/g, "") + " : " + result.type; if (!typeMap[file.unitName]) { typeMap[file.unitName] = {}; } @@ -290,23 +328,6 @@ class CompilerBaselineRunner extends RunnerBase { typeMap[file.unitName][result.line] = typeInfo; }); - var typeBaselineText = ''; - var typeLines: string[] = []; - var typeMap: { [fileName: string]: { [lineNum: number]: string[]; } } = {}; - allFiles.forEach(file => { - var codeLines = file.content.split('\n'); - var walker = new TypeWriterWalker(file.unitName, compiler); - walker.run(); - walker.results.forEach(result => { - var formattedLine = result.identifierName + " : " + result.type; - if (!typeMap[file.unitName]) { - typeMap[file.unitName] = {}; - } else { - typeLines.push('No type information for this code.'); - } - }); - }); - typeLines.push('=== ' + file.unitName + ' ===\r\n'); for (var i = 0; i < codeLines.length; i++) { var currentCodeLine = codeLines[i]; diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 0fa27f0d1fa..c4cb3662eea 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -204,30 +204,29 @@ module FourSlash { this.cancellationToken = new TestCancellationToken(); this.languageServiceShimHost = new Harness.LanguageService.TypeScriptLS(this.cancellationToken); - var harnessCompiler = Harness.Compiler.getCompiler(); var inputFiles: { unitName: string; content: string }[] = []; testData.files.forEach(file => { var fixedPath = file.fileName.substr(file.fileName.indexOf('tests/')); - harnessCompiler.addInputFile({ unitName: fixedPath, content: file.content }); }); + // NEWTODO: disable resolution for now. // If the last unit contains require( or /// reference then consider it the only input file // and the rest will be added via resolution. If not, then assume we have multiple files // with 0 references in any of them. We could be smarter here to allow scenarios like // 2 files without references and 1 file with a reference but we have 0 tests like that // at the moment and an exhaustive search of the test files for that content could be quite slow. var lastFile = testData.files[testData.files.length - 1]; - if (/require\(/.test(lastFile.content) || /reference\spath/.test(lastFile.content)) { - inputFiles.push({ unitName: lastFile.fileName, content: lastFile.content }); - } else { + //if (/require\(/.test(lastFile.content) || /reference\spath/.test(lastFile.content)) { + // inputFiles.push({ unitName: lastFile.fileName, content: lastFile.content }); + //} else { inputFiles = testData.files.map(file => { return { unitName: file.fileName, content: file.content }; }); - } + //} + // NEWTODO: Re-implement commented-out section - //harnessCompiler.addInputFiles(inputFiles); //try { // var resolvedFiles = harnessCompiler.resolve(); @@ -597,6 +596,29 @@ module FourSlash { } } + public verifyReferencesAtPositionListContains(fileName: string, start: number, end: number, isWriteAccess?: boolean) { + this.taoInvalidReason = 'verifyReferencesAtPositionListContains NYI'; + + var references = this.getReferencesAtCaret(); + + if (!references || references.length === 0) { + throw new Error('verifyReferencesAtPositionListContains failed - found 0 references, expected at least one.'); + } + + for (var i = 0; i < references.length; i++) { + var reference = references[i]; + if (reference && reference.fileName === fileName && reference.textSpan.start() === start && reference.textSpan.end() === end) { + if (typeof isWriteAccess !== "undefined" && reference.isWriteAccess !== isWriteAccess) { + throw new Error('verifyReferencesAtPositionListContains failed - item isWriteAccess value doe not match, actual: ' + reference.isWriteAccess + ', expected: ' + isWriteAccess + '.'); + } + return; + } + } + + var missingItem = { fileName: fileName, start: start, end: end, isWriteAccess: isWriteAccess }; + throw new Error('verifyReferencesAtPositionListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(references) + ')'); + } + public verifyReferencesCountIs(count: number, localFilesOnly: boolean = true) { this.taoInvalidReason = 'verifyReferences NYI'; @@ -606,19 +628,19 @@ module FourSlash { if (localFilesOnly) { var localFiles = this.testData.files.map(file => file.fileName); // Count only the references in local files. Filter the ones in lib and other files. - references.forEach((entry) => { + ts.forEach(references, entry => { if (localFiles.some((filename) => filename === entry.fileName)) { ++referencesCount; } }); } else { - referencesCount = references.length; + referencesCount = references && references.length || 0; } if (referencesCount !== count) { var condition = localFilesOnly ? "excluding libs" : "including libs"; - throw new Error("Expected references count (" + condition + ") to be " + count + ", but is actually " + references.length); + throw new Error("Expected references count (" + condition + ") to be " + count + ", but is actually " + referencesCount); } } @@ -732,22 +754,22 @@ module FourSlash { this.taoInvalidReason = 'verifyCurrentSignatureHelpIs NYI'; var help = this.getActiveSignatureHelp(); - assert.equal(help.signatureInfo, expected); + assert.equal(help.prefix + help.parameters.map(p => p.display).join(help.separator) + help.suffix, expected); } public verifyCurrentParameterIsVariable(isVariable: boolean) { this.taoInvalidReason = 'verifyCurrentParameterIsVariable NYI'; - var activeParameter = this.getActiveParameter(); - assert.isNotNull(activeParameter.parameter); - assert.equal(isVariable, activeParameter.parameter.isVariable); + var signature = this.getActiveSignatureHelp(); + assert.isNotNull(signature); + assert.equal(isVariable, signature.isVariadic); } public verifyCurrentParameterHelpName(name: string) { this.taoInvalidReason = 'verifyCurrentParameterHelpName NYI'; var activeParameter = this.getActiveParameter(); - var activeParameterName = activeParameter.parameter ? activeParameter.parameter.name : activeParameter.typeParameter.name; + var activeParameterName = activeParameter.name; assert.equal(activeParameterName, name); } @@ -756,16 +778,14 @@ module FourSlash { var activeSignature = this.getActiveSignatureHelp(); var activeParameter = this.getActiveParameter(); - var activeParameterMinChar = activeParameter.parameter ? activeParameter.parameter.minChar : activeParameter.typeParameter.minChar; - var activeParameterLimChar = activeParameter.parameter ? activeParameter.parameter.limChar : activeParameter.typeParameter.limChar; - assert.equal(activeSignature.signatureInfo.substring(activeParameterMinChar, activeParameterLimChar), parameter); + assert.equal(activeParameter.display, parameter); } public verifyCurrentParameterHelpDocComment(docComment: string) { this.taoInvalidReason = 'verifyCurrentParameterHelpDocComment NYI'; var activeParameter = this.getActiveParameter(); - var activeParameterDocComment = activeParameter.parameter ? activeParameter.parameter.docComment : activeParameter.typeParameter.docComment; + var activeParameterDocComment = activeParameter.documentation; assert.equal(activeParameterDocComment, docComment); } @@ -778,13 +798,13 @@ module FourSlash { public verifyCurrentSignatureHelpTypeParameterCount(expectedCount: number) { this.taoInvalidReason = 'verifyCurrentSignatureHelpTypeParameterCount NYI'; - assert.equal(this.getActiveSignatureHelp().typeParameters.length, expectedCount); + // assert.equal(this.getActiveSignatureHelp().typeParameters.length, expectedCount); } public verifyCurrentSignatureHelpDocComment(docComment: string) { this.taoInvalidReason = 'verifyCurrentSignatureHelpDocComment NYI'; - var actualDocComment = this.getActiveSignatureHelp().docComment; + var actualDocComment = this.getActiveSignatureHelp().documentation; assert.equal(actualDocComment, docComment); } @@ -792,15 +812,15 @@ module FourSlash { this.scenarioActions.push(''); this.scenarioActions.push(''); - var help = this.languageService.getSignatureAtPosition(this.activeFile.fileName, this.currentCaretPosition); - var actual = help && help.formal ? help.formal.length : 0; + var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); + var actual = help && help.items ? help.items.length : 0; assert.equal(actual, expected); } public verifySignatureHelpPresent(shouldBePresent = true) { this.taoInvalidReason = 'verifySignatureHelpPresent NYI'; - var actual = this.languageService.getSignatureAtPosition(this.activeFile.fileName, this.currentCaretPosition); + var actual = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); if (shouldBePresent) { if (!actual) { throw new Error("Expected signature help to be present, but it wasn't"); @@ -812,45 +832,32 @@ module FourSlash { } } - private getFormalParameter() { - var help = this.languageService.getSignatureAtPosition(this.activeFile.fileName, this.currentCaretPosition); - return help.formal; - } + //private getFormalParameter() { + // var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); + // return help.formal; + //} private getActiveSignatureHelp() { - var help = this.languageService.getSignatureAtPosition(this.activeFile.fileName, this.currentCaretPosition); - var activeFormal = help.activeFormal; + var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); // If the signature hasn't been narrowed down yet (e.g. no parameters have yet been entered), // 'activeFormal' will be -1 (even if there is only 1 signature). Signature help will show the // first signature in the signature group, so go with that - if (activeFormal === -1) { - activeFormal = 0; - } + var index = help.selectedItemIndex < 0 ? 0 : help.selectedItemIndex; - return help.formal[activeFormal]; + return help.items[index]; } - private getActiveParameter(): { parameter: ts.FormalParameterInfo; typeParameter: ts.FormalTypeParameterInfo; } { + private getActiveParameter(): ts.SignatureHelpParameter { var currentSig = this.getActiveSignatureHelp(); - var help = this.languageService.getSignatureAtPosition(this.activeFile.fileName, this.currentCaretPosition); + var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); + + var item = help.items[help.selectedItemIndex]; + var state = this.languageService.getSignatureHelpCurrentArgumentState(this.activeFile.fileName, this.currentCaretPosition, help.applicableSpan.start()); // Same logic as in getActiveSignatureHelp - this value might be -1 until a parameter value actually gets typed - var currentParam = help.actual.currentParameter; - if (currentParam === -1) currentParam = 0; - - if (help.actual.currentParameterIsTypeParameter) { - return { - parameter: null, - typeParameter: currentSig.typeParameters[currentParam] - }; - } - else { - return { - parameter: currentSig.parameters[currentParam], - typeParameter: null - }; - } + var currentParam = state === null ? 0 : state.argumentIndex; + return item.parameters[currentParam]; } public getBreakpointStatementLocation(pos: number) { @@ -859,7 +866,7 @@ module FourSlash { var spanInfo = this.languageService.getBreakpointStatementAtPosition(this.activeFile.fileName, pos); var resultString = "\n**Pos: " + pos + " SpanInfo: " + JSON.stringify(spanInfo) + "\n** Statement: "; if (spanInfo !== null) { - resultString = resultString + this.activeFile.content.substr(spanInfo.minChar, spanInfo.limChar - spanInfo.minChar); + resultString = resultString + this.activeFile.content.substr(spanInfo.start(), spanInfo.length()); } return resultString; } @@ -890,7 +897,7 @@ module FourSlash { } public printCurrentParameterHelp() { - var help = this.languageService.getSignatureAtPosition(this.activeFile.fileName, this.currentCaretPosition); + var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); Harness.IO.log(JSON.stringify(help)); } @@ -944,6 +951,18 @@ module FourSlash { Harness.IO.log(JSON.stringify(completions)); } + public printReferences() { + var references = this.getReferencesAtCaret(); + ts.forEach(references, entry => { + Harness.IO.log(JSON.stringify(entry)); + }); + } + + public printContext() { + var fileNames: string[] = JSON.parse(this.languageServiceShimHost.getScriptFileNames()); + ts.forEach(fileNames, Harness.IO.log); + } + private editCheckpoint(filename: string) { // TODO: What's this for? It is being called by deleteChar // this.languageService.getScriptLexicalStructure(filename); @@ -1071,7 +1090,7 @@ module FourSlash { if (ch === '(' || ch === ',') { /* Signature help*/ - this.languageService.getSignatureAtPosition(this.activeFile.fileName, offset); + this.languageService.getSignatureHelpItems(this.activeFile.fileName, offset); } else if (prevChar === ' ' && /A-Za-z_/.test(ch)) { /* Completions */ this.languageService.getCompletionsAtPosition(this.activeFile.fileName, offset, false); @@ -1111,7 +1130,7 @@ module FourSlash { // Handle formatting if (this.enableFormatting) { - var edits = this.languageService.getFormattingEditsOnPaste(this.activeFile.fileName, start, offset, this.formatCodeOptions); + var edits = this.languageService.getFormattingEditsForRange(this.activeFile.fileName, start, offset, this.formatCodeOptions); offset += this.applyEdits(this.activeFile.fileName, edits, true); this.editCheckpoint(this.activeFile.fileName); } @@ -1175,18 +1194,18 @@ module FourSlash { }; } - private applyEdits(fileName: string, edits: ts.TextEdit[], isFormattingEdit = false): number { + private applyEdits(fileName: string, edits: ts.TextChange[], isFormattingEdit = false): number { // We get back a set of edits, but langSvc.editScript only accepts one at a time. Use this to keep track // of the incremental offest from each edit to the next. Assumption is that these edit ranges don't overlap var runningOffset = 0; - edits = edits.sort((a, b) => a.minChar - b.minChar); + edits = edits.sort((a, b) => a.span.start() - b.span.start()); // Get a snapshot of the content of the file so we can make sure any formatting edits didn't destroy non-whitespace characters var snapshot = this.languageServiceShimHost.getScriptSnapshot(fileName); var oldContent = snapshot.getText(0, snapshot.getLength()); for (var j = 0; j < edits.length; j++) { - this.languageServiceShimHost.editScript(fileName, edits[j].minChar + runningOffset, edits[j].limChar + runningOffset, edits[j].text); - this.updateMarkersForEdit(fileName, edits[j].minChar + runningOffset, edits[j].limChar + runningOffset, edits[j].text); - var change = (edits[j].minChar - edits[j].limChar) + edits[j].text.length; + this.languageServiceShimHost.editScript(fileName, edits[j].span.start() + runningOffset, edits[j].span.end() + runningOffset, edits[j].newText); + this.updateMarkersForEdit(fileName, edits[j].span.start() + runningOffset, edits[j].span.end() + runningOffset, edits[j].newText); + var change = (edits[j].span.start() - edits[j].span.end()) + edits[j].newText.length; runningOffset += change; // TODO: Consider doing this at least some of the time for higher fidelity. Currently causes a failure (bug 707150) // this.languageService.getScriptLexicalStructure(fileName); @@ -1206,7 +1225,7 @@ module FourSlash { public formatDocument() { this.scenarioActions.push(''); - var edits = this.languageService.getFormattingEditsForDocument(this.activeFile.fileName, 0, this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName).getLength(), this.formatCodeOptions); + var edits = this.languageService.getFormattingEditsForDocument(this.activeFile.fileName, this.formatCodeOptions); this.currentCaretPosition += this.applyEdits(this.activeFile.fileName, edits, true); this.fixCaretPosition(); } @@ -1263,7 +1282,7 @@ module FourSlash { var definition = definitions[definitionIndex]; this.openFile(definition.fileName); - this.currentCaretPosition = definition.minChar; + this.currentCaretPosition = definition.textSpan.start(); } public verifyDefinitionLocationExists(negative: boolean) { @@ -1369,7 +1388,7 @@ module FourSlash { '\t Actual: null'); } - var actual = this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName).getText(span.minChar, span.limChar); + var actual = this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName).getText(span.start(), span.end()); if (actual !== text) { throw new Error('verifyCurrentNameOrDottedNameSpanText\n' + '\tExpected: "' + text + '"\n' + @@ -1381,7 +1400,7 @@ module FourSlash { var spanInfo = this.languageService.getNameOrDottedNameSpan(this.activeFile.fileName, pos, pos); var resultString = "\n**Pos: " + pos + " SpanInfo: " + JSON.stringify(spanInfo) + "\n** Statement: "; if (spanInfo !== null) { - resultString = resultString + this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName).getText(spanInfo.minChar, spanInfo.limChar); + resultString = resultString + this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName).getText(spanInfo.start(), spanInfo.end()); } return resultString; } @@ -1410,7 +1429,7 @@ module FourSlash { public verifyOutliningSpans(spans: TextSpan[]) { this.taoInvalidReason = 'verifyOutliningSpans NYI'; - var actual = this.languageService.getOutliningRegions(this.activeFile.fileName); + var actual = this.languageService.getOutliningSpans(this.activeFile.fileName); if (actual.length !== spans.length) { throw new Error('verifyOutliningSpans failed - expected total spans to be ' + spans.length + ', but was ' + actual.length); @@ -1425,6 +1444,25 @@ module FourSlash { } } + public verifyTodoComments(descriptors: string[], spans: TextSpan[]) { + var actual = this.languageService.getTodoComments(this.activeFile.fileName, + descriptors.map(d => new ts.TodoCommentDescriptor(d, 0))); + + if (actual.length !== spans.length) { + throw new Error('verifyTodoComments failed - expected total spans to be ' + spans.length + ', but was ' + actual.length); + } + + for (var i = 0; i < spans.length; i++) { + var expectedSpan = spans[i]; + var actualComment = actual[i]; + var actualCommentSpan = new TypeScript.TextSpan(actualComment.position, actualComment.message.length); + + if (expectedSpan.start !== actualCommentSpan.start() || expectedSpan.end !== actualCommentSpan.end()) { + throw new Error('verifyOutliningSpans failed - span ' + (i + 1) + ' expected: (' + expectedSpan.start + ',' + expectedSpan.end + '), actual: (' + actualCommentSpan.start() + ',' + actualCommentSpan.end() + ')'); + } + } + } + public verifyMatchingBracePosition(bracePosition: number, expectedMatchPosition: number) { this.taoInvalidReason = 'verifyMatchingBracePosition NYI'; @@ -1584,70 +1622,61 @@ module FourSlash { public verifyGetScriptLexicalStructureListCount(expected: number) { this.taoInvalidReason = 'verifyNavigationItemsListContains impossible'; - var items = this.languageService.getScriptLexicalStructure(this.activeFile.fileName); - var actual = (items && items.length) || 0; + var items = this.languageService.getNavigationBarItems(this.activeFile.fileName); + var actual = this.getNavigationBarItemsCount(items); + if (expected != actual) { throw new Error('verifyGetScriptLexicalStructureListCount failed - found: ' + actual + ' navigation items, expected: ' + expected + '.'); } } + private getNavigationBarItemsCount(items: ts.NavigationBarItem[]) { + var result = 0; + if (items) { + for (var i = 0, n = items.length; i < n; i++) { + result++; + result += this.getNavigationBarItemsCount(items[i].childItems); + } + } + + return result; + } + public verifGetScriptLexicalStructureListContains( name: string, kind: string, - fileName?: string, - parentName?: string, - isAdditionalSpan?: boolean, markerPosition?: number) { this.taoInvalidReason = 'verifGetScriptLexicalStructureListContains impossible'; - var items = this.languageService.getScriptLexicalStructure(this.activeFile.fileName); + var items = this.languageService.getNavigationBarItems(this.activeFile.fileName); if (!items || items.length === 0) { throw new Error('verifyGetScriptLexicalStructureListContains failed - found 0 navigation items, expected at least one.'); } - for (var i = 0; i < items.length; i++) { - var item = items[i]; - if (item && item.name === name && item.kind === kind && - (fileName === undefined || item.fileName === fileName) && - (parentName === undefined || item.containerName === parentName)) { - if (markerPosition !== undefined || isAdditionalSpan !== undefined) { - if (isAdditionalSpan) { - if (item.additionalSpans && - item.additionalSpans.some(span => span.minChar <= markerPosition && markerPosition <= span.limChar)) { - // marker is in an additional span for this item. - return; - } - else { - throw new Error( - 'verifGetScriptLexicalStructureListContains failed - ' + - 'no additional span was found that contained the position: ' + JSON.stringify(markerPosition) + - ' in the item: ' + JSON.stringify(item)); - } - } - else if (!isAdditionalSpan) { - if (item.minChar <= markerPosition && - markerPosition <= item.minChar) { - // marker is in span normal item's span - return; - } - else { - throw new Error( - 'verifGetScriptLexicalStructureListContains failed - ' + - 'marker was positioned: ' + JSON.stringify(markerPosition) + - ' which is not in the item: ' + JSON.stringify(item)); - } - } + if (this.navigationBarItemsContains(items, name, kind)) { + return; + } + + var missingItem = { name: name, kind: kind }; + throw new Error('verifyGetScriptLexicalStructureListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(items) + ')'); + } + + private navigationBarItemsContains(items: ts.NavigationBarItem[], name: string, kind: string) { + if (items) { + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (item && item.text === name && item.kind === kind) { + return true; } - else { - return; + + if (this.navigationBarItemsContains(item.childItems, name, kind)) { + return true; } } } - - var missingItem = { name: name, kind: kind, fileName: fileName, parentName: parentName }; - throw new Error('verifyGetScriptLexicalStructureListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(items) + ')'); + return false; } public printNavigationItems(searchValue: string) { @@ -1663,14 +1692,14 @@ module FourSlash { } public printScriptLexicalStructureItems() { - var items = this.languageService.getScriptLexicalStructure(this.activeFile.fileName); + var items = this.languageService.getNavigationBarItems(this.activeFile.fileName); var length = items && items.length; Harness.IO.log('NavigationItems list (' + length + ' items)'); for (var i = 0; i < length; i++) { var item = items[i]; - Harness.IO.log('name: ' + item.name + ', kind: ' + item.kind + ', parentName: ' + item.containerName + ', fileName: ' + item.fileName); + Harness.IO.log('name: ' + item.text + ', kind: ' + item.kind); } } @@ -1689,7 +1718,7 @@ module FourSlash { for (var i = 0; i < occurances.length; i++) { var occurance = occurances[i]; - if (occurance && occurance.fileName === fileName && occurance.minChar === start && occurance.limChar === end) { + if (occurance && occurance.fileName === fileName && occurance.textSpan.start() === start && occurance.textSpan.end() === end) { if (typeof isWriteAccess !== "undefined" && occurance.isWriteAccess !== isWriteAccess) { throw new Error('verifyOccurancesAtPositionListContains failed - item isWriteAccess value doe not match, actual: ' + occurance.isWriteAccess + ', expected: ' + isWriteAccess + '.'); } @@ -1711,10 +1740,6 @@ module FourSlash { } } - private getBOF(): number { - return 0; - } - private getEOF(): number { return this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName).getLength(); } @@ -1895,12 +1920,12 @@ module FourSlash { var result = ''; var fourslashFilename = 'fourslash.ts'; var tsFn = 'tests/cases/fourslash/' + fourslashFilename; - fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), ts.ScriptTarget.ES5, /*version*/ 0, /*isOpen*/ false); + fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); var files: { [filename: string]: ts.SourceFile; } = {}; - files[fourslashFilename] = fourslashSourceFile; - files[fileName] = ts.createSourceFile(fileName, content, ts.ScriptTarget.ES5, /*version*/ 0, /*isOpen*/ false); - files[Harness.Compiler.defaultLibFileName] = Harness.Compiler.defaultLibSourceFile; + files[Harness.Compiler.getCanonicalFileName(fourslashFilename)] = fourslashSourceFile; + files[Harness.Compiler.getCanonicalFileName(fileName)] = ts.createSourceFile(fileName, content, ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); + files[Harness.Compiler.getCanonicalFileName(Harness.Compiler.defaultLibFileName)] = Harness.Compiler.defaultLibSourceFile; var host = Harness.Compiler.createCompilerHost(files, (fn, contents) => result = contents); var program = ts.createProgram([fourslashFilename, fileName], { out: "fourslashTestOutput.js" }, host); diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 37edd1d4162..654f240b4b5 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -532,15 +532,19 @@ module Harness { } export var defaultLibFileName = 'lib.d.ts'; - export var defaultLibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.ES5); + export var defaultLibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.ES5, /*version:*/ "0"); + + export function getCanonicalFileName(fileName: string): string { + return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } export function createCompilerHost(filemap: { [filename: string]: ts.SourceFile; }, writeFile: (fn: string, contents: string, writeByteOrderMark:boolean) => void): ts.CompilerHost { return { getCurrentDirectory: sys.getCurrentDirectory, getCancellationToken: (): any => undefined, getSourceFile: (fn, languageVersion) => { - if (fn in filemap) { - return filemap[fn]; + if (Object.prototype.hasOwnProperty.call(filemap, getCanonicalFileName(fn))) { + return filemap[getCanonicalFileName(fn)]; } else { var lib = defaultLibFileName; if (fn === defaultLibFileName) { @@ -552,7 +556,7 @@ module Harness { }, getDefaultLibFilename: () => defaultLibFileName, writeFile: writeFile, - getCanonicalFileName: ts.getCanonicalFileName, + getCanonicalFileName: getCanonicalFileName, useCaseSensitiveFileNames: () => sys.useCaseSensitiveFileNames, getNewLine: ()=> sys.newLine }; @@ -563,7 +567,7 @@ module Harness { private compileOptions: ts.CompilerOptions; private settings: Harness.TestCaseParser.CompilerSetting[] = []; - private lastErrors: MinimalDiagnostic[]; + private lastErrors: HarnessDiagnostic[]; public reset() { this.inputFiles = []; @@ -571,10 +575,6 @@ module Harness { this.lastErrors = []; } - public emitAllDeclarations() { - // NEWTODO: Do something here? - } - public reportCompilationErrors() { return this.lastErrors; } @@ -604,12 +604,18 @@ module Harness { result.files.forEach(file => { ioHost.writeFile(file.fileName, file.code, false); }); + result.declFilesCode.forEach(file => { + ioHost.writeFile(file.fileName, file.code, false); + }); + result.sourceMaps.forEach(file => { + ioHost.writeFile(file.fileName, file.code, false); + }); }, () => { }, this.compileOptions); } public compileFiles(inputFiles: { unitName: string; content: string }[], otherFiles: { unitName: string; content?: string }[], - onComplete: (result: CompilerResult) => void, + onComplete: (result: CompilerResult, checker: ts.TypeChecker) => void, settingsCallback?: (settings: ts.CompilerOptions) => void, options?: ts.CompilerOptions) { @@ -695,6 +701,10 @@ module Harness { sys.newLine = setting.value; break; + case 'comments': + options.removeComments = setting.value === 'false'; + break; + case 'mapsourcefiles': case 'maproot': case 'generatedeclarationfiles': @@ -702,7 +712,6 @@ module Harness { case 'gatherDiagnostics': case 'codepage': case 'createFileLog': - case 'comments': case 'filename': case 'propagateenumconstants': case 'removecomments': @@ -723,8 +732,10 @@ module Harness { var filemap: { [name: string]: ts.SourceFile; } = {}; var register = (file: { unitName: string; content: string; }) => { - var filename = Path.switchToForwardSlashes(file.unitName); - filemap[filename] = ts.createSourceFile(filename, file.content, options.target); + if (file.content !== undefined) { + var filename = Path.switchToForwardSlashes(file.unitName); + filemap[getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, options.target, /*version:*/ "0"); + } }; inputFiles.forEach(register); otherFiles.forEach(register); @@ -745,7 +756,7 @@ module Harness { emitResult = checker.emitFiles(); } - var errors: MinimalDiagnostic[] = []; + var errors: HarnessDiagnostic[] = []; program.getDiagnostics().concat(checker.getDiagnostics()).concat(emitResult ? emitResult.errors : []).forEach(err => { // TODO: new compiler formats errors after this point to add . and newlines so we'll just do it manually for now errors.push(getMinimalDiagnostic(err)); @@ -755,7 +766,7 @@ module Harness { var result = new CompilerResult(fileOutputs, errors, []); // Covert the source Map data into the baseline result.updateSourceMapRecord(program, emitResult ? emitResult.sourceMaps : undefined); - onComplete(result); + onComplete(result, checker); // reset what newline means in case the last test changed it sys.newLine = '\r\n'; @@ -763,19 +774,43 @@ module Harness { } } - export function getMinimalDiagnostic(err: ts.Diagnostic): MinimalDiagnostic { - return { filename: err.file && err.file.filename, start: err.start, end: err.start + err.length, line: 0, character: 0, message: err.messageText }; + export function getMinimalDiagnostic(err: ts.Diagnostic): HarnessDiagnostic { + var errorLineInfo = err.file ? err.file.getLineAndCharacterFromPosition(err.start) : { line: 0, character: 0 }; + return { + filename: err.file && err.file.filename, + start: err.start, + end: err.start + err.length, + line: errorLineInfo.line, + character: errorLineInfo.character, + message: err.messageText, + category: ts.DiagnosticCategory[err.category].toLowerCase(), + code: err.code + }; + } + + export function minimalDiagnosticsToString(diagnostics: HarnessDiagnostic[]) { + // This is basically copied from tsc.ts's reportError to replicate what tsc does + var errorOutput = ""; + ts.forEach(diagnostics, diagnotic => { + if (diagnotic.filename) { + errorOutput += diagnotic.filename + "(" + diagnotic.line + "," + diagnotic.character + "): "; + } + + errorOutput += diagnotic.category + " TS" + diagnotic.code + ": " + diagnotic.message + sys.newLine; + }); + + return errorOutput; } export function getErrorBaseline(inputFiles: { unitName: string; content: string }[], - diagnostics: MinimalDiagnostic[] + diagnostics: HarnessDiagnostic[] ) { var outputLines: string[] = []; // Count up all the errors we find so we don't miss any var totalErrorsReported = 0; - function outputErrorText(error: Harness.Compiler.MinimalDiagnostic) { + function outputErrorText(error: Harness.Compiler.HarnessDiagnostic) { var errLines = RunnerBase.removeFullPaths(error.message) .split('\n') .map(s => s.length > 0 && s.charAt(s.length - 1) === '\r' ? s.substr(0, s.length - 1) : s) @@ -791,7 +826,7 @@ module Harness { globalErrors.forEach(err => outputErrorText(err)); // 'merge' the lines of each input file with any errors associated with it - inputFiles.forEach(inputFile => { + inputFiles.filter(f => f.content !== undefined).forEach(inputFile => { // Filter down to the errors in the file var fileErrors = diagnostics.filter(e => { var errFn = e.filename; @@ -895,13 +930,15 @@ module Harness { //harnessCompiler.compileString(code, unitName, callback); } - export interface MinimalDiagnostic { + export interface HarnessDiagnostic { filename: string; start: number; end: number; line: number; character: number; message: string; + category: string; + code: number; } export interface GeneratedFile { @@ -929,13 +966,13 @@ module Harness { /** Contains the code and errors of a compilation and some helper methods to check its status. */ export class CompilerResult { public files: GeneratedFile[] = []; - public errors: MinimalDiagnostic[] = []; + public errors: HarnessDiagnostic[] = []; public declFilesCode: GeneratedFile[] = []; public sourceMaps: GeneratedFile[] = []; public sourceMapRecord: string; /** @param fileResults an array of strings for the fileName and an ITextWriter with its code */ - constructor(fileResults: GeneratedFile[], errors: MinimalDiagnostic[], sourceMapRecordLines: string[]) { + constructor(fileResults: GeneratedFile[], errors: HarnessDiagnostic[], sourceMapRecordLines: string[]) { var lines: string[] = []; fileResults.forEach(emittedFile => { @@ -1218,7 +1255,7 @@ module Harness { } export function isLibraryFile(filePath: string): boolean { - return filePath.indexOf('lib.d.ts') >= 0 || filePath.indexOf('lib.core.d.ts') >= 0; + return (Path.getFileName(filePath) === 'lib.d.ts') || (Path.getFileName(filePath) === 'lib.core.d.ts'); } if (Error) (Error).stackTraceLimit = 1; diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index cb8ef61f413..1a02157d729 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -80,8 +80,9 @@ module Harness.LanguageService { return JSON.stringify(this.lineMap.lineStarts()); } - public getTextChangeRangeSinceVersion(scriptVersion: number): string { - var range = this.scriptInfo.getTextChangeRangeBetweenVersions(scriptVersion, this.version); + public getChangeRange(oldScript: ts.ScriptSnapshotShim): string { + var oldShim = oldScript; + var range = this.scriptInfo.getTextChangeRangeBetweenVersions(oldShim.version, this.version); if (range === null) { return null; } @@ -101,50 +102,14 @@ module Harness.LanguageService { } } - class ScriptSnapshotShimAdapter implements TypeScript.IScriptSnapshot { - private lineStartPositions: number[] = null; - constructor(private scriptSnapshotShim: ts.ScriptSnapshotShim) {} - getText(start: number, end: number): string {return this.scriptSnapshotShim.getText(start, end);} - getLength(): number {return this.scriptSnapshotShim.getLength();} - getLineStartPositions(): number[] { return JSON.parse(this.scriptSnapshotShim.getLineStartPositions()); } - getTextChangeRangeSinceVersion(scriptVersion: number): TypeScript.TextChangeRange { - var encoded = this.scriptSnapshotShim.getTextChangeRangeSinceVersion(scriptVersion); - if (encoded == null) { - return null; - } - - var decoded: { span: { start: number; length: number; }; newLength: number; } = JSON.parse(encoded); - return new TypeScript.TextChangeRange( - new TypeScript.TextSpan(decoded.span.start, decoded.span.length), decoded.newLength); - } - } - - class LanguageServiceShimHostAdapter implements ts.LanguageServiceHost { - constructor(private shimHost: ts.LanguageServiceShimHost) { } - information(): boolean { return this.shimHost.information(); } - debug(): boolean { return this.shimHost.debug(); } - warning(): boolean { return this.shimHost.warning();} - error(): boolean { return this.shimHost.error(); } - fatal(): boolean { return this.shimHost.fatal(); } - log(s: string): void { this.shimHost.log(s); } - getCompilationSettings(): ts.CompilerOptions { return JSON.parse(this.shimHost.getCompilationSettings()); } - getScriptFileNames(): string[] { return JSON.parse(this.shimHost.getScriptFileNames());} - getScriptSnapshot(fileName: string): TypeScript.IScriptSnapshot { return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName));} - getScriptVersion(fileName: string): number { return this.shimHost.getScriptVersion(fileName);} - getScriptIsOpen(fileName: string): boolean { return this.shimHost.getScriptIsOpen(fileName); } - getLocalizedDiagnosticMessages(): any { JSON.parse(this.shimHost.getLocalizedDiagnosticMessages());} - getCancellationToken(): ts.CancellationToken { return this.shimHost.getCancellationToken(); } - } - export class NonCachingDocumentRegistry implements ts.DocumentRegistry { - public static Instance: ts.DocumentRegistry = new NonCachingDocumentRegistry(); public acquireDocument( fileName: string, compilationSettings: ts.CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, - version: number, + version: string, isOpen: boolean): ts.SourceFile { return ts.createSourceFile(fileName, scriptSnapshot.getText(0, scriptSnapshot.getLength()), compilationSettings.target, version, isOpen); } @@ -154,7 +119,7 @@ module Harness.LanguageService { fileName: string, compilationSettings: ts.CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, - version: number, + version: string, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange ): ts.SourceFile { @@ -167,7 +132,6 @@ module Harness.LanguageService { } export class TypeScriptLS implements ts.LanguageServiceShimHost { private ls: ts.LanguageServiceShim = null; - public newLS: ts.LanguageService; private fileNameToScript: ts.Map = {}; @@ -252,8 +216,8 @@ module Harness.LanguageService { return new ScriptSnapshotShim(this.getScriptInfo(fileName)); } - public getScriptVersion(fileName: string): number { - return this.getScriptInfo(fileName).version; + public getScriptVersion(fileName: string): string { + return this.getScriptInfo(fileName).version.toString(); } public getScriptIsOpen(fileName: string): boolean { @@ -268,12 +232,13 @@ module Harness.LanguageService { * To access the non-shim (i.e. actual) language service, use the "ls.languageService" property. */ public getLanguageService(): ts.LanguageServiceShim { - var ls = new TypeScript.Services.TypeScriptServicesFactory().createLanguageServiceShim(this); - this.ls = ls; - var hostAdapter = new LanguageServiceShimHostAdapter(this); + this.ls = new TypeScript.Services.TypeScriptServicesFactory().createLanguageServiceShim(this); + return this.ls; + } - this.newLS = ts.createLanguageService(hostAdapter, NonCachingDocumentRegistry.Instance); - return ls; + /** Return a new instance of the classifier service shim */ + public getClassifier(): ts.ClassifierShim { + return new TypeScript.Services.TypeScriptServicesFactory().createClassifierShim(this); } /** Parse file given its source text */ @@ -316,7 +281,7 @@ module Harness.LanguageService { } /** Verify that applying edits to sourceFileName result in the content of the file baselineFileName */ - public checkEdits(sourceFileName: string, baselineFileName: string, edits: ts.TextEdit[]) { + public checkEdits(sourceFileName: string, baselineFileName: string, edits: ts.TextChange[]) { var script = Harness.IO.readFile(sourceFileName); var formattedScript = this.applyEdits(script, edits); var baseline = Harness.IO.readFile(baselineFileName); @@ -345,26 +310,26 @@ module Harness.LanguageService { /** Apply an array of text edits to a string, and return the resulting string. */ - public applyEdits(content: string, edits: ts.TextEdit[]): string { + public applyEdits(content: string, edits: ts.TextChange[]): string { var result = content; edits = this.normalizeEdits(edits); for (var i = edits.length - 1; i >= 0; i--) { var edit = edits[i]; - var prefix = result.substring(0, edit.minChar); - var middle = edit.text; - var suffix = result.substring(edit.limChar); + var prefix = result.substring(0, edit.span.start()); + var middle = edit.newText; + var suffix = result.substring(edit.span.end()); result = prefix + middle + suffix; } return result; } /** Normalize an array of edits by removing overlapping entries and sorting entries on the minChar position. */ - private normalizeEdits(edits: ts.TextEdit[]): ts.TextEdit[] { - var result: ts.TextEdit[] = []; + private normalizeEdits(edits: ts.TextChange[]): ts.TextChange[] { + var result: ts.TextChange[] = []; - function mapEdits(edits: ts.TextEdit[]): { edit: ts.TextEdit; index: number; }[] { - var result: { edit: ts.TextEdit; index: number; }[] = []; + function mapEdits(edits: ts.TextChange[]): { edit: ts.TextChange; index: number; }[] { + var result: { edit: ts.TextChange; index: number; }[] = []; for (var i = 0; i < edits.length; i++) { result.push({ edit: edits[i], index: i }); } @@ -372,7 +337,7 @@ module Harness.LanguageService { } var temp = mapEdits(edits).sort(function (a, b) { - var result = a.edit.minChar - b.edit.limChar; + var result = a.edit.span.start() - b.edit.span.start(); if (result === 0) result = a.index - b.index; return result; @@ -391,7 +356,7 @@ module Harness.LanguageService { } var nextEdit = temp[next].edit; - var gap = nextEdit.minChar - currentEdit.limChar; + var gap = nextEdit.span.start() - currentEdit.span.end(); // non-overlapping edits if (gap >= 0) { @@ -400,10 +365,10 @@ module Harness.LanguageService { next++; continue; } - + // overlapping edits: for now, we only support ignoring an next edit // entirely contained in the current edit. - if (currentEdit.minChar >= nextEdit.limChar) { + if (currentEdit.span.end() >= nextEdit.span.end()) { next++; continue; } diff --git a/src/harness/instrumenter.ts b/src/harness/instrumenter.ts new file mode 100644 index 00000000000..61f6a8f2ec3 --- /dev/null +++ b/src/harness/instrumenter.ts @@ -0,0 +1,53 @@ +declare var require: any, process: any; +var fs: any = require('fs'); +var path: any = require('path'); + +function instrumentForRecording(fn: string, tscPath: string) { + instrument(tscPath, 'sys = Playback.wrapSystem(sys); sys.startRecord("' + fn + '");', 'sys.endRecord();'); +} + +function instrumentForReplay(logFilename: string, tscPath: string) { + instrument(tscPath, 'sys = Playback.wrapSystem(sys); sys.startReplay("' + logFilename + '");'); +} + +function instrument(tscPath: string, prepareCode: string, cleanupCode: string = '') { + var bak = tscPath + '.bak'; + fs.exists(bak, (backupExists: boolean) => { + var filename = tscPath; + if (backupExists) { + filename = bak; + } + + fs.readFile(filename, 'utf-8', (err: any, tscContent: string) => { + if (err) throw err; + + fs.writeFile(bak, tscContent, (err: any) => { + if (err) throw err; + + fs.readFile(path.resolve(path.dirname(tscPath) + '/loggedIO.js'), 'utf-8', (err: any, loggerContent: string) => { + if (err) throw err; + + var invocationLine = 'ts.executeCommandLine(sys.args);'; + var index1 = tscContent.indexOf(invocationLine); + var index2 = index1 + invocationLine.length; + var newContent = tscContent.substr(0, index1) + loggerContent + prepareCode + invocationLine + cleanupCode + tscContent.substr(index2) + '\r\n'; + fs.writeFile(tscPath, newContent); + }); + }); + }); + }); +} + +var isJson = (arg: string) => arg.indexOf(".json") > 0; + +var record = process.argv.indexOf('record'); +var tscPath = process.argv[process.argv.length - 1]; +if (record >= 0) { + console.log('Instrumenting ' + tscPath + ' for recording'); + instrumentForRecording(process.argv[record + 1], tscPath); +} else if (process.argv.some(isJson)) { + var filename = process.argv.filter(isJson)[0]; + instrumentForReplay(filename, tscPath); +} + + diff --git a/src/harness/loggedIO.ts b/src/harness/loggedIO.ts index 5dfd10dfa02..fc33d08b334 100644 --- a/src/harness/loggedIO.ts +++ b/src/harness/loggedIO.ts @@ -1,4 +1,6 @@ /// +/// +/// interface FileInformation { contents: string; @@ -93,6 +95,7 @@ module Playback { function createEmptyLog(): IOLog { return { + timestamp: (new Date()).toString(), arguments: [], currentDirectory: '', filesRead: [], @@ -119,6 +122,8 @@ module Playback { }; wrapper.startReplayFromData = log => { replayLog = log; + // Remove non-found files from the log (shouldn't really need them, but we still record them for diganostic purposes) + replayLog.filesRead = replayLog.filesRead.filter(f => f.result.contents !== undefined); }; wrapper.endReplay = () => { @@ -170,28 +175,50 @@ module Playback { } function findResultByPath(wrapper: { resolvePath(s: string): string }, logArray: { path: string; result?: T }[], expectedPath: string, defaultValue?: T): T { - var results = logArray.filter(e => pathsAreEquivalent(e.path, expectedPath, wrapper)); - if (results.length === 0) { - if (defaultValue === undefined) { - console.log('Resolved path: ' + wrapper.resolvePath(expectedPath)); - console.log('Filenames were: ' + logArray.map(x => x.path).join(', ')); - throw new Error('No matching result in log array for path: ' + expectedPath); - } else { - return defaultValue; + var normalizedName = Harness.Path.switchToForwardSlashes(expectedPath).toLowerCase(); + // Try to find the result through normal filename + for (var i = 0; i < logArray.length; i++) { + if (Harness.Path.switchToForwardSlashes(logArray[i].path).toLowerCase() === normalizedName) { + return logArray[i].result; } } - return results[0].result; + // Fallback, try to resolve the target paths as well + if (replayLog.pathsResolved.length > 0) { + var normalizedResolvedName = wrapper.resolvePath(expectedPath).toLowerCase(); + for (var i = 0; i < logArray.length; i++) { + if (wrapper.resolvePath(logArray[i].path).toLowerCase() === normalizedResolvedName) { + return logArray[i].result; + } + } + } + // If we got here, we didn't find a match + if (defaultValue === undefined) { + throw new Error('No matching result in log array for path: ' + expectedPath); + } else { + return defaultValue; + } } + var pathEquivCache: any = {}; function pathsAreEquivalent(left: string, right: string, wrapper: { resolvePath(s: string): string }) { + var key = left + '-~~-' + right; function areSame(a: string, b: string) { return Harness.Path.switchToForwardSlashes(a).toLowerCase() === Harness.Path.switchToForwardSlashes(b).toLowerCase(); } - return areSame(left, right) || areSame(wrapper.resolvePath(left), right) || areSame(left, wrapper.resolvePath(right)) || areSame(wrapper.resolvePath(left), wrapper.resolvePath(right)); + function check() { + if (Harness.Path.getFileName(left).toLowerCase() === Harness.Path.getFileName(right).toLowerCase()) { + return areSame(left, right) || areSame(wrapper.resolvePath(left), right) || areSame(left, wrapper.resolvePath(right)) || areSame(wrapper.resolvePath(left), wrapper.resolvePath(right)); + } + } + if (pathEquivCache.hasOwnProperty(key)) { + return pathEquivCache[key]; + } else { + return pathEquivCache[key] = check(); + } } function noOpReplay(name: string) { - console.log("Swallowed write operation during replay: " + name); + //console.log("Swallowed write operation during replay: " + name); } export function wrapSystem(underlying: System): PlaybackSystem { @@ -257,10 +284,15 @@ module Playback { wrapper.resolvePath = recordReplay(wrapper.resolvePath, underlying)( (path) => callAndRecord(underlying.resolvePath(path), recordLog.pathsResolved, { path: path }), - memoize((path) => findResultByFields(replayLog.pathsResolved, { path: path }, replayLog.currentDirectory ? replayLog.currentDirectory + '/' + path : path))); + memoize((path) => findResultByFields(replayLog.pathsResolved, { path: path }, !ts.isRootedDiskPath(ts.normalizeSlashes(path)) && replayLog.currentDirectory ? replayLog.currentDirectory + '/' + path : ts.normalizeSlashes(path)))); wrapper.readFile = recordReplay(wrapper.readFile, underlying)( - (path) => callAndRecord(underlying.readFile(path), recordLog.filesRead, { path: path, codepage: 0 }), + (path) => { + var result = underlying.readFile(path); + var logEntry = { path: path, codepage: 0, result: { contents: result, codepage: 0 } }; + recordLog.filesRead.push(logEntry); + return result; + }, memoize((path) => findResultByPath(wrapper, replayLog.filesRead, path).contents)); wrapper.writeFile = recordReplay(wrapper.writeFile, underlying)( diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index c192c3acecf..b0f3e939d30 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -174,7 +174,7 @@ class ProjectRunner extends RunnerBase { else { var text = getSourceFileText(filename); if (text !== undefined) { - sourceFile = ts.createSourceFile(filename, text, languageVersion); + sourceFile = ts.createSourceFile(filename, text, languageVersion, /*version:*/ "0"); } } @@ -187,7 +187,7 @@ class ProjectRunner extends RunnerBase { getDefaultLibFilename: () => "lib.d.ts", writeFile: writeFile, getCurrentDirectory: getCurrentDirectory, - getCanonicalFileName: ts.getCanonicalFileName, + getCanonicalFileName: Harness.Compiler.getCanonicalFileName, useCaseSensitiveFileNames: () => sys.useCaseSensitiveFileNames, getNewLine: () => sys.newLine }; @@ -293,27 +293,13 @@ class ProjectRunner extends RunnerBase { } function getErrorsBaseline(compilerResult: CompileProjectFilesResult) { - // This is copied from tc.ts's reportError to replicate what tc does - var errors = ""; - for (var i = 0; i < compilerResult.errors.length; i++) { - var error = compilerResult.errors[i]; - // TODO(jfreeman): Remove assert - ts.Debug.assert(error.messageText.indexOf("{NL}") < 0); - if (error.file) { - var loc = error.file.getLineAndCharacterFromPosition(error.start); - errors += error.file.filename + "(" + loc.line + "," + loc.character + "): " + error.messageText + sys.newLine; - } - else { - errors += error.messageText + sys.newLine; - } - } - var inputFiles = ts.map(ts.filter(compilerResult.program.getSourceFiles(), sourceFile => sourceFile.filename !== "lib.d.ts"), sourceFile => { return { unitName: sourceFile.filename, content: sourceFile.text }; }); var diagnostics = ts.map(compilerResult.errors, error => Harness.Compiler.getMinimalDiagnostic(error)); + var errors = Harness.Compiler.minimalDiagnosticsToString(diagnostics); errors += sys.newLine + sys.newLine + Harness.Compiler.getErrorBaseline(inputFiles, diagnostics); return errors; diff --git a/src/harness/runner.ts b/src/harness/runner.ts index 4e3cdc8815c..331a19819b3 100644 --- a/src/harness/runner.ts +++ b/src/harness/runner.ts @@ -68,17 +68,11 @@ if (testConfigFile !== '') { runners.push(new GeneratedFourslashRunner()); break; case 'unittests': - runners.push(new UnitTestRunner(UnittestTestType.Compiler)); + runners.push(new UnitTestRunner()); break; case 'rwc': runners.push(new RWCRunner()); break; - case 'ls': - runners.push(new UnitTestRunner(UnittestTestType.LanguageService)); - break; - case 'services': - runners.push(new UnitTestRunner(UnittestTestType.Services)); - break; case 'reverse': reverse = true; break; @@ -96,9 +90,12 @@ if (runners.length === 0) { runners.push(new ProjectRunner()); } - //// language services + // language services runners.push(new FourslashRunner()); //runners.push(new GeneratedFourslashRunner()); + + // unittests + runners.push(new UnitTestRunner()); } sys.newLine = '\r\n'; diff --git a/src/harness/rwcRunner.ts b/src/harness/rwcRunner.ts index 576b06e3435..93d003bf4db 100644 --- a/src/harness/rwcRunner.ts +++ b/src/harness/rwcRunner.ts @@ -5,27 +5,6 @@ /// module RWC { - class RWCEmitter implements Harness.Compiler.IEmitterIOHost { - public outputs: { [filename: string]: string; } = {}; - - constructor() { } - - writeFile(path: string, contents: string, writeByteOrderMark: boolean) { - if (path in this.outputs) throw new Error('Emitter attempted to write to "' + path + '" twice'); - this.outputs[path] = contents; - } - - directoryExists(s: string) { - return false; - } - fileExists(s: string) { - return true; - } - resolvePath(s: string) { - return s; - } - } - function runWithIOLog(ioLog: IOLog, fn: () => void) { var oldSys = sys; @@ -41,32 +20,26 @@ module RWC { } } - function collateOutputs(emitterIOHost: RWCEmitter, fnTest: (s: string) => {}, clean?: (s: string) => string) { + function collateOutputs(outputFiles: Harness.Compiler.GeneratedFile[], clean?: (s: string) => string) { // Collect, test, and sort the filenames - var files: string[] = []; - for (var fn in emitterIOHost.outputs) { - if (emitterIOHost.outputs.hasOwnProperty(fn) && fnTest(fn)) { - files.push(fn); - } - } function cleanName(fn: string) { var lastSlash = Harness.Path.switchToForwardSlashes(fn).lastIndexOf('/'); return fn.substr(lastSlash + 1).toLowerCase(); } - files.sort((a, b) => cleanName(a).localeCompare(cleanName(b))); + outputFiles.sort((a, b) => cleanName(a.fileName).localeCompare(cleanName(b.fileName))); // Emit them var result = ''; - files.forEach(fn => { + ts.forEach(outputFiles, outputFile => { // Some extra spacing if this isn't the first file if (result.length) result = result + '\r\n\r\n'; // Filename header + content - result = result + '/*====== ' + fn + ' ======*/\r\n'; + result = result + '/*====== ' + outputFile.fileName + ' ======*/\r\n'; if (clean) { - result = result + clean(emitterIOHost.outputs[fn]); + result = result + clean(outputFile.code); } else { - result = result + emitterIOHost.outputs[fn]; + result = result + outputFile.code; } }); return result; @@ -86,77 +59,54 @@ module RWC { }); }); - var emitterIOHost = new RWCEmitter(); + var inputFiles: { unitName: string; content: string; }[] = []; + var otherFiles: { unitName: string; content: string; }[] = []; + var compilerResult: Harness.Compiler.CompilerResult; it('can compile', () => { runWithIOLog(ioLog, () => { harnessCompiler.reset(); - var inputList: string[] = opts.filenames; - var noDefaultLib = false; - var libPath = Harness.IO.directoryName(sys.getExecutingFilePath()) + '/lib.d.ts'; - - if (!opts.options.noResolve) { - var filemap: any = {}; - var host: ts.CompilerHost = { - getCurrentDirectory: () => sys.getCurrentDirectory(), - getCancellationToken: (): any => undefined, - getSourceFile: (fileName, languageVersion) => { - var fileContents: string; - try { - fileContents = sys.readFile(fileName); - } - catch (e) { - // Leave fileContents undefined; - } - return ts.createSourceFile(fileName, fileContents, languageVersion); - }, - getDefaultLibFilename: () => libPath, - writeFile: (fn, contents) => emitterIOHost.writeFile(fn, contents, false), - getCanonicalFileName: ts.getCanonicalFileName, - useCaseSensitiveFileNames: () => sys.useCaseSensitiveFileNames, - getNewLine: () => sys.newLine - }; - - var resolvedProgram = ts.createProgram(opts.filenames, opts.options, host); - resolvedProgram.getSourceFiles().forEach(sourceFile => { - noDefaultLib = noDefaultLib || sourceFile.hasNoDefaultLib; - if (inputList.indexOf(sourceFile.filename) === -1) { - inputList.push(sourceFile.filename); - } - }); - } - - if (!opts.options.noLib && !noDefaultLib) { - inputList.push(libPath); - } - - harnessCompiler.reset(); - harnessCompiler.setCompilerSettingsFromOptions(opts.options); // Load the files - inputList.forEach((item: string) => { - var resolvedPath = Harness.Path.switchToForwardSlashes(sys.resolvePath(item)); - try { - var content = sys.readFile(resolvedPath); - } - catch (e) { - // Leave content undefined. - } - harnessCompiler.addInputFile({ unitName: resolvedPath, content: content }); + ts.forEach(opts.filenames, fileName => { + inputFiles.push(getHarnessCompilerInputUnit(fileName)); }); - harnessCompiler.setCompilerOptions(); + if (!opts.options.noLib) { + // Find the lib.d.ts file in the input file and add it to the input files list + var libFile = ts.forEach(ioLog.filesRead, fileRead=> Harness.isLibraryFile(fileRead.path) ? fileRead.path : undefined); + if (libFile) { + inputFiles.push(getHarnessCompilerInputUnit(libFile)); + } + } + + ts.forEach(ioLog.filesRead, fileRead => { + var resolvedPath = Harness.Path.switchToForwardSlashes(sys.resolvePath(fileRead.path)); + var inInputList = ts.forEach(inputFiles, inputFile=> inputFile.unitName === resolvedPath); + if (!inInputList) { + // Add the file to other files + otherFiles.push(getHarnessCompilerInputUnit(fileRead.path)); + } + }); + + // do not use lib since we already read it in above + opts.options.noLib = true; // Emit the results - harnessCompiler.emitAll(emitterIOHost); - harnessCompiler.emitAllDeclarations(); - - var compilationErrors = harnessCompiler.reportCompilationErrors(); - - // Create an error baseline - compilationErrors.forEach(err => { - errors += err.filename + ' line ' + err.line + ': ' + err.message + '\r\n'; - }); + harnessCompiler.compileFiles(inputFiles, otherFiles, compileResult => { + compilerResult = compileResult; + }, /*settingsCallback*/ undefined, opts.options); }); + + function getHarnessCompilerInputUnit(fileName: string) { + var resolvedPath = Harness.Path.switchToForwardSlashes(sys.resolvePath(fileName)); + try { + var content = sys.readFile(resolvedPath); + } + catch (e) { + // Leave content undefined. + } + return { unitName: resolvedPath, content: content }; + } }); // Baselines @@ -165,29 +115,46 @@ module RWC { it('has the expected emitted code', () => { Harness.Baseline.runBaseline('has the expected emitted code', baseName + '.output.js', () => { - return collateOutputs(emitterIOHost, fn => fn.substr(fn.length - '.js'.length) === '.js', s => SyntacticCleaner.clean(s)); + return collateOutputs(compilerResult.files, s => SyntacticCleaner.clean(s)); }, false, baselineOpts); }); it('has the expected declaration file content', () => { Harness.Baseline.runBaseline('has the expected declaration file content', baseName + '.d.ts', () => { - var result = collateOutputs(emitterIOHost, fn => fn.substr(fn.length - '.d.ts'.length) === '.d.ts'); - return result.length > 0 ? result : null; + if (compilerResult.errors.length || !compilerResult.declFilesCode.length) { + return null; + } + return collateOutputs(compilerResult.declFilesCode); }, false, baselineOpts); }); - /* it('has the expected source maps', () => { Harness.Baseline.runBaseline('has the expected source maps', baseName + '.map', () => { - var result = collateOutputs(emitterIOHost, fn => fn.substr(fn.length - '.map'.length) === '.map'); - return result.length > 0 ? result : null; + if (!compilerResult.sourceMaps.length) { + return null; + } + + return collateOutputs(compilerResult.sourceMaps); }, false, baselineOpts); }); - */ + + it('has correct source map record', () => { + if (compilerResult.sourceMapRecord) { + Harness.Baseline.runBaseline('has correct source map record', baseName + '.sourcemap.txt', () => { + return compilerResult.sourceMapRecord; + }, false, baselineOpts); + } + }); it('has the expected errors', () => { Harness.Baseline.runBaseline('has the expected errors', baseName + '.errors.txt', () => { - return errors.length > 0 ? errors : null; + if (compilerResult.errors.length === 0) { + return null; + } + + return Harness.Compiler.minimalDiagnosticsToString(compilerResult.errors) + + sys.newLine + sys.newLine + + Harness.Compiler.getErrorBaseline(inputFiles.concat(otherFiles), compilerResult.errors); }, false, baselineOpts); }); diff --git a/src/harness/typeWriter.ts b/src/harness/typeWriter.ts index b8501850ac7..a3b23d10f14 100644 --- a/src/harness/typeWriter.ts +++ b/src/harness/typeWriter.ts @@ -1,180 +1,98 @@ - -/** TODO: Rewrite entirely **/ -class TypeWriterWalker { - constructor(public filename: string, public compiler: any) { - } - public run() { } - public results: any[]; +interface TypeWriterResult { + line: number; + column: number; + syntaxKind: string; + sourceText: string; + type: string; } -/* -class TypeWriterWalker extends TypeScript.SyntaxWalker { - private document: TypeScript.Document; - private syntaxTree: TypeScript.SyntaxTree; - private text: TypeScript.ISimpleText; - private currentPosition = 0; +class TypeWriterWalker { + results: TypeWriterResult[]; + currentSourceFile: ts.SourceFile; - public results: { - line: number; - column: number; - syntaxKind: string; - identifierName: string; - type: string; - }[] = []; - - constructor(public filename: string, public compiler: TypeScript.TypeScriptCompiler) { - super(); - - this.document = compiler.getDocument(filename); - this.syntaxTree = this.document.syntaxTree(); - this.text = this.syntaxTree.text; + constructor(public checker: ts.TypeChecker) { } - public run() { - TypeScript.visitNodeOrToken(this, this.syntaxTree.sourceUnit()); + public getTypes(fileName: string): TypeWriterResult[] { + var sourceFile = this.checker.getProgram().getSourceFile(fileName); + this.currentSourceFile = sourceFile; + this.results = []; + this.visitNode(sourceFile); + return this.results; } - private isName(token: TypeScript.ISyntaxToken) { - var parent = token.parent; + private visitNode(node: ts.Node): void { + switch (node.kind) { + // Should always log expressions that are not tokens + // Also, always log the "this" keyword + // 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.ArrayLiteral: + case ts.SyntaxKind.ObjectLiteral: + case ts.SyntaxKind.PropertyAccess: + case ts.SyntaxKind.IndexedAccess: + case ts.SyntaxKind.CallExpression: + case ts.SyntaxKind.NewExpression: + case ts.SyntaxKind.TypeAssertion: + case ts.SyntaxKind.ParenExpression: + case ts.SyntaxKind.FunctionExpression: + case ts.SyntaxKind.ArrowFunction: + case ts.SyntaxKind.PrefixOperator: + case ts.SyntaxKind.PostfixOperator: + case ts.SyntaxKind.BinaryExpression: + case ts.SyntaxKind.ConditionalExpression: + this.log(node, this.getTypeOfNode(node)); + break; - switch (parent.kind()) { - case TypeScript.SyntaxKind.ContinueStatement: - return (parent).identifier === token; - case TypeScript.SyntaxKind.BreakStatement: - return (parent).identifier === token; - case TypeScript.SyntaxKind.LabeledStatement: - return (parent).identifier === token; + // Should not change expression status (maybe expressions) + // TODO: Again, ideally should log number and string literals too, + // but to be consistent with the old typeWriter, just log identifiers + case ts.SyntaxKind.Identifier: + var identifier = node; + if (!this.isLabel(identifier)) { + var type = this.getTypeOfNode(identifier); + this.log(node, type); + } + break; + } + + ts.forEachChild(node, child => this.visitNode(child)); + } + + private isLabel(identifier: ts.Identifier): boolean { + var parent = identifier.parent; + switch (parent.kind) { + case ts.SyntaxKind.ContinueStatement: + case ts.SyntaxKind.BreakStatement: + return (parent).label === identifier; + case ts.SyntaxKind.LabelledStatement: + return (parent).label === identifier; } return false; } - public visitToken(token: TypeScript.ISyntaxToken) { - if (token.kind() === TypeScript.SyntaxKind.IdentifierName) { - if (!this.isName(token)) { - this.log(token); - } - } else if (token.kind() === TypeScript.SyntaxKind.ThisKeyword) { - this.log(token); - } - return super.visitToken(token); + private log(node: ts.Node, type: ts.Type): void { + var actualPos = ts.skipTrivia(this.currentSourceFile.text, node.pos); + var lineAndCharacter = this.currentSourceFile.getLineAndCharacterFromPosition(actualPos); + var sourceText = ts.getSourceTextOfNodeFromSourceText(this.currentSourceFile.text, node); + + // If we got an unknown type, we temporarily want to fall back to just pretending the name + // (source text) of the node is the type. This is to align with the old typeWriter to make + // baseline comparisons easier. In the long term, we will want to just call typeToString + this.results.push({ + line: lineAndCharacter.line - 1, + column: lineAndCharacter.character, + syntaxKind: ts.SyntaxKind[node.kind], + sourceText: sourceText, + type: this.checker.typeToString(type, node.parent, ts.TypeFormatFlags.None) + }); } - public visitNode(node: TypeScript.ISyntaxNode) { - return super.visitNode(node); - } - - private getAstForElement(element: TypeScript.ISyntaxElement) { - if (!TypeScript.isShared(element)) { - return element; - } - } - - private getEnclosingScopeSymbol(ast: TypeScript.ISyntaxElement): TypeScript.PullSymbol { - var enclosingScopeAST = TypeScript.DeclarationEmitter.getEnclosingContainer(ast); - if (enclosingScopeAST) { - var typeInfo = this.compiler.pullGetSymbolInformationFromAST(enclosingScopeAST, this.document); - return typeInfo ? typeInfo.symbol : null; - } - - return null; - } - - private getTypeOfElement(element: TypeScript.ISyntaxElement) { - var ast = this.getAstForElement(element); - if (ast) { - var typeInfo = this.compiler.pullGetSymbolInformationFromAST(ast, this.document); - if (typeInfo.symbol && typeInfo.symbol.type) { - var enclosingScope = this.getEnclosingScopeSymbol(ast); - return typeInfo.symbol.type.toString(enclosingScope); - } - } - - return ""; - } - - public visitPrefixUnaryExpression(node: TypeScript.PrefixUnaryExpressionSyntax) { - this.log(node); - return super.visitPrefixUnaryExpression(node); - } - public visitArrayLiteralExpression(node: TypeScript.ArrayLiteralExpressionSyntax) { - this.log(node); - return super.visitArrayLiteralExpression(node); - } - public visitOmittedExpression(node: TypeScript.OmittedExpressionSyntax) { - this.log(node); - return super.visitOmittedExpression(node); - } - public visitParenthesizedExpression(node: TypeScript.ParenthesizedExpressionSyntax) { - this.log(node); - return super.visitParenthesizedExpression(node); - } - public visitSimpleArrowFunctionExpression(node: TypeScript.SimpleArrowFunctionExpressionSyntax) { - this.log(node); - return super.visitSimpleArrowFunctionExpression(node); - } - public visitParenthesizedArrowFunctionExpression(node: TypeScript.ParenthesizedArrowFunctionExpressionSyntax) { - this.log(node); - return super.visitParenthesizedArrowFunctionExpression(node); - } - public visitObjectCreationExpression(node: TypeScript.ObjectCreationExpressionSyntax) { - this.log(node); - return super.visitObjectCreationExpression(node); - } - public visitCastExpression(node: TypeScript.CastExpressionSyntax) { - this.log(node); - return super.visitCastExpression(node); - } - public visitObjectLiteralExpression(node: TypeScript.ObjectLiteralExpressionSyntax) { - this.log(node); - return super.visitObjectLiteralExpression(node); - } - public visitFunctionExpression(node: TypeScript.FunctionExpressionSyntax) { - this.log(node); - return super.visitFunctionExpression(node); - } - public visitTypeOfExpression(node: TypeScript.TypeOfExpressionSyntax) { - this.log(node); - return super.visitTypeOfExpression(node); - } - public visitDeleteExpression(node: TypeScript.DeleteExpressionSyntax) { - this.log(node); - return super.visitDeleteExpression(node); - } - public visitVoidExpression(node: TypeScript.VoidExpressionSyntax) { - this.log(node); - return super.visitVoidExpression(node); - } - public visitMemberAccessExpression(node: TypeScript.MemberAccessExpressionSyntax) { - this.log(node); - return super.visitMemberAccessExpression(node); - } - public visitPostfixUnaryExpression(node: TypeScript.PostfixUnaryExpressionSyntax) { - this.log(node); - return super.visitPostfixUnaryExpression(node); - } - public visitElementAccessExpression(node: TypeScript.ElementAccessExpressionSyntax) { - this.log(node); - return super.visitElementAccessExpression(node); - } - public visitInvocationExpression(node: TypeScript.InvocationExpressionSyntax) { - this.log(node); - return super.visitInvocationExpression(node); - } - public visitBinaryExpression(node: TypeScript.BinaryExpressionSyntax) { - this.log(node); - return super.visitBinaryExpression(node); - } - public visitConditionalExpression(node: TypeScript.ConditionalExpressionSyntax) { - this.log(node); - return super.visitConditionalExpression(node); - } - - public log(node: TypeScript.ISyntaxNodeOrToken) { - var _fullStart = TypeScript.fullStart(node); - if (_fullStart >= 0) { - var pos = this.document.lineMap().getLineAndCharacterFromPosition(_fullStart); - this.results.push({ line: pos.line(), column: pos.character(), syntaxKind: TypeScript.SyntaxKind[node.kind()], identifierName: TypeScript.fullText(node, this.text).trim(), type: this.getTypeOfElement(node) }); - } + private getTypeOfNode(node: ts.Node): ts.Type { + var type = this.checker.getTypeOfNode(node); + ts.Debug.assert(type, "type doesn't exist"); + return type; } } -*/ \ No newline at end of file diff --git a/src/harness/unittestrunner.ts b/src/harness/unittestrunner.ts index e08b835ac62..c91b82a0d96 100644 --- a/src/harness/unittestrunner.ts +++ b/src/harness/unittestrunner.ts @@ -1,31 +1,13 @@ /// /// -enum UnittestTestType { - Compiler, - LanguageService, - Services, -} - class UnitTestRunner extends RunnerBase { - constructor(public testType?: UnittestTestType) { + constructor() { super(); } public initializeTests() { - switch (this.testType) { - case UnittestTestType.Compiler: - this.tests = this.enumerateFiles('tests/cases/unittests/compiler'); - break; - case UnittestTestType.LanguageService: - this.tests = this.enumerateFiles('tests/cases/unittests/ls'); - break; - default: - if (this.tests.length === 0) { - throw new Error('Unsupported test cases: ' + this.testType); - } - break; - } + this.tests = this.enumerateFiles('tests/cases/unittests/services'); var outfile = new Harness.Compiler.WriterAggregator() var outerr = new Harness.Compiler.WriterAggregator(); @@ -38,7 +20,7 @@ class UnitTestRunner extends RunnerBase { }); harnessCompiler.addInputFiles(toBeAdded); harnessCompiler.setCompilerOptions({ noResolve: true }); - + var stdout = new Harness.Compiler.EmitterIOHost(); var emitDiagnostics = harnessCompiler.emitAll(stdout); var results = stdout.toArray(); @@ -59,7 +41,9 @@ class UnitTestRunner extends RunnerBase { before: before, after: after, Harness: Harness, - IO: Harness.IO + IO: Harness.IO, + ts: ts, + TypeScript: TypeScript // FourSlash: FourSlash }; } diff --git a/src/services/braceMatcher.ts b/src/services/braceMatcher.ts index 96550dab2e7..3615f677024 100644 --- a/src/services/braceMatcher.ts +++ b/src/services/braceMatcher.ts @@ -24,93 +24,50 @@ module TypeScript.Services { public static getMatchSpans(syntaxTree: TypeScript.SyntaxTree, position: number): TypeScript.TextSpan[] { var result: TypeScript.TextSpan[] = []; - var currentToken = findToken(syntaxTree.sourceUnit(), position); + var token = findToken(syntaxTree.sourceUnit(), position); - BraceMatcher.getMatchingCloseBrace(currentToken, position, result); - BraceMatcher.getMatchingOpenBrace(currentToken, position, result); + if (start(token) === position) { + var matchKind = BraceMatcher.getMatchingTokenKind(token); + + if (matchKind !== null) { + var parentElement = token.parent; + + for (var i = 0, n = childCount(parentElement); i < n; i++) { + var current = childAt(parentElement, i); + + if (current !== null && fullWidth(current) > 0) { + if (current.kind() === matchKind) { + var range1 = new TypeScript.TextSpan(start(token), width(token)); + var range2 = new TypeScript.TextSpan(start(current), width(current)); + if (range1.start() < range2.start()) { + result.push(range1, range2); + } + else { + result.push(range2, range1); + } + break; + } + } + } + } + } return result; } - private static getMatchingCloseBrace(currentToken: TypeScript.ISyntaxToken, position: number, result: TypeScript.TextSpan[]) { - if (start(currentToken) === position) { - var closingBraceKind = BraceMatcher.getMatchingCloseBraceTokenKind(currentToken); - if (closingBraceKind !== null) { - var parentElement = currentToken.parent; - var currentPosition = fullStart(currentToken.parent); - for (var i = 0, n = childCount(parentElement); i < n; i++) { - var element = childAt(parentElement, i); - if (element !== null && fullWidth(element) > 0) { - if (element.kind() === closingBraceKind) { - var range1 = new TypeScript.TextSpan(position, width(currentToken)); - var range2 = new TypeScript.TextSpan(currentPosition + leadingTriviaWidth(element), width(element)); - result.push(range1, range2); - break; - } - - currentPosition += fullWidth(element); - } - } - } - } - } - - private static getMatchingOpenBrace(currentToken: TypeScript.ISyntaxToken, position: number, result: TypeScript.TextSpan[]) { - // Check if the current token to the left is a close brace - if (currentToken.fullStart() === position) { - currentToken = previousToken(currentToken); + private static getMatchingTokenKind(token: TypeScript.ISyntaxToken): TypeScript.SyntaxKind { + switch (token.kind()) { + case TypeScript.SyntaxKind.OpenBraceToken: return TypeScript.SyntaxKind.CloseBraceToken + case TypeScript.SyntaxKind.OpenParenToken: return TypeScript.SyntaxKind.CloseParenToken; + case TypeScript.SyntaxKind.OpenBracketToken: return TypeScript.SyntaxKind.CloseBracketToken; + case TypeScript.SyntaxKind.LessThanToken: return TypeScript.SyntaxKind.GreaterThanToken; + case TypeScript.SyntaxKind.CloseBraceToken: return TypeScript.SyntaxKind.OpenBraceToken + case TypeScript.SyntaxKind.CloseParenToken: return TypeScript.SyntaxKind.OpenParenToken; + case TypeScript.SyntaxKind.CloseBracketToken: return TypeScript.SyntaxKind.OpenBracketToken; + case TypeScript.SyntaxKind.GreaterThanToken: return TypeScript.SyntaxKind.LessThanToken; } - if (currentToken !== null && start(currentToken) === (position - 1)) { - var openBraceKind = BraceMatcher.getMatchingOpenBraceTokenKind(currentToken); - if (openBraceKind !== null) { - var parentElement = currentToken.parent; - var currentPosition = fullStart(currentToken.parent) + fullWidth(parentElement); - for (var i = childCount(parentElement) - 1 ; i >= 0; i--) { - var element = childAt(parentElement, i); - if (element !== null && fullWidth(element) > 0) { - if (element.kind() === openBraceKind) { - var range1 = new TypeScript.TextSpan(position - 1, width(currentToken)); - var range2 = new TypeScript.TextSpan(currentPosition - lastToken(element).trailingTriviaWidth() - width(element), width(element)); - result.push(range1, range2); - break; - } - - currentPosition -= fullWidth(element); - } - } - } - } - } - - private static getMatchingCloseBraceTokenKind(positionedElement: TypeScript.ISyntaxElement): TypeScript.SyntaxKind { - var element = positionedElement !== null && positionedElement; - switch (element.kind()) { - case TypeScript.SyntaxKind.OpenBraceToken: - return TypeScript.SyntaxKind.CloseBraceToken; - case TypeScript.SyntaxKind.OpenParenToken: - return TypeScript.SyntaxKind.CloseParenToken; - case TypeScript.SyntaxKind.OpenBracketToken: - return TypeScript.SyntaxKind.CloseBracketToken; - case TypeScript.SyntaxKind.LessThanToken: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? TypeScript.SyntaxKind.GreaterThanToken : null; - } - return null; - } - - private static getMatchingOpenBraceTokenKind(positionedElement: TypeScript.ISyntaxElement): TypeScript.SyntaxKind { - var element = positionedElement !== null && positionedElement; - switch (element.kind()) { - case TypeScript.SyntaxKind.CloseBraceToken: - return TypeScript.SyntaxKind.OpenBraceToken - case TypeScript.SyntaxKind.CloseParenToken: - return TypeScript.SyntaxKind.OpenParenToken; - case TypeScript.SyntaxKind.CloseBracketToken: - return TypeScript.SyntaxKind.OpenBracketToken; - case TypeScript.SyntaxKind.GreaterThanToken: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? TypeScript.SyntaxKind.LessThanToken : null; - } return null; } } -} +} \ No newline at end of file diff --git a/src/services/breakpoints.ts b/src/services/breakpoints.ts index 5dd057ac2af..12de22d3bd0 100644 --- a/src/services/breakpoints.ts +++ b/src/services/breakpoints.ts @@ -4,16 +4,13 @@ /// module TypeScript.Services.Breakpoints { - function createBreakpointSpanInfo(parentElement: TypeScript.ISyntaxElement, ...childElements: TypeScript.ISyntaxElement[]): ts.SpanInfo { + function createBreakpointSpanInfo(parentElement: TypeScript.ISyntaxElement, ...childElements: TypeScript.ISyntaxElement[]): TextSpan { if (!parentElement) { return null; } if (childElements.length == 0) { - return { - minChar: TypeScript.start(parentElement), - limChar: TypeScript.end(parentElement) - }; + return TextSpan.fromBounds(TypeScript.start(parentElement), TypeScript.end(parentElement)); } var start: number; @@ -28,24 +25,18 @@ module TypeScript.Services.Breakpoints { } } - return { - minChar: start, - limChar: end - }; + return TextSpan.fromBounds(start, end); } - function createBreakpointSpanInfoWithLimChar(startElement: TypeScript.ISyntaxElement, limChar: number): ts.SpanInfo { - return { - minChar: start(startElement), - limChar: limChar - }; + function createBreakpointSpanInfoWithLimChar(startElement: TypeScript.ISyntaxElement, limChar: number): TextSpan { + return TextSpan.fromBounds(start(startElement), limChar); } class BreakpointResolver { constructor(private posLine: number, private lineMap: TypeScript.LineMap) { } - private breakpointSpanOfToken(positionedToken: TypeScript.ISyntaxToken): ts.SpanInfo { + private breakpointSpanOfToken(positionedToken: TypeScript.ISyntaxToken): TextSpan { switch (positionedToken.kind()) { case TypeScript.SyntaxKind.OpenBraceToken: return this.breakpointSpanOfOpenBrace(positionedToken); @@ -74,7 +65,7 @@ module TypeScript.Services.Breakpoints { return this.breakpointSpanOfContainingNode(positionedToken); } - private breakpointSpanOfOpenBrace(openBraceToken: TypeScript.ISyntaxToken): ts.SpanInfo { + private breakpointSpanOfOpenBrace(openBraceToken: TypeScript.ISyntaxToken): TextSpan { var container = Syntax.containingNode(openBraceToken); if (container) { var originalContainer = container; @@ -168,7 +159,7 @@ module TypeScript.Services.Breakpoints { return null; } - private breakpointSpanOfCloseBrace(closeBraceToken: TypeScript.ISyntaxToken): ts.SpanInfo { + private breakpointSpanOfCloseBrace(closeBraceToken: TypeScript.ISyntaxToken): TextSpan { var container = Syntax.containingNode(closeBraceToken); if (container) { var originalContainer = container; @@ -243,7 +234,7 @@ module TypeScript.Services.Breakpoints { } - private breakpointSpanOfComma(commaToken: TypeScript.ISyntaxToken): ts.SpanInfo { + private breakpointSpanOfComma(commaToken: TypeScript.ISyntaxToken): TextSpan { var commaParent = commaToken.parent; if (isSeparatedList(commaParent)) { var grandParent = commaParent.parent; @@ -271,7 +262,7 @@ module TypeScript.Services.Breakpoints { return this.breakpointSpanOfContainingNode(commaToken); } - private breakpointSpanOfCloseParen(closeParenToken: TypeScript.ISyntaxToken): ts.SpanInfo { + private breakpointSpanOfCloseParen(closeParenToken: TypeScript.ISyntaxToken): TextSpan { var closeParenParent = closeParenToken.parent; if (closeParenParent) { switch (closeParenParent.kind()) { @@ -293,7 +284,7 @@ module TypeScript.Services.Breakpoints { return blockSyntax.statements && blockSyntax.statements.length != 0; } - private breakpointSpanOfFirstStatementInBlock(blockNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfFirstStatementInBlock(blockNode: TypeScript.ISyntaxNode): TextSpan { if (!blockNode) { return null; } @@ -316,7 +307,7 @@ module TypeScript.Services.Breakpoints { } } - private breakpointSpanOfLastStatementInBlock(blockNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfLastStatementInBlock(blockNode: TypeScript.ISyntaxNode): TextSpan { if (!blockNode) { return null; } @@ -339,7 +330,7 @@ module TypeScript.Services.Breakpoints { } } - private breakpointSpanOfFirstChildOfSyntaxList(positionedList: TypeScript.ISyntaxNodeOrToken[]): ts.SpanInfo { + private breakpointSpanOfFirstChildOfSyntaxList(positionedList: TypeScript.ISyntaxNodeOrToken[]): TextSpan { if (!positionedList) { return null; } @@ -363,7 +354,7 @@ module TypeScript.Services.Breakpoints { } } - private breakpointSpanOfLastChildOfSyntaxList(positionedList: TypeScript.ISyntaxNodeOrToken[]): ts.SpanInfo { + private breakpointSpanOfLastChildOfSyntaxList(positionedList: TypeScript.ISyntaxNodeOrToken[]): TextSpan { if (!positionedList) { return null; } @@ -385,7 +376,7 @@ module TypeScript.Services.Breakpoints { } } - private breakpointSpanOfNode(positionedNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfNode(positionedNode: ISyntaxNode): TextSpan { var node = positionedNode; switch (node.kind()) { // Declarations with elements @@ -493,7 +484,7 @@ module TypeScript.Services.Breakpoints { } return false; } - + private isInitializerOfForStatement(expressionNode: TypeScript.ISyntaxNode): boolean { if (!expressionNode) { return false; @@ -552,12 +543,12 @@ module TypeScript.Services.Breakpoints { return false; } - private breakpointOfLeftOfCommaExpression(commaExpressionNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointOfLeftOfCommaExpression(commaExpressionNode: TypeScript.ISyntaxNode): TextSpan { var commaExpression = commaExpressionNode; return this.breakpointSpanOf(commaExpression.left); } - private breakpointOfExpression(expressionNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointOfExpression(expressionNode: TypeScript.ISyntaxNode): TextSpan { if (this.isInitializerOfForStatement(expressionNode) || this.isConditionOfForStatement(expressionNode) || this.isIncrememtorOfForStatement(expressionNode)) { @@ -582,7 +573,7 @@ module TypeScript.Services.Breakpoints { return this.breakpointSpanOfContainingNode(expressionNode); } - private breakpointSpanOfStatement(statementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfStatement(statementNode: TypeScript.ISyntaxNode): TextSpan { var statement = statementNode; if (statement.kind() == TypeScript.SyntaxKind.EmptyStatement) { return null; @@ -722,7 +713,7 @@ module TypeScript.Services.Breakpoints { return positionedNode && !TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(positionedNode); } - private breakpointSpanOfDeclarationWithElements(positionedNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfDeclarationWithElements(positionedNode: TypeScript.ISyntaxNode): TextSpan { if (!this.canHaveBreakpointInDeclaration(positionedNode)) { return null; } @@ -751,7 +742,7 @@ module TypeScript.Services.Breakpoints { return !!varDeclaratorSyntax.equalsValueClause; } - private breakpointSpanOfVariableDeclarator(varDeclaratorNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfVariableDeclarator(varDeclaratorNode: TypeScript.ISyntaxNode): TextSpan { if (!this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { return null; } @@ -799,7 +790,7 @@ module TypeScript.Services.Breakpoints { return false; } - private breakpointSpanOfVariableDeclaration(varDeclarationNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfVariableDeclaration(varDeclarationNode: TypeScript.ISyntaxNode): TextSpan { if (!this.canHaveBreakpointInDeclaration(varDeclarationNode)) { return null; } @@ -830,7 +821,7 @@ module TypeScript.Services.Breakpoints { return this.canHaveBreakpointInVariableDeclaration(variableStatement.variableDeclaration); } - private breakpointSpanOfVariableStatement(varStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfVariableStatement(varStatementNode: TypeScript.ISyntaxNode): TextSpan { if (!this.canHaveBreakpointInVariableStatement(varStatementNode)) { return null; } @@ -842,7 +833,7 @@ module TypeScript.Services.Breakpoints { return createBreakpointSpanInfoWithLimChar(varStatementNode, end(childAt(varDeclarators, 0))); } - private breakpointSpanOfParameter(parameterNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfParameter(parameterNode: TypeScript.ISyntaxNode): TextSpan { if (parameterNode.parent.kind() === SyntaxKind.SimpleArrowFunctionExpression) { return this.breakpointSpanOfNode(parameterNode.parent); } @@ -860,7 +851,7 @@ module TypeScript.Services.Breakpoints { } } - private breakpointSpanOfMemberVariableDeclaration(memberVarDeclarationNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfMemberVariableDeclaration(memberVarDeclarationNode: TypeScript.ISyntaxNode): TextSpan { if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(memberVarDeclarationNode)) { return null; } @@ -874,7 +865,7 @@ module TypeScript.Services.Breakpoints { } } - private breakpointSpanOfImportDeclaration(importDeclarationNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfImportDeclaration(importDeclarationNode: TypeScript.ISyntaxNode): TextSpan { if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(importDeclarationNode)) { return null; } @@ -883,7 +874,7 @@ module TypeScript.Services.Breakpoints { return createBreakpointSpanInfo(importDeclarationNode, importSyntax.modifiers, importSyntax.importKeyword, importSyntax.identifier, importSyntax.equalsToken, importSyntax.moduleReference); } - private breakpointSpanOfEnumDeclaration(enumDeclarationNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfEnumDeclaration(enumDeclarationNode: TypeScript.ISyntaxNode): TextSpan { if (!this.canHaveBreakpointInDeclaration(enumDeclarationNode)) { return null; } @@ -891,7 +882,7 @@ module TypeScript.Services.Breakpoints { return createBreakpointSpanInfo(enumDeclarationNode); } - private breakpointSpanOfFirstEnumElement(enumDeclarationNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfFirstEnumElement(enumDeclarationNode: TypeScript.ISyntaxNode): TextSpan { var enumDeclarationSyntax = enumDeclarationNode; var enumElements = enumDeclarationSyntax.enumElements; if (enumElements && childCount(enumElements)) { @@ -901,7 +892,7 @@ module TypeScript.Services.Breakpoints { return null; } - private breakpointSpanOfEnumElement(enumElementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfEnumElement(enumElementNode: TypeScript.ISyntaxNode): TextSpan { if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(enumElementNode)) { return null; } @@ -909,45 +900,45 @@ module TypeScript.Services.Breakpoints { return createBreakpointSpanInfo(enumElementNode); } - private breakpointSpanOfIfStatement(ifStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfIfStatement(ifStatementNode: TypeScript.ISyntaxNode): TextSpan { var ifStatement = ifStatementNode; return createBreakpointSpanInfo(ifStatementNode, ifStatement.ifKeyword, ifStatement.openParenToken, ifStatement.condition, ifStatement.closeParenToken); } - private breakpointSpanOfElseClause(elseClauseNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfElseClause(elseClauseNode: TypeScript.ISyntaxNode): TextSpan { var elseClause = elseClauseNode; return this.breakpointSpanOf(elseClause.statement); } - private breakpointSpanOfForInStatement(forInStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfForInStatement(forInStatementNode: TypeScript.ISyntaxNode): TextSpan { var forInStatement = forInStatementNode; return createBreakpointSpanInfo(forInStatementNode, forInStatement.forKeyword, forInStatement.openParenToken, forInStatement.variableDeclaration, forInStatement.left, forInStatement.inKeyword, forInStatement.expression, forInStatement.closeParenToken); } - private breakpointSpanOfForStatement(forStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfForStatement(forStatementNode: TypeScript.ISyntaxNode): TextSpan { var forStatement = forStatementNode; return this.breakpointSpanOf(forStatement.variableDeclaration ? forStatement.variableDeclaration : forStatement.initializer); } - private breakpointSpanOfWhileStatement(whileStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfWhileStatement(whileStatementNode: TypeScript.ISyntaxNode): TextSpan { var whileStatement = whileStatementNode; return createBreakpointSpanInfo(whileStatementNode, whileStatement.whileKeyword, whileStatement.openParenToken, whileStatement.condition, whileStatement.closeParenToken); } - private breakpointSpanOfDoStatement(doStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfDoStatement(doStatementNode: TypeScript.ISyntaxNode): TextSpan { var doStatement = doStatementNode; return createBreakpointSpanInfo(doStatementNode, doStatement.whileKeyword, doStatement.openParenToken, doStatement.condition, doStatement.closeParenToken); } - private breakpointSpanOfSwitchStatement(switchStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfSwitchStatement(switchStatementNode: TypeScript.ISyntaxNode): TextSpan { var switchStatement = switchStatementNode; return createBreakpointSpanInfo(switchStatementNode, switchStatement.switchKeyword, switchStatement.openParenToken, switchStatement.expression, switchStatement.closeParenToken); } - private breakpointSpanOfFirstStatementOfFirstCaseClause(switchStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfFirstStatementOfFirstCaseClause(switchStatementNode: TypeScript.ISyntaxNode): TextSpan { var switchStatement = switchStatementNode; if (switchStatement.switchClauses && switchStatement.switchClauses.length == 0) { return null; @@ -964,7 +955,7 @@ module TypeScript.Services.Breakpoints { return this.breakpointSpanOfFirstChildOfSyntaxList(statements); } - private breakpointSpanOfLastStatementOfLastCaseClause(switchStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfLastStatementOfLastCaseClause(switchStatementNode: TypeScript.ISyntaxNode): TextSpan { var switchStatement = switchStatementNode; if (switchStatement.switchClauses && switchStatement.switchClauses.length == 0) { return null; @@ -981,37 +972,37 @@ module TypeScript.Services.Breakpoints { return this.breakpointSpanOfLastChildOfSyntaxList(statements); } - private breakpointSpanOfCaseSwitchClause(caseClauseNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfCaseSwitchClause(caseClauseNode: TypeScript.ISyntaxNode): TextSpan { var caseSwitchClause = caseClauseNode; return this.breakpointSpanOfFirstChildOfSyntaxList(caseSwitchClause.statements); } - private breakpointSpanOfDefaultSwitchClause(defaultSwithClauseNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfDefaultSwitchClause(defaultSwithClauseNode: TypeScript.ISyntaxNode): TextSpan { var defaultSwitchClause = defaultSwithClauseNode; return this.breakpointSpanOfFirstChildOfSyntaxList(defaultSwitchClause.statements); } - private breakpointSpanOfWithStatement(withStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfWithStatement(withStatementNode: TypeScript.ISyntaxNode): TextSpan { var withStatement = withStatementNode; return this.breakpointSpanOf(withStatement.statement); } - private breakpointSpanOfTryStatement(tryStatementNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfTryStatement(tryStatementNode: TypeScript.ISyntaxNode): TextSpan { var tryStatement = tryStatementNode; return this.breakpointSpanOfFirstStatementInBlock(tryStatement.block); } - private breakpointSpanOfCatchClause(catchClauseNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfCatchClause(catchClauseNode: TypeScript.ISyntaxNode): TextSpan { var catchClause = catchClauseNode; return createBreakpointSpanInfo(catchClauseNode, catchClause.catchKeyword, catchClause.openParenToken, catchClause.identifier, catchClause.typeAnnotation, catchClause.closeParenToken); } - private breakpointSpanOfFinallyClause(finallyClauseNode: TypeScript.ISyntaxNode): ts.SpanInfo { + private breakpointSpanOfFinallyClause(finallyClauseNode: TypeScript.ISyntaxNode): TextSpan { var finallyClause = finallyClauseNode; return this.breakpointSpanOfFirstStatementInBlock(finallyClause.block); } - private breakpointSpanOfParenthesizedArrowFunctionExpression(arrowFunctionExpression: ParenthesizedArrowFunctionExpressionSyntax): ts.SpanInfo { + private breakpointSpanOfParenthesizedArrowFunctionExpression(arrowFunctionExpression: ParenthesizedArrowFunctionExpressionSyntax): TextSpan { if (arrowFunctionExpression.block) { return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpression.block); } @@ -1020,7 +1011,7 @@ module TypeScript.Services.Breakpoints { } } - private breakpointSpanOfSimpleArrowFunctionExpression(arrowFunctionExpression: SimpleArrowFunctionExpressionSyntax): ts.SpanInfo { + private breakpointSpanOfSimpleArrowFunctionExpression(arrowFunctionExpression: SimpleArrowFunctionExpressionSyntax): TextSpan { if (arrowFunctionExpression.block) { return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpression.block); } @@ -1029,7 +1020,7 @@ module TypeScript.Services.Breakpoints { } } - private breakpointSpanOfContainingNode(positionedElement: ISyntaxElement): ts.SpanInfo { + private breakpointSpanOfContainingNode(positionedElement: ISyntaxElement): TextSpan { var current = positionedElement.parent; while (!isNode(current)) { current = current.parent; @@ -1038,7 +1029,7 @@ module TypeScript.Services.Breakpoints { return this.breakpointSpanOf(current); } - private breakpointSpanIfStartsOnSameLine(positionedElement: TypeScript.ISyntaxElement): ts.SpanInfo { + private breakpointSpanIfStartsOnSameLine(positionedElement: TypeScript.ISyntaxElement): TextSpan { if (positionedElement && this.posLine == this.lineMap.getLineNumberFromPosition(start(positionedElement))) { return this.breakpointSpanOf(positionedElement); } @@ -1046,7 +1037,7 @@ module TypeScript.Services.Breakpoints { return null; } - public breakpointSpanOf(positionedElement: TypeScript.ISyntaxElement): ts.SpanInfo { + public breakpointSpanOf(positionedElement: TypeScript.ISyntaxElement): TextSpan { if (!positionedElement) { return null; } @@ -1075,7 +1066,7 @@ module TypeScript.Services.Breakpoints { } } - export function getBreakpointLocation(syntaxTree: TypeScript.SyntaxTree, askedPos: number): ts.SpanInfo { + export function getBreakpointLocation(syntaxTree: TypeScript.SyntaxTree, askedPos: number): TextSpan { // Cannot set breakpoint in dts file if (TypeScript.isDTSFile(syntaxTree.fileName())) { return null; diff --git a/src/services/compiler/astHelpers.ts b/src/services/compiler/astHelpers.ts index 74d072846db..589ef4b6340 100644 --- a/src/services/compiler/astHelpers.ts +++ b/src/services/compiler/astHelpers.ts @@ -732,14 +732,14 @@ module TypeScript.ASTHelpers { return false; } - export function getNameOfIdenfierOrQualifiedName(name: ISyntaxElement): string { + export function getNameOfIdentifierOrQualifiedName(name: ISyntaxElement): string { if (name.kind() === SyntaxKind.IdentifierName) { return (name).text(); } else { Debug.assert(name.kind() == SyntaxKind.QualifiedName); var dotExpr = name; - return getNameOfIdenfierOrQualifiedName(dotExpr.left) + "." + getNameOfIdenfierOrQualifiedName(dotExpr.right); + return getNameOfIdentifierOrQualifiedName(dotExpr.left) + "." + getNameOfIdentifierOrQualifiedName(dotExpr.right); } } diff --git a/src/services/compiler/bloomFilter.ts b/src/services/compiler/bloomFilter.ts deleted file mode 100644 index 44d72bf5bfa..00000000000 --- a/src/services/compiler/bloomFilter.ts +++ /dev/null @@ -1,131 +0,0 @@ -/// - -module TypeScript { - - export class BloomFilter { - private bitArray: boolean[]; - private hashFunctionCount: number; - - public static falsePositiveProbability: number = 0.0001; - - /* - * From the bloom filter calculator here: http://hur.st/bloomfilter?n=4&p=1.0E-20 - * - * 1) n = Number of items in the filter - * - * 2) p = Probability of false positives, (a double between 0 and 1). - * - * 3) m = Number of bits in the filter - * - * 4) k = Number of hash functions - * - * m = ceil((n * log(p)) / log(1.0 / (pow(2.0, log(2.0))))) - * - * k = round(log(2.0) * m / n) - * - */ - constructor(expectedCount: number) { - var m: number = Math.max(1, BloomFilter.computeM(expectedCount)); - var k: number = Math.max(1, BloomFilter.computeK(expectedCount));; - - // We must have size in even bytes, so that when we deserialize from bytes we get a bit array with the same count. - // The count is used by the hash functions. - var sizeInEvenBytes = (m + 7) & ~7; - - this.bitArray = []; - for (var i = 0, len = sizeInEvenBytes; i < len; i++) { - this.bitArray[i] = false; - } - this.hashFunctionCount = k; - } - - // m = ceil((n * log(p)) / log(1.0 / (pow(2.0, log(2.0))))) - static computeM(expectedCount: number): number { - var p: number = BloomFilter.falsePositiveProbability; - var n: number = expectedCount; - - var numerator = n * Math.log(p); - var denominator = Math.log(1.0 / Math.pow(2.0, Math.log(2.0))); - return Math.ceil(numerator / denominator); - } - - // k = round(log(2.0) * m / n) - static computeK(expectedCount: number): number { - var n: number = expectedCount; - var m: number = BloomFilter.computeM(expectedCount); - - var temp = Math.log(2.0) * m / n; - return Math.round(temp); - } - - /** Modification of the murmurhash2 algorithm. Code is simpler because it operates over - * strings instead of byte arrays. Because each string character is two bytes, it is known - * that the input will be an even number of bytes (though not necessarily a multiple of 4). - * - * This is needed over the normal 'string.GetHashCode()' because we need to be able to generate - * 'k' different well distributed hashes for any given string s. Also, we want to be able to - * generate these hashes without allocating any memory. My ideal solution would be to use an - * MD5 hash. However, there appears to be no way to do MD5 in .Net where you can: - * - * a) feed it individual values instead of a byte[] - * - * b) have the hash computed into a byte[] you provide instead of a newly allocated one - * - * Generating 'k' pieces of garbage on each insert and lookup seems very wasteful. So, - * instead, we use murmur hash since it provides well distributed values, allows for a - * seed, and allocates no memory. - * - * Murmur hash is public domain. Actual code is included below as reference. - */ - private computeHash(key: string, seed: number): number { - return Hash.computeMurmur2StringHashCode(key, seed); - } - - public addKeys(keys: ts.Map) { - for (var name in keys) { - if (ts.lookUp(keys, name)) { - this.add(name); - } - } - } - - public add(value: string) { - for (var i = 0; i < this.hashFunctionCount; i++) { - var hash = this.computeHash(value, i); - hash = hash % this.bitArray.length; - this.bitArray[Math.abs(hash)] = true; - } - } - - public probablyContains(value: string): boolean { - for (var i = 0; i < this.hashFunctionCount; i++) { - var hash = this.computeHash(value, i); - hash = hash % this.bitArray.length; - if (!this.bitArray[Math.abs(hash)]) { - return false; - } - } - - return true; - } - - public isEquivalent(filter: BloomFilter): boolean { - return BloomFilter.isEquivalent(this.bitArray, filter.bitArray) - && this.hashFunctionCount === filter.hashFunctionCount; - } - - static isEquivalent(array1: boolean[], array2: boolean[]): boolean { - if (array1.length !== array2.length) { - return false; - } - - for (var i = 0; i < array1.length; i++) { - if (array1[i] !== array2[i]) { - return false; - } - } - - return true; - } - } -} diff --git a/src/services/compiler/declarationEmitter.ts b/src/services/compiler/declarationEmitter.ts index d3052389cb0..85e5bf09647 100644 --- a/src/services/compiler/declarationEmitter.ts +++ b/src/services/compiler/declarationEmitter.ts @@ -763,7 +763,7 @@ module TypeScript { var start = new Date().getTime(); var accessors = PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain); - TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime(); + TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime() - start; var comments: Comment[] = []; if (accessors.getter) { @@ -787,7 +787,7 @@ module TypeScript { private emitMemberAccessorDeclaration(funcDecl: ISyntaxElement, modifiers: ISyntaxToken[], name: ISyntaxToken) { var start = new Date().getTime(); var accessorSymbol = PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain); - TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime(); + TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime() - start; if (funcDecl.kind() === SyntaxKind.SetAccessor && accessorSymbol.getGetter()) { // Setter is being used to emit the type info. @@ -969,7 +969,7 @@ module TypeScript { this.declFile.WriteLine("require(" + (importDeclAST.moduleReference).stringLiteral.text() + ");"); } else { - this.declFile.WriteLine(ASTHelpers.getNameOfIdenfierOrQualifiedName((importDeclAST.moduleReference).moduleName) + ";"); + this.declFile.WriteLine(ASTHelpers.getNameOfIdentifierOrQualifiedName((importDeclAST.moduleReference).moduleName) + ";"); } } } @@ -1023,7 +1023,7 @@ module TypeScript { this.declFile.Write(moduleDecl.stringLiteral.text()); } else { - this.declFile.Write(ASTHelpers.getNameOfIdenfierOrQualifiedName(moduleDecl.name)); + this.declFile.Write(ASTHelpers.getNameOfIdentifierOrQualifiedName(moduleDecl.name)); } this.declFile.WriteLine(" {"); diff --git a/src/services/compiler/diagnostics.ts b/src/services/compiler/diagnostics.ts index d759c8bf014..5114f83f9e5 100644 --- a/src/services/compiler/diagnostics.ts +++ b/src/services/compiler/diagnostics.ts @@ -17,31 +17,11 @@ module TypeScript { export interface Logger { - information(): boolean; - debug(): boolean; - warning(): boolean; - error(): boolean; - fatal(): boolean; log(s: string): void; } export class NullLogger implements Logger { - public information(): boolean { return false; } - public debug(): boolean { return false; } - public warning(): boolean { return false; } - public error(): boolean { return false; } - public fatal(): boolean { return false; } public log(s: string): void { } } - - export function timeFunction(logger: Logger, funcDescription: string, func: () => any): any { - var start = (new Date()).getTime(); - var result = func(); - var end = (new Date()).getTime(); - if (logger.information()) { - logger.log(funcDescription + " completed in " + (end - start) + " msec"); - } - return result; - } } \ No newline at end of file diff --git a/src/services/compiler/references.ts b/src/services/compiler/references.ts index 464af87ec50..07ec0fa6043 100644 --- a/src/services/compiler/references.ts +++ b/src/services/compiler/references.ts @@ -18,7 +18,6 @@ ///// ///// ///// -///// ///// ///// ///// diff --git a/src/services/core/diagnosticCore.ts b/src/services/core/diagnosticCore.ts index 0c12a354933..b4d95a1c60b 100644 --- a/src/services/core/diagnosticCore.ts +++ b/src/services/core/diagnosticCore.ts @@ -120,7 +120,7 @@ module TypeScript { // TODO: We need to expose an extensibility point on our hosts to have them tell us what // they want the newline string to be. That way we can get the correct result regardless // of which host we use - return sys.newLine ? sys.newLine : "\r\n"; + return "\r\n"; } function getLargestIndex(diagnostic: string): number { diff --git a/src/services/core/hash.ts b/src/services/core/hash.ts deleted file mode 100644 index ef117df8025..00000000000 --- a/src/services/core/hash.ts +++ /dev/null @@ -1,112 +0,0 @@ -/// - -module TypeScript { - export class Hash { - // This table uses FNV1a as a string hash - private static FNV_BASE = 2166136261; - private static FNV_PRIME = 16777619; - - private static computeFnv1aCharArrayHashCode(text: number[], start: number, len: number): number { - var hashCode = Hash.FNV_BASE; - var end = start + len; - - for (var i = start; i < end; i++) { - hashCode = IntegerUtilities.integerMultiplyLow32Bits(hashCode ^ text[i], Hash.FNV_PRIME); - } - - return hashCode; - } - - public static computeSimple31BitCharArrayHashCode(key: number[], start: number, len: number): number { - // Start with an int. - var hash = 0; - - for (var i = 0; i < len; i++) { - var ch = key[start + i]; - - // Left shift keeps things as a 32bit int. And we're only doing two adds. Chakra and - // V8 recognize this as not needing to go past the 53 bits needed for the float - // mantissa. Or'ing with 0 keeps this 32 bits. - hash = ((((hash << 5) - hash) | 0) + ch) | 0; - } - - // Ensure we fit in 31 bits. That way if/when this gets stored, it won't require any heap - // allocation. - return hash & 0x7FFFFFFF; - } - - public static computeSimple31BitStringHashCode(key: string): number { - // Start with an int. - var hash = 0; - - var start = 0; - var len = key.length; - - for (var i = 0; i < len; i++) { - var ch = key.charCodeAt(start + i); - - // Left shift keeps things as a 32bit int. And we're only doing two adds. Chakra and - // V8 recognize this as not needing to go past the 53 bits needed for the float - // mantissa. Or'ing with 0 keeps this 32 bits. - hash = ((((hash << 5) - hash) | 0) + ch) | 0; - } - - // Ensure we fit in 31 bits. That way if/when this gets stored, it won't require any heap - // allocation. - return hash & 0x7FFFFFFF; - } - - public static computeMurmur2StringHashCode(key: string, seed: number): number { - // 'm' and 'r' are mixing constants generated offline. - // They're not really 'magic', they just happen to work well. - - var m: number = 0x5bd1e995; - var r: number = 24; - - // Initialize the hash to a 'random' value - - var numberOfCharsLeft = key.length; - var h = Math.abs(seed ^ numberOfCharsLeft); - - // Mix 4 bytes at a time into the hash. NOTE: 4 bytes is two chars, so we iterate - // through the string two chars at a time. - var index = 0; - while (numberOfCharsLeft >= 2) { - var c1 = key.charCodeAt(index); - var c2 = key.charCodeAt(index + 1); - - var k = Math.abs(c1 | (c2 << 16)); - - k = IntegerUtilities.integerMultiplyLow32Bits(k, m); - k ^= k >> r; - k = IntegerUtilities.integerMultiplyLow32Bits(k, m); - - h = IntegerUtilities.integerMultiplyLow32Bits(h, m); - h ^= k; - - index += 2; - numberOfCharsLeft -= 2; - } - - // Handle the last char (or 2 bytes) if they exist. This happens if the original string had - // odd length. - if (numberOfCharsLeft === 1) { - h ^= key.charCodeAt(index); - h = IntegerUtilities.integerMultiplyLow32Bits(h, m); - } - - // Do a few final mixes of the hash to ensure the last few bytes are well-incorporated. - - h ^= h >> 13; - h = IntegerUtilities.integerMultiplyLow32Bits(h, m); - h ^= h >> 15; - - return h; - } - - public static combine(value: number, currentHash: number): number { - // Ensure we stay within 31 bits. - return (((currentHash << 5) + currentHash) + value) & 0x7FFFFFFF; - } - } -} \ No newline at end of file diff --git a/src/services/core/references.ts b/src/services/core/references.ts index fcfd10126ec..8dcded411a6 100644 --- a/src/services/core/references.ts +++ b/src/services/core/references.ts @@ -6,7 +6,6 @@ /// /// /// -/// /// /// /// diff --git a/src/services/formatting/formattingManager.ts b/src/services/formatting/formattingManager.ts index 57c854196a8..359f19c84ed 100644 --- a/src/services/formatting/formattingManager.ts +++ b/src/services/formatting/formattingManager.ts @@ -19,28 +19,26 @@ module TypeScript.Services.Formatting { export class FormattingManager { private options: FormattingOptions; - constructor(private syntaxTree: SyntaxTree, private snapshot: ITextSnapshot, private rulesProvider: RulesProvider, editorOptions: ts.EditorOptions) { + constructor(private syntaxTree: SyntaxTree, + private snapshot: ITextSnapshot, + private rulesProvider: RulesProvider, + editorOptions: ts.EditorOptions) { // // TODO: convert to use FormattingOptions instead of EditorOptions - this.options = new FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); + this.options = new FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter) } - public formatSelection(minChar: number, limChar: number): ts.TextEdit[] { + public formatSelection(minChar: number, limChar: number): ts.TextChange[] { var span = TextSpan.fromBounds(minChar, limChar); return this.formatSpan(span, FormattingRequestKind.FormatSelection); } - public formatDocument(minChar: number, limChar: number): ts.TextEdit[] { - var span = TextSpan.fromBounds(minChar, limChar); + public formatDocument(): ts.TextChange[] { + var span = TextSpan.fromBounds(0, this.snapshot.getLength()); return this.formatSpan(span, FormattingRequestKind.FormatDocument); } - public formatOnPaste(minChar: number, limChar: number): ts.TextEdit[] { - var span = TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, FormattingRequestKind.FormatOnPaste); - } - - public formatOnSemicolon(caretPosition: number): ts.TextEdit[] { + public formatOnSemicolon(caretPosition: number): ts.TextChange[] { var sourceUnit = this.syntaxTree.sourceUnit(); var semicolonPositionedToken = findToken(sourceUnit, caretPosition - 1); @@ -48,7 +46,7 @@ module TypeScript.Services.Formatting { // Find the outer most parent that this semicolon terminates var current: ISyntaxElement = semicolonPositionedToken; while (current.parent !== null && - end(current.parent) === end(semicolonPositionedToken) && + end(current.parent) === end(semicolonPositionedToken) && current.parent.kind() !== SyntaxKind.List) { current = current.parent; } @@ -63,7 +61,7 @@ module TypeScript.Services.Formatting { return []; } - public formatOnClosingCurlyBrace(caretPosition: number): ts.TextEdit[] { + public formatOnClosingCurlyBrace(caretPosition: number): ts.TextChange[] { var sourceUnit = this.syntaxTree.sourceUnit(); var closeBracePositionedToken = findToken(sourceUnit, caretPosition - 1); @@ -71,8 +69,8 @@ module TypeScript.Services.Formatting { // Find the outer most parent that this closing brace terminates var current: ISyntaxElement = closeBracePositionedToken; while (current.parent !== null && - end(current.parent) === end(closeBracePositionedToken) && - current.parent.kind() !== SyntaxKind.List) { + end(current.parent) === end(closeBracePositionedToken) && + current.parent.kind() !== SyntaxKind.List) { current = current.parent; } @@ -86,7 +84,7 @@ module TypeScript.Services.Formatting { return []; } - public formatOnEnter(caretPosition: number): ts.TextEdit[] { + public formatOnEnter(caretPosition: number): ts.TextChange[] { var lineNumber = this.snapshot.getLineNumberFromPosition(caretPosition); if (lineNumber > 0) { @@ -103,23 +101,20 @@ module TypeScript.Services.Formatting { return []; } - private formatSpan(span: TextSpan, formattingRequestKind: FormattingRequestKind): ts.TextEdit[] { + private formatSpan(span: TextSpan, formattingRequestKind: FormattingRequestKind): ts.TextChange[] { // Always format from the beginning of the line var startLine = this.snapshot.getLineFromPosition(span.start()); span = TextSpan.fromBounds(startLine.startPosition(), span.end()); - var result: ts.TextEdit[] = []; + var result: ts.TextChange[] = []; var formattingEdits = Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind); // // TODO: Change the ILanguageService interface to return TextEditInfo (with start, and length) instead of TextEdit (with minChar and limChar) formattingEdits.forEach((item) => { - result.push({ - minChar: item.position, - limChar: item.position + item.length, - text: item.replaceWith - }); + var edit = new ts.TextChange(new TextSpan(item.position, item.length), item.replaceWith); + result.push(edit); }); return result; diff --git a/src/services/formatting/rulesProvider.ts b/src/services/formatting/rulesProvider.ts index 608ee97254a..90b11f01a9b 100644 --- a/src/services/formatting/rulesProvider.ts +++ b/src/services/formatting/rulesProvider.ts @@ -40,8 +40,8 @@ module TypeScript.Services.Formatting { public ensureUpToDate(options: ts.FormatCodeOptions) { if (this.options == null || !ts.compareDataObjects(this.options, options)) { - var activeRules: Rule[] = TypeScript.timeFunction(this.logger, "RulesProvider: createActiveRules()", () => { return this.createActiveRules(options); }); - var rulesMap: RulesMap = TypeScript.timeFunction(this.logger, "RulesProvider: RulesMap.create()", () => { return RulesMap.create(activeRules); }); + var activeRules = this.createActiveRules(options); + var rulesMap = RulesMap.create(activeRules); this.activeRules = activeRules; this.rulesMap = rulesMap; diff --git a/src/services/formatting/textSnapshot.ts b/src/services/formatting/textSnapshot.ts index c91ea7ae492..4f2904dd76f 100644 --- a/src/services/formatting/textSnapshot.ts +++ b/src/services/formatting/textSnapshot.ts @@ -17,6 +17,7 @@ module TypeScript.Services.Formatting { export interface ITextSnapshot { + getLength(): number; getText(span: TextSpan): string; getLineNumberFromPosition(position: number): number; getLineFromPosition(position: number): ITextSnapshotLine; @@ -30,6 +31,10 @@ module TypeScript.Services.Formatting { this.lines = []; } + public getLength(): number { + return this.snapshot.length(); + } + public getText(span: TextSpan): string { return this.snapshot.substr(span.start(), span.length()); } diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index b42f34fa927..bfce8e0067c 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -1,121 +1,22 @@ - /// + module TypeScript.Services { - interface LexicalScope { - items: ts.Map; - itemNames: string[]; - childScopes: ts.Map; - childScopeNames: string[]; - } + export class NavigationBarItemGetter { + private hasGlobalNode = false; - export class GetScriptLexicalStructureWalker extends TypeScript.SyntaxWalker { - private nameStack: string[] = []; - private kindStack: string[] = []; + private getIndent(node: ISyntaxNode): number { + var indent = this.hasGlobalNode ? 1 : 0; - private parentScopes: LexicalScope[] = []; - private currentScope: LexicalScope; + var current = node.parent; + while (current != null) { + if (current.kind() == SyntaxKind.ModuleDeclaration || current.kind() === SyntaxKind.FunctionDeclaration) { + indent++; + } - private createScope(): LexicalScope { - return { - items: TypeScript.createIntrinsicsObject(), - childScopes: TypeScript.createIntrinsicsObject(), - childScopeNames: [], - itemNames: [] - }; - } - - private pushNewContainerScope(containerName: string, kind: string): LexicalScope { - Debug.assert(containerName, "No scope name provided"); - - var key = kind + "+" + containerName; - this.nameStack.push(containerName); - this.kindStack.push(kind); - - var parentScope = this.currentScope; - this.parentScopes.push(parentScope); - - var scope = ts.lookUp(parentScope.childScopes, key); - if (!scope) { - scope = this.createScope() - parentScope.childScopes[key] = scope; - parentScope.childScopeNames.push(key); + current = current.parent; } - this.currentScope = scope; - return parentScope; - } - - private popScope() { - Debug.assert(this.parentScopes.length > 0, "No parent scopes to return to") - this.currentScope = this.parentScopes.pop(); - this.kindStack.pop(); - this.nameStack.pop(); - } - - constructor(private fileName: string) { - super(); - this.currentScope = this.createScope(); - } - - private collectItems(items: ts.NavigateToItem[], scope = this.currentScope) { - scope.itemNames.forEach(item => { - items.push(scope.items[item]); - }); - - scope.childScopeNames.forEach(childScope => { - this.collectItems(items, scope.childScopes[childScope]); - }); - } - - static getListsOfAllScriptLexicalStructure(items: ts.NavigateToItem[], fileName: string, unit: TypeScript.SourceUnitSyntax) { - var visitor = new GetScriptLexicalStructureWalker(fileName); - visitNodeOrToken(visitor, unit); - visitor.collectItems(items); - } - - private createItem(node: TypeScript.ISyntaxNode, modifiers: ISyntaxToken[], kind: string, name: string): void { - var key = kind + "+" + name; - - if (ts.lookUp(this.currentScope.items, key) !== undefined) { - this.addAdditionalSpan(node, key); - return; - } - - var item: ts.NavigateToItem = { - name: name, - kind: kind, - matchKind: ts.MatchKind.exact, - fileName: this.fileName, - kindModifiers: this.getKindModifiers(modifiers), - minChar: start(node), - limChar: end(node), - containerName: this.nameStack.join("."), - containerKind: this.kindStack.length === 0 ? "" : TypeScript.ArrayUtilities.last(this.kindStack), - }; - this.currentScope.items[key] = item; - this.currentScope.itemNames.push(key); - } - - private addAdditionalSpan( - node: TypeScript.ISyntaxNode, - key: string) { - - var item = ts.lookUp(this.currentScope.items, key); - Debug.assert(item !== undefined); - - var start = TypeScript.start(node); - var span: ts.SpanInfo = { - minChar: start, - limChar: start + width(node) - }; - - - if (item.additionalSpans) { - item.additionalSpans.push(span); - } - else { - item.additionalSpans = [span]; - } + return indent; } private getKindModifiers(modifiers: TypeScript.ISyntaxToken[]): string { @@ -128,30 +29,221 @@ module TypeScript.Services { return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; } - public visitModuleDeclaration(node: TypeScript.ModuleDeclarationSyntax): void { - var names = this.getModuleNames(node); - this.visitModuleDeclarationWorker(node, names, 0); + public getItems(node: TypeScript.SourceUnitSyntax): ts.NavigationBarItem[] { + return this.getItemsWorker(() => this.getTopLevelNodes(node), n => this.createTopLevelItem(n)); } - private visitModuleDeclarationWorker(node: TypeScript.ModuleDeclarationSyntax, names: string[], nameIndex: number): void { - if (nameIndex === names.length) { - // We're after all the module names, descend and process all children. - super.visitModuleDeclaration(node); + private getChildNodes(nodes: IModuleElementSyntax[]): ISyntaxNode[] { + var childNodes: ISyntaxNode[] = []; + + for (var i = 0, n = nodes.length; i < n; i++) { + var node = nodes[i]; + + if (node.kind() === SyntaxKind.FunctionDeclaration) { + childNodes.push(node); + } + else if (node.kind() === SyntaxKind.VariableStatement) { + var variableDeclaration = (node).variableDeclaration; + childNodes.push.apply(childNodes, variableDeclaration.variableDeclarators); + } } - else { - var name = names[nameIndex]; - var kind = ts.ScriptElementKind.moduleElement; - this.createItem(node, node.modifiers, kind, name); + return childNodes; + } - this.pushNewContainerScope(name, kind); + private getTopLevelNodes(node: SourceUnitSyntax): ISyntaxNode[] { + var topLevelNodes: ISyntaxNode[] = []; + topLevelNodes.push(node); - this.visitModuleDeclarationWorker(node, names, nameIndex + 1); + this.addTopLevelNodes(node.moduleElements, topLevelNodes); - this.popScope(); + return topLevelNodes; + } + + private addTopLevelNodes(nodes: IModuleElementSyntax[], topLevelNodes: ISyntaxNode[]): void { + for (var i = 0, n = nodes.length; i < n; i++) { + var node = nodes[i]; + switch (node.kind()) { + case SyntaxKind.ClassDeclaration: + case SyntaxKind.EnumDeclaration: + case SyntaxKind.InterfaceDeclaration: + topLevelNodes.push(node); + break; + + case SyntaxKind.ModuleDeclaration: + var moduleDeclaration = node; + topLevelNodes.push(node); + this.addTopLevelNodes(moduleDeclaration.moduleElements, topLevelNodes); + break; + + case SyntaxKind.FunctionDeclaration: + var functionDeclaration = node; + if (this.isTopLevelFunctionDeclaration(functionDeclaration)) { + topLevelNodes.push(node); + this.addTopLevelNodes(functionDeclaration.block.statements, topLevelNodes); + } + break; + } } } + public isTopLevelFunctionDeclaration(functionDeclaration: FunctionDeclarationSyntax) { + // A function declaration is 'top level' if it contains any function declarations + // within it. + return functionDeclaration.block && ArrayUtilities.any(functionDeclaration.block.statements, s => s.kind() === SyntaxKind.FunctionDeclaration); + } + + private getItemsWorker(getNodes: () => ISyntaxNode[], createItem: (n: ISyntaxNode) => ts.NavigationBarItem): ts.NavigationBarItem[] { + var items: ts.NavigationBarItem[] = []; + + var keyToItem = createIntrinsicsObject(); + + var nodes = getNodes(); + for (var i = 0, n = nodes.length; i < n; i++) { + var child = nodes[i]; + var item = createItem(child); + if (item != null) { + if (item.text.length > 0) { + var key = item.text + "-" + item.kind; + + var itemWithSameName = keyToItem[key]; + if (itemWithSameName) { + // We had an item with the same name. Merge these items together. + this.merge(itemWithSameName, item); + } + else { + keyToItem[key] = item; + items.push(item); + } + } + } + } + + return items; + } + + private merge(target: ts.NavigationBarItem, source: ts.NavigationBarItem) { + // First, add any spans in the source to the target. + target.spans.push.apply(target.spans, source.spans); + + if (source.childItems) { + if (!target.childItems) { + target.childItems = []; + } + + // Next, recursively merge or add any children in the source as appropriate. + outer: + for (var i = 0, n = source.childItems.length; i < n; i++) { + var sourceChild = source.childItems[i]; + + for (var j = 0, m = target.childItems.length; j < m; j++) { + var targetChild = target.childItems[j]; + + if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) { + // Found a match. merge them. + this.merge(targetChild, sourceChild); + continue outer; + } + } + + // Didn't find a match, just add this child to the list. + target.childItems.push(sourceChild); + } + } + } + + private createChildItem(node: ISyntaxNode): ts.NavigationBarItem { + switch (node.kind()) { + case SyntaxKind.Parameter: + var parameter = node; + if (parameter.modifiers.length === 0) { + return null; + } + return new ts.NavigationBarItem(parameter.identifier.text(), ts.ScriptElementKind.memberVariableElement, this.getKindModifiers(parameter.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.MemberFunctionDeclaration: + var memberFunction = node; + return new ts.NavigationBarItem(memberFunction.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, this.getKindModifiers(memberFunction.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.GetAccessor: + var getAccessor = node; + return new ts.NavigationBarItem(getAccessor.propertyName.text(), ts.ScriptElementKind.memberGetAccessorElement, this.getKindModifiers(getAccessor.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.SetAccessor: + var setAccessor = node; + return new ts.NavigationBarItem(setAccessor.propertyName.text(), ts.ScriptElementKind.memberSetAccessorElement, this.getKindModifiers(setAccessor.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.IndexSignature: + var indexSignature = node; + return new ts.NavigationBarItem("[]", ts.ScriptElementKind.indexSignatureElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.EnumElement: + var enumElement = node; + return new ts.NavigationBarItem(enumElement.propertyName.text(), ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.CallSignature: + var callSignature = node; + return new ts.NavigationBarItem("()", ts.ScriptElementKind.callSignatureElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.ConstructSignature: + var constructSignature = node; + return new ts.NavigationBarItem("new()", ts.ScriptElementKind.constructSignatureElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.MethodSignature: + var methodSignature = node; + return new ts.NavigationBarItem(methodSignature.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.PropertySignature: + var propertySignature = node; + return new ts.NavigationBarItem(propertySignature.propertyName.text(), ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + + case SyntaxKind.FunctionDeclaration: + var functionDeclaration = node; + if (!this.isTopLevelFunctionDeclaration(functionDeclaration)) { + return new ts.NavigationBarItem(functionDeclaration.identifier.text(), ts.ScriptElementKind.functionElement, this.getKindModifiers(functionDeclaration.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + } + break; + + case SyntaxKind.MemberVariableDeclaration: + var memberVariableDeclaration = node; + return new ts.NavigationBarItem(memberVariableDeclaration.variableDeclarator.propertyName.text(), ts.ScriptElementKind.memberVariableElement, this.getKindModifiers(memberVariableDeclaration.modifiers), [TextSpan.fromBounds(start(memberVariableDeclaration.variableDeclarator), end(memberVariableDeclaration.variableDeclarator))]); + + case SyntaxKind.VariableDeclarator: + var variableDeclarator = node; + return new ts.NavigationBarItem(variableDeclarator.propertyName.text(), ts.ScriptElementKind.variableElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(variableDeclarator), end(variableDeclarator))]); + + case SyntaxKind.ConstructorDeclaration: + var constructorDeclaration = node; + return new ts.NavigationBarItem("constructor", ts.ScriptElementKind.constructorImplementationElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + } + + return null; + } + + private createTopLevelItem(node: ISyntaxNode): ts.NavigationBarItem { + switch (node.kind()) { + case SyntaxKind.SourceUnit: + return this.createSourceUnitItem(node); + + case SyntaxKind.ClassDeclaration: + return this.createClassItem(node); + + case SyntaxKind.EnumDeclaration: + return this.createEnumItem(node); + + case SyntaxKind.InterfaceDeclaration: + return this.createIterfaceItem(node); + + case SyntaxKind.ModuleDeclaration: + return this.createModuleItem(node); + + case SyntaxKind.FunctionDeclaration: + return this.createFunctionItem(node); + } + + return null; + } + private getModuleNames(node: TypeScript.ModuleDeclarationSyntax): string[] { var result: string[] = []; @@ -176,180 +268,84 @@ module TypeScript.Services { } } - public visitClassDeclaration(node: TypeScript.ClassDeclarationSyntax): void { - var name = node.identifier.text(); - var kind = ts.ScriptElementKind.classElement; + private createModuleItem(node: ModuleDeclarationSyntax): ts.NavigationBarItem { + var moduleNames = this.getModuleNames(node); - this.createItem(node, node.modifiers, kind, name); + var childItems = this.getItemsWorker(() => this.getChildNodes(node.moduleElements), n => this.createChildItem(n)); - this.pushNewContainerScope(name, kind); - - super.visitClassDeclaration(node); - - this.popScope(); + return new ts.NavigationBarItem(moduleNames.join("."), + ts.ScriptElementKind.moduleElement, + this.getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + this.getIndent(node)); } - public visitInterfaceDeclaration(node: TypeScript.InterfaceDeclarationSyntax): void { - var name = node.identifier.text(); - var kind = ts.ScriptElementKind.interfaceElement; + private createFunctionItem(node: FunctionDeclarationSyntax) { + var childItems = this.getItemsWorker(() => node.block.statements, n => this.createChildItem(n)); - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - super.visitInterfaceDeclaration(node); - - this.popScope(); + return new ts.NavigationBarItem(node.identifier.text(), + ts.ScriptElementKind.functionElement, + this.getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + this.getIndent(node)); } - public visitObjectType(node: TypeScript.ObjectTypeSyntax): void { - // Ignore an object type if we aren't inside an interface declaration. We don't want - // to add some random object type's members to the nav bar. - if (node.parent.kind() === SyntaxKind.InterfaceDeclaration) { - super.visitObjectType(node); - } - } + private createSourceUnitItem(node: SourceUnitSyntax): ts.NavigationBarItem { + var childItems = this.getItemsWorker(() => this.getChildNodes(node.moduleElements), n => this.createChildItem(n)); - public visitEnumDeclaration(node: TypeScript.EnumDeclarationSyntax): void { - var name = node.identifier.text(); - var kind = ts.ScriptElementKind.enumElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - super.visitEnumDeclaration(node); - - this.popScope(); - } - - public visitConstructorDeclaration(node: TypeScript.ConstructorDeclarationSyntax): void { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.constructorImplementationElement, "constructor"); - - // Search the parameter list of class properties - var parameters = node.callSignature.parameterList.parameters; - if (parameters) { - for (var i = 0, n = parameters.length; i < n; i++) { - var parameter = parameters[i]; - - Debug.assert(parameter.kind() === SyntaxKind.Parameter); - - if (SyntaxUtilities.containsToken(parameter.modifiers, SyntaxKind.PublicKeyword) || - SyntaxUtilities.containsToken(parameter.modifiers, SyntaxKind.PrivateKeyword)) { - this.createItem(node, parameter.modifiers, ts.ScriptElementKind.memberVariableElement, parameter.identifier.text()); - } - } + if (childItems === null || childItems.length === 0) { + return null; } - // No need to descend into a constructor; + this.hasGlobalNode = true; + return new ts.NavigationBarItem("", + ts.ScriptElementKind.moduleElement, + ts.ScriptElementKindModifier.none, + [TextSpan.fromBounds(start(node), end(node))], + childItems); } - public visitMemberFunctionDeclaration(node: TypeScript.MemberFunctionDeclarationSyntax): void { - this.createItem(node, node.modifiers, ts.ScriptElementKind.memberFunctionElement, node.propertyName.text()); + private createClassItem(node: ClassDeclarationSyntax): ts.NavigationBarItem { + var constructor = ArrayUtilities.firstOrDefault( + node.classElements, n => n.kind() === SyntaxKind.ConstructorDeclaration); - // No need to descend into a member function; + // Add the constructor parameters in as children of hte class (for property parameters). + var nodes: ISyntaxNode[] = constructor + ? (constructor.callSignature.parameterList.parameters).concat(node.classElements) + : node.classElements; + + var childItems = this.getItemsWorker(() => nodes, n => this.createChildItem(n)); + return new ts.NavigationBarItem( + node.identifier.text(), + ts.ScriptElementKind.classElement, + this.getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + this.getIndent(node)); } - public visitGetAccessor(node: TypeScript.GetAccessorSyntax): void { - this.createItem(node, node.modifiers, ts.ScriptElementKind.memberGetAccessorElement, node.propertyName.text()); - - // No need to descend into a member accessor; + private createEnumItem(node: TypeScript.EnumDeclarationSyntax): ts.NavigationBarItem { + var childItems = this.getItemsWorker(() => node.enumElements, n => this.createChildItem(n)); + return new ts.NavigationBarItem( + node.identifier.text(), + ts.ScriptElementKind.enumElement, + this.getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + this.getIndent(node)); } - public visitSetAccessor(node: TypeScript.SetAccessorSyntax): void { - this.createItem(node, node.modifiers, ts.ScriptElementKind.memberSetAccessorElement, node.propertyName.text()); - - // No need to descend into a member accessor; - } - - public visitVariableDeclarator(node: TypeScript.VariableDeclaratorSyntax): void { - var modifiers = node.parent.kind() === SyntaxKind.MemberVariableDeclaration - ? (node.parent).modifiers - : TypeScript.Syntax.emptyList(); - var kind = node.parent.kind() === SyntaxKind.MemberVariableDeclaration - ? ts.ScriptElementKind.memberVariableElement - : ts.ScriptElementKind.variableElement; - this.createItem(node, modifiers, kind, node.propertyName.text()); - - // No need to descend into a variable declarator; - } - - public visitIndexSignature(node: TypeScript.IndexSignatureSyntax): void { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.indexSignatureElement, "[]"); - - // No need to descend into an index signature; - } - - public visitEnumElement(node: TypeScript.EnumElementSyntax): void { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberVariableElement, node.propertyName.text()); - - // No need to descend into an enum element; - } - - public visitCallSignature(node: TypeScript.CallSignatureSyntax): void { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.callSignatureElement, "()"); - - // No need to descend into a call signature; - } - - public visitConstructSignature(node: TypeScript.ConstructSignatureSyntax): void { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.constructSignatureElement, "new()"); - - // No need to descend into a construct signature; - } - - public visitMethodSignature(node: TypeScript.MethodSignatureSyntax): void { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberFunctionElement, node.propertyName.text()); - - // No need to descend into a method signature; - } - - public visitPropertySignature(node: TypeScript.PropertySignatureSyntax): void { - this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberVariableElement, node.propertyName.text()); - - // No need to descend into a property signature; - } - - public visitFunctionDeclaration(node: TypeScript.FunctionDeclarationSyntax): void { - // in the case of: - // declare function - // the parser will synthesize an identifier. - // we shouldn't add an unnamed function declaration - if (width(node.identifier) > 0) { - this.createItem(node, node.modifiers, ts.ScriptElementKind.functionElement, node.identifier.text()); - } - - // No need to descend into a function declaration; - } - - // Common statement types. Don't even bother walking into them as we'll never find anything - // inside that we'd put in the navbar. - - public visitBlock(node: TypeScript.BlockSyntax): void { - } - - public visitIfStatement(node: TypeScript.IfStatementSyntax): void { - } - - public visitExpressionStatement(node: TypeScript.ExpressionStatementSyntax): void { - } - - public visitThrowStatement(node: TypeScript.ThrowStatementSyntax): void { - } - - public visitReturnStatement(node: TypeScript.ReturnStatementSyntax): void { - } - - public visitSwitchStatement(node: TypeScript.SwitchStatementSyntax): void { - } - - public visitWithStatement(node: TypeScript.WithStatementSyntax): void { - } - - public visitTryStatement(node: TypeScript.TryStatementSyntax): void { - } - - public visitLabeledStatement(node: TypeScript.LabeledStatementSyntax): void { + private createIterfaceItem(node: TypeScript.InterfaceDeclarationSyntax): ts.NavigationBarItem { + var childItems = this.getItemsWorker(() => node.body.typeMembers, n => this.createChildItem(n)); + return new ts.NavigationBarItem( + node.identifier.text(), + ts.ScriptElementKind.interfaceElement, + this.getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + this.getIndent(node)); } } } \ No newline at end of file diff --git a/src/services/services.ts b/src/services/services.ts index f1a8960c54b..0069f53922d 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -11,7 +11,6 @@ /// /// /// -/// /// /// @@ -26,7 +25,6 @@ /// module ts { - export interface Node { getSourceFile(): SourceFile; getChildCount(): number; @@ -71,8 +69,8 @@ module ts { export interface SourceFile { getSourceUnit(): TypeScript.SourceUnitSyntax; getSyntaxTree(): TypeScript.SyntaxTree; - getBloomFilter(): TypeScript.BloomFilter; - update(scriptSnapshot: TypeScript.IScriptSnapshot, version: number, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange): SourceFile; + getScriptSnapshot(): TypeScript.IScriptSnapshot; + update(scriptSnapshot: TypeScript.IScriptSnapshot, version: string, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange): SourceFile; } var scanner: Scanner = createScanner(ScriptTarget.ES5); @@ -310,6 +308,7 @@ module ts { public filename: string; public text: string; public getLineAndCharacterFromPosition(position: number): { line: number; character: number } { return null; } + public getPositionFromLineAndCharacter(line: number, character: number): number { return -1; } public amdDependencies: string[]; public referencedFiles: FileReference[]; public syntacticErrors: Diagnostic[]; @@ -320,11 +319,11 @@ module ts { public identifierCount: number; public symbolCount: number; public statements: NodeArray; - public version: number; + public version: string; public isOpen: boolean; public languageVersion: ScriptTarget; + public identifiers: Map; - private bloomFilter: TypeScript.BloomFilter; private syntaxTree: TypeScript.SyntaxTree; private scriptSnapshot: TypeScript.IScriptSnapshot; @@ -333,6 +332,10 @@ module ts { return this.getSyntaxTree().sourceUnit(); } + public getScriptSnapshot(): TypeScript.IScriptSnapshot { + return this.scriptSnapshot; + } + public getLineMap(): TypeScript.LineMap { return this.getSyntaxTree().lineMap(); } @@ -356,35 +359,7 @@ module ts { return TypeScript.isDTSFile(this.filename); } - public getBloomFilter(): TypeScript.BloomFilter { - if (!this.bloomFilter) { - var identifiers = TypeScript.createIntrinsicsObject(); - var pre = function (cur: TypeScript.ISyntaxElement) { - if (TypeScript.ASTHelpers.isValidAstNode(cur)) { - if (cur.kind() === TypeScript.SyntaxKind.IdentifierName) { - var nodeText = TypeScript.tokenValueText((cur)); - - identifiers[nodeText] = true; - } - } - }; - - TypeScript.getAstWalkerFactory().simpleWalk(this.getSourceUnit(), pre, null, identifiers); - - var identifierCount = 0; - for (var name in identifiers) { - if (identifiers[name]) { - identifierCount++; - } - } - - this.bloomFilter = new TypeScript.BloomFilter(identifierCount); - this.bloomFilter.addKeys(identifiers); - } - return this.bloomFilter; - } - - public update(scriptSnapshot: TypeScript.IScriptSnapshot, version: number, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange): SourceFile { + public update(scriptSnapshot: TypeScript.IScriptSnapshot, version: string, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange): SourceFile { // See if we are currently holding onto a syntax tree. We may not be because we're // either a closed file, or we've just been lazy and haven't had to create the syntax // tree yet. Access the field instead of the method so we don't accidently realize @@ -419,7 +394,7 @@ module ts { return SourceFileObject.createSourceFileObject(this.filename, scriptSnapshot, this.languageVersion, version, isOpen, newSyntaxTree); } - public static createSourceFileObject(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, languageVersion: ScriptTarget, version: number, isOpen: boolean, syntaxTree?: TypeScript.SyntaxTree) { + public static createSourceFileObject(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, languageVersion: ScriptTarget, version: string, isOpen: boolean, syntaxTree?: TypeScript.SyntaxTree) { var newSourceFile = createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), languageVersion, version, isOpen); newSourceFile.scriptSnapshot = scriptSnapshot; newSourceFile.syntaxTree = syntaxTree; @@ -428,11 +403,6 @@ module ts { } export interface Logger { - information(): boolean; - debug(): boolean; - warning(): boolean; - error(): boolean; - fatal(): boolean; log(s: string): void; } @@ -442,7 +412,7 @@ module ts { export interface LanguageServiceHost extends Logger { getCompilationSettings(): CompilerOptions; getScriptFileNames(): string[]; - getScriptVersion(fileName: string): number; + getScriptVersion(fileName: string): string; getScriptIsOpen(fileName: string): boolean; getScriptSnapshot(fileName: string): TypeScript.IScriptSnapshot; getLocalizedDiagnosticMessages(): any; @@ -454,9 +424,6 @@ module ts { // with a language service host instance // export interface LanguageService { - // Note: refresh is a no-op now. It is only around for back compat purposes. - refresh(): void; - cleanupSemanticCache(): void; getSyntacticDiagnostics(fileName: string): Diagnostic[]; @@ -468,28 +435,30 @@ module ts { getTypeAtPosition(fileName: string, position: number): TypeInfo; - getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): SpanInfo; + getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): TypeScript.TextSpan; - getBreakpointStatementAtPosition(fileName: string, position: number): SpanInfo; + getBreakpointStatementAtPosition(fileName: string, position: number): TypeScript.TextSpan; - getSignatureAtPosition(fileName: string, position: number): SignatureInfo; + getSignatureHelpItems(fileName: string, position: number): SignatureHelpItems; + getSignatureHelpCurrentArgumentState(fileName: string, position: number, applicableSpanStart: number): SignatureHelpState; + getRenameInfo(fileName: string, position: number): RenameInfo; getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[]; getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[]; getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[]; getImplementorsAtPosition(fileName: string, position: number): ReferenceEntry[]; getNavigateToItems(searchValue: string): NavigateToItem[]; - getScriptLexicalStructure(fileName: string): NavigateToItem[]; + getNavigationBarItems(fileName: string): NavigationBarItem[]; - getOutliningRegions(fileName: string): OutliningSpan[]; + getOutliningSpans(fileName: string): OutliningSpan[]; + getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[]; getBraceMatchingAtPosition(fileName: string, position: number): TypeScript.TextSpan[]; getIndentationAtPosition(fileName: string, position: number, options: EditorOptions): number; - getFormattingEditsForRange(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; - getFormattingEditsForDocument(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; - getFormattingEditsOnPaste(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; - getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextEdit[]; + getFormattingEditsForRange(fileName: string, start: number, end: number, options: FormatCodeOptions): TextChange[]; + getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions): TextChange[]; + getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextChange[]; getEmitOutput(fileName: string): EmitOutput; @@ -498,30 +467,68 @@ module ts { dispose(): void; } - export interface ReferenceEntry { - fileName: string; - minChar: number; - limChar: number; - isWriteAccess: boolean; + export class NavigationBarItem { + constructor(public text: string, + public kind: string, + public kindModifiers: string, + public spans: TypeScript.TextSpan[], + public childItems: NavigationBarItem[] = null, + public indent = 0, + public bolded = false, + public grayed = false) { + } } - export interface NavigateToItem { - name: string; - kind: string; // see ScriptElementKind - kindModifiers: string; // see ScriptElementKindModifier, comma separated - matchKind: string; - fileName: string; - minChar: number; - limChar: number; - additionalSpans?: SpanInfo[]; - containerName: string; - containerKind: string; // see ScriptElementKind + export class TodoCommentDescriptor { + constructor(public text: string, + public priority: number) { + } } - export interface TextEdit { - minChar: number; - limChar: number; - text: string; + export class TodoComment { + constructor(public descriptor: TodoCommentDescriptor, + public message: string, + public position: number) { + } + } + + export class TextChange { + constructor(public span: TypeScript.TextSpan, public newText: string) { + } + + static createInsert(pos: number, newText: string): TextChange { + return new TextChange(new TypeScript.TextSpan(pos, 0), newText); + } + static createDelete(start: number, end: number): TextChange { + return new TextChange(TypeScript.TextSpan.fromBounds(start, end), ""); + } + static createReplace(start: number, end: number, newText: string): TextChange { + return new TextChange(TypeScript.TextSpan.fromBounds(start, end), newText); + } + } + + export class ReferenceEntry { + public fileName: string = ""; + public textSpan: TypeScript.TextSpan; + public isWriteAccess: boolean = false; + + constructor(fileName: string, textSpan: TypeScript.TextSpan, isWriteAccess: boolean) { + this.fileName = fileName; + this.textSpan = textSpan; + this.isWriteAccess = isWriteAccess; + } + } + + export class NavigateToItem { + constructor(public name: string, + public kind: string, + public kindModifiers: string, + public matchKind: string, + public fileName: string, + public textSpan: TypeScript.TextSpan, + public containerName: string, + public containerKind: string) { + } } export interface EditorOptions { @@ -542,14 +549,14 @@ module ts { PlaceOpenBraceOnNewLineForControlBlocks: boolean; } - export interface DefinitionInfo { - fileName: string; - minChar: number; - limChar: number; - kind: string; - name: string; - containerKind: string; - containerName: string; + export class DefinitionInfo { + constructor(public fileName: string, + public textSpan: TypeScript.TextSpan, + public kind: string, + public name: string, + public containerKind: string, + public containerName: string) { + } } export interface MemberName { @@ -558,54 +565,80 @@ module ts { text: string; } - export interface TypeInfo { - memberName: MemberName; - docComment: string; - fullSymbolName: string; - kind: string; - minChar: number; - limChar: number; + export class TypeInfo { + constructor( + public memberName: TypeScript.MemberName, + public docComment: string, + public fullSymbolName: string, + public kind: string, + public textSpan: TypeScript.TextSpan) { + } } - export interface SpanInfo { - minChar: number; - limChar: number; - // text?: string; + export class RenameInfo { + constructor(public canRename: boolean, + public localizedErrorMessage: string, + public displayName: string, + public fullDisplayName: string, + public kind: string, + public kindModifiers: string, + public triggerSpan: TypeScript.TextSpan) { + } + + public static CreateError(localizedErrorMessage: string) { + return new RenameInfo(/*canRename:*/ false, localizedErrorMessage, + /*displayName:*/ null, /*fullDisplayName:*/ null, + /*kind:*/ null, /*kindModifiers:*/ null, /*triggerSpan:*/ null); + } + + public static Create(displayName: string, + fullDisplayName: string, + kind: string, + kindModifiers: string, + triggerSpan: TypeScript.TextSpan) { + return new RenameInfo(/*canRename:*/ true, /*localizedErrorMessage:*/ null, displayName, fullDisplayName, kind, kindModifiers, triggerSpan); + } } - export interface SignatureInfo { - actual: ActualSignatureInfo; - formal: FormalSignatureItemInfo[]; // Formal signatures - activeFormal: number; // Index of the "best match" formal signature + export class SignatureHelpParameter { + constructor(public name: string, + public documentation: string, + public display: string, + public isOptional: boolean) { + } } - export interface FormalSignatureItemInfo { - signatureInfo: string; - typeParameters: FormalTypeParameterInfo[]; - parameters: FormalParameterInfo[]; // Array of parameters - docComment: string; // Help for the signature + /** + * Represents a single signature to show in signature help. + * The id is used for subsequent calls into the language service to ask questions about the + * signature help item in the context of any documents that have been updated. i.e. after + * an edit has happened, while signature help is still active, the host can ask important + * questions like 'what parameter is the user currently contained within?'. + */ + export class SignatureHelpItem { + constructor(public isVariadic: boolean, + public prefix: string, + public suffix: string, + public separator: string, + public parameters: SignatureHelpParameter[], + public documentation: string) { + } } - export interface FormalTypeParameterInfo { - name: string; // Type parameter name - docComment: string; // Comments that contain help for the parameter - minChar: number; // minChar for parameter info in the formal signature info string - limChar: number; // lim char for parameter info in the formal signature info string + /** + * Represents a set of signature help items, and the preferred item that should be selected. + */ + export class SignatureHelpItems { + constructor(public items: SignatureHelpItem[], + public applicableSpan: TypeScript.TextSpan, + public selectedItemIndex: number) { + } } - export interface FormalParameterInfo { - name: string; // Parameter name - isVariable: boolean; // true if parameter is var args - docComment: string; // Comments that contain help for the parameter - minChar: number; // minChar for parameter info in the formal signature info string - limChar: number; // lim char for parameter info in the formal signature info string - } - - export interface ActualSignatureInfo { - parameterMinChar: number; - parameterLimChar: number; - currentParameterIsTypeParameter: boolean; // current parameter is a type argument or a normal argument - currentParameter: number; // Index of active parameter in "parameters" or "typeParamters" array + export class SignatureHelpState { + constructor(public argumentIndex: number, + public argumentCount: number) { + } } export interface CompletionInfo { @@ -659,6 +692,7 @@ module ts { InMultiLineCommentTrivia, InSingleQuoteStringLiteral, InDoubleQuoteStringLiteral, + EndingWithDotToken, } export enum TokenClass { @@ -692,16 +726,15 @@ module ts { filename: string, compilationSettings: CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, - version: number, - isOpen: boolean, - referencedFiles: string[]): SourceFile; + version: string, + isOpen: boolean): SourceFile; updateDocument( sourceFile: SourceFile, filename: string, compilationSettings: CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, - version: number, + version: string, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange ): SourceFile; @@ -819,7 +852,7 @@ module ts { // Information about a specific host file. interface HostFileInformation { filename: string; - version: number; + version: string; isOpen: boolean; sourceText?: TypeScript.IScriptSnapshot; } @@ -928,7 +961,7 @@ module ts { return fileNames; } - public getVersion(filename: string): number { + public getVersion(filename: string): string { return this.getEntry(filename).version; } @@ -944,14 +977,14 @@ module ts { return file.sourceText; } - public getScriptTextChangeRangeSinceVersion(filename: string, lastKnownVersion: number): TypeScript.TextChangeRange { + public getChangeRange(filename: string, lastKnownVersion: string, oldScriptSnapshot: TypeScript.IScriptSnapshot): TypeScript.TextChangeRange { var currentVersion = this.getVersion(filename); if (lastKnownVersion === currentVersion) { return TypeScript.TextChangeRange.unchanged; // "No changes" } var scriptSnapshot = this.getScriptSnapshot(filename); - return scriptSnapshot.getTextChangeRangeSinceVersion(lastKnownVersion); + return scriptSnapshot.getChangeRange(oldScriptSnapshot); } } @@ -960,11 +993,10 @@ module ts { // For our syntactic only features, we also keep a cache of the syntax tree for the // currently edited file. - private currentfilename: string = ""; - private currentFileVersion: number = -1; + private currentFilename: string = ""; + private currentFileVersion: string = null; private currentSourceFile: SourceFile = null; private currentFileSyntaxTree: TypeScript.SyntaxTree = null; - private currentFileScriptSnapshot: TypeScript.IScriptSnapshot = null; constructor(private host: LanguageServiceHost) { this.hostCache = new HostCache(host); @@ -979,7 +1011,7 @@ module ts { var syntaxTree: TypeScript.SyntaxTree = null; var sourceFile: SourceFile; - if (this.currentFileSyntaxTree === null || this.currentfilename !== filename) { + if (this.currentFileSyntaxTree === null || this.currentFilename !== filename) { var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); syntaxTree = this.createSyntaxTree(filename, scriptSnapshot); sourceFile = createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, /*isOpen*/ true); @@ -988,9 +1020,10 @@ module ts { } else if (this.currentFileVersion !== version) { var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); - syntaxTree = this.updateSyntaxTree(filename, scriptSnapshot, this.currentFileSyntaxTree, this.currentFileVersion); + syntaxTree = this.updateSyntaxTree(filename, scriptSnapshot, + this.currentSourceFile.getScriptSnapshot(), this.currentFileSyntaxTree, this.currentFileVersion); - var editRange = this.hostCache.getScriptTextChangeRangeSinceVersion(filename, this.currentFileVersion); + var editRange = this.hostCache.getChangeRange(filename, this.currentFileVersion, this.currentSourceFile.getScriptSnapshot()); sourceFile = !editRange ? createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, /*isOpen*/ true) : this.currentSourceFile.update(scriptSnapshot, version, /*isOpen*/ true, editRange); @@ -1001,9 +1034,8 @@ module ts { if (syntaxTree !== null) { Debug.assert(sourceFile); // All done, ensure state is up to date - this.currentFileScriptSnapshot = scriptSnapshot; this.currentFileVersion = version; - this.currentfilename = filename; + this.currentFilename = filename; this.currentFileSyntaxTree = syntaxTree; this.currentSourceFile = sourceFile; } @@ -1038,7 +1070,7 @@ module ts { public getCurrentScriptSnapshot(filename: string): TypeScript.IScriptSnapshot { // update currentFileScriptSnapshot as a part of 'getCurrentFileSyntaxTree' call this.getCurrentFileSyntaxTree(filename); - return this.currentFileScriptSnapshot; + return this.getCurrentSourceFile(filename).getScriptSnapshot(); } private createSyntaxTree(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot): TypeScript.SyntaxTree { @@ -1052,8 +1084,8 @@ module ts { return syntaxTree; } - private updateSyntaxTree(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, previousSyntaxTree: TypeScript.SyntaxTree, previousFileVersion: number): TypeScript.SyntaxTree { - var editRange = this.hostCache.getScriptTextChangeRangeSinceVersion(filename, previousFileVersion); + private updateSyntaxTree(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, previousScriptSnapshot: TypeScript.IScriptSnapshot, previousSyntaxTree: TypeScript.SyntaxTree, previousFileVersion: string): TypeScript.SyntaxTree { + var editRange = this.hostCache.getChangeRange(filename, previousFileVersion, previousScriptSnapshot); // Debug.assert(newLength >= 0); @@ -1065,7 +1097,7 @@ module ts { var nextSyntaxTree = TypeScript.IncrementalParser.parse( previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot)); - this.ensureInvariants(filename, editRange, nextSyntaxTree, this.currentFileScriptSnapshot, scriptSnapshot); + this.ensureInvariants(filename, editRange, nextSyntaxTree, previousScriptSnapshot, scriptSnapshot); return nextSyntaxTree; } @@ -1133,7 +1165,7 @@ module ts { } } - function createSourceFileFromScriptSnapshot(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, settings: CompilerOptions, version: number, isOpen: boolean) { + function createSourceFileFromScriptSnapshot(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, settings: CompilerOptions, version: string, isOpen: boolean) { return SourceFileObject.createSourceFileObject(filename, scriptSnapshot, settings.target, version, isOpen); } @@ -1178,7 +1210,7 @@ module ts { filename: string, compilationSettings: CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, - version: number, + version: string, isOpen: boolean): SourceFile { var bucket = getBucketForCompilationSettings(compilationSettings, /*createIfMissing*/ true); @@ -1202,7 +1234,7 @@ module ts { filename: string, compilationSettings: CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, - version: number, + version: string, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange ): SourceFile { @@ -1241,6 +1273,101 @@ module ts { }; } + /// Helpers + function getTargetLabel(referenceNode: Node, labelName: string): Identifier { + while (referenceNode) { + if (referenceNode.kind === SyntaxKind.LabelledStatement && (referenceNode).label.text === labelName) { + return (referenceNode).label; + } + referenceNode = referenceNode.parent; + } + return undefined; + } + + function isJumpStatementTarget(node: Node): boolean { + return node.kind === SyntaxKind.Identifier && + (node.parent.kind === SyntaxKind.BreakStatement || node.parent.kind === SyntaxKind.ContinueStatement) && + (node.parent).label === node; + } + + function isLabelOfLabeledStatement(node: Node): boolean { + return node.kind === SyntaxKind.Identifier && + node.parent.kind === SyntaxKind.LabelledStatement && + (node.parent).label === node; + } + + function isLabelName(node: Node): boolean { + return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node); + } + + function isCallExpressionTarget(node: Node): boolean { + if (node.parent.kind === SyntaxKind.PropertyAccess && (node.parent).right === node) + node = node.parent; + return node.parent.kind === SyntaxKind.CallExpression && (node.parent).func === node; + } + + function isNewExpressionTarget(node: Node): boolean { + if (node.parent.kind === SyntaxKind.PropertyAccess && (node.parent).right === node) + node = node.parent; + return node.parent.kind === SyntaxKind.NewExpression && (node.parent).func === node; + } + + function isAnyFunction(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.FunctionExpression: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.ArrowFunction: + case SyntaxKind.Method: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.Constructor: + return true; + } + return false; + } + + function isNameOfFunctionDeclaration(node: Node): boolean { + return node.kind === SyntaxKind.Identifier && + isAnyFunction(node.parent) && (node.parent).name === node; + } + + /// Returns true if node is a name of an object literal property, e.g. "a" in x = { "a": 1 } + function isNameOfPropertyAssignment(node: Node): boolean { + return (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NumericLiteral) && + node.parent.kind === SyntaxKind.PropertyAssignment && (node.parent).name === node; + } + + function isLiteralNameOfPropertyDeclarationOrIndexAccess(node: Node): boolean { + if (node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NumericLiteral) { + switch (node.parent.kind) { + case SyntaxKind.Property: + case SyntaxKind.PropertyAssignment: + case SyntaxKind.EnumMember: + case SyntaxKind.Method: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.ModuleDeclaration: + return (node.parent).name === node; + case SyntaxKind.IndexedAccess: + return (node.parent).index === node; + } + } + + return false; + } + + function isNameOfExternalModuleImportOrDeclaration(node: Node): boolean { + return node.kind === SyntaxKind.StringLiteral && + ((node.parent.kind === SyntaxKind.ModuleDeclaration && (node.parent).name === node) || + (node.parent.kind === SyntaxKind.ImportDeclaration && (node.parent).externalModuleName === node)); + } + + enum SearchMeaning { + Value = 0x1, + Type = 0x2, + Namespace = 0x4 + } + // A cache of completion entries for keywords, these do not change between sessions var keywordCompletions:CompletionEntry[] = []; for (var i = SyntaxKind.FirstKeyword; i <= SyntaxKind.LastKeyword; i++) { @@ -1284,10 +1411,7 @@ module ts { return { getSourceFile: (filename, languageVersion) => { var sourceFile = getSourceFile(filename); - - Debug.assert(!!sourceFile, "sourceFile can not be undefined"); - - return sourceFile.getSourceFile(); + return sourceFile && sourceFile.getSourceFile(); }, getCancellationToken: () => cancellationToken, getCanonicalFileName: (filename) => useCaseSensitivefilenames ? filename : filename.toLowerCase(), @@ -1396,13 +1520,13 @@ module ts { // new text buffer). var textChangeRange: TypeScript.TextChangeRange = null; if (sourceFile.isOpen && isOpen) { - textChangeRange = hostCache.getScriptTextChangeRangeSinceVersion(filename, sourceFile.version); + textChangeRange = hostCache.getChangeRange(filename, sourceFile.version, sourceFile.getScriptSnapshot()); } sourceFile = documentRegistry.updateDocument(sourceFile, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange); } else { - sourceFile = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen, []); + sourceFile = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen); } // Remeber the new sourceFile @@ -1677,7 +1801,7 @@ module ts { } // TODO: this is a hack for now, we need a proper walking mechanism to verify that we have the correct node - var mappedNode = getNodeAtPosition(sourceFile.getSourceFile(), TypeScript.end(node) - 1); + var mappedNode = getNodeAtPosition(sourceFile, TypeScript.end(node) - 1); Debug.assert(mappedNode, "Could not map a Fidelity node to an AST node"); @@ -1693,7 +1817,7 @@ module ts { // Right of dot member completion list if (isRightOfDot) { - var type: Type = typeInfoResolver.getTypeOfExpression(mappedNode); + var type: ApparentType = typeInfoResolver.getApparentType(typeInfoResolver.getTypeOfNode(mappedNode)); if (!type) { return undefined; } @@ -1807,7 +1931,9 @@ module ts { current = child; continue outer; } - if (child.end > position) break; + if (child.end > position) { + break; + } } return current; } @@ -1820,6 +1946,7 @@ module ts { return node; } switch (node.kind) { + case SyntaxKind.SourceFile: case SyntaxKind.Method: case SyntaxKind.FunctionDeclaration: case SyntaxKind.FunctionExpression: @@ -1884,25 +2011,23 @@ module ts { } /// QuickInfo - function getTypeAtPosition(filename: string, position: number): TypeInfo { + function getTypeAtPosition(fileName: string, position: number): TypeInfo { synchronizeHostData(); - filename = TypeScript.switchToForwardSlashes(filename); - var sourceFile = getSourceFile(filename); - var node = getNodeAtPosition(sourceFile.getSourceFile(), position); - if (!node) return undefined; + fileName = TypeScript.switchToForwardSlashes(fileName); + var sourceFile = getSourceFile(fileName); + var node = getNodeAtPosition(sourceFile, position); + if (!node) { + return undefined; + } var symbol = typeInfoResolver.getSymbolInfo(node); var type = symbol && typeInfoResolver.getTypeOfSymbol(symbol); if (type) { - return { - memberName: new TypeScript.MemberNameString(typeInfoResolver.typeToString(type)), - docComment: "", - fullSymbolName: typeInfoResolver.symbolToString(symbol, getContainerNode(node)), - kind: getSymbolKind(symbol), - minChar: node.pos, - limChar: node.end - }; + return new TypeInfo( + new TypeScript.MemberNameString(typeInfoResolver.typeToString(type)), + "", typeInfoResolver.symbolToString(symbol, getContainerNode(node)), + getSymbolKind(symbol), TypeScript.TextSpan.fromBounds(node.pos, node.end)); } return undefined; @@ -1910,62 +2035,14 @@ module ts { /// Goto definition function getDefinitionAtPosition(filename: string, position: number): DefinitionInfo[]{ - function getTargetLabel(node: Node, labelName: string): Identifier { - while (node) { - if (node.kind === SyntaxKind.LabelledStatement && (node).label.text === labelName) { - return (node).label; - } - node = node.parent; - } - return undefined; - } - - function isJumpStatementTarget(node: Node): boolean { - return node.kind === SyntaxKind.Identifier && - (node.parent.kind === SyntaxKind.BreakStatement || node.parent.kind === SyntaxKind.ContinueStatement) && - (node.parent).label === node; - } - - function isCallExpressionTarget(node: Node): boolean { - if (node.parent.kind === SyntaxKind.PropertyAccess && (node.parent).right === node) - node = node.parent; - return node.parent.kind === SyntaxKind.CallExpression && (node.parent).func === node; - } - - function isNewExpressionTarget(node: Node): boolean { - if (node.parent.kind === SyntaxKind.PropertyAccess && (node.parent).right === node) - node = node.parent; - return node.parent.kind === SyntaxKind.NewExpression && (node.parent).func === node; - } - - function isFunctionDeclaration(node: Node): boolean { - switch (node.kind) { - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.Method: - case SyntaxKind.FunctionExpression: - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - case SyntaxKind.ArrowFunction: - return true; - } - return false; - } - - function isNameOfFunctionDeclaration(node: Node): boolean { - return node.kind === SyntaxKind.Identifier && - isFunctionDeclaration(node.parent) && (node.parent).name === node; - } - function getDefinitionInfo(node: Node, symbolKind: string, symbolName: string, containerName: string): DefinitionInfo { - return { - fileName: node.getSourceFile().filename, - minChar: node.getStart(), - limChar: node.getEnd(), - kind: symbolKind, - name: symbolName, - containerName: containerName, - containerKind: undefined - }; + return new DefinitionInfo( + node.getSourceFile().filename, + TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()), + symbolKind, + symbolName, + undefined, + containerName); } function tryAddSignature(signatureDeclarations: Declaration[], selectConstructors: boolean, symbolKind: string, symbolName: string, containerName: string, result: DefinitionInfo[]) { @@ -2018,7 +2095,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getNodeAtPosition(sourceFile.getSourceFile(), position); + var node = getNodeAtPosition(sourceFile, position); if (!node) { return undefined; } @@ -2031,15 +2108,14 @@ module ts { } /// Triple slash reference comments - var comment = forEach(sourceFile.getSourceFile().referencedFiles, r => (r.pos <= position && position < r.end) ? r : undefined); + var comment = forEach(sourceFile.referencedFiles, r => (r.pos <= position && position < r.end) ? r : undefined); if (comment) { var targetFilename = normalizePath(combinePaths(getDirectoryPath(filename), comment.filename)); if (program.getSourceFile(targetFilename)) { - return [{ - fileName: targetFilename, minChar: 0, limChar: 0, - kind: ScriptElementKind.scriptElement, - name: comment.filename, containerName: undefined, containerKind: undefined - }]; + return [new DefinitionInfo( + targetFilename, TypeScript.TextSpan.fromBounds(0, 0), + ScriptElementKind.scriptElement, + comment.filename, undefined, undefined)]; } return undefined; } @@ -2072,6 +2148,693 @@ module ts { return result; } + /// Find references + function getOccurrencesAtPosition(filename: string, position: number): ReferenceEntry[] { + synchronizeHostData(); + + filename = TypeScript.switchToForwardSlashes(filename); + var sourceFile = getSourceFile(filename); + + var node = getNodeAtPosition(sourceFile, position); + if (!node) { + return undefined; + } + + if (node.kind === SyntaxKind.Identifier || isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) { + return getReferencesForNode(node, [sourceFile]); + } + + switch (node.kind) { + case SyntaxKind.TryKeyword: + case SyntaxKind.CatchKeyword: + case SyntaxKind.FinallyKeyword: + if (hasKind(parent(parent(node)), SyntaxKind.TryStatement)) { + return getTryCatchFinallyOccurrences(node.parent.parent); + } + break; + case SyntaxKind.SwitchKeyword: + if (hasKind(node.parent, SyntaxKind.SwitchStatement)) { + return getSwitchCaseDefaultOccurrences(node.parent); + } + break; + case SyntaxKind.CaseKeyword: + case SyntaxKind.DefaultKeyword: + if (hasKind(parent(parent(node)), SyntaxKind.SwitchStatement)) { + return getSwitchCaseDefaultOccurrences(node.parent.parent); + } + break; + case SyntaxKind.BreakKeyword: + if (hasKind(node.parent, SyntaxKind.BreakStatement)) { + return getBreakStatementOccurences(node.parent); + } + break; + } + + return undefined; + + function getTryCatchFinallyOccurrences(tryStatement: TryStatement): ReferenceEntry[] { + var keywords: Node[] = []; + + pushKeywordIf(keywords, tryStatement.getFirstToken(), SyntaxKind.TryKeyword); + + if (tryStatement.catchBlock) { + pushKeywordIf(keywords, tryStatement.catchBlock.getFirstToken(), SyntaxKind.CatchKeyword); + } + + if (tryStatement.finallyBlock) { + pushKeywordIf(keywords, tryStatement.finallyBlock.getFirstToken(), SyntaxKind.FinallyKeyword); + } + + return keywordsToReferenceEntries(keywords); + } + + function getSwitchCaseDefaultOccurrences(switchStatement: SwitchStatement) { + var keywords: Node[] = []; + + pushKeywordIf(keywords, switchStatement.getFirstToken(), SyntaxKind.SwitchKeyword); + + // Go through each clause in the switch statement, collecting the clause keywords. + forEach(switchStatement.clauses, clause => { + pushKeywordIf(keywords, clause.getFirstToken(), SyntaxKind.CaseKeyword, SyntaxKind.DefaultKeyword); + + // For each clause, also recursively traverse the statements where we can find analogous breaks. + forEachChild(clause, function aggregateBreakKeywords(node: Node): void { + switch (node.kind) { + case SyntaxKind.BreakStatement: + // If the break statement has a label, it cannot be part of a switch block. + if (!(node).label) { + pushKeywordIf(keywords, node.getFirstToken(), SyntaxKind.BreakKeyword); + } + // Fall through + case SyntaxKind.ForStatement: + case SyntaxKind.ForInStatement: + case SyntaxKind.DoStatement: + case SyntaxKind.WhileStatement: + case SyntaxKind.SwitchStatement: + return; + } + + // Do not cross function boundaries. + if (!isAnyFunction(node)) { + forEachChild(node, aggregateBreakKeywords); + } + }); + }); + + return keywordsToReferenceEntries(keywords); + } + + function getBreakStatementOccurences(breakStatement: BreakOrContinueStatement): ReferenceEntry[]{ + // TODO (drosen): Deal with labeled statements. + if (breakStatement.label) { + return undefined; + } + + for (var owner = node.parent; owner; owner = owner.parent) { + switch (owner.kind) { + case SyntaxKind.ForStatement: + case SyntaxKind.ForInStatement: + case SyntaxKind.DoStatement: + case SyntaxKind.WhileStatement: + // TODO (drosen): Handle loops! + return undefined; + + case SyntaxKind.SwitchStatement: + return getSwitchCaseDefaultOccurrences(owner); + + default: + if (isAnyFunction(owner)) { + return undefined; + } + } + } + + return undefined; + } + + // returns true if 'node' is defined and has a matching 'kind'. + function hasKind(node: Node, kind: SyntaxKind) { + return !!(node && node.kind === kind); + } + + // Null-propagating 'parent' function. + function parent(node: Node): Node { + return node && node.parent; + } + + function pushKeywordIf(keywordList: Node[], token: Node, ...expected: SyntaxKind[]): void { + if (!token) { + return; + } + + if (contains(expected, token.kind)) { + keywordList.push(token); + } + } + + function keywordsToReferenceEntries(keywords: Node[]): ReferenceEntry[]{ + return map(keywords, keyword => + new ReferenceEntry(filename, TypeScript.TextSpan.fromBounds(keyword.getStart(), keyword.end), /* isWriteAccess */ false) + ); + } + } + + function getReferencesAtPosition(filename: string, position: number): ReferenceEntry[] { + synchronizeHostData(); + + filename = TypeScript.switchToForwardSlashes(filename); + var sourceFile = getSourceFile(filename); + + var node = getNodeAtPosition(sourceFile, position); + if (!node) { + return undefined; + } + + if (node.kind !== SyntaxKind.Identifier && + !isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && + !isNameOfExternalModuleImportOrDeclaration(node)) { + return undefined; + } + + return getReferencesForNode(node, program.getSourceFiles()); + } + + function getReferencesForNode(node: Node, sourceFiles : SourceFile[]): ReferenceEntry[] { + // Labels + if (isLabelName(node)) { + if (isJumpStatementTarget(node)) { + var labelDefinition = getTargetLabel((node.parent), (node).text); + // if we have a label definition, look within its statement for references, if not, then + // the label is undefined, just return a set of one for the current node. + return labelDefinition ? getLabelReferencesInNode(labelDefinition.parent, labelDefinition) : [getReferenceEntry(node)]; + } + else { + // it is a label definition and not a target, search within the parent labeledStatement + return getLabelReferencesInNode(node.parent, node); + } + } + + var symbol = typeInfoResolver.getSymbolInfo(node); + + // Could not find a symbol e.g. unknown identifier + if (!symbol) { + // Even if we did not find a symbol, we have an identifer, so there is at least + // one reference that we know of. return than instead of undefined. + return [getReferenceEntry(node)]; + } + + // the symbol was an internal symbol and does not have a declaration e.g.undefined symbol + if (!symbol.getDeclarations()) { + return undefined; + } + + var result: ReferenceEntry[]; + + // Compute the meaning from the location and the symbol it references + var searchMeaning = getIntersectingMeaningFromDeclarations(getMeaningFromLocation(node), symbol.getDeclarations()); + + // Get the text to search for, we need to normalize it as external module names will have quote + var symbolName = getNormalizedSymbolName(symbol); + + var scope = getSymbolScope(symbol); + + if (scope) { + result = []; + getReferencesInNode(scope, symbol, symbolName, node, searchMeaning, result); + } + else { + forEach(sourceFiles, sourceFile => { + cancellationToken.throwIfCancellationRequested(); + + if (lookUp(sourceFile.identifiers, symbolName)) { + result = result || []; + getReferencesInNode(sourceFile, symbol, symbolName, node, searchMeaning, result); + } + }); + } + + return result; + + function getNormalizedSymbolName(symbol: Symbol): string { + // Special case for function expressions, whose names are solely local to their bodies. + var functionExpression = getDeclarationOfKind(symbol, SyntaxKind.FunctionExpression); + + if (functionExpression && functionExpression.name) { + var name = functionExpression.name.text; + } + else { + var name = symbol.name; + } + + var length = name.length; + if (length >= 2 && name.charCodeAt(0) === CharacterCodes.doubleQuote && name.charCodeAt(length - 1) === CharacterCodes.doubleQuote) { + return name.substring(1, length - 1); + }; + return name; + } + + function getSymbolScope(symbol: Symbol): Node { + // If this is private property or method, the scope is the containing class + if (symbol.getFlags() && (SymbolFlags.Property | SymbolFlags.Method)) { + var privateDeclaration = forEach(symbol.getDeclarations(), d => (d.flags & NodeFlags.Private) ? d : undefined); + if (privateDeclaration) { + return privateDeclaration.parent; + } + } + + // if this symbol is visible from its parent container, e.g. exported, then bail out + if (symbol.parent) { + return undefined; + } + + var scope: Node = undefined; + + var declarations = symbol.getDeclarations(); + for (var i = 0, n = declarations.length; i < n; i++) { + var container = getContainerNode(declarations[i]); + + if (scope && scope !== container) { + // Different declarations have different containers, bail out + return undefined; + } + + if (container.kind === SyntaxKind.SourceFile && !isExternalModule(container)) { + // This is a global variable and not an external module, any declaration defined + // within this scope is visible outside the file + return undefined; + } + + // The search scope is the container node + scope = container; + } + + return scope; + } + + function getPossibleSymbolReferencePositions(sourceFile: SourceFile, symbolName: string, start: number, end: number): number[] { + var positions: number[] = []; + + /// TODO: Cache symbol existence for files to save text search + // Also, need to make this work for unicode escapes. + + // Be resilient in the face of a symbol with no name or zero length name + if (!symbolName || !symbolName.length) { + return positions; + } + + var text = sourceFile.text; + var sourceLength = text.length; + var symbolNameLength = symbolName.length; + + var position = text.indexOf(symbolName, start); + while (position >= 0) { + cancellationToken.throwIfCancellationRequested(); + + // If we are past the end, stop looking + if (position > end) break; + + // We found a match. Make sure it's not part of a larger word (i.e. the char + // before and after it have to be a non-identifier char). + var endPosition = position + symbolNameLength; + + if ((position === 0 || !isIdentifierPart(text.charCodeAt(position - 1), ScriptTarget.ES5)) && + (endPosition === sourceLength || !isIdentifierPart(text.charCodeAt(endPosition), ScriptTarget.ES5))) { + // Found a real match. Keep searching. + positions.push(position); + } + position = text.indexOf(symbolName, position + symbolNameLength + 1); + } + + return positions; + } + + function getLabelReferencesInNode(container: Node, targetLabel: Identifier): ReferenceEntry[] { + var result: ReferenceEntry[] = []; + var sourceFile = container.getSourceFile(); + var labelName = targetLabel.text; + var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, labelName, container.getStart(), container.getEnd()); + forEach(possiblePositions, position => { + cancellationToken.throwIfCancellationRequested(); + + var node = getNodeAtPosition(sourceFile, position); + if (!node || node.getWidth() !== labelName.length) { + return; + } + + // Only pick labels that are either the target label, or have a target that is the target label + if (node === targetLabel || + (isJumpStatementTarget(node) && getTargetLabel(node, labelName) === targetLabel)) { + result.push(getReferenceEntry(node)); + } + }); + return result; + } + + function isValidReferencePosition(node: Node, searchSymbolName: string): boolean { + if (node) { + // Compare the length so we filter out strict superstrings of the symbol we are looking for + switch (node.kind) { + case SyntaxKind.Identifier: + return node.getWidth() === searchSymbolName.length; + + case SyntaxKind.StringLiteral: + if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || + isNameOfExternalModuleImportOrDeclaration(node)) { + // For string literals we have two additional chars for the quotes + return node.getWidth() === searchSymbolName.length + 2; + } + break; + + case SyntaxKind.NumericLiteral: + if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + return node.getWidth() === searchSymbolName.length; + } + break; + } + } + + return false; + } + + /// Search within node "container" for references for a search value, where the search value is defined as a + /// tuple of(searchSymbol, searchText, searchLocation, and searchMeaning). + /// searchLocation: a node where the search value + function getReferencesInNode(container: Node, searchSymbol: Symbol, searchText: string, searchLocation: Node, searchMeaning: SearchMeaning, result: ReferenceEntry[]): void { + var sourceFile = container.getSourceFile(); + + var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, searchText, container.getStart(), container.getEnd()); + + if (possiblePositions.length) { + // Build the set of symbols to search for, initially it has only the current symbol + var searchSymbols = populateSearchSymbolSet(searchSymbol, searchLocation); + + forEach(possiblePositions, position => { + cancellationToken.throwIfCancellationRequested(); + + var referenceLocation = getNodeAtPosition(sourceFile, position); + if (!isValidReferencePosition(referenceLocation, searchText)) { + return; + } + + if (!(getMeaningFromLocation(referenceLocation) & searchMeaning)) { + return; + } + + var referenceSymbol = typeInfoResolver.getSymbolInfo(referenceLocation); + + // Could not find a symbol e.g. node is string or number keyword, + // or the symbol was an internal symbol and does not have a declaration e.g. undefined symbol + if (!referenceSymbol || !(referenceSymbol.getDeclarations())) { + return; + } + + if (isRelatableToSearchSet(searchSymbols, referenceSymbol, referenceLocation)) { + result.push(getReferenceEntry(referenceLocation)); + } + }); + } + } + + function populateSearchSymbolSet(symbol: Symbol, location: Node): Symbol[] { + // The search set contains at least the current symbol + var result = [symbol]; + + // If the symbol is an instantiation from a another symbol (e.g. widened symbol) , add the root the list + var rootSymbol = typeInfoResolver.getRootSymbol(symbol); + if (rootSymbol && rootSymbol !== symbol) { + result.push(rootSymbol); + } + + // If the location is in a context sensitive location (i.e. in an object literal) try + // to get a contextual type for it, and add the property symbol from the contextual + // type to the search set + if (isNameOfPropertyAssignment(location)) { + var symbolFromContextualType = getPropertySymbolFromContextualType(location); + if (symbolFromContextualType) result.push(typeInfoResolver.getRootSymbol(symbolFromContextualType)); + } + + // Add symbol of properties/methods of the same name in base classes and implemented interfaces definitions + if (symbol.parent && symbol.parent.flags & (SymbolFlags.Class | SymbolFlags.Interface)) { + getPropertySymbolsFromBaseTypes(symbol.parent, symbol.getName(), result); + } + + return result; + } + + function getPropertySymbolsFromBaseTypes(symbol: Symbol, propertyName: string, result: Symbol[]): void { + if (symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface)) { + forEach(symbol.getDeclarations(), declaration => { + if (declaration.kind === SyntaxKind.ClassDeclaration) { + getPropertySymbolFromTypeReference((declaration).baseType); + forEach((declaration).implementedTypes, getPropertySymbolFromTypeReference); + } + else if (declaration.kind === SyntaxKind.InterfaceDeclaration) { + forEach((declaration).baseTypes, getPropertySymbolFromTypeReference); + } + }); + } + return; + + function getPropertySymbolFromTypeReference(typeReference: TypeReferenceNode) { + if (typeReference) { + // TODO: move to getTypeOfNode instead + var typeReferenceSymbol = typeInfoResolver.getSymbolInfo(typeReference.typeName); + if (typeReferenceSymbol) { + var propertySymbol = typeReferenceSymbol.members[propertyName]; + if (propertySymbol) result.push(typeReferenceSymbol.members[propertyName]); + + // Visit the typeReference as well to see if it directelly or indirectelly use that property + getPropertySymbolsFromBaseTypes(typeReferenceSymbol, propertyName, result); + } + } + } + } + + function isRelatableToSearchSet(searchSymbols: Symbol[], referenceSymbol: Symbol, referenceLocation: Node): boolean { + // Unwrap symbols to get to the root (e.g. triansient symbols as a result of widenning) + var referenceSymbolTarget = typeInfoResolver.getRootSymbol(referenceSymbol); + + // if it is in the list, then we are done + if (searchSymbols.indexOf(referenceSymbolTarget) >= 0) { + return true; + } + + // If the reference location is in an object literal, try to get the contextual type for the + // object literal, lookup the property symbol in the contextual type, and use this symbol to + // compare to our searchSymbol + if (isNameOfPropertyAssignment(referenceLocation)) { + var symbolFromContextualType = getPropertySymbolFromContextualType(referenceLocation); + if (symbolFromContextualType && searchSymbols.indexOf(typeInfoResolver.getRootSymbol(symbolFromContextualType)) >= 0) { + return true; + } + } + + // Finally, try all properties with the same name in any type the containing type extened or implemented, and + // see if any is in the list + if (referenceSymbol.parent && referenceSymbol.parent.flags & (SymbolFlags.Class | SymbolFlags.Interface)) { + var result: Symbol[] = []; + getPropertySymbolsFromBaseTypes(referenceSymbol.parent, referenceSymbol.getName(), result); + return forEach(result, s => searchSymbols.indexOf(s) >= 0); + } + + return false; + } + + function getPropertySymbolFromContextualType(node: Node): Symbol { + if (isNameOfPropertyAssignment(node)) { + var objectLiteral = node.parent.parent; + var contextualType = typeInfoResolver.getContextualType(objectLiteral); + if (contextualType) { + return typeInfoResolver.getPropertyOfType(contextualType, (node).text); + } + } + return undefined; + } + + function getReferenceEntry(node: Node): ReferenceEntry { + var start = node.getStart(); + var end = node.getEnd(); + + if (node.kind === SyntaxKind.StringLiteral) { + start += 1; + end -= 1; + } + + return new ReferenceEntry(node.getSourceFile().filename, TypeScript.TextSpan.fromBounds(start, end), isWriteAccess(node)); + } + + function getMeaningFromDeclaration(node: Declaration): SearchMeaning { + switch (node.kind) { + case SyntaxKind.Parameter: + case SyntaxKind.VariableDeclaration: + case SyntaxKind.Property: + case SyntaxKind.PropertyAssignment: + case SyntaxKind.EnumMember: + case SyntaxKind.Method: + case SyntaxKind.Constructor: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + case SyntaxKind.ArrowFunction: + case SyntaxKind.CatchBlock: + return SearchMeaning.Value; + + case SyntaxKind.TypeParameter: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.TypeLiteral: + return SearchMeaning.Type; + + case SyntaxKind.ClassDeclaration: + case SyntaxKind.EnumDeclaration: + return SearchMeaning.Value | SearchMeaning.Type; + + case SyntaxKind.ModuleDeclaration: + if ((node).name.kind === SyntaxKind.StringLiteral) { + return SearchMeaning.Namespace | SearchMeaning.Value; + } + else if (isInstantiated(node)) { + return SearchMeaning.Namespace | SearchMeaning.Value; + } + else { + return SearchMeaning.Namespace; + } + break; + + case SyntaxKind.ImportDeclaration: + return SearchMeaning.Value | SearchMeaning.Type | SearchMeaning.Namespace; + } + Debug.fail("Unkown declaration type"); + } + + function isTypeReference(node: Node): boolean { + if (node.parent.kind === SyntaxKind.QualifiedName && (node.parent).right === node) + node = node.parent; + + return node.parent.kind === SyntaxKind.TypeReference; + } + + function isNamespaceReference(node: Node): boolean { + var root = node; + var isLastClause = true; + if (root.parent.kind === SyntaxKind.QualifiedName) { + while (root.parent && root.parent.kind === SyntaxKind.QualifiedName) + root = root.parent; + + isLastClause = (root).right === node; + } + + return root.parent.kind === SyntaxKind.TypeReference && !isLastClause; + } + + function isInRightSideOfImport(node: EntityName) { + while (node.parent.kind === SyntaxKind.QualifiedName) { + node = node.parent; + } + + return node.parent.kind === SyntaxKind.ImportDeclaration && (node.parent).entityName === node; + } + + function getMeaningFromRightHandSideOfImport(node: Node) { + Debug.assert(node.kind === SyntaxKind.Identifier); + + // import a = |b|; // Namespace + // import a = |b.c|; // Value, type, namespace + // import a = |b.c|.d; // Namespace + + if (node.parent.kind === SyntaxKind.QualifiedName && + (node.parent).right === node && + node.parent.parent.kind === SyntaxKind.ImportDeclaration) { + return SearchMeaning.Value | SearchMeaning.Type | SearchMeaning.Namespace; + } + return SearchMeaning.Namespace; + } + + function getMeaningFromLocation(node: Node): SearchMeaning { + if (node.parent.kind === SyntaxKind.ExportAssignment) { + return SearchMeaning.Value | SearchMeaning.Type | SearchMeaning.Namespace; + } + else if (isInRightSideOfImport(node)) { + return getMeaningFromRightHandSideOfImport(node); + } + else if (isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + return getMeaningFromDeclaration(node.parent); + } + else if (isTypeReference(node)) { + return SearchMeaning.Type; + } + else if (isNamespaceReference(node)) { + return SearchMeaning.Namespace; + } + else { + return SearchMeaning.Value; + } + } + + /// Given an initial searchMeaning, extracted from a location, widen the search scope based on the declarations + /// of the corresponding symbol. e.g. if we are searching for "Foo" in value position, but "Foo" references a class + /// then we need to widen the search to include type positions as well. + /// On the contrary, if we are searching for "Bar" in type position and we trace bar to an interface, and an uninstantiated + /// module, we want to keep the search limited to only types, as the two declarations (interface and uninstantiated module) + /// do not intersect in any of the three spaces. + function getIntersectingMeaningFromDeclarations(meaning: SearchMeaning, declarations: Declaration[]): SearchMeaning { + if (declarations) { + do { + // The result is order-sensitive, for instance if initialMeaning === Namespace, and declarations = [class, instantiated module] + // we need to consider both as they initialMeaning intersects with the module in the namespace space, and the module + // intersects with the class in the value space. + // To achieve that we will keep iterating until the result stabilizes. + + // Remeber the last meaning + var lastIterationMeaning = meaning; + + for (var i = 0, n = declarations.length; i < n; i++) { + var declarationMeaning = getMeaningFromDeclaration(declarations[i]); + + if (declarationMeaning & meaning) { + meaning |= declarationMeaning; + } + } + } while (meaning !== lastIterationMeaning); + } + return meaning; + } + + /// A node is considedered a writeAccess iff it is a name of a declaration or a target of an assignment + function isWriteAccess(node: Node): boolean { + if (node.kind === SyntaxKind.Identifier && isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + return true; + } + + var parent = node.parent; + if (parent) { + if (parent.kind === SyntaxKind.PostfixOperator || parent.kind === SyntaxKind.PrefixOperator) { + return true; + } + else if (parent.kind === SyntaxKind.BinaryExpression && (parent).left === node) { + var operator = (parent).operator; + switch (operator) { + case SyntaxKind.AsteriskEqualsToken: + case SyntaxKind.SlashEqualsToken: + case SyntaxKind.PercentEqualsToken: + case SyntaxKind.MinusEqualsToken: + case SyntaxKind.LessThanLessThanEqualsToken: + case SyntaxKind.GreaterThanGreaterThanEqualsToken: + case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: + case SyntaxKind.BarEqualsToken: + case SyntaxKind.CaretEqualsToken: + case SyntaxKind.AmpersandEqualsToken: + case SyntaxKind.PlusEqualsToken: + case SyntaxKind.EqualsToken: + return true; + } + } + + return false; + } + } + } + /// Syntactic features function getSyntaxTree(filename: string): TypeScript.SyntaxTree { filename = TypeScript.switchToForwardSlashes(filename); @@ -2084,7 +2847,7 @@ module ts { return currentSourceFile; } - function getNameOrDottedNameSpan(filename: string, startPos: number, endPos: number): SpanInfo { + function getNameOrDottedNameSpan(filename: string, startPos: number, endPos: number): TypeScript.TextSpan { function getTypeInfoEligiblePath(filename: string, position: number, isConstructorValidPosition: boolean) { var sourceUnit = syntaxTreeCache.getCurrentFileSyntaxTree(filename).sourceUnit(); @@ -2135,10 +2898,9 @@ module ts { } } - return { - minChar: TypeScript.start(node), - limChar: TypeScript.end(node) - }; + return TypeScript.TextSpan.fromBounds( + TypeScript.start(node), + TypeScript.end(node)); } function getBreakpointStatementAtPosition(filename: string, position: number) { @@ -2149,15 +2911,13 @@ module ts { return TypeScript.Services.Breakpoints.getBreakpointLocation(syntaxtree, position); } - function getScriptLexicalStructure(filename: string) { + function getNavigationBarItems(filename: string) { filename = TypeScript.switchToForwardSlashes(filename); var syntaxTree = getSyntaxTree(filename); - var items: NavigateToItem[] = []; - TypeScript.Services.GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure(items, filename, syntaxTree.sourceUnit()); - return items; + return new TypeScript.Services.NavigationBarItemGetter().getItems(syntaxTree.sourceUnit()); } - function getOutliningRegions(filename: string): OutliningSpan[] { + function getOutliningSpans(filename: string): OutliningSpan[] { // doesn't use compiler - no need to synchronize with host filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getCurrentSourceFile(filename); @@ -2204,41 +2964,202 @@ module ts { return manager; } - function getFormattingEditsForRange(filename: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[] { - filename = TypeScript.switchToForwardSlashes(filename); + function getFormattingEditsForRange(fileName: string, start: number, end: number, options: FormatCodeOptions): TextChange[] { + fileName = TypeScript.switchToForwardSlashes(fileName); - var manager = getFormattingManager(filename, options); - return manager.formatSelection(minChar, limChar); + var manager = getFormattingManager(fileName, options); + return manager.formatSelection(start, end); } - function getFormattingEditsForDocument(filename: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[] { - filename = TypeScript.switchToForwardSlashes(filename); + function getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions): TextChange[] { + fileName = TypeScript.switchToForwardSlashes(fileName); - var manager = getFormattingManager(filename, options); - return manager.formatDocument(minChar, limChar); + var manager = getFormattingManager(fileName, options); + return manager.formatDocument(); } - function getFormattingEditsOnPaste(filename: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[] { - filename = TypeScript.switchToForwardSlashes(filename); + function getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextChange[] { + fileName = TypeScript.switchToForwardSlashes(fileName); - var manager = getFormattingManager(filename, options); - return manager.formatOnPaste(minChar, limChar); + var manager = getFormattingManager(fileName, options); + + if (key === "}") { + return manager.formatOnClosingCurlyBrace(position); + } + else if (key === ";") { + return manager.formatOnSemicolon(position); + } + else if (key === "\n") { + return manager.formatOnEnter(position); + } + + return []; } - function getFormattingEditsAfterKeystroke(filename: string, position: number, key: string, options: FormatCodeOptions): TextEdit[] { - filename = TypeScript.switchToForwardSlashes(filename); - - var manager = getFormattingManager(filename, options); - if (key === "}") return manager.formatOnClosingCurlyBrace(position); - else if (key === ";") return manager.formatOnSemicolon(position); - else if (key === "\n") return manager.formatOnEnter(position); - else return []; + function escapeRegExp(str: string): string { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } + function getTodoCommentsRegExp(descriptors: TodoCommentDescriptor[]): RegExp { + // NOTE: ?: means 'non-capture group'. It allows us to have groups without having to + // filter them out later in the final result array. + + // TODO comments can appear in one of the following forms: + // + // 1) // TODO or /////////// TODO + // + // 2) /* TODO or /********** TODO + // + // 3) /* + // * TODO + // */ + // + // The following three regexps are used to match the start of the text up to the TODO + // comment portion. + var singleLineCommentStart = /(?:\/\/+\s*)/.source; + var multiLineCommentStart = /(?:\/\*+\s*)/.source; + var anyNumberOfSpacesAndAsterixesAtStartOfLine = /(?:^(?:\s|\*)*)/.source; + + // Match any of the above three TODO comment start regexps. + // Note that the outermost group *is* a capture group. We want to capture the preamble + // so that we can determine the starting position of the TODO comment match. + var preamble = "(" + anyNumberOfSpacesAndAsterixesAtStartOfLine + "|" + singleLineCommentStart + "|" + multiLineCommentStart + ")"; + + // Takes the descriptors and forms a regexp that matches them as if they were literals. + // For example, if the descriptors are "TODO(jason)" and "HACK", then this will be: + // + // (?:(TODO\(jason\))|(HACK)) + // + // Note that the outermost group is *not* a capture group, but the innermost groups + // *are* capture groups. By capturing the inner literals we can determine after + // matching which descriptor we are dealing with. + var literals = "(?:" + descriptors.map(d => "(" + escapeRegExp(d.text) + ")").join("|") + ")"; + + // After matching a descriptor literal, the following regexp matches the rest of the + // text up to the end of the line (or */). + var endOfLineOrEndOfComment = /(?:$|\*\/)/.source + var messageRemainder = /(?:.*?)/.source + + // This is the portion of the match we'll return as part of the TODO comment result. We + // match the literal portion up to the end of the line or end of comment. + var messagePortion = "(" + literals + messageRemainder + ")"; + var regExpString = preamble + messagePortion + endOfLineOrEndOfComment; + + // The final regexp will look like this: + // /((?:\/\/+\s*)|(?:\/\*+\s*)|(?:^(?:\s|\*)*))((?:(TODO\(jason\))|(HACK))(?:.*?))(?:$|\*\/)/gim + + // The flags of the regexp are important here. + // 'g' is so that we are doing a global search and can find matches several times + // in the input. + // + // 'i' is for case insensitivity (We do this to match C# TODO comment code). + // + // 'm' is so we can find matches in a multiline input. + return new RegExp(regExpString, "gim"); + } + + function getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[] { + fileName = TypeScript.switchToForwardSlashes(fileName); + + var sourceFile = getCurrentSourceFile(fileName); + var syntaxTree = sourceFile.getSyntaxTree(); + cancellationToken.throwIfCancellationRequested(); + + var text = syntaxTree.text; + var fileContents = text.substr(0, text.length()); + cancellationToken.throwIfCancellationRequested(); + + var result: TodoComment[] = []; + + if (descriptors.length > 0) { + var regExp = getTodoCommentsRegExp(descriptors); + + var matchArray: RegExpExecArray; + while (matchArray = regExp.exec(fileContents)) { + cancellationToken.throwIfCancellationRequested(); + + // If we got a match, here is what the match array will look like. Say the source text is: + // + // " // hack 1" + // + // The result array with the regexp: will be: + // + // ["// hack 1", "// ", "hack 1", undefined, "hack"] + // + // Here are the relevant capture groups: + // 0) The full match for the entire regex. + // 1) The preamble to the message portion. + // 2) The message portion. + // 3...N) The descriptor that was matched - by index. 'undefined' for each + // descriptor that didn't match. an actual value if it did match. + // + // i.e. 'undefined' in position 3 above means TODO(jason) didn't match. + // "hack" in position 4 means HACK did match. + var firstDescriptorCaptureIndex = 3; + Debug.assert(matchArray.length === descriptors.length + firstDescriptorCaptureIndex); + + var preamble = matchArray[1]; + var matchPosition = matchArray.index + preamble.length; + + // Ok, we have found a match in the file. This is ony an acceptable match if + // it is contained within a comment. + var token = TypeScript.findToken(syntaxTree.sourceUnit(), matchPosition); + + if (matchPosition >= TypeScript.start(token) && matchPosition < TypeScript.end(token)) { + // match was within the token itself. Not in the comment. Keep searching + // descriptor. + continue; + } + + // Looks to be within the trivia. See if we can find hte comment containing it. + var triviaList = matchPosition < TypeScript.start(token) ? token.leadingTrivia(syntaxTree.text) : token.trailingTrivia(syntaxTree.text); + var trivia = findContainingComment(triviaList, matchPosition); + if (trivia === null) { + continue; + } + + var descriptor: TodoCommentDescriptor = undefined; + for (var i = 0, n = descriptors.length; i < n; i++) { + if (matchArray[i + firstDescriptorCaptureIndex]) { + descriptor = descriptors[i]; + } + } + Debug.assert(descriptor); + + // We don't want to match something like 'TODOBY', so we make sure a non + // letter/digit follows the match. + if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor.text.length))) { + continue; + } + + var message = matchArray[2]; + result.push(new TodoComment(descriptor, message, matchPosition)); + } + } + + return result; + } + + function isLetterOrDigit(char: number): boolean { + return (char >= TypeScript.CharacterCodes.a && char <= TypeScript.CharacterCodes.z) || + (char >= TypeScript.CharacterCodes.A && char <= TypeScript.CharacterCodes.Z) || + (char >= TypeScript.CharacterCodes._0 && char <= TypeScript.CharacterCodes._9); + } + + function findContainingComment(triviaList: TypeScript.ISyntaxTriviaList, position: number): TypeScript.ISyntaxTrivia { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + var fullEnd = trivia.fullStart() + trivia.fullWidth(); + if (trivia.isComment() && trivia.fullStart() <= position && position < fullEnd) { + return trivia; + } + } + + return null; + } return { dispose: dispose, - refresh: () => { }, cleanupSemanticCache: cleanupSemanticCache, getSyntacticDiagnostics: getSyntacticDiagnostics, getSemanticDiagnostics: getSemanticDiagnostics, @@ -2246,71 +3167,80 @@ module ts { getCompletionsAtPosition: getCompletionsAtPosition, getCompletionEntryDetails: getCompletionEntryDetails, getTypeAtPosition: getTypeAtPosition, - getSignatureAtPosition: (filename, position): SignatureInfo => undefined, + getSignatureHelpItems: (filename, position): SignatureHelpItems => null, + getSignatureHelpCurrentArgumentState: (fileName, position, applicableSpanStart): SignatureHelpState => null, getDefinitionAtPosition: getDefinitionAtPosition, - getReferencesAtPosition: (filename, position) => [], - getOccurrencesAtPosition: (filename, position) => [], + getReferencesAtPosition: getReferencesAtPosition, + getOccurrencesAtPosition: getOccurrencesAtPosition, getImplementorsAtPosition: (filename, position) => [], getNameOrDottedNameSpan: getNameOrDottedNameSpan, getBreakpointStatementAtPosition: getBreakpointStatementAtPosition, getNavigateToItems: (searchValue) => [], - getScriptLexicalStructure: getScriptLexicalStructure, - getOutliningRegions: getOutliningRegions, + getRenameInfo: (fileName, position): RenameInfo => RenameInfo.CreateError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_this_element.key)), + getNavigationBarItems: getNavigationBarItems, + getOutliningSpans: getOutliningSpans, + getTodoComments: getTodoComments, getBraceMatchingAtPosition: getBraceMatchingAtPosition, getIndentationAtPosition: getIndentationAtPosition, getFormattingEditsForRange: getFormattingEditsForRange, getFormattingEditsForDocument: getFormattingEditsForDocument, - getFormattingEditsOnPaste: getFormattingEditsOnPaste, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, - getEmitOutput: (filename): EmitOutput => undefined, + getEmitOutput: (filename): EmitOutput => null, }; } /// Classifier - export function createClassifier(host: Logger): Classifier { - var scanner: TypeScript.Scanner.IScanner; - var lastDiagnosticKey: string = null; + var scanner: Scanner; var noRegexTable: boolean[]; - var reportDiagnostic = (position: number, fullWidth: number, key: string, args: any[]) => { - lastDiagnosticKey = key; - }; + /// We do not have a full parser support to know when we should parse a regex or not + /// If we consider every slash token to be a regex, we could be missing cases like "1/2/3", where + /// we have a series of divide operator. this list allows us to be more accurate by ruling out + /// locations where a regexp cannot exist. if (!noRegexTable) { noRegexTable = []; - noRegexTable[TypeScript.SyntaxKind.IdentifierName] = true; - noRegexTable[TypeScript.SyntaxKind.StringLiteral] = true; - noRegexTable[TypeScript.SyntaxKind.NumericLiteral] = true; - noRegexTable[TypeScript.SyntaxKind.RegularExpressionLiteral] = true; - noRegexTable[TypeScript.SyntaxKind.ThisKeyword] = true; - noRegexTable[TypeScript.SyntaxKind.PlusPlusToken] = true; - noRegexTable[TypeScript.SyntaxKind.MinusMinusToken] = true; - noRegexTable[TypeScript.SyntaxKind.CloseParenToken] = true; - noRegexTable[TypeScript.SyntaxKind.CloseBracketToken] = true; - noRegexTable[TypeScript.SyntaxKind.CloseBraceToken] = true; - noRegexTable[TypeScript.SyntaxKind.TrueKeyword] = true; - noRegexTable[TypeScript.SyntaxKind.FalseKeyword] = true; + noRegexTable[SyntaxKind.Identifier] = true; + noRegexTable[SyntaxKind.StringLiteral] = true; + noRegexTable[SyntaxKind.NumericLiteral] = true; + noRegexTable[SyntaxKind.RegularExpressionLiteral] = true; + noRegexTable[SyntaxKind.ThisKeyword] = true; + noRegexTable[SyntaxKind.PlusPlusToken] = true; + noRegexTable[SyntaxKind.MinusMinusToken] = true; + noRegexTable[SyntaxKind.CloseParenToken] = true; + noRegexTable[SyntaxKind.CloseBracketToken] = true; + noRegexTable[SyntaxKind.CloseBraceToken] = true; + noRegexTable[SyntaxKind.TrueKeyword] = true; + noRegexTable[SyntaxKind.FalseKeyword] = true; } function getClassificationsForLine(text: string, lexState: EndOfLineState): ClassificationResult { var offset = 0; - if (lexState !== EndOfLineState.Start) { - // If we're in a string literal, then prepend: "\ - // (and a newline). That way when we lex we'll think we're still in a string literal. - // - // If we're in a multiline comment, then prepend: /* - // (and a newline). That way when we lex we'll think we're still in a multiline comment. - if (lexState === EndOfLineState.InDoubleQuoteStringLiteral) { - text = '"\\\n' + text; - } - else if (lexState === EndOfLineState.InSingleQuoteStringLiteral) { - text = "'\\\n" + text; - } - else if (lexState === EndOfLineState.InMultiLineCommentTrivia) { - text = "/*\n" + text; - } + var lastTokenOrCommentEnd = 0; + var lastToken = SyntaxKind.Unknown; + var inUnterminatedMultiLineComment = false; - offset = 3; + // If we're in a string literal, then prepend: "\ + // (and a newline). That way when we lex we'll think we're still in a string literal. + // + // If we're in a multiline comment, then prepend: /* + // (and a newline). That way when we lex we'll think we're still in a multiline comment. + switch (lexState) { + case EndOfLineState.InDoubleQuoteStringLiteral: + text = '"\\\n' + text; + offset = 3; + break; + case EndOfLineState.InSingleQuoteStringLiteral: + text = "'\\\n" + text; + offset = 3; + break; + case EndOfLineState.InMultiLineCommentTrivia: + text = "/*\n" + text; + offset = 3; + break; + case EndOfLineState.EndingWithDotToken: + lastToken = SyntaxKind.DotToken; + break; } var result: ClassificationResult = { @@ -2318,94 +3248,174 @@ module ts { entries: [] }; - var simpleText = TypeScript.SimpleText.fromString(text); - scanner = TypeScript.Scanner.createScanner(ScriptTarget.ES5, simpleText, reportDiagnostic); + scanner = createScanner(ScriptTarget.ES5, text, onError, processComment); - var lastTokenKind = TypeScript.SyntaxKind.None; - var token: TypeScript.ISyntaxToken = null; + var token = SyntaxKind.Unknown; do { - lastDiagnosticKey = null; + token = scanner.scan(); - token = scanner.scan(!noRegexTable[lastTokenKind]); - lastTokenKind = token.kind(); - - processToken(text, simpleText, offset, token, result); - } - while (token.kind() !== TypeScript.SyntaxKind.EndOfFileToken); - - lastDiagnosticKey = null; - return result; - } - - function processToken(text: string, simpleText: TypeScript.ISimpleText, offset: number, token: TypeScript.ISyntaxToken, result: ClassificationResult): void { - processTriviaList(text, offset, token.leadingTrivia(simpleText), result); - addResult(text, offset, result, TypeScript.width(token), token.kind()); - processTriviaList(text, offset, token.trailingTrivia(simpleText), result); - - if (TypeScript.fullEnd(token) >= text.length) { - // We're at the end. - if (lastDiagnosticKey === TypeScript.DiagnosticCode.AsteriskSlash_expected) { - result.finalLexState = EndOfLineState.InMultiLineCommentTrivia; - return; + if ((token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) && !noRegexTable[lastToken]) { + if (scanner.reScanSlashToken() === SyntaxKind.RegularExpressionLiteral) { + token = SyntaxKind.RegularExpressionLiteral; + } + } + else if (lastToken === SyntaxKind.DotToken) { + token = SyntaxKind.Identifier; } - if (token.kind() === TypeScript.SyntaxKind.StringLiteral) { - var tokenText = token.text(); - if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === TypeScript.CharacterCodes.backslash) { - var quoteChar = tokenText.charCodeAt(0); - result.finalLexState = quoteChar === TypeScript.CharacterCodes.doubleQuote - ? EndOfLineState.InDoubleQuoteStringLiteral - : EndOfLineState.InSingleQuoteStringLiteral; - return; + lastToken = token; + + processToken(); + } + while (token !== SyntaxKind.EndOfFileToken); + + return result; + + + function onError(message: DiagnosticMessage): void { + inUnterminatedMultiLineComment = message.key === Diagnostics.Asterisk_Slash_expected.key; + } + + function processComment(start: number, end: number) { + // add Leading white spaces + addLeadingWhiteSpace(start, end); + + // add the comment + addResult(end - start, TokenClass.Comment); + } + + function processToken(): void { + var start = scanner.getTokenPos(); + var end = scanner.getTextPos(); + + // add Leading white spaces + addLeadingWhiteSpace(start, end); + + // add the token + addResult(end - start, classFromKind(token)); + + if (end >= text.length) { + // We're at the end. + if (inUnterminatedMultiLineComment) { + result.finalLexState = EndOfLineState.InMultiLineCommentTrivia; + } + else if (token === SyntaxKind.StringLiteral) { + var tokenText = scanner.getTokenText(); + if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === CharacterCodes.backslash) { + var quoteChar = tokenText.charCodeAt(0); + result.finalLexState = quoteChar === CharacterCodes.doubleQuote + ? EndOfLineState.InDoubleQuoteStringLiteral + : EndOfLineState.InSingleQuoteStringLiteral; + } + } + else if (token === SyntaxKind.DotToken) { + result.finalLexState = EndOfLineState.EndingWithDotToken; } } } - } - function processTriviaList(text: string, offset: number, triviaList: TypeScript.ISyntaxTriviaList, result: ClassificationResult): void { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - addResult(text, offset, result, trivia.fullWidth(), trivia.kind()); - } - } - - function addResult(text: string, offset: number, result: ClassificationResult, length: number, kind: TypeScript.SyntaxKind): void { - if (length > 0) { - // If this is the first classification we're adding to the list, then remove any - // offset we have if we were continuing a construct from the previous line. - if (result.entries.length === 0) { - length -= offset; + function addLeadingWhiteSpace(start: number, end: number): void { + if (start > lastTokenOrCommentEnd) { + addResult(start - lastTokenOrCommentEnd, TokenClass.Whitespace); } - result.entries.push({ length: length, classification: classFromKind(kind) }); + // Remeber the end of the last token + lastTokenOrCommentEnd = end; + } + + function addResult(length: number, classification: TokenClass): void { + if (length > 0) { + // If this is the first classification we're adding to the list, then remove any + // offset we have if we were continuing a construct from the previous line. + if (result.entries.length === 0) { + length -= offset; + } + + result.entries.push({ length: length, classification: classification }); + } } } - function classFromKind(kind: TypeScript.SyntaxKind) { - if (TypeScript.SyntaxFacts.isAnyKeyword(kind)) { + function isBinaryExpressionOperatorToken(token: SyntaxKind): boolean { + switch (token) { + case SyntaxKind.AsteriskToken: + case SyntaxKind.SlashToken: + case SyntaxKind.PercentToken: + case SyntaxKind.PlusToken: + case SyntaxKind.MinusToken: + case SyntaxKind.LessThanLessThanToken: + case SyntaxKind.GreaterThanGreaterThanToken: + case SyntaxKind.GreaterThanGreaterThanGreaterThanToken: + case SyntaxKind.LessThanToken: + case SyntaxKind.GreaterThanToken: + case SyntaxKind.LessThanEqualsToken: + case SyntaxKind.GreaterThanEqualsToken: + case SyntaxKind.InstanceOfKeyword: + case SyntaxKind.InKeyword: + case SyntaxKind.EqualsEqualsToken: + case SyntaxKind.ExclamationEqualsToken: + case SyntaxKind.EqualsEqualsEqualsToken: + case SyntaxKind.ExclamationEqualsEqualsToken: + case SyntaxKind.AmpersandToken: + case SyntaxKind.CaretToken: + case SyntaxKind.BarToken: + case SyntaxKind.AmpersandAmpersandToken: + case SyntaxKind.BarBarToken: + case SyntaxKind.BarEqualsToken: + case SyntaxKind.AmpersandEqualsToken: + case SyntaxKind.CaretEqualsToken: + case SyntaxKind.LessThanLessThanEqualsToken: + case SyntaxKind.GreaterThanGreaterThanEqualsToken: + case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken: + case SyntaxKind.PlusEqualsToken: + case SyntaxKind.MinusEqualsToken: + case SyntaxKind.AsteriskEqualsToken: + case SyntaxKind.SlashEqualsToken: + case SyntaxKind.PercentEqualsToken: + case SyntaxKind.EqualsToken: + case SyntaxKind.CommaToken: + return true; + default: return false; + } + } + + function isPrefixUnaryExpressionOperatorToken(token: SyntaxKind): boolean { + switch (token) { + case SyntaxKind.PlusToken: + case SyntaxKind.MinusToken: + case SyntaxKind.TildeToken: + case SyntaxKind.ExclamationToken: + case SyntaxKind.PlusPlusToken: + case SyntaxKind.MinusMinusToken: + return true; + default: + return false; + } + } + + function isKeyword(token: SyntaxKind): boolean { + return token >= SyntaxKind.FirstKeyword && token <= SyntaxKind.LastKeyword; + } + + function classFromKind(token: SyntaxKind) { + if (isKeyword(token)) { return TokenClass.Keyword; } - else if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(kind) || - TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(kind)) { + else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) { return TokenClass.Operator; } - else if (TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { + else if (token >= SyntaxKind.FirstPunctuation && token <= SyntaxKind.LastPunctuation) { return TokenClass.Punctuation; } - switch (kind) { - case TypeScript.SyntaxKind.WhitespaceTrivia: - return TokenClass.Whitespace; - case TypeScript.SyntaxKind.MultiLineCommentTrivia: - case TypeScript.SyntaxKind.SingleLineCommentTrivia: - return TokenClass.Comment; - case TypeScript.SyntaxKind.NumericLiteral: + switch (token) { + case SyntaxKind.NumericLiteral: return TokenClass.NumberLiteral; - case TypeScript.SyntaxKind.StringLiteral: + case SyntaxKind.StringLiteral: return TokenClass.StringLiteral; - case TypeScript.SyntaxKind.RegularExpressionLiteral: + case SyntaxKind.RegularExpressionLiteral: return TokenClass.RegExpLiteral; - case TypeScript.SyntaxKind.IdentifierName: + case SyntaxKind.Identifier: default: return TokenClass.Identifier; } diff --git a/src/services/shims.ts b/src/services/shims.ts index 523a0af5c91..0659f9f2512 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -36,7 +36,7 @@ module ts { // { span: { start: number; length: number }; newLength: number } // // Or null value if there was no change. - getTextChangeRangeSinceVersion(scriptVersion: number): string; + getChangeRange(oldSnapshot: ScriptSnapshotShim): string; } // @@ -48,7 +48,7 @@ module ts { // Returns a JSON encoded value of the type: // string[] getScriptFileNames(): string; - getScriptVersion(fileName: string): number; + getScriptVersion(fileName: string): string; getScriptIsOpen(fileName: string): boolean; getScriptSnapshot(fileName: string): ScriptSnapshotShim; getLocalizedDiagnosticMessages(): string; @@ -86,44 +86,51 @@ module ts { getTypeAtPosition(fileName: string, position: number): string; getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): string; getBreakpointStatementAtPosition(fileName: string, position: number): string; - getSignatureAtPosition(fileName: string, position: number): string; + + getSignatureHelpItems(fileName: string, position: number): string; + getSignatureHelpCurrentArgumentState(fileName: string, position: number, applicableSpanStart: number): string; // Returns a JSON encoded value of the type: - // { fileName: string; minChar: number; limChar: number; kind: string; name: string; containerKind: string; containerName: string } + // { canRename: boolean, localizedErrorMessage: string, displayName: string, fullDisplayName: string, kind: string, kindModifiers: string, triggerSpan: { start; length } } + getRenameInfo(fileName: string, position: number): string; + + // Returns a JSON encoded value of the type: + // { fileName: string; textSpan: { start: number; length: number}; kind: string; name: string; containerKind: string; containerName: string } // // Or null value if no definition can be found. getDefinitionAtPosition(fileName: string, position: number): string; // Returns a JSON encoded value of the type: - // { fileName: string; minChar: number; limChar: number; isWriteAccess: boolean }[] + // { fileName: string; textSpan: { start: number; length: number}; isWriteAccess: boolean }[] getReferencesAtPosition(fileName: string, position: number): string; // Returns a JSON encoded value of the type: - // { fileName: string; minChar: number; limChar: number; isWriteAccess: boolean }[] + // { fileName: string; textSpan: { start: number; length: number}; isWriteAccess: boolean }[] getOccurrencesAtPosition(fileName: string, position: number): string; // Returns a JSON encoded value of the type: - // { fileName: string; minChar: number; limChar: number; isWriteAccess: boolean }[] + // { fileName: string; textSpan: { start: number; length: number}; isWriteAccess: boolean }[] getImplementorsAtPosition(fileName: string, position: number): string; // Returns a JSON encoded value of the type: - // { name: string; kind: string; kindModifiers: string; containerName: string; containerKind: string; matchKind: string; fileName: string; minChar: number; limChar: number; } [] = []; + // { name: string; kind: string; kindModifiers: string; containerName: string; containerKind: string; matchKind: string; fileName: string; textSpan: { start: number; length: number}; } [] = []; getNavigateToItems(searchValue: string): string; // Returns a JSON encoded value of the type: - // { name: string; kind: string; kindModifiers: string; containerName: string; containerKind: string; matchKind: string; fileName: string; minChar: number; limChar: number; } [] = []; - getScriptLexicalStructure(fileName: string): string; + // { text: string; kind: string; kindModifiers: string; bolded: boolean; grayed: boolean; indent: number; spans: { start: number; length: number; }[]; childItems: [] } [] = []; + getNavigationBarItems(fileName: string): string; // Returns a JSON encoded value of the type: - // { name: string; kind: string; kindModifiers: string; containerName: string; containerKind: string; matchKind: string; fileName: string; minChar: number; limChar: number; } [] = []; - getOutliningRegions(fileName: string): string; + // { textSpan: { start: number, length: number }; hintSpan: { start: number, length: number }; bannerText: string; autoCollapse: boolean } [] = []; + getOutliningSpans(fileName: string): string; + + getTodoComments(fileName: string, todoCommentDescriptors: string): string; getBraceMatchingAtPosition(fileName: string, position: number): string; getIndentationAtPosition(fileName: string, position: number, options: string/*Services.EditorOptions*/): string; - getFormattingEditsForRange(fileName: string, minChar: number, limChar: number, options: string/*Services.FormatCodeOptions*/): string; - getFormattingEditsForDocument(fileName: string, minChar: number, limChar: number, options: string/*Services.FormatCodeOptions*/): string; - getFormattingEditsOnPaste(fileName: string, minChar: number, limChar: number, options: string/*Services.FormatCodeOptions*/): string; + getFormattingEditsForRange(fileName: string, start: number, end: number, options: string/*Services.FormatCodeOptions*/): string; + getFormattingEditsForDocument(fileName: string, options: string/*Services.FormatCodeOptions*/): string; getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: string/*Services.FormatCodeOptions*/): string; getEmitOutput(fileName: string): string; @@ -283,8 +290,9 @@ module ts { return this.lineStartPositions; } - public getTextChangeRangeSinceVersion(scriptVersion: number): TypeScript.TextChangeRange { - var encoded = this.scriptSnapshotShim.getTextChangeRangeSinceVersion(scriptVersion); + public getChangeRange(oldSnapshot: TypeScript.IScriptSnapshot): TypeScript.TextChangeRange { + var oldSnapshotShim = oldSnapshot; + var encoded = this.scriptSnapshotShim.getChangeRange(oldSnapshotShim.scriptSnapshotShim); if (encoded == null) { return null; } @@ -295,30 +303,10 @@ module ts { } } - class LanguageServiceShimHostAdapter implements LanguageServiceHost { + export class LanguageServiceShimHostAdapter implements LanguageServiceHost { constructor(private shimHost: LanguageServiceShimHost) { } - public information(): boolean { - return this.shimHost.information(); - } - - public debug(): boolean { - return this.shimHost.debug(); - } - - public warning(): boolean { - return this.shimHost.warning(); - } - - public error(): boolean { - return this.shimHost.error(); - } - - public fatal(): boolean { - return this.shimHost.fatal(); - } - public log(s: string): void { this.shimHost.log(s); } @@ -349,7 +337,7 @@ module ts { return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName)); } - public getScriptVersion(fileName: string): number { + public getScriptVersion(fileName: string): string { return this.shimHost.getScriptVersion(fileName); } @@ -455,7 +443,6 @@ module ts { this.forwardJSONCall( "refresh(" + throwOnError + ")", () => { - this.languageService.refresh(); return null; }); } @@ -468,8 +455,6 @@ module ts { return null; }); } - /// SQUIGGLES - /// private static realizeDiagnostic(diagnostic: Diagnostic): { message: string; start: number; length: number; category: string; } { return { @@ -494,7 +479,7 @@ module ts { public getSyntacticDiagnostics(fileName: string): string { return this.forwardJSONCall( - "getSyntacticDiagnostics(\"" + fileName + "\")", + "getSyntacticDiagnostics('" + fileName + "')", () => { var errors = this.languageService.getSyntacticDiagnostics(fileName); return errors.map(LanguageServiceShimObject.realizeDiagnostic); @@ -503,7 +488,7 @@ module ts { public getSemanticDiagnostics(fileName: string): string { return this.forwardJSONCall( - "getSemanticDiagnostics(\"" + fileName + "\")", + "getSemanticDiagnostics('" + fileName + "')", () => { var errors = this.languageService.getSemanticDiagnostics(fileName); return errors.map(LanguageServiceShimObject.realizeDiagnostic); @@ -524,7 +509,7 @@ module ts { /// in the active file. public getTypeAtPosition(fileName: string, position: number): string { return this.forwardJSONCall( - "getTypeAtPosition(\"" + fileName + "\", " + position + ")", + "getTypeAtPosition('" + fileName + "', " + position + ")", () => { var typeInfo = this.languageService.getTypeAtPosition(fileName, position); return typeInfo; @@ -536,7 +521,7 @@ module ts { // in the active file. public getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): string { return this.forwardJSONCall( - "getNameOrDottedNameSpan(\"" + fileName + "\", " + startPos + ", " + endPos + ")", + "getNameOrDottedNameSpan('" + fileName + "', " + startPos + ", " + endPos + ")", () => { var spanInfo = this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos); return spanInfo; @@ -547,7 +532,7 @@ module ts { /// Computes span information of statement at the requested position in the active file. public getBreakpointStatementAtPosition(fileName: string, position: number): string { return this.forwardJSONCall( - "getBreakpointStatementAtPosition(\"" + fileName + "\", " + position + ")", + "getBreakpointStatementAtPosition('" + fileName + "', " + position + ")", () => { var spanInfo = this.languageService.getBreakpointStatementAtPosition(fileName, position); return spanInfo; @@ -555,32 +540,49 @@ module ts { } /// SIGNATUREHELP - /// Computes a string representation of the signatures at the requested position - /// in the active file. - public getSignatureAtPosition(fileName: string, position: number): string { + + public getSignatureHelpItems(fileName: string, position: number): string { return this.forwardJSONCall( - "getSignatureAtPosition(\"" + fileName + "\", " + position + ")", + "getSignatureHelpItems('" + fileName + "', " + position + ")", () => { - var signatureInfo = this.languageService.getSignatureAtPosition(fileName, position); + var signatureInfo = this.languageService.getSignatureHelpItems(fileName, position); return signatureInfo; }); } + public getSignatureHelpCurrentArgumentState(fileName: string, position: number, applicableSpanStart: number): string { + return this.forwardJSONCall( + "getSignatureHelpCurrentArgumentState('" + fileName + "', " + position + ", " + applicableSpanStart + ")", + () => { + var signatureInfo = this.languageService.getSignatureHelpItems(fileName, position); + return signatureInfo; + }); + } + + /// GOTO DEFINITION /// Computes the definition location and file for the symbol /// at the requested position. public getDefinitionAtPosition(fileName: string, position: number): string { return this.forwardJSONCall( - "getDefinitionAtPosition(\"" + fileName + "\", " + position + ")", + "getDefinitionAtPosition('" + fileName + "', " + position + ")", () => { return this.languageService.getDefinitionAtPosition(fileName, position); }); } + public getRenameInfo(fileName: string, position: number): string { + return this.forwardJSONCall( + "getRenameInfo('" + fileName + "', " + position + ")", + () => { + return this.languageService.getRenameInfo(fileName, position); + }); + } + /// GET BRACE MATCHING public getBraceMatchingAtPosition(fileName: string, position: number): string { return this.forwardJSONCall( - "getBraceMatchingAtPosition(\"" + fileName + "\", " + position + ")", + "getBraceMatchingAtPosition('" + fileName + "', " + position + ")", () => { var textRanges = this.languageService.getBraceMatchingAtPosition(fileName, position); return textRanges; @@ -590,11 +592,10 @@ module ts { /// GET SMART INDENT public getIndentationAtPosition(fileName: string, position: number, options: string /*Services.EditorOptions*/): string { return this.forwardJSONCall( - "getIndentationAtPosition(\"" + fileName + "\", " + position + ")", + "getIndentationAtPosition('" + fileName + "', " + position + ")", () => { var localOptions: EditorOptions = JSON.parse(options); - var columnOffset = this.languageService.getIndentationAtPosition(fileName, position, localOptions); - return { value: columnOffset }; + return this.languageService.getIndentationAtPosition(fileName, position, localOptions); }); } @@ -604,7 +605,7 @@ module ts { /// Each reference is a "fileindex min lim" sub-string. public getReferencesAtPosition(fileName: string, position: number): string { return this.forwardJSONCall( - "getReferencesAtPosition(\"" + fileName + "\", " + position + ")", + "getReferencesAtPosition('" + fileName + "', " + position + ")", () => { return this.languageService.getReferencesAtPosition(fileName, position); }); @@ -612,7 +613,7 @@ module ts { public getOccurrencesAtPosition(fileName: string, position: number): string { return this.forwardJSONCall( - "getOccurrencesAtPosition(\"" + fileName + "\", " + position + ")", + "getOccurrencesAtPosition('" + fileName + "', " + position + ")", () => { return this.languageService.getOccurrencesAtPosition(fileName, position); }); @@ -621,7 +622,7 @@ module ts { /// GET IMPLEMENTORS public getImplementorsAtPosition(fileName: string, position: number): string { return this.forwardJSONCall( - "getImplementorsAtPosition(\"" + fileName + "\", " + position + ")", + "getImplementorsAtPosition('" + fileName + "', " + position + ")", () => { return this.languageService.getImplementorsAtPosition(fileName, position); }); @@ -634,7 +635,7 @@ module ts { /// list if requested. public getCompletionsAtPosition(fileName: string, position: number, isMemberCompletion: boolean) { return this.forwardJSONCall( - "getCompletionsAtPosition(\"" + fileName + "\", " + position + ", " + isMemberCompletion + ")", + "getCompletionsAtPosition('" + fileName + "', " + position + ", " + isMemberCompletion + ")", () => { var completion = this.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion); return completion; @@ -644,52 +645,38 @@ module ts { /// Get a string based representation of a completion list entry details public getCompletionEntryDetails(fileName: string, position: number, entryName: string) { return this.forwardJSONCall( - "getCompletionEntryDetails(\"" + fileName + "\", " + position + ", " + entryName + ")", + "getCompletionEntryDetails('" + fileName + "', " + position + ", " + entryName + ")", () => { var details = this.languageService.getCompletionEntryDetails(fileName, position, entryName); return details; }); } - /// FORMAT SELECTION - public getFormattingEditsForRange(fileName: string, minChar: number, limChar: number, options: string/*Services.FormatCodeOptions*/): string { + public getFormattingEditsForRange(fileName: string, start: number, end: number, options: string/*Services.FormatCodeOptions*/): string { return this.forwardJSONCall( - "getFormattingEditsForRange(\"" + fileName + "\", " + minChar + ", " + limChar + ")", + "getFormattingEditsForRange('" + fileName + "', " + start + ", " + end + ")", () => { - var localOptions: FormatCodeOptions = JSON.parse(options); - var edits = this.languageService.getFormattingEditsForRange(fileName, minChar, limChar, localOptions); + var localOptions: ts.FormatCodeOptions = JSON.parse(options); + var edits = this.languageService.getFormattingEditsForRange(fileName, start, end, localOptions); return edits; }); } - /// FORMAT DOCUMENT - public getFormattingEditsForDocument(fileName: string, minChar: number, limChar: number, options: string/*Services.FormatCodeOptions*/): string { + public getFormattingEditsForDocument(fileName: string, options: string/*Services.FormatCodeOptions*/): string { return this.forwardJSONCall( - "getFormattingEditsForDocument(\"" + fileName + "\", " + minChar + ", " + limChar + ")", + "getFormattingEditsForDocument('" + fileName + "')", () => { - var localOptions: FormatCodeOptions = JSON.parse(options); - var edits = this.languageService.getFormattingEditsForDocument(fileName, minChar, limChar, localOptions); + var localOptions: ts.FormatCodeOptions = JSON.parse(options); + var edits = this.languageService.getFormattingEditsForDocument(fileName, localOptions); return edits; }); } - /// FORMAT ON PASTE - public getFormattingEditsOnPaste(fileName: string, minChar: number, limChar: number, options: string/*Services.FormatCodeOptions*/): string { - return this.forwardJSONCall( - "getFormattingEditsOnPaste(\"" + fileName + "\", " + minChar + ", " + limChar + ")", - () => { - var localOptions: FormatCodeOptions = JSON.parse(options); - var edits = this.languageService.getFormattingEditsOnPaste(fileName, minChar, limChar, localOptions); - return edits; - }); - } - - /// FORMAT public getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: string/*Services.FormatCodeOptions*/): string { return this.forwardJSONCall( - "getFormattingEditsAfterKeystroke(\"" + fileName + "\", " + position + ", \"" + key + "\")", + "getFormattingEditsAfterKeystroke('" + fileName + "', " + position + ", '" + key + "')", () => { - var localOptions: FormatCodeOptions = JSON.parse(options); + var localOptions: ts.FormatCodeOptions = JSON.parse(options); var edits = this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); return edits; }); @@ -699,91 +686,57 @@ module ts { /// Return a list of symbols that are interesting to navigate to public getNavigateToItems(searchValue: string): string { return this.forwardJSONCall( - "getNavigateToItems(\"" + searchValue + "\")", + "getNavigateToItems('" + searchValue + "')", () => { var items = this.languageService.getNavigateToItems(searchValue); - var result = this._navigateToItemsToString(items); - return result; + return items; }); } - // GET SCRIPT LEXICAL STRUCTURE - // - public getScriptLexicalStructure(fileName: string): string { + public getNavigationBarItems(fileName: string): string { return this.forwardJSONCall( - "getScriptLexicalStructure(\"" + fileName + "\")", + "getNavigationBarItems('" + fileName + "')", () => { - var items = this.languageService.getScriptLexicalStructure(fileName); - var result = this._navigateToItemsToString(items); - return result; + var items = this.languageService.getNavigationBarItems(fileName); + return items; }); } - // GET OUTLINING REGIONS - // - public getOutliningRegions(fileName: string): string { + public getOutliningSpans(fileName: string): string { return this.forwardJSONCall( - "getOutliningRegions(\"" + fileName + "\")", + "getOutliningSpans('" + fileName + "')", () => { - var items = this.languageService.getOutliningRegions(fileName); - // return just the part of data that language service v2 can understand - // language service v2 will use the entire OutliningSpan - var spans = map(items, i => i.textSpan); - return spans; + var items = this.languageService.getOutliningSpans(fileName); + return items; + }); + } + + public getTodoComments(fileName: string, descriptors: string): string { + return this.forwardJSONCall( + "getTodoComments('" + fileName + "')", + () => { + var items = this.languageService.getTodoComments(fileName, JSON.parse(descriptors)); + return items; }); } /// Emit public getEmitOutput(fileName: string): string { return this.forwardJSONCall( - "getEmitOutput(\"" + fileName + "\")", + "getEmitOutput('" + fileName + "')", () => { var output = this.languageService.getEmitOutput(fileName); return output; }); } - - private _navigateToItemsToString(items: NavigateToItem[]): any { - var result: { - name: string; - kind: string; - kindModifiers: string; - containerName: string; - containerKind: string; - matchKind: string; - fileName: string; - minChar: number; - limChar: number; - additionalSpans?: { start: number; end: number; }[]; - }[] = []; - - for (var i = 0; i < items.length; i++) { - var item = items[i]; - - result.push({ - name: item.name, - kind: item.kind, - kindModifiers: item.kindModifiers, - containerName: item.containerName, - containerKind: item.containerKind, - matchKind: item.matchKind, - fileName: item.fileName, - minChar: item.minChar, - limChar: item.limChar, - additionalSpans: item.additionalSpans ? item.additionalSpans.map(i => { return { start: i.minChar, end: i.limChar }; }) : undefined - }); - } - - return result; - } } class ClassifierShimObject extends ShimBase implements ClassifierShim { public classifier: Classifier; - constructor(factory: ShimFactory, public host: Logger) { + constructor(factory: ShimFactory, public logger: Logger) { super(factory); - this.classifier = createClassifier(this.host); + this.classifier = createClassifier(this.logger); } /// COLORIZATION @@ -801,12 +754,12 @@ module ts { } class CoreServicesShimObject extends ShimBase implements CoreServicesShim { - constructor(factory: ShimFactory, public host: Logger) { + constructor(factory: ShimFactory, public logger: Logger) { super(factory); } private forwardJSONCall(actionDescription: string, action: () => any): any { - return forwardJSONCall(this.host, actionDescription, action); + return forwardJSONCall(this.logger, actionDescription, action); } /// @@ -814,7 +767,7 @@ module ts { /// public getPreProcessedFileInfo(fileName: string, sourceText: TypeScript.IScriptSnapshot): string { return this.forwardJSONCall( - "getPreProcessedFileInfo(\"" + fileName + "\")", + "getPreProcessedFileInfo('" + fileName + "')", () => { var result = TypeScript.preProcessFile(fileName, sourceText); return result; @@ -840,8 +793,8 @@ module ts { public createLanguageServiceShim(host: LanguageServiceShimHost): LanguageServiceShim { try { var hostAdapter = new LanguageServiceShimHostAdapter(host); - var pullLanguageService = createLanguageService(hostAdapter, this.documentRegistry); - return new LanguageServiceShimObject(this, host, pullLanguageService); + var languageService = createLanguageService(hostAdapter, this.documentRegistry); + return new LanguageServiceShimObject(this, host, languageService); } catch (err) { logInternalError(host, err); @@ -849,22 +802,22 @@ module ts { } } - public createClassifierShim(host: Logger): ClassifierShim { + public createClassifierShim(logger: Logger): ClassifierShim { try { - return new ClassifierShimObject(this, host); + return new ClassifierShimObject(this, logger); } catch (err) { - logInternalError(host, err); + logInternalError(logger, err); throw err; } } - public createCoreServicesShim(host: Logger): CoreServicesShim { + public createCoreServicesShim(logger: Logger): CoreServicesShim { try { - return new CoreServicesShimObject(this, host); + return new CoreServicesShimObject(this, logger); } catch (err) { - logInternalError(host, err); + logInternalError(logger, err); throw err; } } diff --git a/src/services/syntax/scanner.ts b/src/services/syntax/scanner.ts index 8f937fa540c..45cc151e2d5 100644 --- a/src/services/syntax/scanner.ts +++ b/src/services/syntax/scanner.ts @@ -38,13 +38,15 @@ module TypeScript.Scanner { // _packedFullStartAndInfo: // // 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 000x <-- has leading trivia - // 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00x0 <-- has trailing trivia - // 0000 0000 0000 0000 0000 0000 0000 0000 00xx xxxx xxxx xxxx xxxx xxxx xxxx xx00 <-- full start + // 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00x0 <-- has leading comment (implies has leading trivia) + // 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0x00 <-- has trailing trivia + // 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 x000 <-- has trailing comment (implies has trailing trivia) + // 0000 0000 0000 0000 0000 0000 0000 0000 00xx xxxx xxxx xxxx xxxx xxxx xxxx 0000 <-- full start // ^ ^ ^ // | | | // Bit 64 Bit 30 Bit 1 // - // This gives us 28 bits for the start of the token. At 256MB That's more than enough for + // This gives us 26 bits for the start of the token. At 64MB That's more than enough for // any codebase. // // _packedFullWidthAndKind: @@ -58,31 +60,31 @@ module TypeScript.Scanner { // This gives us 23bit for width (or 8MB of width which should be enough for any codebase). enum ScannerConstants { - LargeTokenFullStartShift = 2, + LargeTokenFullStartShift = 4, LargeTokenFullWidthShift = 7, + LargeTokenLeadingTriviaBitMask = 0x01, // 00000001 + LargeTokenLeadingCommentBitMask = 0x02, // 00000010 + LargeTokenTrailingTriviaBitMask = 0x04, // 00000100 + LargeTokenTrailingCommentBitMask = 0x08, // 00001000 + LargeTokenTriviaBitMask = 0x0F, // 00001111 FixedWidthTokenFullStartShift = 7, + FixedWidthTokenMaxFullStart = 0x7FFFFF, // 23 ones. SmallTokenFullWidthShift = 7, SmallTokenFullStartShift = 12, + SmallTokenMaxFullStart = 0x3FFFF, // 18 ones. + SmallTokenMaxFullWidth = 0x1F, // 5 ones + SmallTokenFullWidthMask = 0x1F, // 00011111 KindMask = 0x7F, // 01111111 IsVariableWidthMask = 0x80, // 10000000 - - LargeTokenLeadingTriviaBitMask = 0x01, // 00000001 - LargeTokenTrailingTriviaBitMask = 0x02, // 00000010 - - SmallTokenFullWidthMask = 0x1F, // 00011111 - - FixedWidthTokenMaxFullStart = 0x7FFFFF, // 23 ones. - SmallTokenMaxFullStart = 0x3FFFF, // 18 ones. - SmallTokenMaxFullWidth = 0x1F, // 5 ones } // Make sure our math works for packing/unpacking large fullStarts. - Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(1 << 28, 1, 1)) === (1 << 28)); - Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(3 << 27, 0, 1)) === (3 << 27)); - Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(10 << 25, 1, 0)) === (10 << 25)); + Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(1 << 26, 3)) === (1 << 26)); + Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(3 << 25, 1)) === (3 << 25)); + Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(10 << 23, 2)) === (10 << 23)); function fixedWidthTokenPackData(fullStart: number, kind: SyntaxKind) { return (fullStart << ScannerConstants.FixedWidthTokenFullStartShift) | kind; @@ -94,8 +96,8 @@ module TypeScript.Scanner { function smallTokenPackData(fullStart: number, fullWidth: number, kind: SyntaxKind) { return (fullStart << ScannerConstants.SmallTokenFullStartShift) | - (fullWidth << ScannerConstants.SmallTokenFullWidthShift) | - kind; + (fullWidth << ScannerConstants.SmallTokenFullWidthShift) | + kind; } function smallTokenUnpackFullWidth(packedData: number): SyntaxKind { @@ -106,8 +108,8 @@ module TypeScript.Scanner { return packedData >> ScannerConstants.SmallTokenFullStartShift; } - function largeTokenPackFullStartAndInfo(fullStart: number, hasLeadingTriviaInfo: number, hasTrailingTriviaInfo: number): number { - return (fullStart << ScannerConstants.LargeTokenFullStartShift) | hasLeadingTriviaInfo | hasTrailingTriviaInfo; + function largeTokenPackFullStartAndInfo(fullStart: number, triviaInfo: number): number { + return (fullStart << ScannerConstants.LargeTokenFullStartShift) | triviaInfo; } function largeTokenUnpackFullWidth(packedFullWidthAndKind: number) { @@ -118,12 +120,24 @@ module TypeScript.Scanner { return packedFullStartAndInfo >> ScannerConstants.LargeTokenFullStartShift; } - function largeTokenUnpackHasLeadingTriviaInfo(packed: number): number { - return packed & ScannerConstants.LargeTokenLeadingTriviaBitMask; + function largeTokenUnpackHasLeadingTrivia(packed: number): boolean { + return (packed & ScannerConstants.LargeTokenLeadingTriviaBitMask) !== 0; } - function largeTokenUnpackHasTrailingTriviaInfo(packed: number): number { - return packed & ScannerConstants.LargeTokenTrailingTriviaBitMask; + function largeTokenUnpackHasTrailingTrivia(packed: number): boolean { + return (packed & ScannerConstants.LargeTokenTrailingTriviaBitMask) !== 0; + } + + function largeTokenUnpackHasLeadingComment(packed: number): boolean { + return (packed & ScannerConstants.LargeTokenLeadingCommentBitMask) !== 0; + } + + function largeTokenUnpackHasTrailingComment(packed: number): boolean { + return (packed & ScannerConstants.LargeTokenTrailingCommentBitMask) !== 0; + } + + function largeTokenUnpackTriviaInfo(packed: number): number { + return packed & ScannerConstants.LargeTokenTriviaBitMask; } var isKeywordStartCharacter: number[] = ArrayUtilities.createArray(CharacterCodes.maxAsciiCharacter, 0); @@ -174,7 +188,7 @@ module TypeScript.Scanner { var triviaScanner = createScannerInternal(ts.ScriptTarget.ES5, SimpleText.fromString(""), () => { }); - interface IScannerToken extends ISyntaxToken { + interface IScannerToken extends ISyntaxToken { } function fillSizeInfo(token: IScannerToken, text: ISimpleText): void { @@ -256,6 +270,8 @@ module TypeScript.Scanner { public fullStart(): number { return fixedWidthTokenUnpackFullStart(this._packedData); } public hasLeadingTrivia(): boolean { return false; } public hasTrailingTrivia(): boolean { return false; } + public hasLeadingComment(): boolean { return false; } + public hasTrailingComment(): boolean { return false; } public clone(): ISyntaxToken { return new FixedWidthTokenWithNoTrivia(this._packedData); } } @@ -271,19 +287,18 @@ module TypeScript.Scanner { public setFullStart(fullStart: number): void { this._packedFullStartAndInfo = largeTokenPackFullStartAndInfo(fullStart, - largeTokenUnpackHasLeadingTriviaInfo(this._packedFullStartAndInfo), - largeTokenUnpackHasTrailingTriviaInfo(this._packedFullStartAndInfo)); + largeTokenUnpackTriviaInfo(this._packedFullStartAndInfo)); } - private syntaxTreeText(text: ISimpleText) { + private syntaxTreeText(text: ISimpleText) { var result = text || syntaxTree(this).text; Debug.assert(result); return result; } - public isIncrementallyUnusable(): boolean { return tokenIsIncrementallyUnusable(this); } - public isKeywordConvertedToIdentifier(): boolean { return false; } - public hasSkippedToken(): boolean { return false; } + public isIncrementallyUnusable(): boolean { return tokenIsIncrementallyUnusable(this); } + public isKeywordConvertedToIdentifier(): boolean { return false; } + public hasSkippedToken(): boolean { return false; } public fullText(text?: ISimpleText): string { return fullText(this, this.syntaxTreeText(text)); @@ -294,8 +309,8 @@ module TypeScript.Scanner { return cachedText !== undefined ? cachedText : SyntaxFacts.getText(this.kind()); } - public leadingTrivia(text?: ISimpleText): ISyntaxTriviaList { return leadingTrivia(this, this.syntaxTreeText(text)); } - public trailingTrivia(text?: ISimpleText): ISyntaxTriviaList { return trailingTrivia(this, this.syntaxTreeText(text)); } + public leadingTrivia(text?: ISimpleText): ISyntaxTriviaList { return leadingTrivia(this, this.syntaxTreeText(text)); } + public trailingTrivia(text?: ISimpleText): ISyntaxTriviaList { return trailingTrivia(this, this.syntaxTreeText(text)); } public leadingTriviaWidth(text?: ISimpleText): number { return leadingTriviaWidth(this, this.syntaxTreeText(text)); @@ -308,8 +323,10 @@ module TypeScript.Scanner { public kind(): SyntaxKind { return this._packedFullWidthAndKind & ScannerConstants.KindMask; } public fullWidth(): number { return largeTokenUnpackFullWidth(this._packedFullWidthAndKind); } public fullStart(): number { return largeTokenUnpackFullStart(this._packedFullStartAndInfo); } - public hasLeadingTrivia(): boolean { return largeTokenUnpackHasLeadingTriviaInfo(this._packedFullStartAndInfo) !== 0; } - public hasTrailingTrivia(): boolean { return largeTokenUnpackHasTrailingTriviaInfo(this._packedFullStartAndInfo) !== 0; } + public hasLeadingTrivia(): boolean { return largeTokenUnpackHasLeadingTrivia(this._packedFullStartAndInfo); } + public hasTrailingTrivia(): boolean { return largeTokenUnpackHasTrailingTrivia(this._packedFullStartAndInfo); } + public hasLeadingComment(): boolean { return largeTokenUnpackHasLeadingComment(this._packedFullStartAndInfo); } + public hasTrailingComment(): boolean { return largeTokenUnpackHasTrailingComment(this._packedFullStartAndInfo); } public clone(): ISyntaxToken { return new LargeScannerToken(this._packedFullStartAndInfo, this._packedFullWidthAndKind, this.cachedText); } } @@ -351,8 +368,8 @@ module TypeScript.Scanner { } function reset(_text: ISimpleText, _start: number, _end: number) { - Debug.assert(_start <= _text.length()); - Debug.assert(_end <= _text.length()); + Debug.assert(_start <= _text.length(), "Token's start was not within the bounds of text: " + _start + " - [0, " + _text.length() + ")"); + Debug.assert(_end <= _text.length(), "Token's end was not within the bounds of text: " + _end + " - [0, " + _text.length() + ")"); if (!str || text !== _text) { text = _text; @@ -392,7 +409,7 @@ module TypeScript.Scanner { else { // inline the packing logic for perf. var packedFullStartAndTriviaInfo = (fullStart << ScannerConstants.LargeTokenFullStartShift) | - leadingTriviaInfo | (trailingTriviaInfo << 1); + leadingTriviaInfo | (trailingTriviaInfo << 2); var packedFullWidthAndKind = (fullWidth << ScannerConstants.LargeTokenFullWidthShift) | kind; var cachedText = isFixedWidth ? undefined : text.substr(start, end - start); @@ -505,7 +522,8 @@ module TypeScript.Scanner { case CharacterCodes.verticalTab: case CharacterCodes.formFeed: index++; - result = 1; + // we have trivia + result |= 1; continue; case CharacterCodes.carriageReturn: @@ -516,27 +534,31 @@ module TypeScript.Scanner { case CharacterCodes.lineFeed: index++; + // we have trivia + result |= 1; + // If we're consuming leading trivia, then we will continue consuming more // trivia (including newlines) up to the first token we see. If we're // consuming trailing trivia, then we break after the first newline we see. if (isTrailing) { - return 1; + return result; } - result = 1; continue; case CharacterCodes.slash: if ((index + 1) < _end) { var ch2 = str.charCodeAt(index + 1); if (ch2 === CharacterCodes.slash) { - result = 1; + // we have a comment, and we have trivia + result |= 3; skipSingleLineCommentTrivia(); continue; } if (ch2 === CharacterCodes.asterisk) { - result = 1; + // we have a comment, and we have trivia + result |= 3; skipMultiLineCommentTrivia(); continue; } @@ -547,7 +569,7 @@ module TypeScript.Scanner { default: if (ch > CharacterCodes.maxAsciiCharacter && slowScanTriviaInfo(ch)) { - result = 1; + result |= 1; continue; } @@ -1427,7 +1449,7 @@ module TypeScript.Scanner { var fullEnd = fullStart + token.fullWidth(); reset(text, fullStart, fullEnd); - var leadingTriviaInfo = scanTriviaInfo(/*isTrailing: */ false); + scanTriviaInfo(/*isTrailing: */ false); var start = index; scanSyntaxKind(isContextualToken(token)); @@ -1616,6 +1638,8 @@ module TypeScript.Scanner { } function resetToPosition(absolutePosition: number): void { + Debug.assert(absolutePosition <= text.length(), "Trying to set the position outside the bounds of the text!"); + _absolutePosition = absolutePosition; // First, remove any diagnostics that came after this position. diff --git a/src/services/syntax/syntaxToken.ts b/src/services/syntax/syntaxToken.ts index 19c522aee18..4f3906e1fe9 100644 --- a/src/services/syntax/syntaxToken.ts +++ b/src/services/syntax/syntaxToken.ts @@ -17,6 +17,8 @@ module TypeScript { hasLeadingTrivia(): boolean; hasTrailingTrivia(): boolean; + hasLeadingComment(): boolean; + hasTrailingComment(): boolean; hasSkippedToken(): boolean; @@ -264,7 +266,7 @@ module TypeScript.Syntax { export function realizeToken(token: ISyntaxToken, text: ISimpleText): ISyntaxToken { return new RealizedToken(token.fullStart(), token.kind(), token.isKeywordConvertedToIdentifier(), token.leadingTrivia(text), token.text(), token.trailingTrivia(text)); } - + export function convertKeywordToIdentifier(token: ISyntaxToken): ISyntaxToken { return new ConvertedKeywordToken(token); } @@ -381,11 +383,14 @@ module TypeScript.Syntax { public fullText(): string { return ""; } public hasLeadingTrivia() { return false; } - public leadingTriviaWidth() { return 0; } public hasTrailingTrivia() { return false; } + public hasLeadingComment() { return false; } + public hasTrailingComment() { return false; } public hasSkippedToken() { return false; } + public leadingTriviaWidth() { return 0; } public trailingTriviaWidth() { return 0; } + public leadingTrivia(): ISyntaxTriviaList { return Syntax.emptyTriviaList; } public trailingTrivia(): ISyntaxTriviaList { return Syntax.emptyTriviaList; } } @@ -401,11 +406,11 @@ module TypeScript.Syntax { public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; public _typeBrand: any; constructor(fullStart: number, - kind: SyntaxKind, - isKeywordConvertedToIdentifier: boolean, - leadingTrivia: ISyntaxTriviaList, - text: string, - trailingTrivia: ISyntaxTriviaList) { + kind: SyntaxKind, + isKeywordConvertedToIdentifier: boolean, + leadingTrivia: ISyntaxTriviaList, + text: string, + trailingTrivia: ISyntaxTriviaList) { this._fullStart = fullStart; this._kind = kind; this._isKeywordConvertedToIdentifier = isKeywordConvertedToIdentifier; @@ -438,8 +443,8 @@ module TypeScript.Syntax { // Realized tokens are created from the parser. They are *never* incrementally reusable. public isIncrementallyUnusable() { return true; } - public isKeywordConvertedToIdentifier() { - return this._isKeywordConvertedToIdentifier; + public isKeywordConvertedToIdentifier() { + return this._isKeywordConvertedToIdentifier; } public fullStart(): number { return this._fullStart; } @@ -450,6 +455,8 @@ module TypeScript.Syntax { public hasLeadingTrivia(): boolean { return this._leadingTrivia.count() > 0; } public hasTrailingTrivia(): boolean { return this._trailingTrivia.count() > 0; } + public hasLeadingComment(): boolean { return this._leadingTrivia.hasComment(); } + public hasTrailingComment(): boolean { return this._trailingTrivia.hasComment(); } public leadingTriviaWidth(): number { return this._leadingTrivia.fullWidth(); } public trailingTriviaWidth(): number { return this._trailingTrivia.fullWidth(); } @@ -504,6 +511,14 @@ module TypeScript.Syntax { return this.underlyingToken.hasTrailingTrivia(); } + public hasLeadingComment(): boolean { + return this.underlyingToken.hasLeadingComment(); + } + + public hasTrailingComment(): boolean { + return this.underlyingToken.hasTrailingComment(); + } + public hasSkippedToken(): boolean { return this.underlyingToken.hasSkippedToken(); } diff --git a/src/services/text/scriptSnapshot.ts b/src/services/text/scriptSnapshot.ts index 41b5ed37c41..1c7091d6cae 100644 --- a/src/services/text/scriptSnapshot.ts +++ b/src/services/text/scriptSnapshot.ts @@ -16,10 +16,12 @@ module TypeScript { // always determine this (albeit in a more expensive manner). getLineStartPositions(): number[]; - // Returns a text change range representing what text has changed since the specified version. - // If the change cannot be determined (say, because a file was opened/closed), then 'null' - // should be returned. - getTextChangeRangeSinceVersion(scriptVersion: number): TextChangeRange; + // Gets the TextChangeRange that describe how the text changed between this text and + // an older version. This informatoin is used by the incremental parser to determine + // what sections of the script need to be reparsed. 'null' can be returned if the + // change range cannot be determined. However, in that case, incremental parsing will + // not happen and the entire document will be reparsed. + getChangeRange(oldSnapshot: IScriptSnapshot): TextChangeRange; } export module ScriptSnapshot { @@ -45,7 +47,7 @@ module TypeScript { return this._lineStartPositions; } - public getTextChangeRangeSinceVersion(scriptVersion: number): TypeScript.TextChangeRange { + public getChangeRange(oldSnapshot: IScriptSnapshot): TextChangeRange { throw Errors.notYetImplemented(); } } diff --git a/src/services/text/textSpan.ts b/src/services/text/textSpan.ts index b0da8279841..d719e244010 100644 --- a/src/services/text/textSpan.ts +++ b/src/services/text/textSpan.ts @@ -27,6 +27,10 @@ module TypeScript { this._length = length; } + public toJSON(key: any): any { + return { start: this._start, length: this._length }; + } + public start(): number { return this._start; } diff --git a/tests/baselines/reference/2dArrays.types b/tests/baselines/reference/2dArrays.types new file mode 100644 index 00000000000..b113ccdce7b --- /dev/null +++ b/tests/baselines/reference/2dArrays.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/2dArrays.ts === +class Cell { +>Cell : Cell +} + +class Ship { +>Ship : Ship + + isSunk: boolean; +>isSunk : boolean +} + +class Board { +>Board : Board + + ships: Ship[]; +>ships : Ship[] +>Ship : Ship + + cells: Cell[]; +>cells : Cell[] +>Cell : Cell + + private allShipsSunk() { +>allShipsSunk : () => boolean + + return this.ships.every(function (val) { return val.isSunk; }); +>this.ships.every(function (val) { return val.isSunk; }) : boolean +>this.ships.every : (callbackfn: (value: Ship, index: number, array: Ship[]) => boolean, thisArg?: any) => boolean +>this.ships : Ship[] +>this : Board +>ships : Ship[] +>every : (callbackfn: (value: Ship, index: number, array: Ship[]) => boolean, thisArg?: any) => boolean +>function (val) { return val.isSunk; } : (val: Ship) => boolean +>val : Ship +>val.isSunk : boolean +>val : Ship +>isSunk : boolean + } +} diff --git a/tests/baselines/reference/AmbientModuleAndAmbientFunctionWithTheSameNameAndCommonRoot.types b/tests/baselines/reference/AmbientModuleAndAmbientFunctionWithTheSameNameAndCommonRoot.types new file mode 100644 index 00000000000..da82a2ff662 --- /dev/null +++ b/tests/baselines/reference/AmbientModuleAndAmbientFunctionWithTheSameNameAndCommonRoot.types @@ -0,0 +1,33 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/module.d.ts === +declare module Point { +>Point : typeof Point + + export var Origin: { x: number; y: number; } +>Origin : { x: number; y: number; } +>x : number +>y : number +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/function.d.ts === +declare function Point(): { x: number; y: number; } +>Point : typeof Point +>x : number +>y : number + +=== tests/cases/conformance/internalModules/DeclarationMerging/test.ts === +var cl: { x: number; y: number; } +>cl : { x: number; y: number; } +>x : number +>y : number + +var cl = Point(); +>cl : { x: number; y: number; } +>Point() : { x: number; y: number; } +>Point : typeof Point + +var cl = Point.Origin; +>cl : { x: number; y: number; } +>Point.Origin : { x: number; y: number; } +>Point : typeof Point +>Origin : { x: number; y: number; } + diff --git a/tests/baselines/reference/AmbientModuleAndAmbientWithSameNameAndCommonRoot.js b/tests/baselines/reference/AmbientModuleAndAmbientWithSameNameAndCommonRoot.js index 461b844eab1..fd57d75d9b8 100644 --- a/tests/baselines/reference/AmbientModuleAndAmbientWithSameNameAndCommonRoot.js +++ b/tests/baselines/reference/AmbientModuleAndAmbientWithSameNameAndCommonRoot.js @@ -28,4 +28,4 @@ var p = new A.Point(0, 0); // unexpected error here, bug 840000 //// [test.js] var p; var p = A.Point.Origin; -var p = new A.Point(0, 0); +var p = new A.Point(0, 0); // unexpected error here, bug 840000 diff --git a/tests/baselines/reference/AmbientModuleAndAmbientWithSameNameAndCommonRoot.types b/tests/baselines/reference/AmbientModuleAndAmbientWithSameNameAndCommonRoot.types new file mode 100644 index 00000000000..8846d2c3a37 --- /dev/null +++ b/tests/baselines/reference/AmbientModuleAndAmbientWithSameNameAndCommonRoot.types @@ -0,0 +1,59 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/module.d.ts === +declare module A { +>A : typeof A + + export module Point { +>Point : typeof Point + + export var Origin: { +>Origin : { x: number; y: number; } + + x: number; +>x : number + + y: number; +>y : number + } + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/class.d.ts === +declare module A { +>A : typeof A + + export class Point { +>Point : Point + + constructor(x: number, y: number); +>x : number +>y : number + + x: number; +>x : number + + y: number; +>y : number + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/test.ts === +var p: { x: number; y: number; } +>p : { x: number; y: number; } +>x : number +>y : number + +var p = A.Point.Origin; +>p : { x: number; y: number; } +>A.Point.Origin : { x: number; y: number; } +>A.Point : typeof A.Point +>A : typeof A +>Point : typeof A.Point +>Origin : { x: number; y: number; } + +var p = new A.Point(0, 0); // unexpected error here, bug 840000 +>p : { x: number; y: number; } +>new A.Point(0, 0) : A.Point +>A.Point : typeof A.Point +>A : typeof A +>Point : typeof A.Point + diff --git a/tests/baselines/reference/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.js b/tests/baselines/reference/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.js index b067168a387..c72ca4b114b 100644 --- a/tests/baselines/reference/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.js +++ b/tests/baselines/reference/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.js @@ -37,4 +37,4 @@ var A; //// [test.js] var p; var p = A.Point.Origin; -var p = new A.Point(0, 0); +var p = new A.Point(0, 0); // unexpected error here, bug 840000 diff --git a/tests/baselines/reference/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.types b/tests/baselines/reference/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.types new file mode 100644 index 00000000000..975f0f65a68 --- /dev/null +++ b/tests/baselines/reference/AmbientModuleAndNonAmbientClassWithSameNameAndCommonRoot.types @@ -0,0 +1,53 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/module.d.ts === +declare module A { +>A : typeof A + + export module Point { +>Point : typeof Point + + export var Origin: { +>Origin : { x: number; y: number; } + + x: number; +>x : number + + y: number; +>y : number + } + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/classPoint.ts === +module A { +>A : typeof A + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/test.ts === +var p: { x: number; y: number; } +>p : { x: number; y: number; } +>x : number +>y : number + +var p = A.Point.Origin; +>p : { x: number; y: number; } +>A.Point.Origin : { x: number; y: number; } +>A.Point : typeof A.Point +>A : typeof A +>Point : typeof A.Point +>Origin : { x: number; y: number; } + +var p = new A.Point(0, 0); // unexpected error here, bug 840000 +>p : { x: number; y: number; } +>new A.Point(0, 0) : A.Point +>A.Point : typeof A.Point +>A : typeof A +>Point : typeof A.Point + diff --git a/tests/baselines/reference/AmbientModuleAndNonAmbientFunctionWithTheSameNameAndCommonRoot.types b/tests/baselines/reference/AmbientModuleAndNonAmbientFunctionWithTheSameNameAndCommonRoot.types new file mode 100644 index 00000000000..cf4aeb6bcc0 --- /dev/null +++ b/tests/baselines/reference/AmbientModuleAndNonAmbientFunctionWithTheSameNameAndCommonRoot.types @@ -0,0 +1,37 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/module.d.ts === +declare module Point { +>Point : typeof Point + + export var Origin: { x: number; y: number; } +>Origin : { x: number; y: number; } +>x : number +>y : number +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/function.ts === +function Point() { +>Point : typeof Point + + return { x: 0, y: 0 }; +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/test.ts === +var cl: { x: number; y: number; } +>cl : { x: number; y: number; } +>x : number +>y : number + +var cl = Point(); +>cl : { x: number; y: number; } +>Point() : { x: number; y: number; } +>Point : typeof Point + +var cl = Point.Origin; +>cl : { x: number; y: number; } +>Point.Origin : { x: number; y: number; } +>Point : typeof Point +>Origin : { x: number; y: number; } + diff --git a/tests/baselines/reference/ArrowFunction1.errors.txt b/tests/baselines/reference/ArrowFunction1.errors.txt new file mode 100644 index 00000000000..ed868daec13 --- /dev/null +++ b/tests/baselines/reference/ArrowFunction1.errors.txt @@ -0,0 +1,6 @@ +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction1.ts (1 errors) ==== + var v = (a: ) => { + ~ +!!! Type expected. + + }; \ No newline at end of file diff --git a/tests/baselines/reference/ArrowFunction2.errors.txt b/tests/baselines/reference/ArrowFunction2.errors.txt new file mode 100644 index 00000000000..eef47a30ba2 --- /dev/null +++ b/tests/baselines/reference/ArrowFunction2.errors.txt @@ -0,0 +1,8 @@ +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction2.ts (2 errors) ==== + var v = (a: b,) => { + ~ +!!! Trailing comma not allowed. + ~ +!!! Cannot find name 'b'. + + }; \ No newline at end of file diff --git a/tests/baselines/reference/ArrowFunction3.errors.txt b/tests/baselines/reference/ArrowFunction3.errors.txt new file mode 100644 index 00000000000..a286116ff29 --- /dev/null +++ b/tests/baselines/reference/ArrowFunction3.errors.txt @@ -0,0 +1,10 @@ +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction3.ts (3 errors) ==== + var v = (a): => { + ~ +!!! ',' expected. + ~~ +!!! ';' expected. + ~ +!!! Cannot find name 'a'. + + }; \ No newline at end of file diff --git a/tests/baselines/reference/ArrowFunction4.js b/tests/baselines/reference/ArrowFunction4.js new file mode 100644 index 00000000000..e9759abb183 --- /dev/null +++ b/tests/baselines/reference/ArrowFunction4.js @@ -0,0 +1,8 @@ +//// [ArrowFunction4.ts] +var v = (a, b) => { + +}; + +//// [ArrowFunction4.js] +var v = function (a, b) { +}; diff --git a/tests/baselines/reference/ArrowFunction4.types b/tests/baselines/reference/ArrowFunction4.types new file mode 100644 index 00000000000..1d049f193e6 --- /dev/null +++ b/tests/baselines/reference/ArrowFunction4.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction4.ts === +var v = (a, b) => { +>v : (a: any, b: any) => void +>(a, b) => { } : (a: any, b: any) => void +>a : any +>b : any + +}; diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModuleMemberThatUsesClassTypeParameter.js b/tests/baselines/reference/ClassAndModuleThatMergeWithModuleMemberThatUsesClassTypeParameter.js index 233c50baa8b..f9f2c571fd4 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithModuleMemberThatUsesClassTypeParameter.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModuleMemberThatUsesClassTypeParameter.js @@ -50,6 +50,7 @@ module clodule4 { //// [ClassAndModuleThatMergeWithModuleMemberThatUsesClassTypeParameter.js] +// all expected to be errors var clodule1 = (function () { function clodule1() { } diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.js index dc14c15a81e..cf39aa6c11b 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.js @@ -25,6 +25,7 @@ var clodule = (function () { })(); var clodule; (function (clodule) { + // error: duplicate identifier expected function fn(x, y) { return x; } diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.js index 5c8fd4dda33..69f72e3b4a7 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.js @@ -25,6 +25,7 @@ var clodule = (function () { })(); var clodule; (function (clodule) { + // error: duplicate identifier expected function fn(x, y) { return x; } diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedStaticFunctionUsingClassPrivateStatics.js b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedStaticFunctionUsingClassPrivateStatics.js index 49907748fc7..827557bdbad 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedStaticFunctionUsingClassPrivateStatics.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedStaticFunctionUsingClassPrivateStatics.js @@ -26,6 +26,7 @@ var clodule = (function () { })(); var clodule; (function (clodule) { + // error: duplicate identifier expected function fn(x, y) { return clodule.sfn('a'); } diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.js index b9386b28f9b..809cbe92920 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.js @@ -30,7 +30,7 @@ var Point = (function () { } Point.Origin = function () { return { x: 0, y: 0 }; - }; + }; // unexpected error here bug 840246 return Point; })(); var Point; @@ -38,7 +38,7 @@ var Point; function Origin() { return null; } - Point.Origin = Origin; + Point.Origin = Origin; //expected duplicate identifier error })(Point || (Point = {})); var A; (function (A) { @@ -49,7 +49,7 @@ var A; } Point.Origin = function () { return { x: 0, y: 0 }; - }; + }; // unexpected error here bug 840246 return Point; })(); A.Point = Point; @@ -57,7 +57,7 @@ var A; function Origin() { return ""; } - Point.Origin = Origin; + Point.Origin = Origin; //expected duplicate identifier error })(A.Point || (A.Point = {})); var Point = A.Point; })(A || (A = {})); diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.js index 79e1784b4fa..9a941abdc1e 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.js @@ -37,7 +37,7 @@ var Point; (function (Point) { function Origin() { return ""; - } + } // not an error, since not exported })(Point || (Point = {})); var A; (function (A) { @@ -55,7 +55,7 @@ var A; (function (Point) { function Origin() { return ""; - } + } // not an error since not exported })(A.Point || (A.Point = {})); var Point = A.Point; })(A || (A = {})); diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.types b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.types new file mode 100644 index 00000000000..3ea1919ecae --- /dev/null +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.types @@ -0,0 +1,49 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndNonExportedFunctionThatShareAName.ts === +class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + + static Origin(): Point { return { x: 0, y: 0 }; } +>Origin : () => Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + +module Point { +>Point : typeof Point + + function Origin() { return ""; }// not an error, since not exported +>Origin : () => string +} + + +module A { +>A : typeof A + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + + static Origin(): Point { return { x: 0, y: 0 }; } +>Origin : () => Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + } + + export module Point { +>Point : typeof Point + + function Origin() { return ""; }// not an error since not exported +>Origin : () => string + } +} diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js index 9323f83a1ec..3f377bfaf00 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.js @@ -33,7 +33,7 @@ var Point = (function () { })(); var Point; (function (Point) { - Point.Origin = ""; + Point.Origin = ""; //expected duplicate identifier error })(Point || (Point = {})); var A; (function (A) { @@ -47,7 +47,7 @@ var A; })(); A.Point = Point; (function (Point) { - Point.Origin = ""; + Point.Origin = ""; //expected duplicate identifier error })(A.Point || (A.Point = {})); var Point = A.Point; })(A || (A = {})); diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js index 9864d9d4eb0..ca069294926 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.js @@ -33,7 +33,7 @@ var Point = (function () { })(); var Point; (function (Point) { - var Origin = ""; + var Origin = ""; // not an error, since not exported })(Point || (Point = {})); var A; (function (A) { @@ -47,7 +47,7 @@ var A; })(); A.Point = Point; (function (Point) { - var Origin = ""; + var Origin = ""; // not an error since not exported })(A.Point || (A.Point = {})); var Point = A.Point; })(A || (A = {})); diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.types b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.types new file mode 100644 index 00000000000..827089847e2 --- /dev/null +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.types @@ -0,0 +1,49 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticVariableAndNonExportedVarThatShareAName.ts === +class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + + static Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + +module Point { +>Point : typeof Point + + var Origin = ""; // not an error, since not exported +>Origin : string +} + + +module A { +>A : typeof A + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + + static Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + } + + export module Point { +>Point : typeof Point + + var Origin = ""; // not an error since not exported +>Origin : string + } +} diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStringIndexerAndExportedFunctionWithTypeIncompatibleWithIndexer.types b/tests/baselines/reference/ClassAndModuleThatMergeWithStringIndexerAndExportedFunctionWithTypeIncompatibleWithIndexer.types new file mode 100644 index 00000000000..4375eaa3ffb --- /dev/null +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStringIndexerAndExportedFunctionWithTypeIncompatibleWithIndexer.types @@ -0,0 +1,3 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStringIndexerAndExportedFunctionWithTypeIncompatibleWithIndexer.ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/ClassAndModuleWithSameNameAndCommonRoot.js b/tests/baselines/reference/ClassAndModuleWithSameNameAndCommonRoot.js index 994da294ea9..3956c9e8828 100644 --- a/tests/baselines/reference/ClassAndModuleWithSameNameAndCommonRoot.js +++ b/tests/baselines/reference/ClassAndModuleWithSameNameAndCommonRoot.js @@ -67,8 +67,9 @@ var X; var Y = X.Y; })(X || (X = {})); //// [test.js] +//var cl: { x: number; y: number; } var cl = new X.Y.Point(1, 1); -var cl = X.Y.Point.Origin; +var cl = X.Y.Point.Origin; // error not expected here same as bug 83996 ? //// [simple.js] var A = (function () { function A() { @@ -79,6 +80,7 @@ var A; (function (A) { A.Instance = new A(); })(A || (A = {})); +// ensure merging works as expected var a = A.Instance; var a = new A(); var a; diff --git a/tests/baselines/reference/EnumAndModuleWithSameNameAndCommonRoot.types b/tests/baselines/reference/EnumAndModuleWithSameNameAndCommonRoot.types new file mode 100644 index 00000000000..3cbd14c78bb --- /dev/null +++ b/tests/baselines/reference/EnumAndModuleWithSameNameAndCommonRoot.types @@ -0,0 +1,43 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/EnumAndModuleWithSameNameAndCommonRoot.ts === +enum enumdule { +>enumdule : enumdule + + Red, Blue +>Red : enumdule +>Blue : enumdule +} + +module enumdule { +>enumdule : typeof enumdule + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } +} + +var x: enumdule; +>x : enumdule +>enumdule : enumdule + +var x = enumdule.Red; +>x : enumdule +>enumdule.Red : enumdule +>enumdule : typeof enumdule +>Red : enumdule + +var y: { x: number; y: number }; +>y : { x: number; y: number; } +>x : number +>y : number + +var y = new enumdule.Point(0, 0); +>y : { x: number; y: number; } +>new enumdule.Point(0, 0) : enumdule.Point +>enumdule.Point : typeof enumdule.Point +>enumdule : typeof enumdule +>Point : typeof enumdule.Point + diff --git a/tests/baselines/reference/ExportAssignment7.errors.txt b/tests/baselines/reference/ExportAssignment7.errors.txt index ff9ff0b050f..ff05fb7eda0 100644 --- a/tests/baselines/reference/ExportAssignment7.errors.txt +++ b/tests/baselines/reference/ExportAssignment7.errors.txt @@ -6,6 +6,6 @@ export = B; ~~~~~~~~~~~ -!!! An export assignment cannot be used in a module with other exported elements. +!!! Cannot find name 'B'. ~~~~~~~~~~~ -!!! Cannot find name 'B'. \ No newline at end of file +!!! An export assignment cannot be used in a module with other exported elements. \ No newline at end of file diff --git a/tests/baselines/reference/ExportAssignment8.errors.txt b/tests/baselines/reference/ExportAssignment8.errors.txt index 96110dc37b8..2f1d1f5b960 100644 --- a/tests/baselines/reference/ExportAssignment8.errors.txt +++ b/tests/baselines/reference/ExportAssignment8.errors.txt @@ -3,9 +3,9 @@ ~~~~~~~~~~~ !!! Cannot compile external modules unless the '--module' flag is provided. ~~~~~~~~~~~ -!!! An export assignment cannot be used in a module with other exported elements. - ~~~~~~~~~~~ !!! Cannot find name 'B'. + ~~~~~~~~~~~ +!!! An export assignment cannot be used in a module with other exported elements. export class C { } \ No newline at end of file diff --git a/tests/baselines/reference/ExportClassWhichExtendsInterfaceWithInaccessibleType.types b/tests/baselines/reference/ExportClassWhichExtendsInterfaceWithInaccessibleType.types new file mode 100644 index 00000000000..6d69109e542 --- /dev/null +++ b/tests/baselines/reference/ExportClassWhichExtendsInterfaceWithInaccessibleType.types @@ -0,0 +1,38 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportClassWhichExtendsInterfaceWithInaccessibleType.ts === +module A { +>A : typeof A + + interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + + fromOrigin(p: Point): number; +>fromOrigin : (p: Point) => number +>p : Point +>Point : Point + } + + export class Point2d implements Point { +>Point2d : Point2d +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + + fromOrigin(p: Point) { +>fromOrigin : (p: Point) => number +>p : Point +>Point : Point + + return 1; + } + } +} + + diff --git a/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types b/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types new file mode 100644 index 00000000000..17b4a25cde3 --- /dev/null +++ b/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types @@ -0,0 +1,50 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.ts === +module A { +>A : typeof A + + export class Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + + export class Point3d extends Point { +>Point3d : Point3d +>Point : Point + + z: number; +>z : number + } + + export var Origin3d: Point3d = { x: 0, y: 0, z: 0 }; +>Origin3d : Point3d +>Point3d : Point3d +>{ x: 0, y: 0, z: 0 } : { x: number; y: number; z: number; } +>x : number +>y : number +>z : number + + export class Line{ +>Line : Line +>TPoint : TPoint +>Point : Point + + constructor(public start: TPoint, public end: TPoint) { } +>start : TPoint +>TPoint : TPoint +>end : TPoint +>TPoint : TPoint + } +} + diff --git a/tests/baselines/reference/ExportClassWithInaccessibleTypeInIndexerTypeAnnotations.types b/tests/baselines/reference/ExportClassWithInaccessibleTypeInIndexerTypeAnnotations.types new file mode 100644 index 00000000000..451db7f92a8 --- /dev/null +++ b/tests/baselines/reference/ExportClassWithInaccessibleTypeInIndexerTypeAnnotations.types @@ -0,0 +1,28 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportClassWithInaccessibleTypeInIndexerTypeAnnotations.ts === +module A { +>A : typeof A + + class Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export class points { +>points : points + + [idx: number]: Point; +>idx : number +>Point : Point + + [idx: string]: Point; +>idx : string +>Point : Point + } +} + + diff --git a/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types b/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types new file mode 100644 index 00000000000..6f4452fce4c --- /dev/null +++ b/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types @@ -0,0 +1,60 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportClassWithInaccessibleTypeInTypeParameterConstraint.ts === +module A { +>A : typeof A + + class Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + + export class Point3d extends Point { +>Point3d : Point3d +>Point : Point + + z: number; +>z : number + } + + export var Origin3d: Point3d = { x: 0, y: 0, z: 0 }; +>Origin3d : Point3d +>Point3d : Point3d +>{ x: 0, y: 0, z: 0 } : { x: number; y: number; z: number; } +>x : number +>y : number +>z : number + + export class Line{ +>Line : Line +>TPoint : TPoint +>Point : Point + + constructor(public start: TPoint, public end: TPoint) { } +>start : TPoint +>TPoint : TPoint +>end : TPoint +>TPoint : TPoint + + static fromorigin2d(p: Point): Line{ +>fromorigin2d : (p: Point) => Line +>p : Point +>Point : Point +>Line : Line +>Point : Point + + return null; + } + } +} + diff --git a/tests/baselines/reference/ExportFunctionWithAccessibleTypesInParameterAndReturnTypeAnnotation.types b/tests/baselines/reference/ExportFunctionWithAccessibleTypesInParameterAndReturnTypeAnnotation.types new file mode 100644 index 00000000000..ac1845a533c --- /dev/null +++ b/tests/baselines/reference/ExportFunctionWithAccessibleTypesInParameterAndReturnTypeAnnotation.types @@ -0,0 +1,39 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportFunctionWithAccessibleTypesInParameterAndReturnTypeAnnotation.ts === +module A { +>A : typeof A + + export class Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export class Line { +>Line : Line + + constructor(public start: Point, public end: Point) { } +>start : Point +>Point : Point +>end : Point +>Point : Point + } + + export function fromOrigin(p: Point): Line { +>fromOrigin : (p: Point) => Line +>p : Point +>Point : Point +>Line : Line + + return new Line({ x: 0, y: 0 }, p); +>new Line({ x: 0, y: 0 }, p) : Line +>Line : typeof Line +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +>p : Point + } +} diff --git a/tests/baselines/reference/ExportFunctionWithInaccessibleTypesInParameterTypeAnnotation.types b/tests/baselines/reference/ExportFunctionWithInaccessibleTypesInParameterTypeAnnotation.types new file mode 100644 index 00000000000..3f3a670ee8e --- /dev/null +++ b/tests/baselines/reference/ExportFunctionWithInaccessibleTypesInParameterTypeAnnotation.types @@ -0,0 +1,39 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportFunctionWithInaccessibleTypesInParameterTypeAnnotation.ts === +module A { +>A : typeof A + + class Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export class Line { +>Line : Line + + constructor(public start: Point, public end: Point) { } +>start : Point +>Point : Point +>end : Point +>Point : Point + } + + export function fromOrigin(p: Point): Line { +>fromOrigin : (p: Point) => Line +>p : Point +>Point : Point +>Line : Line + + return new Line({ x: 0, y: 0 }, p); +>new Line({ x: 0, y: 0 }, p) : Line +>Line : typeof Line +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +>p : Point + } +} diff --git a/tests/baselines/reference/ExportFunctionWithInaccessibleTypesInReturnTypeAnnotation.types b/tests/baselines/reference/ExportFunctionWithInaccessibleTypesInReturnTypeAnnotation.types new file mode 100644 index 00000000000..7634e2cde3e --- /dev/null +++ b/tests/baselines/reference/ExportFunctionWithInaccessibleTypesInReturnTypeAnnotation.types @@ -0,0 +1,39 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportFunctionWithInaccessibleTypesInReturnTypeAnnotation.ts === +module A { +>A : typeof A + + export class Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + class Line { +>Line : Line + + constructor(public start: Point, public end: Point) { } +>start : Point +>Point : Point +>end : Point +>Point : Point + } + + export function fromOrigin(p: Point): Line { +>fromOrigin : (p: Point) => Line +>p : Point +>Point : Point +>Line : Line + + return new Line({ x: 0, y: 0 }, p); +>new Line({ x: 0, y: 0 }, p) : Line +>Line : typeof Line +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +>p : Point + } +} diff --git a/tests/baselines/reference/ExportInterfaceWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types b/tests/baselines/reference/ExportInterfaceWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types new file mode 100644 index 00000000000..f6f4e6a441a --- /dev/null +++ b/tests/baselines/reference/ExportInterfaceWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types @@ -0,0 +1,58 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportInterfaceWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.ts === +module A { +>A : typeof A + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + + export interface Point3d extends Point { +>Point3d : Point3d +>Point : Point + + z: number; +>z : number + } + + export var Origin3d: Point3d = { x: 0, y: 0, z: 0 }; +>Origin3d : Point3d +>Point3d : Point3d +>{ x: 0, y: 0, z: 0 } : { x: number; y: number; z: number; } +>x : number +>y : number +>z : number + + export interface Line{ +>Line : Line +>TPoint : TPoint +>Point : Point + + new (start: TPoint, end: TPoint); +>start : TPoint +>TPoint : TPoint +>end : TPoint +>TPoint : TPoint + + start: TPoint; +>start : TPoint +>TPoint : TPoint + + end: TPoint; +>end : TPoint +>TPoint : TPoint + } +} + diff --git a/tests/baselines/reference/ExportInterfaceWithInaccessibleTypeInIndexerTypeAnnotations.types b/tests/baselines/reference/ExportInterfaceWithInaccessibleTypeInIndexerTypeAnnotations.types new file mode 100644 index 00000000000..6caed8a138a --- /dev/null +++ b/tests/baselines/reference/ExportInterfaceWithInaccessibleTypeInIndexerTypeAnnotations.types @@ -0,0 +1,28 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportInterfaceWithInaccessibleTypeInIndexerTypeAnnotations.ts === +module A { +>A : unknown + + interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export interface points { +>points : points + + [idx: number]: Point; +>idx : number +>Point : Point + + [idx: string]: Point; +>idx : string +>Point : Point + } +} + + diff --git a/tests/baselines/reference/ExportInterfaceWithInaccessibleTypeInTypeParameterConstraint.types b/tests/baselines/reference/ExportInterfaceWithInaccessibleTypeInTypeParameterConstraint.types new file mode 100644 index 00000000000..53484780474 --- /dev/null +++ b/tests/baselines/reference/ExportInterfaceWithInaccessibleTypeInTypeParameterConstraint.types @@ -0,0 +1,58 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportInterfaceWithInaccessibleTypeInTypeParameterConstraint.ts === +module A { +>A : typeof A + + interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + + export interface Point3d extends Point { +>Point3d : Point3d +>Point : Point + + z: number; +>z : number + } + + export var Origin3d: Point3d = { x: 0, y: 0, z: 0 }; +>Origin3d : Point3d +>Point3d : Point3d +>{ x: 0, y: 0, z: 0 } : { x: number; y: number; z: number; } +>x : number +>y : number +>z : number + + export interface Line{ +>Line : Line +>TPoint : TPoint +>Point : Point + + new (start: TPoint, end: TPoint); +>start : TPoint +>TPoint : TPoint +>end : TPoint +>TPoint : TPoint + + start: TPoint; +>start : TPoint +>TPoint : TPoint + + end: TPoint; +>end : TPoint +>TPoint : TPoint + } +} + diff --git a/tests/baselines/reference/ExportModuleWithAccessibleTypesOnItsExportedMembers.types b/tests/baselines/reference/ExportModuleWithAccessibleTypesOnItsExportedMembers.types new file mode 100644 index 00000000000..a3a80cb06ad --- /dev/null +++ b/tests/baselines/reference/ExportModuleWithAccessibleTypesOnItsExportedMembers.types @@ -0,0 +1,48 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportModuleWithAccessibleTypesOnItsExportedMembers.ts === +module A { +>A : typeof A + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } + + export module B { +>B : typeof B + + export var Origin: Point = new Point(0, 0); +>Origin : Point +>Point : Point +>new Point(0, 0) : Point +>Point : typeof Point + + export class Line { +>Line : Line + + constructor(start: Point, end: Point) { +>start : Point +>Point : Point +>end : Point +>Point : Point + + } + + static fromOrigin(p: Point) { +>fromOrigin : (p: Point) => Line +>p : Point +>Point : Point + + return new Line({ x: 0, y: 0 }, p); +>new Line({ x: 0, y: 0 }, p) : Line +>Line : typeof Line +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +>p : Point + } + } + } +} diff --git a/tests/baselines/reference/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInMemberTypeAnnotations.types b/tests/baselines/reference/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInMemberTypeAnnotations.types new file mode 100644 index 00000000000..82bdf732173 --- /dev/null +++ b/tests/baselines/reference/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInMemberTypeAnnotations.types @@ -0,0 +1,30 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInMemberTypeAnnotations.ts === +module A { +>A : typeof A + + class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } + + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + + export var Unity = { start: new Point(0, 0), end: new Point(1, 0) }; +>Unity : { start: Point; end: Point; } +>{ start: new Point(0, 0), end: new Point(1, 0) } : { start: Point; end: Point; } +>start : Point +>new Point(0, 0) : Point +>Point : typeof Point +>end : Point +>new Point(1, 0) : Point +>Point : typeof Point +} + diff --git a/tests/baselines/reference/ExportVariableOfGenericTypeWithInaccessibleTypeAsTypeArgument.types b/tests/baselines/reference/ExportVariableOfGenericTypeWithInaccessibleTypeAsTypeArgument.types new file mode 100644 index 00000000000..46084e85632 --- /dev/null +++ b/tests/baselines/reference/ExportVariableOfGenericTypeWithInaccessibleTypeAsTypeArgument.types @@ -0,0 +1,22 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportVariableOfGenericTypeWithInaccessibleTypeAsTypeArgument.ts === +module A { +>A : typeof A + + class B { +>B : B + + id: number; +>id : number + } + + export var beez: Array; +>beez : B[] +>Array : T[] +>B : B + + export var beez2 = new Array(); +>beez2 : B[] +>new Array() : B[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } +>B : B +} diff --git a/tests/baselines/reference/ExportVariableWithAccessibleTypeInTypeAnnotation.js b/tests/baselines/reference/ExportVariableWithAccessibleTypeInTypeAnnotation.js index e23d7ae1456..591845b627e 100644 --- a/tests/baselines/reference/ExportVariableWithAccessibleTypeInTypeAnnotation.js +++ b/tests/baselines/reference/ExportVariableWithAccessibleTypeInTypeAnnotation.js @@ -14,5 +14,6 @@ module A { //// [ExportVariableWithAccessibleTypeInTypeAnnotation.js] var A; (function (A) { + // valid since Point is exported A.Origin = { x: 0, y: 0 }; })(A || (A = {})); diff --git a/tests/baselines/reference/ExportVariableWithAccessibleTypeInTypeAnnotation.types b/tests/baselines/reference/ExportVariableWithAccessibleTypeInTypeAnnotation.types new file mode 100644 index 00000000000..945a4be6fe5 --- /dev/null +++ b/tests/baselines/reference/ExportVariableWithAccessibleTypeInTypeAnnotation.types @@ -0,0 +1,23 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportVariableWithAccessibleTypeInTypeAnnotation.ts === +module A { +>A : typeof A + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + // valid since Point is exported + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + diff --git a/tests/baselines/reference/ExportVariableWithInaccessibleTypeInTypeAnnotation.js b/tests/baselines/reference/ExportVariableWithInaccessibleTypeInTypeAnnotation.js index f6e60e3f4ab..d63edb65569 100644 --- a/tests/baselines/reference/ExportVariableWithInaccessibleTypeInTypeAnnotation.js +++ b/tests/baselines/reference/ExportVariableWithInaccessibleTypeInTypeAnnotation.js @@ -21,6 +21,8 @@ module A { //// [ExportVariableWithInaccessibleTypeInTypeAnnotation.js] var A; (function (A) { + // valid since Point is exported A.Origin = { x: 0, y: 0 }; + // invalid Point3d is not exported A.Origin3d = { x: 0, y: 0, z: 0 }; })(A || (A = {})); diff --git a/tests/baselines/reference/ExportVariableWithInaccessibleTypeInTypeAnnotation.types b/tests/baselines/reference/ExportVariableWithInaccessibleTypeInTypeAnnotation.types new file mode 100644 index 00000000000..9ae05f87416 --- /dev/null +++ b/tests/baselines/reference/ExportVariableWithInaccessibleTypeInTypeAnnotation.types @@ -0,0 +1,40 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportVariableWithInaccessibleTypeInTypeAnnotation.ts === +module A { +>A : typeof A + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + // valid since Point is exported + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + + interface Point3d extends Point { +>Point3d : Point3d +>Point : Point + + z: number; +>z : number + } + + // invalid Point3d is not exported + export var Origin3d: Point3d = { x: 0, y: 0, z: 0 }; +>Origin3d : Point3d +>Point3d : Point3d +>{ x: 0, y: 0, z: 0 } : { x: number; y: number; z: number; } +>x : number +>y : number +>z : number +} + diff --git a/tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.js b/tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.js index e0ea0bd07ce..0e34a18c48b 100644 --- a/tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.js +++ b/tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.js @@ -64,7 +64,7 @@ var fn; var fn = A.Point; var cl; var cl = A.Point(); -var cl = A.Point.Origin; +var cl = A.Point.Origin; // not expected to be an error. //// [simple.js] var B; (function (B) { @@ -78,7 +78,7 @@ var B; var Point = B.Point; })(B || (B = {})); var fn; -var fn = B.Point; +var fn = B.Point; // not expected to be an error. bug 840000: [corelang] Function of fundule not assignalbe as expected var cl; var cl = B.Point(); var cl = B.Point.Origin; diff --git a/tests/baselines/reference/FunctionAndModuleWithSameNameAndDifferentCommonRoot.types b/tests/baselines/reference/FunctionAndModuleWithSameNameAndDifferentCommonRoot.types new file mode 100644 index 00000000000..879088f93df --- /dev/null +++ b/tests/baselines/reference/FunctionAndModuleWithSameNameAndDifferentCommonRoot.types @@ -0,0 +1,54 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/function.ts === +module A { +>A : typeof A + + export function Point() { +>Point : () => { x: number; y: number; } + + return { x: 0, y: 0 }; +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/module.ts === +module B { +>B : typeof B + + export module Point { +>Point : typeof Point + + export var Origin = { x: 0, y: 0 }; +>Origin : { x: number; y: number; } +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/test.ts === +var fn: () => { x: number; y: number }; +>fn : () => { x: number; y: number; } +>x : number +>y : number + +var fn = A.Point; +>fn : () => { x: number; y: number; } +>A.Point : () => { x: number; y: number; } +>A : typeof A +>Point : () => { x: number; y: number; } + +var cl: { x: number; y: number; } +>cl : { x: number; y: number; } +>x : number +>y : number + +var cl = B.Point.Origin; +>cl : { x: number; y: number; } +>B.Point.Origin : { x: number; y: number; } +>B.Point : typeof B.Point +>B : typeof B +>Point : typeof B.Point +>Origin : { x: number; y: number; } + diff --git a/tests/baselines/reference/InvalidNonInstantiatedModule.js b/tests/baselines/reference/InvalidNonInstantiatedModule.js index 0f6c7fe62cb..54c0f7a42ab 100644 --- a/tests/baselines/reference/InvalidNonInstantiatedModule.js +++ b/tests/baselines/reference/InvalidNonInstantiatedModule.js @@ -9,5 +9,5 @@ var x: typeof M; // Error only a namespace //// [InvalidNonInstantiatedModule.js] -var m = M; -var x; +var m = M; // Error, not instantiated can not be used as var +var x; // Error only a namespace diff --git a/tests/baselines/reference/ModuleAndClassWithSameNameAndCommonRoot.js b/tests/baselines/reference/ModuleAndClassWithSameNameAndCommonRoot.js index 5a7def7ab70..00b8384722a 100644 --- a/tests/baselines/reference/ModuleAndClassWithSameNameAndCommonRoot.js +++ b/tests/baselines/reference/ModuleAndClassWithSameNameAndCommonRoot.js @@ -46,6 +46,7 @@ var X; var X; (function (X) { (function (Y) { + // duplicate identifier var Point = (function () { function Point(x, y) { this.x = x; @@ -62,6 +63,7 @@ var A; (function (A) { A.Instance = new A(); })(A || (A = {})); +// duplicate identifier var A = (function () { function A() { } diff --git a/tests/baselines/reference/ModuleAndEnumWithSameNameAndCommonRoot.types b/tests/baselines/reference/ModuleAndEnumWithSameNameAndCommonRoot.types new file mode 100644 index 00000000000..023511c8c4d --- /dev/null +++ b/tests/baselines/reference/ModuleAndEnumWithSameNameAndCommonRoot.types @@ -0,0 +1,43 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/ModuleAndEnumWithSameNameAndCommonRoot.ts === +module enumdule { +>enumdule : typeof enumdule + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } +} + +enum enumdule { +>enumdule : enumdule + + Red, Blue +>Red : enumdule +>Blue : enumdule +} + +var x: enumdule; +>x : enumdule +>enumdule : enumdule + +var x = enumdule.Red; +>x : enumdule +>enumdule.Red : enumdule +>enumdule : typeof enumdule +>Red : enumdule + +var y: { x: number; y: number }; +>y : { x: number; y: number; } +>x : number +>y : number + +var y = new enumdule.Point(0, 0); +>y : { x: number; y: number; } +>new enumdule.Point(0, 0) : enumdule.Point +>enumdule.Point : typeof enumdule.Point +>enumdule : typeof enumdule +>Point : typeof enumdule.Point + diff --git a/tests/baselines/reference/ModuleAndFunctionWithSameNameAndCommonRoot.js b/tests/baselines/reference/ModuleAndFunctionWithSameNameAndCommonRoot.js index 2dd9f25a3b5..d70f8dcf0b3 100644 --- a/tests/baselines/reference/ModuleAndFunctionWithSameNameAndCommonRoot.js +++ b/tests/baselines/reference/ModuleAndFunctionWithSameNameAndCommonRoot.js @@ -40,6 +40,7 @@ var A; //// [function.js] var A; (function (A) { + // duplicate identifier error function Point() { return { x: 0, y: 0 }; } @@ -52,6 +53,7 @@ var B; Point.Origin = { x: 0, y: 0 }; })(B.Point || (B.Point = {})); var Point = B.Point; + // duplicate identifier error function Point() { return { x: 0, y: 0 }; } diff --git a/tests/baselines/reference/ModuleWithExportedAndNonExportedClasses.js b/tests/baselines/reference/ModuleWithExportedAndNonExportedClasses.js index 590bf1bb794..7555ae217e5 100644 --- a/tests/baselines/reference/ModuleWithExportedAndNonExportedClasses.js +++ b/tests/baselines/reference/ModuleWithExportedAndNonExportedClasses.js @@ -59,8 +59,10 @@ var A; return AG2; })(); })(A || (A = {})); +// no errors expected, these are all exported var a; var a = new A.A(); var AG = new A.AG(); +// errors expected, these are not exported var a2 = new A.A2(); var ag2 = new A.A2(); diff --git a/tests/baselines/reference/ModuleWithExportedAndNonExportedEnums.js b/tests/baselines/reference/ModuleWithExportedAndNonExportedEnums.js index 6a147257323..afcef6bbb5c 100644 --- a/tests/baselines/reference/ModuleWithExportedAndNonExportedEnums.js +++ b/tests/baselines/reference/ModuleWithExportedAndNonExportedEnums.js @@ -25,5 +25,7 @@ var A; Day[Day["Tuesday"] = 1] = "Tuesday"; })(Day || (Day = {})); })(A || (A = {})); +// not an error since exported var a = 0 /* Red */; +// error not exported var b = A.Day.Monday; diff --git a/tests/baselines/reference/ModuleWithExportedAndNonExportedFunctions.js b/tests/baselines/reference/ModuleWithExportedAndNonExportedFunctions.js index 35b5959bfcd..ed0e1f90bf3 100644 --- a/tests/baselines/reference/ModuleWithExportedAndNonExportedFunctions.js +++ b/tests/baselines/reference/ModuleWithExportedAndNonExportedFunctions.js @@ -47,9 +47,11 @@ var A; return null; } })(A || (A = {})); +// these should not be errors since the functions are exported var fn; var fn = A.fn; var fng; -var fng = A.fng; +var fng = A.fng; // bug 838015 +// these should be errors since the functions are not exported var fn2 = A.fn2; var fng2 = A.fng2; diff --git a/tests/baselines/reference/ModuleWithExportedAndNonExportedImportAlias.js b/tests/baselines/reference/ModuleWithExportedAndNonExportedImportAlias.js index 101031740cc..e31ca5d5885 100644 --- a/tests/baselines/reference/ModuleWithExportedAndNonExportedImportAlias.js +++ b/tests/baselines/reference/ModuleWithExportedAndNonExportedImportAlias.js @@ -55,11 +55,14 @@ var Geometry; (function (Geometry) { var Lines = B; Geometry.Origin = { x: 0, y: 0 }; + // this is valid since B.Line _is_ visible outside Geometry Geometry.Unit = new Lines.Line(Geometry.Origin, { x: 1, y: 0 }); })(Geometry || (Geometry = {})); +// expected to work since all are exported var p; var p; var p = Geometry.Origin; var line; var line = Geometry.Unit; +// not expected to work since non are exported var line = Geometry.Lines.Line; diff --git a/tests/baselines/reference/ModuleWithExportedAndNonExportedVariables.js b/tests/baselines/reference/ModuleWithExportedAndNonExportedVariables.js index 2563aafd95a..0a2c63342c6 100644 --- a/tests/baselines/reference/ModuleWithExportedAndNonExportedVariables.js +++ b/tests/baselines/reference/ModuleWithExportedAndNonExportedVariables.js @@ -20,4 +20,5 @@ var A; })(A || (A = {})); var x; var x = A.x; +// Error, since y is not exported var y = A.y; diff --git a/tests/baselines/reference/ParameterList7.js b/tests/baselines/reference/ParameterList7.js index 725baa0740e..76adf8352b9 100644 --- a/tests/baselines/reference/ParameterList7.js +++ b/tests/baselines/reference/ParameterList7.js @@ -9,6 +9,6 @@ class C1 { var C1 = (function () { function C1(p3) { this.p3 = p3; - } + } // OK return C1; })(); diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.js b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.js index 670c15add79..20347e54e83 100644 --- a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.js +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.js @@ -61,6 +61,7 @@ var A; return Point; })(); })(A || (A = {})); +// ensure merges as expected var p; var p; var X; @@ -92,5 +93,6 @@ var X; })(X.Y || (X.Y = {})); var Y = X.Y; })(X || (X = {})); +// ensure merges as expected var l; var l; diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.types b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.types new file mode 100644 index 00000000000..a856b699dd5 --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.types @@ -0,0 +1,97 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedAndNonExportedClassesOfTheSameName.ts === +module A { +>A : typeof A + + export class Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } +} + +module A { +>A : typeof A + + class Point { +>Point : Point + + fromCarthesian(p: A.Point) { +>fromCarthesian : (p: A.Point) => { x: number; y: number; } +>p : A.Point +>A : unknown +>Point : A.Point + + return { x: p.x, y: p.y }; +>{ x: p.x, y: p.y } : { x: number; y: number; } +>x : number +>p.x : number +>p : A.Point +>x : number +>y : number +>p.y : number +>p : A.Point +>y : number + } + } +} + +// ensure merges as expected +var p: { x: number; y: number; }; +>p : { x: number; y: number; } +>x : number +>y : number + +var p: A.Point; +>p : { x: number; y: number; } +>A : unknown +>Point : A.Point + +module X.Y.Z { +>X : typeof X +>Y : typeof Y +>Z : typeof Z + + export class Line { +>Line : Line + + length: number; +>length : number + } +} + +module X { +>X : typeof X + + export module Y { +>Y : typeof Y + + export module Z { +>Z : typeof Z + + class Line { +>Line : Line + + name: string; +>name : string + } + } + } +} + +// ensure merges as expected +var l: { length: number; } +>l : { length: number; } +>length : number + +var l: X.Y.Z.Line; +>l : { length: number; } +>X : unknown +>Y : unknown +>Z : unknown +>Line : X.Y.Z.Line + + diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.js b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.js index d18d8fe7a26..b9218ea1a55 100644 --- a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.js +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.js @@ -38,7 +38,9 @@ var l: X.Y.Z.Line; //// [TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.js] +// ensure merges as expected var p; var p; +// ensure merges as expected var l; var l; diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.types b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.types new file mode 100644 index 00000000000..a8fc56495dd --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.types @@ -0,0 +1,103 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.ts === +module A { +>A : unknown + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + + toCarth(): Point; +>toCarth : () => Point +>Point : Point + } +} + +module A { +>A : unknown + + interface Point { +>Point : Point + + fromCarth(): Point; +>fromCarth : () => Point +>Point : Point + } +} + +// ensure merges as expected +var p: { x: number; y: number; toCarth(): A.Point; }; +>p : { x: number; y: number; toCarth(): A.Point; } +>x : number +>y : number +>toCarth : () => A.Point +>A : unknown +>Point : A.Point + +var p: A.Point; +>p : { x: number; y: number; toCarth(): A.Point; } +>A : unknown +>Point : A.Point + +module X.Y.Z { +>X : unknown +>Y : unknown +>Z : unknown + + export interface Line { +>Line : Line + + new (start: A.Point, end: A.Point); +>start : A.Point +>A : unknown +>Point : A.Point +>end : A.Point +>A : unknown +>Point : A.Point + } +} + +module X { +>X : unknown + + export module Y.Z { +>Y : unknown +>Z : unknown + + interface Line { +>Line : Line + + start: A.Point; +>start : A.Point +>A : unknown +>Point : A.Point + + end: A.Point; +>end : A.Point +>A : unknown +>Point : A.Point + } + } +} + +// ensure merges as expected +var l: { new (s: A.Point, e: A.Point); } +>l : new (s: A.Point, e: A.Point) => any +>s : A.Point +>A : unknown +>Point : A.Point +>e : A.Point +>A : unknown +>Point : A.Point + +var l: X.Y.Z.Line; +>l : new (s: A.Point, e: A.Point) => any +>X : unknown +>Y : unknown +>Z : unknown +>Line : X.Y.Z.Line + diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedLocalVarsOfTheSameName.js b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedLocalVarsOfTheSameName.js index 809b4e64896..c845dbe8705 100644 --- a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedLocalVarsOfTheSameName.js +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedLocalVarsOfTheSameName.js @@ -56,6 +56,7 @@ var A; //// [part2.js] var A; (function (A) { + // not a collision, since we don't export var Origin = "0,0"; (function (Utils) { var Plane = (function () { @@ -70,6 +71,7 @@ var A; var Utils = A.Utils; })(A || (A = {})); //// [part3.js] +// test the merging actually worked var o; var o; var o = A.Origin; diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedLocalVarsOfTheSameName.types b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedLocalVarsOfTheSameName.types new file mode 100644 index 00000000000..003fb5fa15a --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedLocalVarsOfTheSameName.types @@ -0,0 +1,125 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/part1.ts === +module A { +>A : typeof A + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export module Utils { +>Utils : typeof Utils + + export function mirror(p: T) { +>mirror : (p: T) => { x: number; y: number; } +>T : T +>Point : Point +>p : T +>T : T + + return { x: p.y, y: p.x }; +>{ x: p.y, y: p.x } : { x: number; y: number; } +>x : number +>p.y : number +>p : T +>y : number +>y : number +>p.x : number +>p : T +>x : number + } + } + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/part2.ts === +module A { +>A : typeof A + + // not a collision, since we don't export + var Origin: string = "0,0"; +>Origin : string + + export module Utils { +>Utils : typeof Utils + + export class Plane { +>Plane : Plane + + constructor(public tl: Point, public br: Point) { } +>tl : Point +>Point : Point +>br : Point +>Point : Point + } + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/part3.ts === +// test the merging actually worked + +var o: { x: number; y: number }; +>o : { x: number; y: number; } +>x : number +>y : number + +var o: A.Point; +>o : { x: number; y: number; } +>A : unknown +>Point : A.Point + +var o = A.Origin; +>o : { x: number; y: number; } +>A.Origin : A.Point +>A : typeof A +>Origin : A.Point + +var o = A.Utils.mirror(o); +>o : { x: number; y: number; } +>A.Utils.mirror(o) : { x: number; y: number; } +>A.Utils.mirror : (p: T) => { x: number; y: number; } +>A.Utils : typeof A.Utils +>A : typeof A +>Utils : typeof A.Utils +>mirror : (p: T) => { x: number; y: number; } +>o : { x: number; y: number; } + +var p: { tl: A.Point; br: A.Point }; +>p : { tl: A.Point; br: A.Point; } +>tl : A.Point +>A : unknown +>Point : A.Point +>br : A.Point +>A : unknown +>Point : A.Point + +var p: A.Utils.Plane; +>p : { tl: A.Point; br: A.Point; } +>A : unknown +>Utils : unknown +>Plane : A.Utils.Plane + +var p = new A.Utils.Plane(o, { x: 1, y: 1 }); +>p : { tl: A.Point; br: A.Point; } +>new A.Utils.Plane(o, { x: 1, y: 1 }) : A.Utils.Plane +>A.Utils.Plane : typeof A.Utils.Plane +>A.Utils : typeof A.Utils +>A : typeof A +>Utils : typeof A.Utils +>Plane : typeof A.Utils.Plane +>o : { x: number; y: number; } +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>y : number + + diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.js b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.js index 485ce1b8288..5bcc1473675 100644 --- a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.js +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.js @@ -44,6 +44,7 @@ var A; })(A || (A = {})); var A; (function (A) { + // expected error var Point = (function () { function Point() { } @@ -70,6 +71,7 @@ var X; (function (X) { (function (Y) { (function (Z) { + // expected error var Line = (function () { function Line() { } diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.js b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.js index 0f77987ee92..b54a0938a32 100644 --- a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.js +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.js @@ -38,7 +38,9 @@ var l: X.Y.Z.Line; //// [TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.js] +// ensure merges as expected var p; var p; +// ensure merges as expected var l; var l; diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.types b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.types new file mode 100644 index 00000000000..c54ad5f3ad9 --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.types @@ -0,0 +1,112 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.ts === +module A { +>A : unknown + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + + toCarth(): Point; +>toCarth : () => Point +>Point : Point + } +} + +module A { +>A : unknown + + export interface Point { +>Point : Point + + fromCarth(): Point; +>fromCarth : () => Point +>Point : Point + } +} + +// ensure merges as expected +var p: { x: number; y: number; toCarth(): A.Point; fromCarth(): A.Point; }; +>p : { x: number; y: number; toCarth(): A.Point; fromCarth(): A.Point; } +>x : number +>y : number +>toCarth : () => A.Point +>A : unknown +>Point : A.Point +>fromCarth : () => A.Point +>A : unknown +>Point : A.Point + +var p: A.Point; +>p : { x: number; y: number; toCarth(): A.Point; fromCarth(): A.Point; } +>A : unknown +>Point : A.Point + +module X.Y.Z { +>X : unknown +>Y : unknown +>Z : unknown + + export interface Line { +>Line : Line + + new (start: A.Point, end: A.Point); +>start : A.Point +>A : unknown +>Point : A.Point +>end : A.Point +>A : unknown +>Point : A.Point + } +} + +module X { +>X : unknown + + export module Y.Z { +>Y : unknown +>Z : unknown + + export interface Line { +>Line : Line + + start: A.Point; +>start : A.Point +>A : unknown +>Point : A.Point + + end: A.Point; +>end : A.Point +>A : unknown +>Point : A.Point + } + } +} + +// ensure merges as expected +var l: { start: A.Point; end: A.Point; new (s: A.Point, e: A.Point); } +>l : { new (s: A.Point, e: A.Point): any; start: A.Point; end: A.Point; } +>start : A.Point +>A : unknown +>Point : A.Point +>end : A.Point +>A : unknown +>Point : A.Point +>s : A.Point +>A : unknown +>Point : A.Point +>e : A.Point +>A : unknown +>Point : A.Point + +var l: X.Y.Z.Line; +>l : { new (s: A.Point, e: A.Point): any; start: A.Point; end: A.Point; } +>X : unknown +>Y : unknown +>Z : unknown +>Line : X.Y.Z.Line + diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.js b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.js index 06881ce3ef6..c629923c131 100644 --- a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.js +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.js @@ -49,6 +49,7 @@ var A; B.x; })(B || (B = {})); })(A || (A = {})); +// ensure the right var decl is exported var x; var x = A.B.x; var X; @@ -81,5 +82,6 @@ var X; })(X.Y || (X.Y = {})); var Y = X.Y; })(X || (X = {})); +// make sure merging works as expected var l; var l; diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.types b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.types new file mode 100644 index 00000000000..9232af469ac --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.types @@ -0,0 +1,76 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedModulesOfTheSameName.ts === +module A.B { +>A : typeof A +>B : typeof B + + export var x: number; +>x : number +} + +module A{ +>A : typeof A + + module B { +>B : typeof B + + export var x: string; +>x : string + } +} + +// ensure the right var decl is exported +var x: number; +>x : number + +var x = A.B.x; +>x : number +>A.B.x : number +>A.B : typeof A.B +>A : typeof A +>B : typeof A.B +>x : number + +module X.Y.Z { +>X : typeof X +>Y : typeof Y +>Z : typeof Z + + export class Line { +>Line : Line + + length: number; +>length : number + } +} + +module X { +>X : typeof X + + export module Y { +>Y : typeof Y + + module Z { +>Z : typeof Z + + export class Line { +>Line : Line + + name: string; +>name : string + } + } + } +} + +// make sure merging works as expected +var l: { length: number }; +>l : { length: number; } +>length : number + +var l: X.Y.Z.Line; +>l : { length: number; } +>X : unknown +>Y : unknown +>Z : unknown +>Line : X.Y.Z.Line + diff --git a/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndDifferentCommonRoot.js b/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndDifferentCommonRoot.js index bb44fdfdd37..3af271ed820 100644 --- a/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndDifferentCommonRoot.js +++ b/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndDifferentCommonRoot.js @@ -48,6 +48,7 @@ var Root; var otherRoot; (function (otherRoot) { (function (A) { + // have to be fully qualified since in different root A.Origin = { x: 0, y: 0 }; (function (Utils) { var Plane = (function () { diff --git a/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndDifferentCommonRoot.types b/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndDifferentCommonRoot.types new file mode 100644 index 00000000000..b31bb4b22ac --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndDifferentCommonRoot.types @@ -0,0 +1,78 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/part1.ts === +module Root { +>Root : typeof Root + + export module A { +>A : typeof A + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export module Utils { +>Utils : typeof Utils + + export function mirror(p: T) { +>mirror : (p: T) => { x: number; y: number; } +>T : T +>Point : Point +>p : T +>T : T + + return { x: p.y, y: p.x }; +>{ x: p.y, y: p.x } : { x: number; y: number; } +>x : number +>p.y : number +>p : T +>y : number +>y : number +>p.x : number +>p : T +>x : number + } + } + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/part2.ts === +module otherRoot { +>otherRoot : typeof otherRoot + + export module A { +>A : typeof A + + // have to be fully qualified since in different root + export var Origin: Root.A.Point = { x: 0, y: 0 }; +>Origin : Root.A.Point +>Root : unknown +>A : unknown +>Point : Root.A.Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + + export module Utils { +>Utils : typeof Utils + + export class Plane { +>Plane : Plane + + constructor(public tl: Root.A.Point, public br: Root.A.Point) { } +>tl : Root.A.Point +>Root : unknown +>A : unknown +>Point : Root.A.Point +>br : Root.A.Point +>Root : unknown +>A : unknown +>Point : Root.A.Point + } + } + } +} diff --git a/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndSameCommonRoot.js b/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndSameCommonRoot.js index ae716b2db55..07350eba553 100644 --- a/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndSameCommonRoot.js +++ b/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndSameCommonRoot.js @@ -67,6 +67,7 @@ var A; var Utils = A.Utils; })(A || (A = {})); //// [part3.js] +// test the merging actually worked var o; var o; var o = A.Origin; diff --git a/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndSameCommonRoot.types b/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndSameCommonRoot.types new file mode 100644 index 00000000000..b13cbde5522 --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesWithTheSameNameAndSameCommonRoot.types @@ -0,0 +1,122 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/part1.ts === +module A { +>A : typeof A + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + + export module Utils { +>Utils : typeof Utils + + export function mirror(p: T) { +>mirror : (p: T) => { x: number; y: number; } +>T : T +>Point : Point +>p : T +>T : T + + return { x: p.y, y: p.x }; +>{ x: p.y, y: p.x } : { x: number; y: number; } +>x : number +>p.y : number +>p : T +>y : number +>y : number +>p.x : number +>p : T +>x : number + } + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/part2.ts === +module A { +>A : typeof A + + export var Origin: Point = { x: 0, y: 0 }; +>Origin : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + + export module Utils { +>Utils : typeof Utils + + export class Plane { +>Plane : Plane + + constructor(public tl: Point, public br: Point) { } +>tl : Point +>Point : Point +>br : Point +>Point : Point + } + } +} + +=== tests/cases/conformance/internalModules/DeclarationMerging/part3.ts === +// test the merging actually worked + +var o: { x: number; y: number }; +>o : { x: number; y: number; } +>x : number +>y : number + +var o: A.Point; +>o : { x: number; y: number; } +>A : unknown +>Point : A.Point + +var o = A.Origin; +>o : { x: number; y: number; } +>A.Origin : A.Point +>A : typeof A +>Origin : A.Point + +var o = A.Utils.mirror(o); +>o : { x: number; y: number; } +>A.Utils.mirror(o) : { x: number; y: number; } +>A.Utils.mirror : (p: T) => { x: number; y: number; } +>A.Utils : typeof A.Utils +>A : typeof A +>Utils : typeof A.Utils +>mirror : (p: T) => { x: number; y: number; } +>o : { x: number; y: number; } + +var p: { tl: A.Point; br: A.Point }; +>p : { tl: A.Point; br: A.Point; } +>tl : A.Point +>A : unknown +>Point : A.Point +>br : A.Point +>A : unknown +>Point : A.Point + +var p: A.Utils.Plane; +>p : { tl: A.Point; br: A.Point; } +>A : unknown +>Utils : unknown +>Plane : A.Utils.Plane + +var p = new A.Utils.Plane(o, { x: 1, y: 1 }); +>p : { tl: A.Point; br: A.Point; } +>new A.Utils.Plane(o, { x: 1, y: 1 }) : A.Utils.Plane +>A.Utils.Plane : typeof A.Utils.Plane +>A.Utils : typeof A.Utils +>A : typeof A +>Utils : typeof A.Utils +>Plane : typeof A.Utils.Plane +>o : { x: number; y: number; } +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>y : number + + diff --git a/tests/baselines/reference/TypeArgumentList1.errors.txt b/tests/baselines/reference/TypeArgumentList1.errors.txt new file mode 100644 index 00000000000..6c1a300f5a5 --- /dev/null +++ b/tests/baselines/reference/TypeArgumentList1.errors.txt @@ -0,0 +1,12 @@ +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/TypeArgumentList1.ts (5 errors) ==== + Foo(4, 5, 6); + +!!! Invalid character. + ~~~ +!!! Cannot find name 'Foo'. + ~ +!!! Cannot find name 'A'. + ~ +!!! Cannot find name 'B'. + ~ +!!! Cannot find name 'C'. \ No newline at end of file diff --git a/tests/baselines/reference/acceptableAlias1.types b/tests/baselines/reference/acceptableAlias1.types new file mode 100644 index 00000000000..213e5ad5bc3 --- /dev/null +++ b/tests/baselines/reference/acceptableAlias1.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/acceptableAlias1.ts === +module M { +>M : typeof M + + export module N { +>N : unknown + } + export import X = N; +>X : unknown +>N : unknown +} + +import r = M.X; +>r : unknown +>M : typeof M +>X : unknown + diff --git a/tests/baselines/reference/accessOverriddenBaseClassMember1.types b/tests/baselines/reference/accessOverriddenBaseClassMember1.types new file mode 100644 index 00000000000..15007cebf4c --- /dev/null +++ b/tests/baselines/reference/accessOverriddenBaseClassMember1.types @@ -0,0 +1,54 @@ +=== tests/cases/compiler/accessOverriddenBaseClassMember1.ts === +class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + + public toString() { +>toString : () => string + + return "x=" + this.x + " y=" + this.y; +>"x=" + this.x + " y=" + this.y : string +>"x=" + this.x + " y=" : string +>"x=" + this.x : string +>this.x : number +>this : Point +>x : number +>this.y : number +>this : Point +>y : number + } +} +class ColoredPoint extends Point { +>ColoredPoint : ColoredPoint +>Point : Point + + constructor(x: number, y: number, public color: string) { +>x : number +>y : number +>color : string + + super(x, y); +>super(x, y) : void +>super : typeof Point +>x : number +>y : number + } + public toString() { +>toString : () => string + + return super.toString() + " color=" + this.color; +>super.toString() + " color=" + this.color : string +>super.toString() + " color=" : string +>super.toString() : string +>super.toString : () => string +>super : Point +>toString : () => string +>this.color : string +>this : ColoredPoint +>color : string + } +} + diff --git a/tests/baselines/reference/accessorWithES5.types b/tests/baselines/reference/accessorWithES5.types new file mode 100644 index 00000000000..9d4976dd91a --- /dev/null +++ b/tests/baselines/reference/accessorWithES5.types @@ -0,0 +1,37 @@ +=== tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithES5.ts === + +class C { +>C : C + + get x() { +>x : number + + return 1; + } +} + +class D { +>D : D + + set x(v) { +>x : any +>v : any + } +} + +var x = { +>x : { a: number; } +>{ get a() { return 1 }} : { a: number; } + + get a() { return 1 } +>a : number +} + +var y = { +>y : { b: any; } +>{ set b(v) { }} : { b: any; } + + set b(v) { } +>b : any +>v : any +} diff --git a/tests/baselines/reference/addMoreCallSignaturesToBaseSignature.types b/tests/baselines/reference/addMoreCallSignaturesToBaseSignature.types new file mode 100644 index 00000000000..212186ace77 --- /dev/null +++ b/tests/baselines/reference/addMoreCallSignaturesToBaseSignature.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/addMoreCallSignaturesToBaseSignature.ts === +interface Foo { +>Foo : Foo + + (): string; +} + +interface Bar extends Foo { +>Bar : Bar +>Foo : Foo + + (key: string): string; +>key : string +} + +var a: Bar; +>a : Bar +>Bar : Bar + +var kitty = a(); +>kitty : string +>a() : string +>a : Bar + diff --git a/tests/baselines/reference/addMoreCallSignaturesToBaseSignature2.types b/tests/baselines/reference/addMoreCallSignaturesToBaseSignature2.types new file mode 100644 index 00000000000..a80986c8cd1 --- /dev/null +++ b/tests/baselines/reference/addMoreCallSignaturesToBaseSignature2.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/addMoreCallSignaturesToBaseSignature2.ts === +interface Foo { +>Foo : Foo + + (bar:number): string; +>bar : number +} + +interface Bar extends Foo { +>Bar : Bar +>Foo : Foo + + (key: string): string; +>key : string +} + +var a: Bar; +>a : Bar +>Bar : Bar + +var kitty = a(1); +>kitty : string +>a(1) : string +>a : Bar + diff --git a/tests/baselines/reference/additionOperatorWithAnyAndEveryType.js b/tests/baselines/reference/additionOperatorWithAnyAndEveryType.js index b6fa51ae5de..c4e30f95db2 100644 --- a/tests/baselines/reference/additionOperatorWithAnyAndEveryType.js +++ b/tests/baselines/reference/additionOperatorWithAnyAndEveryType.js @@ -64,15 +64,18 @@ var b; var c; var d; var e; +// any as left operand, result is type Any except plusing string var r1 = a + a; var r2 = a + b; var r3 = a + c; var r4 = a + d; var r5 = a + e; +// any as right operand, result is type Any except plusing string var r6 = b + a; var r7 = c + a; var r8 = d + a; var r9 = e + a; +// other cases var r10 = a + foo; var r11 = a + foo(); var r12 = a + C; diff --git a/tests/baselines/reference/additionOperatorWithAnyAndEveryType.types b/tests/baselines/reference/additionOperatorWithAnyAndEveryType.types new file mode 100644 index 00000000000..da534c68ad6 --- /dev/null +++ b/tests/baselines/reference/additionOperatorWithAnyAndEveryType.types @@ -0,0 +1,168 @@ +=== tests/cases/conformance/expressions/binaryOperators/additionOperator/additionOperatorWithAnyAndEveryType.ts === +function foo() { } +>foo : () => void + +class C { +>C : C + + public a: string; +>a : string + + static foo() { } +>foo : () => void +} +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +module M { export var a } +>M : typeof M +>a : any + +var a: any; +>a : any + +var b: boolean; +>b : boolean + +var c: number; +>c : number + +var d: string; +>d : string + +var e: Object; +>e : Object +>Object : Object + +// any as left operand, result is type Any except plusing string +var r1 = a + a; +>r1 : any +>a + a : any +>a : any +>a : any + +var r2 = a + b; +>r2 : any +>a + b : any +>a : any +>b : boolean + +var r3 = a + c; +>r3 : any +>a + c : any +>a : any +>c : number + +var r4 = a + d; +>r4 : string +>a + d : string +>a : any +>d : string + +var r5 = a + e; +>r5 : any +>a + e : any +>a : any +>e : Object + +// any as right operand, result is type Any except plusing string +var r6 = b + a; +>r6 : any +>b + a : any +>b : boolean +>a : any + +var r7 = c + a; +>r7 : any +>c + a : any +>c : number +>a : any + +var r8 = d + a; +>r8 : string +>d + a : string +>d : string +>a : any + +var r9 = e + a; +>r9 : any +>e + a : any +>e : Object +>a : any + +// other cases +var r10 = a + foo; +>r10 : any +>a + foo : any +>a : any +>foo : () => void + +var r11 = a + foo(); +>r11 : any +>a + foo() : any +>a : any +>foo() : void +>foo : () => void + +var r12 = a + C; +>r12 : any +>a + C : any +>a : any +>C : typeof C + +var r13 = a + new C(); +>r13 : any +>a + new C() : any +>a : any +>new C() : C +>C : typeof C + +var r14 = a + E; +>r14 : any +>a + E : any +>a : any +>E : typeof E + +var r15 = a + E.a; +>r15 : any +>a + E.a : any +>a : any +>E.a : E +>E : typeof E +>a : E + +var r16 = a + M; +>r16 : any +>a + M : any +>a : any +>M : typeof M + +var r17 = a + ''; +>r17 : string +>a + '' : string +>a : any + +var r18 = a + 123; +>r18 : any +>a + 123 : any +>a : any + +var r19 = a + { a: '' }; +>r19 : any +>a + { a: '' } : any +>a : any +>{ a: '' } : { a: string; } +>a : string + +var r20 = a + ((a: string) => { return a }); +>r20 : any +>a + ((a: string) => { return a }) : any +>a : any +>((a: string) => { return a }) : (a: string) => string +>(a: string) => { return a } : (a: string) => string +>a : string +>a : string + diff --git a/tests/baselines/reference/additionOperatorWithInvalidOperands.js b/tests/baselines/reference/additionOperatorWithInvalidOperands.js index 038094a64dd..baf4fadedb3 100644 --- a/tests/baselines/reference/additionOperatorWithInvalidOperands.js +++ b/tests/baselines/reference/additionOperatorWithInvalidOperands.js @@ -64,15 +64,19 @@ var a; var b; var c; var d; +// boolean + every type except any and string var r1 = a + a; var r2 = a + b; var r3 = a + c; +// number + every type except any and string var r4 = b + a; -var r5 = b + b; +var r5 = b + b; // number + number is valid var r6 = b + c; +// object + every type except any and string var r7 = c + a; var r8 = c + b; var r9 = c + c; +// other cases var r10 = a + true; var r11 = true + false; var r12 = true + 123; diff --git a/tests/baselines/reference/additionOperatorWithNullValueAndInvalidOperator.js b/tests/baselines/reference/additionOperatorWithNullValueAndInvalidOperator.js index 61ac4a9fc88..979d9a6cdb9 100644 --- a/tests/baselines/reference/additionOperatorWithNullValueAndInvalidOperator.js +++ b/tests/baselines/reference/additionOperatorWithNullValueAndInvalidOperator.js @@ -24,6 +24,7 @@ var r10 = null + foo(); var r11 = null + (() => { }); //// [additionOperatorWithNullValueAndInvalidOperator.js] +// If one operand is the null or undefined value, it is treated as having the type of the other operand. function foo() { return undefined; } @@ -31,12 +32,14 @@ var a; var b; var c; var d; +// null + boolean/Object var r1 = null + a; var r2 = null + b; var r3 = null + c; var r4 = a + null; var r5 = b + null; var r6 = null + c; +// other cases var r7 = null + d; var r8 = null + true; var r9 = null + { a: '' }; diff --git a/tests/baselines/reference/additionOperatorWithNullValueAndValidOperator.js b/tests/baselines/reference/additionOperatorWithNullValueAndValidOperator.js index ed3d2b6a992..f34ac61d86d 100644 --- a/tests/baselines/reference/additionOperatorWithNullValueAndValidOperator.js +++ b/tests/baselines/reference/additionOperatorWithNullValueAndValidOperator.js @@ -31,6 +31,7 @@ var r15 = d + null; var r16 = '' + null; //// [additionOperatorWithNullValueAndValidOperator.js] +// If one operand is the null or undefined value, it is treated as having the type of the other operand. var E; (function (E) { E[E["a"] = 0] = "a"; @@ -41,8 +42,10 @@ var a; var b; var c; var d; +// null + any var r1 = null + a; var r2 = a + null; +// null + number/enum var r3 = null + b; var r4 = null + 1; var r5 = null + c; @@ -53,6 +56,7 @@ var r9 = 1 + null; var r10 = c + null; var r11 = 0 /* a */ + null; var r12 = E['a'] + null; +// null + string var r13 = null + d; var r14 = null + ''; var r15 = d + null; diff --git a/tests/baselines/reference/additionOperatorWithNullValueAndValidOperator.types b/tests/baselines/reference/additionOperatorWithNullValueAndValidOperator.types new file mode 100644 index 00000000000..4dade89f5e4 --- /dev/null +++ b/tests/baselines/reference/additionOperatorWithNullValueAndValidOperator.types @@ -0,0 +1,107 @@ +=== tests/cases/conformance/expressions/binaryOperators/additionOperator/additionOperatorWithNullValueAndValidOperator.ts === +// If one operand is the null or undefined value, it is treated as having the type of the other operand. + +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a: any; +>a : any + +var b: number; +>b : number + +var c: E; +>c : E +>E : E + +var d: string; +>d : string + +// null + any +var r1: any = null + a; +>r1 : any +>null + a : any +>a : any + +var r2: any = a + null; +>r2 : any +>a + null : any +>a : any + +// null + number/enum +var r3 = null + b; +>r3 : number +>null + b : number +>b : number + +var r4 = null + 1; +>r4 : number +>null + 1 : number + +var r5 = null + c; +>r5 : number +>null + c : number +>c : E + +var r6 = null + E.a; +>r6 : number +>null + E.a : number +>E.a : E +>E : typeof E +>a : E + +var r7 = null + E['a']; +>r7 : number +>null + E['a'] : number +>E['a'] : E +>E : typeof E + +var r8 = b + null; +>r8 : number +>b + null : number +>b : number + +var r9 = 1 + null; +>r9 : number +>1 + null : number + +var r10 = c + null +>r10 : number +>c + null : number +>c : E + +var r11 = E.a + null; +>r11 : number +>E.a + null : number +>E.a : E +>E : typeof E +>a : E + +var r12 = E['a'] + null; +>r12 : number +>E['a'] + null : number +>E['a'] : E +>E : typeof E + +// null + string +var r13 = null + d; +>r13 : string +>null + d : string +>d : string + +var r14 = null + ''; +>r14 : string +>null + '' : string + +var r15 = d + null; +>r15 : string +>d + null : string +>d : string + +var r16 = '' + null; +>r16 : string +>'' + null : string + diff --git a/tests/baselines/reference/additionOperatorWithNumberAndEnum.types b/tests/baselines/reference/additionOperatorWithNumberAndEnum.types new file mode 100644 index 00000000000..268f74b69ff --- /dev/null +++ b/tests/baselines/reference/additionOperatorWithNumberAndEnum.types @@ -0,0 +1,67 @@ +=== tests/cases/conformance/expressions/binaryOperators/additionOperator/additionOperatorWithNumberAndEnum.ts === +enum E { a, b } +>E : E +>a : E +>b : E + +var a: number; +>a : number + +var b: E; +>b : E +>E : E + +var r1 = a + a; +>r1 : number +>a + a : number +>a : number +>a : number + +var r2 = a + b; +>r2 : number +>a + b : number +>a : number +>b : E + +var r3 = b + a; +>r3 : number +>b + a : number +>b : E +>a : number + +var r4 = b + b; +>r4 : number +>b + b : number +>b : E +>b : E + +var r5 = 0 + a; +>r5 : number +>0 + a : number +>a : number + +var r6 = E.a + 0; +>r6 : number +>E.a + 0 : number +>E.a : E +>E : typeof E +>a : E + +var r7 = E.a + E.b; +>r7 : number +>E.a + E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var r8 = E['a'] + E['b']; +>r8 : number +>E['a'] + E['b'] : number +>E['a'] : E +>E : typeof E +>E['b'] : E +>E : typeof E + diff --git a/tests/baselines/reference/additionOperatorWithOnlyNullValueOrUndefinedValue.js b/tests/baselines/reference/additionOperatorWithOnlyNullValueOrUndefinedValue.js index 4e1200d876b..1ed9b3e9708 100644 --- a/tests/baselines/reference/additionOperatorWithOnlyNullValueOrUndefinedValue.js +++ b/tests/baselines/reference/additionOperatorWithOnlyNullValueOrUndefinedValue.js @@ -6,6 +6,7 @@ var r3 = undefined + null; var r4 = undefined + undefined; //// [additionOperatorWithOnlyNullValueOrUndefinedValue.js] +// bug 819721 var r1 = null + null; var r2 = null + undefined; var r3 = undefined + null; diff --git a/tests/baselines/reference/additionOperatorWithStringAndEveryType.js b/tests/baselines/reference/additionOperatorWithStringAndEveryType.js index 549ce5aafb1..ecce65ba577 100644 --- a/tests/baselines/reference/additionOperatorWithStringAndEveryType.js +++ b/tests/baselines/reference/additionOperatorWithStringAndEveryType.js @@ -53,6 +53,8 @@ var e; var f; var g; var x; +// string could plus every type, and the result is always string +// string as left operand var r1 = x + a; var r2 = x + b; var r3 = x + c; @@ -60,6 +62,7 @@ var r4 = x + d; var r5 = x + e; var r6 = x + f; var r7 = x + g; +// string as right operand var r8 = a + x; var r9 = b + x; var r10 = c + x; @@ -67,6 +70,7 @@ var r11 = d + x; var r12 = e + x; var r13 = f + x; var r14 = g + x; +// other cases var r15 = x + E; var r16 = x + 0 /* a */; var r17 = x + ''; diff --git a/tests/baselines/reference/additionOperatorWithStringAndEveryType.types b/tests/baselines/reference/additionOperatorWithStringAndEveryType.types new file mode 100644 index 00000000000..9d5a926c427 --- /dev/null +++ b/tests/baselines/reference/additionOperatorWithStringAndEveryType.types @@ -0,0 +1,158 @@ +=== tests/cases/conformance/expressions/binaryOperators/additionOperator/additionOperatorWithStringAndEveryType.ts === +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a: any; +>a : any + +var b: boolean; +>b : boolean + +var c: number; +>c : number + +var d: string; +>d : string + +var e: Object; +>e : Object +>Object : Object + +var f: void; +>f : void + +var g: E; +>g : E +>E : E + +var x: string; +>x : string + +// string could plus every type, and the result is always string +// string as left operand +var r1 = x + a; +>r1 : string +>x + a : string +>x : string +>a : any + +var r2 = x + b; +>r2 : string +>x + b : string +>x : string +>b : boolean + +var r3 = x + c; +>r3 : string +>x + c : string +>x : string +>c : number + +var r4 = x + d; +>r4 : string +>x + d : string +>x : string +>d : string + +var r5 = x + e; +>r5 : string +>x + e : string +>x : string +>e : Object + +var r6 = x + f; +>r6 : string +>x + f : string +>x : string +>f : void + +var r7 = x + g; +>r7 : string +>x + g : string +>x : string +>g : E + +// string as right operand +var r8 = a + x; +>r8 : string +>a + x : string +>a : any +>x : string + +var r9 = b + x; +>r9 : string +>b + x : string +>b : boolean +>x : string + +var r10 = c + x; +>r10 : string +>c + x : string +>c : number +>x : string + +var r11 = d + x; +>r11 : string +>d + x : string +>d : string +>x : string + +var r12 = e + x; +>r12 : string +>e + x : string +>e : Object +>x : string + +var r13 = f + x; +>r13 : string +>f + x : string +>f : void +>x : string + +var r14 = g + x; +>r14 : string +>g + x : string +>g : E +>x : string + +// other cases +var r15 = x + E; +>r15 : string +>x + E : string +>x : string +>E : typeof E + +var r16 = x + E.a; +>r16 : string +>x + E.a : string +>x : string +>E.a : E +>E : typeof E +>a : E + +var r17 = x + ''; +>r17 : string +>x + '' : string +>x : string + +var r18 = x + 0; +>r18 : string +>x + 0 : string +>x : string + +var r19 = x + { a: '' }; +>r19 : string +>x + { a: '' } : string +>x : string +>{ a: '' } : { a: string; } +>a : string + +var r20 = x + []; +>r20 : string +>x + [] : string +>x : string +>[] : undefined[] + diff --git a/tests/baselines/reference/additionOperatorWithTypeParameter.js b/tests/baselines/reference/additionOperatorWithTypeParameter.js index d08ac3cc62e..23a6b95b147 100644 --- a/tests/baselines/reference/additionOperatorWithTypeParameter.js +++ b/tests/baselines/reference/additionOperatorWithTypeParameter.js @@ -39,6 +39,7 @@ function foo(t: T, u: U) { } //// [additionOperatorWithTypeParameter.js] +// type parameter type is not a valid operand of addition operator var E; (function (E) { E[E["a"] = 0] = "a"; @@ -52,20 +53,23 @@ function foo(t, u) { var e; var g; var f; - var r1 = t + a; + // type parameter as left operand + var r1 = t + a; // ok, one operand is any var r2 = t + b; var r3 = t + c; - var r4 = t + d; + var r4 = t + d; // ok, one operand is string var r5 = t + e; var r6 = t + g; var r7 = t + f; - var r8 = a + t; + // type parameter as right operand + var r8 = a + t; // ok, one operand is any var r9 = b + t; var r10 = c + t; - var r11 = d + t; + var r11 = d + t; // ok, one operand is string var r12 = e + t; var r13 = g + t; var r14 = f + t; + // other cases var r15 = t + null; var r16 = t + undefined; var r17 = t + t; diff --git a/tests/baselines/reference/additionOperatorWithUndefinedValueAndInvalidOperands.js b/tests/baselines/reference/additionOperatorWithUndefinedValueAndInvalidOperands.js index 4eb72595851..2b7fd9a6c8c 100644 --- a/tests/baselines/reference/additionOperatorWithUndefinedValueAndInvalidOperands.js +++ b/tests/baselines/reference/additionOperatorWithUndefinedValueAndInvalidOperands.js @@ -24,6 +24,7 @@ var r10 = undefined + foo(); var r11 = undefined + (() => { }); //// [additionOperatorWithUndefinedValueAndInvalidOperands.js] +// If one operand is the null or undefined value, it is treated as having the type of the other operand. function foo() { return undefined; } @@ -31,12 +32,14 @@ var a; var b; var c; var d; +// undefined + boolean/Object var r1 = undefined + a; var r2 = undefined + b; var r3 = undefined + c; var r4 = a + undefined; var r5 = b + undefined; var r6 = undefined + c; +// other cases var r7 = undefined + d; var r8 = undefined + true; var r9 = undefined + { a: '' }; diff --git a/tests/baselines/reference/additionOperatorWithUndefinedValueAndValidOperator.js b/tests/baselines/reference/additionOperatorWithUndefinedValueAndValidOperator.js index a5d3037ae38..a6a1b2ef555 100644 --- a/tests/baselines/reference/additionOperatorWithUndefinedValueAndValidOperator.js +++ b/tests/baselines/reference/additionOperatorWithUndefinedValueAndValidOperator.js @@ -31,6 +31,7 @@ var r15 = d + undefined; var r16 = '' + undefined; //// [additionOperatorWithUndefinedValueAndValidOperator.js] +// If one operand is the null or undefined value, it is treated as having the type of the other operand. var E; (function (E) { E[E["a"] = 0] = "a"; @@ -41,8 +42,10 @@ var a; var b; var c; var d; +// undefined + any var r1 = undefined + a; var r2 = a + undefined; +// undefined + number/enum var r3 = undefined + b; var r4 = undefined + 1; var r5 = undefined + c; @@ -53,6 +56,7 @@ var r9 = 1 + undefined; var r10 = c + undefined; var r11 = 0 /* a */ + undefined; var r12 = E['a'] + undefined; +// undefined + string var r13 = undefined + d; var r14 = undefined + ''; var r15 = d + undefined; diff --git a/tests/baselines/reference/additionOperatorWithUndefinedValueAndValidOperator.types b/tests/baselines/reference/additionOperatorWithUndefinedValueAndValidOperator.types new file mode 100644 index 00000000000..9a67b25024c --- /dev/null +++ b/tests/baselines/reference/additionOperatorWithUndefinedValueAndValidOperator.types @@ -0,0 +1,123 @@ +=== tests/cases/conformance/expressions/binaryOperators/additionOperator/additionOperatorWithUndefinedValueAndValidOperator.ts === +// If one operand is the null or undefined value, it is treated as having the type of the other operand. + +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a: any; +>a : any + +var b: number; +>b : number + +var c: E; +>c : E +>E : E + +var d: string; +>d : string + +// undefined + any +var r1: any = undefined + a; +>r1 : any +>undefined + a : any +>undefined : undefined +>a : any + +var r2: any = a + undefined; +>r2 : any +>a + undefined : any +>a : any +>undefined : undefined + +// undefined + number/enum +var r3 = undefined + b; +>r3 : number +>undefined + b : number +>undefined : undefined +>b : number + +var r4 = undefined + 1; +>r4 : number +>undefined + 1 : number +>undefined : undefined + +var r5 = undefined + c; +>r5 : number +>undefined + c : number +>undefined : undefined +>c : E + +var r6 = undefined + E.a; +>r6 : number +>undefined + E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var r7 = undefined + E['a']; +>r7 : number +>undefined + E['a'] : number +>undefined : undefined +>E['a'] : E +>E : typeof E + +var r8 = b + undefined; +>r8 : number +>b + undefined : number +>b : number +>undefined : undefined + +var r9 = 1 + undefined; +>r9 : number +>1 + undefined : number +>undefined : undefined + +var r10 = c + undefined +>r10 : number +>c + undefined : number +>c : E +>undefined : undefined + +var r11 = E.a + undefined; +>r11 : number +>E.a + undefined : number +>E.a : E +>E : typeof E +>a : E +>undefined : undefined + +var r12 = E['a'] + undefined; +>r12 : number +>E['a'] + undefined : number +>E['a'] : E +>E : typeof E +>undefined : undefined + +// undefined + string +var r13 = undefined + d; +>r13 : string +>undefined + d : string +>undefined : undefined +>d : string + +var r14 = undefined + ''; +>r14 : string +>undefined + '' : string +>undefined : undefined + +var r15 = d + undefined; +>r15 : string +>d + undefined : string +>d : string +>undefined : undefined + +var r16 = '' + undefined; +>r16 : string +>'' + undefined : string +>undefined : undefined + diff --git a/tests/baselines/reference/aliasAssignments.js b/tests/baselines/reference/aliasAssignments.js index 6e9a98c85d1..a019d03f990 100644 --- a/tests/baselines/reference/aliasAssignments.js +++ b/tests/baselines/reference/aliasAssignments.js @@ -23,6 +23,6 @@ exports.someClass = someClass; //// [aliasAssignments_1.js] var moduleA = require("aliasAssignments_moduleA"); var x = moduleA; -x = 1; +x = 1; // Should be error var y = 1; -y = moduleA; +y = moduleA; // should be error diff --git a/tests/baselines/reference/aliasBug.js b/tests/baselines/reference/aliasBug.js index a8320d2ec9d..21c130413ae 100644 --- a/tests/baselines/reference/aliasBug.js +++ b/tests/baselines/reference/aliasBug.js @@ -46,7 +46,7 @@ var provide = foo; var booz = foo.bar.baz; var p = new provide.Provide(); function use() { - var p1; + var p1; // error here, but should be okay var p2; var p3; var p22 = new provide.Provide(); diff --git a/tests/baselines/reference/aliasOnMergedModuleInterface.js b/tests/baselines/reference/aliasOnMergedModuleInterface.js index 73f0b3de6ce..2bd80be8634 100644 --- a/tests/baselines/reference/aliasOnMergedModuleInterface.js +++ b/tests/baselines/reference/aliasOnMergedModuleInterface.js @@ -24,5 +24,5 @@ var x: foo.A = foo.bar("hello"); // foo.A should be ok but foo.bar should be err //// [aliasOnMergedModuleInterface_0.js] //// [aliasOnMergedModuleInterface_1.js] var z; -z.bar("hello"); -var x = foo.bar("hello"); +z.bar("hello"); // This should be ok +var x = foo.bar("hello"); // foo.A should be ok but foo.bar should be error diff --git a/tests/baselines/reference/aliasUsageInAccessorsOfClass.types b/tests/baselines/reference/aliasUsageInAccessorsOfClass.types new file mode 100644 index 00000000000..c300ae861ac --- /dev/null +++ b/tests/baselines/reference/aliasUsageInAccessorsOfClass.types @@ -0,0 +1,60 @@ +=== tests/cases/compiler/aliasUsage1_main.ts === +import Backbone = require("aliasUsage1_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsage1_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +class C2 { +>C2 : C2 + + x: IHasVisualizationModel; +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel + + get A() { +>A : IHasVisualizationModel + + return this.x; +>this.x : IHasVisualizationModel +>this : C2 +>x : IHasVisualizationModel + } + set A(x) { +>A : IHasVisualizationModel +>x : IHasVisualizationModel + + x = moduleA; +>x = moduleA : typeof moduleA +>x : IHasVisualizationModel +>moduleA : typeof moduleA + } +} +=== tests/cases/compiler/aliasUsage1_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsage1_moduleA.ts === +import Backbone = require("aliasUsage1_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInArray.types b/tests/baselines/reference/aliasUsageInArray.types new file mode 100644 index 00000000000..df657233f90 --- /dev/null +++ b/tests/baselines/reference/aliasUsageInArray.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/aliasUsageInArray_main.ts === +import Backbone = require("aliasUsageInArray_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInArray_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} + +var xs: IHasVisualizationModel[] = [moduleA]; +>xs : IHasVisualizationModel[] +>IHasVisualizationModel : IHasVisualizationModel +>[moduleA] : IHasVisualizationModel[] +>moduleA : typeof moduleA + +var xs2: typeof moduleA[] = [moduleA]; +>xs2 : typeof moduleA[] +>moduleA : typeof moduleA +>[moduleA] : typeof moduleA[] +>moduleA : typeof moduleA + +=== tests/cases/compiler/aliasUsageInArray_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInArray_moduleA.ts === +import Backbone = require("aliasUsageInArray_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInFunctionExpression.types b/tests/baselines/reference/aliasUsageInFunctionExpression.types new file mode 100644 index 00000000000..ba66a0f1c7c --- /dev/null +++ b/tests/baselines/reference/aliasUsageInFunctionExpression.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/aliasUsageInFunctionExpression_main.ts === +import Backbone = require("aliasUsageInFunctionExpression_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInFunctionExpression_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +var f = (x: IHasVisualizationModel) => x; +>f : (x: IHasVisualizationModel) => IHasVisualizationModel +>(x: IHasVisualizationModel) => x : (x: IHasVisualizationModel) => IHasVisualizationModel +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>x : IHasVisualizationModel + +f = (x) => moduleA; +>f = (x) => moduleA : (x: IHasVisualizationModel) => typeof moduleA +>f : (x: IHasVisualizationModel) => IHasVisualizationModel +>(x) => moduleA : (x: IHasVisualizationModel) => typeof moduleA +>x : IHasVisualizationModel +>moduleA : typeof moduleA + +=== tests/cases/compiler/aliasUsageInFunctionExpression_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInFunctionExpression_moduleA.ts === +import Backbone = require("aliasUsageInFunctionExpression_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInGenericFunction.types b/tests/baselines/reference/aliasUsageInGenericFunction.types new file mode 100644 index 00000000000..cf63eba6a61 --- /dev/null +++ b/tests/baselines/reference/aliasUsageInGenericFunction.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/aliasUsageInGenericFunction_main.ts === +import Backbone = require("aliasUsageInGenericFunction_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInGenericFunction_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +function foo(x: T) { +>foo : (x: T) => T +>T : T +>a : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>x : T +>T : T + + return x; +>x : T +} +var r = foo({ a: moduleA }); +>r : { a: typeof moduleA; } +>foo({ a: moduleA }) : { a: typeof moduleA; } +>foo : (x: T) => T +>{ a: moduleA } : { a: typeof moduleA; } +>a : typeof moduleA +>moduleA : typeof moduleA + +var r2 = foo({ a: null }); +>r2 : { a: IHasVisualizationModel; } +>foo({ a: null }) : { a: IHasVisualizationModel; } +>foo : (x: T) => T +>{ a: null } : { a: IHasVisualizationModel; } +>a : IHasVisualizationModel +>null : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel + +=== tests/cases/compiler/aliasUsageInGenericFunction_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInGenericFunction_moduleA.ts === +import Backbone = require("aliasUsageInGenericFunction_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInIndexerOfClass.types b/tests/baselines/reference/aliasUsageInIndexerOfClass.types new file mode 100644 index 00000000000..cc4b2377099 --- /dev/null +++ b/tests/baselines/reference/aliasUsageInIndexerOfClass.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/aliasUsageInIndexerOfClass_main.ts === +import Backbone = require("aliasUsageInIndexerOfClass_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInIndexerOfClass_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +class N { +>N : N + + [idx: string]: IHasVisualizationModel +>idx : string +>IHasVisualizationModel : IHasVisualizationModel + + x = moduleA; +>x : typeof moduleA +>moduleA : typeof moduleA +} +class N2 { +>N2 : N2 + + [idx: string]: typeof moduleA +>idx : string +>moduleA : typeof moduleA + + x: IHasVisualizationModel; +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +} +=== tests/cases/compiler/aliasUsageInIndexerOfClass_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInIndexerOfClass_moduleA.ts === +import Backbone = require("aliasUsageInIndexerOfClass_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInObjectLiteral.types b/tests/baselines/reference/aliasUsageInObjectLiteral.types new file mode 100644 index 00000000000..b34a4300c52 --- /dev/null +++ b/tests/baselines/reference/aliasUsageInObjectLiteral.types @@ -0,0 +1,62 @@ +=== tests/cases/compiler/aliasUsageInObjectLiteral_main.ts === +import Backbone = require("aliasUsageInObjectLiteral_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInObjectLiteral_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +var a: { x: typeof moduleA } = { x: moduleA }; +>a : { x: typeof moduleA; } +>x : typeof moduleA +>moduleA : typeof moduleA +>{ x: moduleA } : { x: typeof moduleA; } +>x : typeof moduleA +>moduleA : typeof moduleA + +var b: { x: IHasVisualizationModel } = { x: moduleA }; +>b : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>{ x: moduleA } : { x: typeof moduleA; } +>x : typeof moduleA +>moduleA : typeof moduleA + +var c: { y: { z: IHasVisualizationModel } } = { y: { z: moduleA } }; +>c : { y: { z: IHasVisualizationModel; }; } +>y : { z: IHasVisualizationModel; } +>z : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>{ y: { z: moduleA } } : { y: { z: typeof moduleA; }; } +>y : { z: typeof moduleA; } +>{ z: moduleA } : { z: typeof moduleA; } +>z : typeof moduleA +>moduleA : typeof moduleA + +=== tests/cases/compiler/aliasUsageInObjectLiteral_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInObjectLiteral_moduleA.ts === +import Backbone = require("aliasUsageInObjectLiteral_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInOrExpression.types b/tests/baselines/reference/aliasUsageInOrExpression.types new file mode 100644 index 00000000000..fdcf0be4479 --- /dev/null +++ b/tests/baselines/reference/aliasUsageInOrExpression.types @@ -0,0 +1,83 @@ +=== tests/cases/compiler/aliasUsageInOrExpression_main.ts === +import Backbone = require("aliasUsageInOrExpression_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInOrExpression_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +var i: IHasVisualizationModel; +>i : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel + +var d1 = i || moduleA; +>d1 : IHasVisualizationModel +>i || moduleA : IHasVisualizationModel +>i : IHasVisualizationModel +>moduleA : typeof moduleA + +var d2: IHasVisualizationModel = i || moduleA; +>d2 : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>i || moduleA : IHasVisualizationModel +>i : IHasVisualizationModel +>moduleA : typeof moduleA + +var d2: IHasVisualizationModel = moduleA || i; +>d2 : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>moduleA || i : IHasVisualizationModel +>moduleA : typeof moduleA +>i : IHasVisualizationModel + +var e: { x: IHasVisualizationModel } = <{ x: IHasVisualizationModel }>null || { x: moduleA }; +>e : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +><{ x: IHasVisualizationModel }>null || { x: moduleA } : { x: IHasVisualizationModel; } +><{ x: IHasVisualizationModel }>null : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>{ x: moduleA } : { x: typeof moduleA; } +>x : typeof moduleA +>moduleA : typeof moduleA + +var f: { x: IHasVisualizationModel } = <{ x: IHasVisualizationModel }>null ? { x: moduleA } : null; +>f : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +><{ x: IHasVisualizationModel }>null ? { x: moduleA } : null : { x: IHasVisualizationModel; } +><{ x: IHasVisualizationModel }>null : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>{ x: moduleA } : { x: typeof moduleA; } +>x : typeof moduleA +>moduleA : typeof moduleA + +=== tests/cases/compiler/aliasUsageInOrExpression_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInOrExpression_moduleA.ts === +import Backbone = require("aliasUsageInOrExpression_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types b/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types new file mode 100644 index 00000000000..e2e8b57b94f --- /dev/null +++ b/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_main.ts === +import Backbone = require("aliasUsageInTypeArgumentOfExtendsClause_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInTypeArgumentOfExtendsClause_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +class C { +>C : C +>T : T +>IHasVisualizationModel : IHasVisualizationModel + + x: T; +>x : T +>T : T +} +class D extends C { +>D : D +>C : C +>IHasVisualizationModel : IHasVisualizationModel + + x = moduleA; +>x : typeof moduleA +>moduleA : typeof moduleA +} +=== tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_moduleA.ts === +import Backbone = require("aliasUsageInTypeArgumentOfExtendsClause_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInVarAssignment.types b/tests/baselines/reference/aliasUsageInVarAssignment.types new file mode 100644 index 00000000000..7ca745b3d23 --- /dev/null +++ b/tests/baselines/reference/aliasUsageInVarAssignment.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/aliasUsageInVarAssignment_main.ts === +import Backbone = require("aliasUsageInVarAssignment_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInVarAssignment_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +var i: IHasVisualizationModel; +>i : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel + +var m: typeof moduleA = i; +>m : typeof moduleA +>moduleA : typeof moduleA +>i : IHasVisualizationModel + +=== tests/cases/compiler/aliasUsageInVarAssignment_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInVarAssignment_moduleA.ts === +import Backbone = require("aliasUsageInVarAssignment_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsedAsNameValue.js b/tests/baselines/reference/aliasUsedAsNameValue.js index af9ab422ab5..4b6debf4c98 100644 --- a/tests/baselines/reference/aliasUsedAsNameValue.js +++ b/tests/baselines/reference/aliasUsedAsNameValue.js @@ -26,8 +26,11 @@ function b(a) { } exports.b = b; //// [aliasUsedAsNameValue_2.js] +/// +/// var mod = require("aliasUsedAsNameValue_0"); var b = require("aliasUsedAsNameValue_1"); exports.a = function () { + //var x = mod.id; // TODO needed hack that mod is loaded b.b(mod); }; diff --git a/tests/baselines/reference/aliasUsedAsNameValue.types b/tests/baselines/reference/aliasUsedAsNameValue.types new file mode 100644 index 00000000000..b8d92f28496 --- /dev/null +++ b/tests/baselines/reference/aliasUsedAsNameValue.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/aliasUsedAsNameValue_2.ts === +/// +/// +import mod = require("aliasUsedAsNameValue_0"); +>mod : typeof mod + +import b = require("aliasUsedAsNameValue_1"); +>b : typeof b + +export var a = function () { +>a : () => void +>function () { //var x = mod.id; // TODO needed hack that mod is loaded b.b(mod);} : () => void + + //var x = mod.id; // TODO needed hack that mod is loaded + b.b(mod); +>b.b(mod) : any +>b.b : (a: any) => any +>b : typeof b +>b : (a: any) => any +>mod : typeof mod +} + +=== tests/cases/compiler/aliasUsedAsNameValue_0.ts === +export var id: number; +>id : number + +=== tests/cases/compiler/aliasUsedAsNameValue_1.ts === +export function b(a: any): any { return null; } +>b : (a: any) => any +>a : any + diff --git a/tests/baselines/reference/ambientClassDeclarationWithExtends.types b/tests/baselines/reference/ambientClassDeclarationWithExtends.types new file mode 100644 index 00000000000..7609856882b --- /dev/null +++ b/tests/baselines/reference/ambientClassDeclarationWithExtends.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/ambientClassDeclarationWithExtends.ts === +declare class A { } +>A : A + +declare class B extends A { } +>B : B +>A : A + diff --git a/tests/baselines/reference/ambientDeclarations.js b/tests/baselines/reference/ambientDeclarations.js index 8d03ac0a600..729ecf7d45e 100644 --- a/tests/baselines/reference/ambientDeclarations.js +++ b/tests/baselines/reference/ambientDeclarations.js @@ -78,5 +78,6 @@ declare module 'external1' { //// [ambientDeclarations.js] var x = E3.B; +// Ambient module members are always exported with or without export keyword var p = M1.x; var q = M1.fn(); diff --git a/tests/baselines/reference/ambientDeclarations.types b/tests/baselines/reference/ambientDeclarations.types new file mode 100644 index 00000000000..38814405521 --- /dev/null +++ b/tests/baselines/reference/ambientDeclarations.types @@ -0,0 +1,168 @@ +=== tests/cases/conformance/ambient/ambientDeclarations.ts === +// Ambient variable without type annotation +declare var n; +>n : any + +// Ambient variable with type annotation +declare var m: string; +>m : string + +// Ambient function with no type annotations +declare function fn1(); +>fn1 : () => any + +// Ambient function with type annotations +declare function fn2(n: string): number; +>fn2 : (n: string) => number +>n : string + +// Ambient function with valid overloads +declare function fn3(n: string): number; +>fn3 : (n: string) => number +>n : string + +declare function fn4(n: number, y: number): string; +>fn4 : (n: number, y: number) => string +>n : number +>y : number + +// Ambient function with optional parameters +declare function fn5(x, y?); +>fn5 : (x: any, y?: any) => any +>x : any +>y : any + +declare function fn6(e?); +>fn6 : (e?: any) => any +>e : any + +declare function fn7(x, y?, ...z); +>fn7 : (x: any, y?: any, ...z: any[]) => any +>x : any +>y : any +>z : any[] + +declare function fn8(y?, ...z: number[]); +>fn8 : (y?: any, ...z: number[]) => any +>y : any +>z : number[] + +declare function fn9(...q: {}[]); +>fn9 : (...q: {}[]) => any +>q : {}[] + +declare function fn10(...q: T[]); +>fn10 : (...q: T[]) => any +>T : T +>q : T[] +>T : T + +// Ambient class +declare class cls { +>cls : cls + + constructor(); + method(): cls; +>method : () => cls +>cls : cls + + static static(p): number; +>static : (p: any) => number +>p : any + + static q; +>q : any + + private fn(); +>fn : () => any + + private static fns(); +>fns : () => any +} + +// Ambient enum +declare enum E1 { +>E1 : E1 + + x, +>x : E1 + + y, +>y : E1 + + z +>z : E1 +} + +// Ambient enum with integer literal initializer +declare enum E2 { +>E2 : E2 + + q, +>q : E2 + + a = 1, +>a : E2 + + b, +>b : E2 + + c = 2, +>c : E2 + + d +>d : E2 +} + +// Ambient enum members are always exported with or without export keyword +declare enum E3 { +>E3 : E3 + + A +>A : E3 +} +declare module E3 { +>E3 : typeof E3 + + var B; +>B : any +} +var x = E3.B; +>x : any +>E3.B : any +>E3 : typeof E3 +>B : any + +// Ambient module +declare module M1 { +>M1 : typeof M1 + + var x; +>x : any + + function fn(): number; +>fn : () => number +} + +// Ambient module members are always exported with or without export keyword +var p = M1.x; +>p : any +>M1.x : any +>M1 : typeof M1 +>x : any + +var q = M1.fn(); +>q : number +>M1.fn() : number +>M1.fn : () => number +>M1 : typeof M1 +>fn : () => number + +// Ambient external module in the global module +// Ambient external module with a string literal name that is a top level external module name +declare module 'external1' { + var q; +>q : any +} + + diff --git a/tests/baselines/reference/ambientEnumElementInitializer1.types b/tests/baselines/reference/ambientEnumElementInitializer1.types new file mode 100644 index 00000000000..da80015cbd5 --- /dev/null +++ b/tests/baselines/reference/ambientEnumElementInitializer1.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/ambientEnumElementInitializer1.ts === +declare enum E { +>E : E + + e = 3 +>e : E +} diff --git a/tests/baselines/reference/ambientEnumElementInitializer2.types b/tests/baselines/reference/ambientEnumElementInitializer2.types new file mode 100644 index 00000000000..cb1414630b9 --- /dev/null +++ b/tests/baselines/reference/ambientEnumElementInitializer2.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/ambientEnumElementInitializer2.ts === +declare enum E { +>E : E + + e = -3 // Negative +>e : E +>-3 : number +} diff --git a/tests/baselines/reference/ambientEnumElementInitializer4.types b/tests/baselines/reference/ambientEnumElementInitializer4.types new file mode 100644 index 00000000000..566c03103a1 --- /dev/null +++ b/tests/baselines/reference/ambientEnumElementInitializer4.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/ambientEnumElementInitializer4.ts === +declare enum E { +>E : E + + e = 0xA +>e : E +} diff --git a/tests/baselines/reference/ambientEnumElementInitializer5.types b/tests/baselines/reference/ambientEnumElementInitializer5.types new file mode 100644 index 00000000000..3b6198f0e24 --- /dev/null +++ b/tests/baselines/reference/ambientEnumElementInitializer5.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/ambientEnumElementInitializer5.ts === +declare enum E { +>E : E + + e = -0xA +>e : E +>-0xA : number +} diff --git a/tests/baselines/reference/ambientEnumElementInitializer6.types b/tests/baselines/reference/ambientEnumElementInitializer6.types new file mode 100644 index 00000000000..3a38fd6912d --- /dev/null +++ b/tests/baselines/reference/ambientEnumElementInitializer6.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/ambientEnumElementInitializer6.ts === +declare module M { +>M : typeof M + + enum E { +>E : E + + e = 3 +>e : E + } +} diff --git a/tests/baselines/reference/ambientExternalModuleReopen.types b/tests/baselines/reference/ambientExternalModuleReopen.types new file mode 100644 index 00000000000..842d634344c --- /dev/null +++ b/tests/baselines/reference/ambientExternalModuleReopen.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/ambientExternalModuleReopen.ts === +declare module "fs" { + var x: string; +>x : string +} +declare module 'fs' { + var y: number; +>y : number +} diff --git a/tests/baselines/reference/ambientExternalModuleWithInternalImportDeclaration.types b/tests/baselines/reference/ambientExternalModuleWithInternalImportDeclaration.types new file mode 100644 index 00000000000..22e4b19fb25 --- /dev/null +++ b/tests/baselines/reference/ambientExternalModuleWithInternalImportDeclaration.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/ambientExternalModuleWithInternalImportDeclaration_1.ts === +/// +import A = require('M'); +>A : typeof A + +var c = new A(); +>c : A +>new A() : A +>A : typeof A + +=== tests/cases/compiler/ambientExternalModuleWithInternalImportDeclaration_0.ts === +declare module 'M' { + module C { +>C : typeof X + + export var f: number; +>f : number + } + class C { +>C : X + + foo(): void; +>foo : () => void + } + import X = C; +>X : typeof X +>C : X + + export = X; +>X : X + +} + diff --git a/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types b/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types new file mode 100644 index 00000000000..0029817400b --- /dev/null +++ b/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/ambientExternalModuleWithoutInternalImportDeclaration_1.ts === +/// +import A = require('M'); +>A : typeof A + +var c = new A(); +>c : A +>new A() : A +>A : typeof A + +=== tests/cases/compiler/ambientExternalModuleWithoutInternalImportDeclaration_0.ts === +declare module 'M' { + module C { +>C : typeof C + + export var f: number; +>f : number + } + class C { +>C : C + + foo(): void; +>foo : () => void + } + export = C; +>C : C + +} + diff --git a/tests/baselines/reference/ambientFundule.types b/tests/baselines/reference/ambientFundule.types new file mode 100644 index 00000000000..edd2290859c --- /dev/null +++ b/tests/baselines/reference/ambientFundule.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/ambientFundule.ts === +declare function f(); +>f : typeof f + +declare module f { var x } +>f : typeof f +>x : any + +declare function f(x); +>f : typeof f +>x : any + diff --git a/tests/baselines/reference/ambientModuleExports.types b/tests/baselines/reference/ambientModuleExports.types new file mode 100644 index 00000000000..3f096afa838 --- /dev/null +++ b/tests/baselines/reference/ambientModuleExports.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/ambientModuleExports.ts === +declare module Foo { +>Foo : typeof Foo + + function a():void; +>a : () => void + + var b:number; +>b : number + + class C {} +>C : C +} + +Foo.a(); +>Foo.a() : void +>Foo.a : () => void +>Foo : typeof Foo +>a : () => void + +Foo.b; +>Foo.b : number +>Foo : typeof Foo +>b : number + +var c = new Foo.C(); +>c : Foo.C +>new Foo.C() : Foo.C +>Foo.C : typeof Foo.C +>Foo : typeof Foo +>C : typeof Foo.C + +declare module Foo2 { +>Foo2 : typeof Foo2 + + export function a(): void; +>a : () => void + + export var b: number; +>b : number + + export class C { } +>C : C +} + +Foo2.a(); +>Foo2.a() : void +>Foo2.a : () => void +>Foo2 : typeof Foo2 +>a : () => void + +Foo2.b; +>Foo2.b : number +>Foo2 : typeof Foo2 +>b : number + +var c2 = new Foo2.C(); +>c2 : Foo2.C +>new Foo2.C() : Foo2.C +>Foo2.C : typeof Foo2.C +>Foo2 : typeof Foo2 +>C : typeof Foo2.C + diff --git a/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types b/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types new file mode 100644 index 00000000000..2708946518f --- /dev/null +++ b/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/ambientModuleWithClassDeclarationWithExtends.ts === +declare module foo { +>foo : typeof foo + + class A { } +>A : A + + class B extends A { } +>B : B +>A : A +} diff --git a/tests/baselines/reference/ambientModules.types b/tests/baselines/reference/ambientModules.types new file mode 100644 index 00000000000..fe0aceef810 --- /dev/null +++ b/tests/baselines/reference/ambientModules.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/ambientModules.ts === +declare module Foo.Bar { export var foo; }; +>Foo : typeof Foo +>Bar : typeof Bar +>foo : any + +Foo.Bar.foo = 5; +>Foo.Bar.foo = 5 : number +>Foo.Bar.foo : any +>Foo.Bar : typeof Foo.Bar +>Foo : typeof Foo +>Bar : typeof Foo.Bar +>foo : any + diff --git a/tests/baselines/reference/ambiguousCallsWhereReturnTypesAgree.js b/tests/baselines/reference/ambiguousCallsWhereReturnTypesAgree.js index 2144c55c3bd..2beabb83d11 100644 --- a/tests/baselines/reference/ambiguousCallsWhereReturnTypesAgree.js +++ b/tests/baselines/reference/ambiguousCallsWhereReturnTypesAgree.js @@ -35,7 +35,7 @@ var TestClass = (function () { TestClass.prototype.bar = function (x) { }; TestClass.prototype.foo = function (x) { - this.bar(x); + this.bar(x); // should not error }; return TestClass; })(); @@ -46,7 +46,7 @@ var TestClass2 = (function () { return 0; }; TestClass2.prototype.foo = function (x) { - return this.bar(x); + return this.bar(x); // should not error }; return TestClass2; })(); diff --git a/tests/baselines/reference/ambiguousCallsWhereReturnTypesAgree.types b/tests/baselines/reference/ambiguousCallsWhereReturnTypesAgree.types new file mode 100644 index 00000000000..4e508ba2df5 --- /dev/null +++ b/tests/baselines/reference/ambiguousCallsWhereReturnTypesAgree.types @@ -0,0 +1,78 @@ +=== tests/cases/compiler/ambiguousCallsWhereReturnTypesAgree.ts === +class TestClass { +>TestClass : TestClass + + public bar(x: string): void; +>bar : { (x: string): void; (x: string[]): void; } +>x : string + + public bar(x: string[]): void; +>bar : { (x: string): void; (x: string[]): void; } +>x : string[] + + public bar(x: any): void { +>bar : { (x: string): void; (x: string[]): void; } +>x : any + + } + + public foo(x: string): void; +>foo : { (x: string): void; (x: string[]): void; } +>x : string + + public foo(x: string[]): void; +>foo : { (x: string): void; (x: string[]): void; } +>x : string[] + + public foo(x: any): void { +>foo : { (x: string): void; (x: string[]): void; } +>x : any + + this.bar(x); // should not error +>this.bar(x) : void +>this.bar : { (x: string): void; (x: string[]): void; } +>this : TestClass +>bar : { (x: string): void; (x: string[]): void; } +>x : any + } +} + +class TestClass2 { +>TestClass2 : TestClass2 + + public bar(x: string): number; +>bar : { (x: string): number; (x: string[]): number; } +>x : string + + public bar(x: string[]): number; +>bar : { (x: string): number; (x: string[]): number; } +>x : string[] + + public bar(x: any): number { +>bar : { (x: string): number; (x: string[]): number; } +>x : any + + return 0; + } + + public foo(x: string): number; +>foo : { (x: string): number; (x: string[]): number; } +>x : string + + public foo(x: string[]): number; +>foo : { (x: string): number; (x: string[]): number; } +>x : string[] + + public foo(x: any): number { +>foo : { (x: string): number; (x: string[]): number; } +>x : any + + return this.bar(x); // should not error +>this.bar(x) : number +>this.bar : { (x: string): number; (x: string[]): number; } +>this : TestClass2 +>bar : { (x: string): number; (x: string[]): number; } +>x : any + } +} + diff --git a/tests/baselines/reference/ambiguousOverloadResolution.js b/tests/baselines/reference/ambiguousOverloadResolution.js index 966c9f14628..2d817ba1385 100644 --- a/tests/baselines/reference/ambiguousOverloadResolution.js +++ b/tests/baselines/reference/ambiguousOverloadResolution.js @@ -28,4 +28,4 @@ var B = (function (_super) { return B; })(A); var x; -var t = f(x, x); +var t = f(x, x); // Not an error diff --git a/tests/baselines/reference/ambiguousOverloadResolution.types b/tests/baselines/reference/ambiguousOverloadResolution.types new file mode 100644 index 00000000000..dd42b44d7c3 --- /dev/null +++ b/tests/baselines/reference/ambiguousOverloadResolution.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/ambiguousOverloadResolution.ts === +class A { } +>A : A + +class B extends A { x: number; } +>B : B +>A : A +>x : number + +declare function f(p: A, q: B): number; +>f : { (p: A, q: B): number; (p: B, q: A): string; } +>p : A +>A : A +>q : B +>B : B + +declare function f(p: B, q: A): string; +>f : { (p: A, q: B): number; (p: B, q: A): string; } +>p : B +>B : B +>q : A +>A : A + +var x: B; +>x : B +>B : B + +var t: number = f(x, x); // Not an error +>t : number +>f(x, x) : number +>f : { (p: A, q: B): number; (p: B, q: A): string; } +>x : B +>x : B + diff --git a/tests/baselines/reference/amdDependencyComment1.js b/tests/baselines/reference/amdDependencyComment1.js index 18fa8147e54..ee4ed88ff74 100644 --- a/tests/baselines/reference/amdDependencyComment1.js +++ b/tests/baselines/reference/amdDependencyComment1.js @@ -5,5 +5,6 @@ import m1 = require("m2") m1.f(); //// [amdDependencyComment1.js] +/// var m1 = require("m2"); m1.f(); diff --git a/tests/baselines/reference/amdDependencyComment2.js b/tests/baselines/reference/amdDependencyComment2.js index 835e5921689..137e183017a 100644 --- a/tests/baselines/reference/amdDependencyComment2.js +++ b/tests/baselines/reference/amdDependencyComment2.js @@ -5,6 +5,7 @@ import m1 = require("m2") m1.f(); //// [amdDependencyComment2.js] +/// define(["require", "exports", "m2", "bar"], function (require, exports, m1) { m1.f(); }); diff --git a/tests/baselines/reference/amdImportAsPrimaryExpression.types b/tests/baselines/reference/amdImportAsPrimaryExpression.types new file mode 100644 index 00000000000..f88bc9a1ffe --- /dev/null +++ b/tests/baselines/reference/amdImportAsPrimaryExpression.types @@ -0,0 +1,25 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +if(foo.E1.A === 0){ +>foo.E1.A === 0 : boolean +>foo.E1.A : foo.E1 +>foo.E1 : typeof foo.E1 +>foo : typeof foo +>E1 : typeof foo.E1 +>A : foo.E1 + + // Should cause runtime import - interesting optimization possibility, as gets inlined to 0. +} + +=== tests/cases/conformance/externalModules/foo_0.ts === +export enum E1 { +>E1 : E1 + + A,B,C +>A : E1 +>B : E1 +>C : E1 +} + diff --git a/tests/baselines/reference/amdImportNotAsPrimaryExpression.types b/tests/baselines/reference/amdImportNotAsPrimaryExpression.types new file mode 100644 index 00000000000..bde0cb02b1e --- /dev/null +++ b/tests/baselines/reference/amdImportNotAsPrimaryExpression.types @@ -0,0 +1,82 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +// None of the below should cause a runtime dependency on foo_0 +import f = foo.M1; +>f : unknown +>foo : typeof foo +>M1 : unknown + +var i: f.I2; +>i : f.I2 +>f : unknown +>I2 : f.I2 + +var x: foo.C1 = <{m1: number}>{}; +>x : foo.C1 +>foo : unknown +>C1 : foo.C1 +><{m1: number}>{} : { m1: number; } +>m1 : number +>{} : {} + +var y: typeof foo.C1.s1 = false; +>y : boolean +>foo : typeof foo +>C1 : typeof foo.C1 +>s1 : boolean + +var z: foo.M1.I2; +>z : f.I2 +>foo : unknown +>M1 : unknown +>I2 : f.I2 + +var e: number = 0; +>e : number +>0 : foo.E1 +>foo : unknown +>E1 : foo.E1 + +=== tests/cases/conformance/externalModules/foo_0.ts === +export class C1 { +>C1 : C1 + + m1 = 42; +>m1 : number + + static s1 = true; +>s1 : boolean +} + +export interface I1 { +>I1 : I1 + + name: string; +>name : string + + age: number; +>age : number +} + +export module M1 { +>M1 : unknown + + export interface I2 { +>I2 : I2 + + foo: string; +>foo : string + } +} + +export enum E1 { +>E1 : E1 + + A,B,C +>A : E1 +>B : E1 +>C : E1 +} + diff --git a/tests/baselines/reference/anonterface.types b/tests/baselines/reference/anonterface.types new file mode 100644 index 00000000000..7b5b1401cac --- /dev/null +++ b/tests/baselines/reference/anonterface.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/anonterface.ts === +module M { +>M : typeof M + + export class C { +>C : C + + m(fn:{ (n:number):string; },n2:number):string { +>m : (fn: (n: number) => string, n2: number) => string +>fn : (n: number) => string +>n : number +>n2 : number + + return fn(n2); +>fn(n2) : string +>fn : (n: number) => string +>n2 : number + } + } +} + +var c=new M.C(); +>c : M.C +>new M.C() : M.C +>M.C : typeof M.C +>M : typeof M +>C : typeof M.C + +c.m(function(n) { return "hello: "+n; },18); +>c.m(function(n) { return "hello: "+n; },18) : string +>c.m : (fn: (n: number) => string, n2: number) => string +>c : M.C +>m : (fn: (n: number) => string, n2: number) => string +>function(n) { return "hello: "+n; } : (n: number) => string +>n : number +>"hello: "+n : string +>n : number + + + + diff --git a/tests/baselines/reference/anyAsConstructor.js b/tests/baselines/reference/anyAsConstructor.js index 1924a2bd285..2dfa9a5398b 100644 --- a/tests/baselines/reference/anyAsConstructor.js +++ b/tests/baselines/reference/anyAsConstructor.js @@ -11,8 +11,11 @@ var c = new x(x); var d = new x(x); // no error //// [anyAsConstructor.js] +// any is considered an untyped function call +// can be called except with type arguments which is an error var x; var a = new x(); var b = new x('hello'); var c = new x(x); -var d = new x(x); +// grammar allows this for constructors +var d = new x(x); // no error diff --git a/tests/baselines/reference/anyAsFunctionCall.js b/tests/baselines/reference/anyAsFunctionCall.js index 468c0a98f4d..9b1e0852de9 100644 --- a/tests/baselines/reference/anyAsFunctionCall.js +++ b/tests/baselines/reference/anyAsFunctionCall.js @@ -8,6 +8,8 @@ var b = x('hello'); var c = x(x); //// [anyAsFunctionCall.js] +// any is considered an untyped function call +// can be called except with type arguments which is an error var x; var a = x(); var b = x('hello'); diff --git a/tests/baselines/reference/anyAsFunctionCall.types b/tests/baselines/reference/anyAsFunctionCall.types new file mode 100644 index 00000000000..6492dce37d2 --- /dev/null +++ b/tests/baselines/reference/anyAsFunctionCall.types @@ -0,0 +1,23 @@ +=== tests/cases/conformance/types/any/anyAsFunctionCall.ts === +// any is considered an untyped function call +// can be called except with type arguments which is an error + +var x: any; +>x : any + +var a = x(); +>a : any +>x() : any +>x : any + +var b = x('hello'); +>b : any +>x('hello') : any +>x : any + +var c = x(x); +>c : any +>x(x) : any +>x : any +>x : any + diff --git a/tests/baselines/reference/anyAsGenericFunctionCall.js b/tests/baselines/reference/anyAsGenericFunctionCall.js index 6d61470bd17..64097f4e3c7 100644 --- a/tests/baselines/reference/anyAsGenericFunctionCall.js +++ b/tests/baselines/reference/anyAsGenericFunctionCall.js @@ -11,6 +11,8 @@ var c = x(x); var d = x(x); //// [anyAsGenericFunctionCall.js] +// any is considered an untyped function call +// can be called except with type arguments which is an error var x; var a = x(); var b = x('hello'); diff --git a/tests/baselines/reference/anyAsReturnTypeForNewOnCall.types b/tests/baselines/reference/anyAsReturnTypeForNewOnCall.types new file mode 100644 index 00000000000..f25cd57831b --- /dev/null +++ b/tests/baselines/reference/anyAsReturnTypeForNewOnCall.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/anyAsReturnTypeForNewOnCall.ts === +function Point(x, y) { +>Point : (x: any, y: any) => void +>x : any +>y : any + + this.x = x; +>this.x = x : any +>this.x : any +>this : any +>x : any +>x : any + + this.y = y; +>this.y = y : any +>this.y : any +>this : any +>y : any +>y : any + +} + +var o = new Point(3, 4); +>o : any +>new Point(3, 4) : any +>Point : (x: any, y: any) => void + +var xx = o.x; +>xx : any +>o.x : any +>o : any +>x : any + + + diff --git a/tests/baselines/reference/anyAssignabilityInInheritance.js b/tests/baselines/reference/anyAssignabilityInInheritance.js index 261768e2981..bc9ebb02f42 100644 --- a/tests/baselines/reference/anyAssignabilityInInheritance.js +++ b/tests/baselines/reference/anyAssignabilityInInheritance.js @@ -89,41 +89,42 @@ declare function foo18(x: any): any; var r3 = foo3(a); // any //// [anyAssignabilityInInheritance.js] +// any is not a subtype of any other types, errors expected on all the below derived classes unless otherwise noted var a; -var r3 = foo2(a); -var r3 = foo3(a); -var r3 = foo3(a); -var r3 = foo3(a); -var r3 = foo3(a); -var r3 = foo3(a); -var r3 = foo3(a); -var r3 = foo3(a); +var r3 = foo2(a); // any, not a subtype of number so it skips that overload, is a subtype of itself so it picks second (if truly ambiguous it would pick first overload) +var r3 = foo3(a); // any +var r3 = foo3(a); // any +var r3 = foo3(a); // any +var r3 = foo3(a); // any +var r3 = foo3(a); // any +var r3 = foo3(a); // any +var r3 = foo3(a); // any var A = (function () { function A() { } return A; })(); -var r3 = foo3(a); +var r3 = foo3(a); // any var A2 = (function () { function A2() { } return A2; })(); -var r3 = foo3(a); -var r3 = foo3(a); -var r3 = foo3(a); +var r3 = foo3(a); // any +var r3 = foo3(a); // any +var r3 = foo3(a); // any var E; (function (E) { E[E["A"] = 0] = "A"; })(E || (E = {})); -var r3 = foo3(a); +var r3 = foo3(a); // any function f() { } var f; (function (f) { f.bar = 1; })(f || (f = {})); -var r3 = foo3(a); +var r3 = foo3(a); // any var CC = (function () { function CC() { } @@ -133,6 +134,6 @@ var CC; (function (CC) { CC.bar = 1; })(CC || (CC = {})); -var r3 = foo3(a); -var r3 = foo3(a); -var r3 = foo3(a); +var r3 = foo3(a); // any +var r3 = foo3(a); // any +var r3 = foo3(a); // any diff --git a/tests/baselines/reference/anyAssignabilityInInheritance.types b/tests/baselines/reference/anyAssignabilityInInheritance.types new file mode 100644 index 00000000000..f5a4f22ef3f --- /dev/null +++ b/tests/baselines/reference/anyAssignabilityInInheritance.types @@ -0,0 +1,321 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignabilityInInheritance.ts === +// any is not a subtype of any other types, errors expected on all the below derived classes unless otherwise noted + +interface I { +>I : I + + [x: string]: any; +>x : string + + foo: any; // ok, any identical to itself +>foo : any +} + +var a: any; +>a : any + +declare function foo2(x: number): number; +>foo2 : { (x: number): number; (x: any): any; } +>x : number + +declare function foo2(x: any): any; +>foo2 : { (x: number): number; (x: any): any; } +>x : any + +var r3 = foo2(a); // any, not a subtype of number so it skips that overload, is a subtype of itself so it picks second (if truly ambiguous it would pick first overload) +>r3 : any +>foo2(a) : any +>foo2 : { (x: number): number; (x: any): any; } +>a : any + +declare function foo3(x: string): string; +>foo3 : { (x: string): string; (x: any): any; } +>x : string + +declare function foo3(x: any): any; +>foo3 : { (x: string): string; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo4(x: boolean): boolean; +>foo4 : { (x: boolean): boolean; (x: any): any; } +>x : boolean + +declare function foo4(x: any): any; +>foo4 : { (x: boolean): boolean; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo5(x: Date): Date; +>foo5 : { (x: Date): Date; (x: any): any; } +>x : Date +>Date : Date +>Date : Date + +declare function foo5(x: any): any; +>foo5 : { (x: Date): Date; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo6(x: RegExp): RegExp; +>foo6 : { (x: RegExp): RegExp; (x: any): any; } +>x : RegExp +>RegExp : RegExp +>RegExp : RegExp + +declare function foo6(x: any): any; +>foo6 : { (x: RegExp): RegExp; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo7(x: { bar: number }): { bar: number }; +>foo7 : { (x: { bar: number; }): { bar: number; }; (x: any): any; } +>x : { bar: number; } +>bar : number +>bar : number + +declare function foo7(x: any): any; +>foo7 : { (x: { bar: number; }): { bar: number; }; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo8(x: number[]): number[]; +>foo8 : { (x: number[]): number[]; (x: any): any; } +>x : number[] + +declare function foo8(x: any): any; +>foo8 : { (x: number[]): number[]; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +interface I8 { foo: string } +>I8 : I8 +>foo : string + +declare function foo9(x: I8): I8; +>foo9 : { (x: I8): I8; (x: any): any; } +>x : I8 +>I8 : I8 +>I8 : I8 + +declare function foo9(x: any): any; +>foo9 : { (x: I8): I8; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +class A { foo: number; } +>A : A +>foo : number + +declare function foo10(x: A): A; +>foo10 : { (x: A): A; (x: any): any; } +>x : A +>A : A +>A : A + +declare function foo10(x: any): any; +>foo10 : { (x: A): A; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +class A2 { foo: T; } +>A2 : A2 +>T : T +>foo : T +>T : T + +declare function foo11(x: A2): A2; +>foo11 : { (x: A2): A2; (x: any): any; } +>x : A2 +>A2 : A2 +>A2 : A2 + +declare function foo11(x: any): any; +>foo11 : { (x: A2): A2; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo12(x: (x) => number): (x) => number; +>foo12 : { (x: (x: any) => number): (x: any) => number; (x: any): any; } +>x : (x: any) => number +>x : any +>x : any + +declare function foo12(x: any): any; +>foo12 : { (x: (x: any) => number): (x: any) => number; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo13(x: (x: T) => T): (x: T) => T; +>foo13 : { (x: (x: T) => T): (x: T) => T; (x: any): any; } +>x : (x: T) => T +>T : T +>x : T +>T : T +>T : T +>T : T +>x : T +>T : T +>T : T + +declare function foo13(x: any): any; +>foo13 : { (x: (x: T) => T): (x: T) => T; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +enum E { A } +>E : E +>A : E + +declare function foo14(x: E): E; +>foo14 : { (x: E): E; (x: any): any; } +>x : E +>E : E +>E : E + +declare function foo14(x: any): any; +>foo14 : { (x: E): E; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +function f() { } +>f : typeof f + +module f { +>f : typeof f + + export var bar = 1; +>bar : number +} +declare function foo15(x: typeof f): typeof f; +>foo15 : { (x: typeof f): typeof f; (x: any): any; } +>x : typeof f +>f : typeof f +>f : typeof f + +declare function foo15(x: any): any; +>foo15 : { (x: typeof f): typeof f; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +class CC { baz: string } +>CC : CC +>baz : string + +module CC { +>CC : typeof CC + + export var bar = 1; +>bar : number +} +declare function foo16(x: CC): CC; +>foo16 : { (x: CC): CC; (x: any): any; } +>x : CC +>CC : CC +>CC : CC + +declare function foo16(x: any): any; +>foo16 : { (x: CC): CC; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo17(x: Object): Object; +>foo17 : { (x: Object): Object; (x: any): any; } +>x : Object +>Object : Object +>Object : Object + +declare function foo17(x: any): any; +>foo17 : { (x: Object): Object; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + +declare function foo18(x: {}): {}; +>foo18 : { (x: {}): {}; (x: any): any; } +>x : {} + +declare function foo18(x: any): any; +>foo18 : { (x: {}): {}; (x: any): any; } +>x : any + +var r3 = foo3(a); // any +>r3 : any +>foo3(a) : any +>foo3 : { (x: string): string; (x: any): any; } +>a : any + diff --git a/tests/baselines/reference/anyAssignableToEveryType.types b/tests/baselines/reference/anyAssignableToEveryType.types new file mode 100644 index 00000000000..c2a9b324d96 --- /dev/null +++ b/tests/baselines/reference/anyAssignableToEveryType.types @@ -0,0 +1,156 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/anyAssignableToEveryType.ts === +var a: any; +>a : any + +class C { +>C : C + + foo: string; +>foo : string +} +var ac: C; +>ac : C +>C : C + +interface I { +>I : I + + foo: string; +>foo : string +} +var ai: I; +>ai : I +>I : I + +enum E { A } +>E : E +>A : E + +var ae: E; +>ae : E +>E : E + +var b: number = a; +>b : number +>a : any + +var c: string = a; +>c : string +>a : any + +var d: boolean = a; +>d : boolean +>a : any + +var e: Date = a; +>e : Date +>Date : Date +>a : any + +var f: any = a; +>f : any +>a : any + +var g: void = a; +>g : void +>a : any + +var h: Object = a; +>h : Object +>Object : Object +>a : any + +var i: {} = a; +>i : {} +>a : any + +var j: () => {} = a; +>j : () => {} +>a : any + +var k: Function = a; +>k : Function +>Function : Function +>a : any + +var l: (x: number) => string = a; +>l : (x: number) => string +>x : number +>a : any + +ac = a; +>ac = a : any +>ac : C +>a : any + +ai = a; +>ai = a : any +>ai : I +>a : any + +ae = a; +>ae = a : any +>ae : E +>a : any + +var m: number[] = a; +>m : number[] +>a : any + +var n: { foo: string } = a; +>n : { foo: string; } +>foo : string +>a : any + +var o: (x: T) => T = a; +>o : (x: T) => T +>T : T +>x : T +>T : T +>T : T +>a : any + +var p: Number = a; +>p : Number +>Number : Number +>a : any + +var q: String = a; +>q : String +>String : String +>a : any + +function foo(x: T, y: U, z: V) { +>foo : (x: T, y: U, z: V) => void +>T : T +>U : U +>V : V +>Date : Date +>x : T +>T : T +>y : U +>U : U +>z : V +>V : V + + x = a; +>x = a : any +>x : T +>a : any + + y = a; +>y = a : any +>y : U +>a : any + + z = a; +>z = a : any +>z : V +>a : any +} + +//function foo(x: T, y: U, z: V) { +// x = a; +// y = a; +// z = a; +//} diff --git a/tests/baselines/reference/anyAssignableToEveryType2.js b/tests/baselines/reference/anyAssignableToEveryType2.js index 88eb08d45e7..41cedb73215 100644 --- a/tests/baselines/reference/anyAssignableToEveryType2.js +++ b/tests/baselines/reference/anyAssignableToEveryType2.js @@ -131,6 +131,7 @@ interface I20 { //// [anyAssignableToEveryType2.js] +// any is not a subtype of any other types, but is assignable, all the below should work var A = (function () { function A() { } diff --git a/tests/baselines/reference/anyInferenceAnonymousFunctions.types b/tests/baselines/reference/anyInferenceAnonymousFunctions.types new file mode 100644 index 00000000000..8dc7fdcb90f --- /dev/null +++ b/tests/baselines/reference/anyInferenceAnonymousFunctions.types @@ -0,0 +1,79 @@ +=== tests/cases/compiler/anyInferenceAnonymousFunctions.ts === +var paired: any[]; +>paired : any[] + +paired.reduce(function (a1, a2) { +>paired.reduce(function (a1, a2) { return a1.concat({});} , []) : any +>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any): any; (callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; } +>paired : any[] +>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any): any; (callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; } +>function (a1, a2) { return a1.concat({});} : (a1: any, a2: any) => any +>a1 : any +>a2 : any + + return a1.concat({}); +>a1.concat({}) : any +>a1.concat : any +>a1 : any +>concat : any +>{} : {} + +} , []); +>[] : undefined[] + +paired.reduce((b1, b2) => { +>paired.reduce((b1, b2) => { return b1.concat({});} , []) : any +>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any): any; (callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; } +>paired : any[] +>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any): any; (callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; } +>(b1, b2) => { return b1.concat({});} : (b1: any, b2: any) => any +>b1 : any +>b2 : any + + return b1.concat({}); +>b1.concat({}) : any +>b1.concat : any +>b1 : any +>concat : any +>{} : {} + +} , []); +>[] : undefined[] + +paired.reduce((b3, b4) => b3.concat({}), []); +>paired.reduce((b3, b4) => b3.concat({}), []) : any +>paired.reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any): any; (callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; } +>paired : any[] +>reduce : { (callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any): any; (callbackfn: (previousValue: U, currentValue: any, currentIndex: number, array: any[]) => U, initialValue: U): U; } +>(b3, b4) => b3.concat({}) : (b3: any, b4: any) => any +>b3 : any +>b4 : any +>b3.concat({}) : any +>b3.concat : any +>b3 : any +>concat : any +>{} : {} +>[] : undefined[] + +paired.map((c1) => c1.count); +>paired.map((c1) => c1.count) : any[] +>paired.map : (callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[] +>paired : any[] +>map : (callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[] +>(c1) => c1.count : (c1: any) => any +>c1 : any +>c1.count : any +>c1 : any +>count : any + +paired.map(function (c2) { return c2.count; }); +>paired.map(function (c2) { return c2.count; }) : any[] +>paired.map : (callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[] +>paired : any[] +>map : (callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[] +>function (c2) { return c2.count; } : (c2: any) => any +>c2 : any +>c2.count : any +>c2 : any +>count : any + diff --git a/tests/baselines/reference/anyIsAssignableToObject.types b/tests/baselines/reference/anyIsAssignableToObject.types new file mode 100644 index 00000000000..5df5d3b345f --- /dev/null +++ b/tests/baselines/reference/anyIsAssignableToObject.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/anyIsAssignableToObject.ts === +interface P { +>P : P + + p: {}; +>p : {} +} + +interface Q extends P { // Check assignability here. Any is assignable to {} +>Q : Q +>P : P + + p: any; +>p : any +} diff --git a/tests/baselines/reference/anyIsAssignableToVoid.types b/tests/baselines/reference/anyIsAssignableToVoid.types new file mode 100644 index 00000000000..0e1af90971f --- /dev/null +++ b/tests/baselines/reference/anyIsAssignableToVoid.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/anyIsAssignableToVoid.ts === +interface P { +>P : P + + p: void; +>p : void +} + +interface Q extends P { // check assignability here. any is assignable to void. +>Q : Q +>P : P + + p: any; +>p : any +} diff --git a/tests/baselines/reference/anyPlusAny1.types b/tests/baselines/reference/anyPlusAny1.types new file mode 100644 index 00000000000..aeda001eeaa --- /dev/null +++ b/tests/baselines/reference/anyPlusAny1.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/anyPlusAny1.ts === +var x; +>x : any + +x.name = "hello"; +>x.name = "hello" : string +>x.name : any +>x : any +>name : any + +var z = x + x; +>z : any +>x + x : any +>x : any +>x : any + diff --git a/tests/baselines/reference/anyPropertyAccess.types b/tests/baselines/reference/anyPropertyAccess.types new file mode 100644 index 00000000000..5ea20cefdd6 --- /dev/null +++ b/tests/baselines/reference/anyPropertyAccess.types @@ -0,0 +1,43 @@ +=== tests/cases/conformance/types/any/anyPropertyAccess.ts === +var x: any; +>x : any + +var a = x.foo; +>a : any +>x.foo : any +>x : any +>foo : any + +var b = x['foo']; +>b : any +>x['foo'] : any +>x : any + +var c = x['fn'](); +>c : any +>x['fn']() : any +>x['fn'] : any +>x : any + +var d = x.bar.baz; +>d : any +>x.bar.baz : any +>x.bar : any +>x : any +>bar : any +>baz : any + +var e = x[0].foo; +>e : any +>x[0].foo : any +>x[0] : any +>x : any +>foo : any + +var f = x['0'].bar; +>f : any +>x['0'].bar : any +>x['0'] : any +>x : any +>bar : any + diff --git a/tests/baselines/reference/apparentTypeSubtyping.js b/tests/baselines/reference/apparentTypeSubtyping.js index 8612107f290..fd01d0df2ba 100644 --- a/tests/baselines/reference/apparentTypeSubtyping.js +++ b/tests/baselines/reference/apparentTypeSubtyping.js @@ -22,6 +22,8 @@ class Derived2 extends Base2 { // error because of the prototy } //// [apparentTypeSubtyping.js] +// subtype checks use the apparent type of the target type +// S is a subtype of a type T, and T is a supertype of S, if one of the following is true, where S' denotes the apparent type (section 3.8.1) of S: var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -33,6 +35,7 @@ var Base = (function () { } return Base; })(); +// is String (S) a subtype of U extends String (T)? Would only be true if we used the apparent type of U (T) var Derived = (function (_super) { __extends(Derived, _super); function Derived() { @@ -45,6 +48,7 @@ var Base2 = (function () { } return Base2; })(); +// is U extends String (S) a subtype of String (T)? Apparent type of U is String so it succeeds var Derived2 = (function (_super) { __extends(Derived2, _super); function Derived2() { diff --git a/tests/baselines/reference/apparentTypeSupertype.js b/tests/baselines/reference/apparentTypeSupertype.js index 18c2974b3ba..75703fbd06b 100644 --- a/tests/baselines/reference/apparentTypeSupertype.js +++ b/tests/baselines/reference/apparentTypeSupertype.js @@ -12,6 +12,8 @@ class Derived extends Base { // error } //// [apparentTypeSupertype.js] +// subtype checks use the apparent type of the target type +// S is a subtype of a type T, and T is a supertype of S, if one of the following is true, where S' denotes the apparent type (section 3.8.1) of S: var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -23,6 +25,7 @@ var Base = (function () { } return Base; })(); +// is String (S) a subtype of U extends String (T)? Would only be true if we used the apparent type of U (T) var Derived = (function (_super) { __extends(Derived, _super); function Derived() { diff --git a/tests/baselines/reference/argsInScope.types b/tests/baselines/reference/argsInScope.types new file mode 100644 index 00000000000..010e5624039 --- /dev/null +++ b/tests/baselines/reference/argsInScope.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/argsInScope.ts === +class C { +>C : C + + P(ii:number, j:number, k:number) { +>P : (ii: number, j: number, k: number) => void +>ii : number +>j : number +>k : number + + for (var i = 0; i < arguments.length; i++) { +>i : number +>i < arguments.length : boolean +>i : number +>arguments.length : number +>arguments : IArguments +>length : number +>i++ : number +>i : number + + // WScript.Echo("param: " + arguments[i]); + } + } +} + +var c = new C(); +>c : C +>new C() : C +>C : typeof C + +c.P(1,2,3); +>c.P(1,2,3) : void +>c.P : (ii: number, j: number, k: number) => void +>c : C +>P : (ii: number, j: number, k: number) => void + diff --git a/tests/baselines/reference/arguments.types b/tests/baselines/reference/arguments.types new file mode 100644 index 00000000000..1902e459316 --- /dev/null +++ b/tests/baselines/reference/arguments.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/arguments.ts === +function f() { +>f : () => void + + var x=arguments[12]; +>x : any +>arguments[12] : any +>arguments : IArguments +} diff --git a/tests/baselines/reference/argumentsBindsToFunctionScopeArgumentList.js b/tests/baselines/reference/argumentsBindsToFunctionScopeArgumentList.js index 6d021a45eba..9a5b13f74f3 100644 --- a/tests/baselines/reference/argumentsBindsToFunctionScopeArgumentList.js +++ b/tests/baselines/reference/argumentsBindsToFunctionScopeArgumentList.js @@ -7,5 +7,5 @@ function foo(a) { //// [argumentsBindsToFunctionScopeArgumentList.js] var arguments = 10; function foo(a) { - arguments = 10; + arguments = 10; /// This shouldnt be of type number and result in error. } diff --git a/tests/baselines/reference/argumentsUsedInObjectLiteralProperty.types b/tests/baselines/reference/argumentsUsedInObjectLiteralProperty.types new file mode 100644 index 00000000000..697858534db --- /dev/null +++ b/tests/baselines/reference/argumentsUsedInObjectLiteralProperty.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/argumentsUsedInObjectLiteralProperty.ts === +class A { +>A : A + + public static createSelectableViewModel(initialState?: any, selectedValue?: any) { +>createSelectableViewModel : (initialState?: any, selectedValue?: any) => { selectedValue: number; } +>initialState : any +>selectedValue : any + + return { +>{ selectedValue: arguments.length } : { selectedValue: number; } + + selectedValue: arguments.length +>selectedValue : number +>arguments.length : number +>arguments : IArguments +>length : number + + }; + } +} diff --git a/tests/baselines/reference/arithAssignTyping.js b/tests/baselines/reference/arithAssignTyping.js index 5d4776fd99f..10e60bfb1f2 100644 --- a/tests/baselines/reference/arithAssignTyping.js +++ b/tests/baselines/reference/arithAssignTyping.js @@ -20,15 +20,15 @@ var f = (function () { } return f; })(); -f += ''; -f += 1; -f -= 1; -f *= 1; -f /= 1; -f %= 1; -f &= 1; -f |= 1; -f <<= 1; -f >>= 1; -f >>>= 1; -f ^= 1; +f += ''; // error +f += 1; // error +f -= 1; // error +f *= 1; // error +f /= 1; // error +f %= 1; // error +f &= 1; // error +f |= 1; // error +f <<= 1; // error +f >>= 1; // error +f >>>= 1; // error +f ^= 1; // error diff --git a/tests/baselines/reference/arithmeticOperatorWithAnyAndNumber.js b/tests/baselines/reference/arithmeticOperatorWithAnyAndNumber.js index 0bb27138c23..7cb45f63230 100644 --- a/tests/baselines/reference/arithmeticOperatorWithAnyAndNumber.js +++ b/tests/baselines/reference/arithmeticOperatorWithAnyAndNumber.js @@ -105,6 +105,7 @@ var rj8 = b | b; //// [arithmeticOperatorWithAnyAndNumber.js] var a; var b; +// operator * var ra1 = a * a; var ra2 = a * b; var ra3 = a * 0; @@ -113,6 +114,7 @@ var ra5 = 0 * 0; var ra6 = b * 0; var ra7 = 0 * b; var ra8 = b * b; +// operator / var rb1 = a / a; var rb2 = a / b; var rb3 = a / 0; @@ -121,6 +123,7 @@ var rb5 = 0 / 0; var rb6 = b / 0; var rb7 = 0 / b; var rb8 = b / b; +// operator % var rc1 = a % a; var rc2 = a % b; var rc3 = a % 0; @@ -129,6 +132,7 @@ var rc5 = 0 % 0; var rc6 = b % 0; var rc7 = 0 % b; var rc8 = b % b; +// operator - var rd1 = a - a; var rd2 = a - b; var rd3 = a - 0; @@ -137,6 +141,7 @@ var rd5 = 0 - 0; var rd6 = b - 0; var rd7 = 0 - b; var rd8 = b - b; +// operator << var re1 = a << a; var re2 = a << b; var re3 = a << 0; @@ -145,6 +150,7 @@ var re5 = 0 << 0; var re6 = b << 0; var re7 = 0 << b; var re8 = b << b; +// operator >> var rf1 = a >> a; var rf2 = a >> b; var rf3 = a >> 0; @@ -153,6 +159,7 @@ var rf5 = 0 >> 0; var rf6 = b >> 0; var rf7 = 0 >> b; var rf8 = b >> b; +// operator >>> var rg1 = a >>> a; var rg2 = a >>> b; var rg3 = a >>> 0; @@ -161,6 +168,7 @@ var rg5 = 0 >>> 0; var rg6 = b >>> 0; var rg7 = 0 >>> b; var rg8 = b >>> b; +// operator & var rh1 = a & a; var rh2 = a & b; var rh3 = a & 0; @@ -169,6 +177,7 @@ var rh5 = 0 & 0; var rh6 = b & 0; var rh7 = 0 & b; var rh8 = b & b; +// operator ^ var ri1 = a ^ a; var ri2 = a ^ b; var ri3 = a ^ 0; @@ -177,6 +186,7 @@ var ri5 = 0 ^ 0; var ri6 = b ^ 0; var ri7 = 0 ^ b; var ri8 = b ^ b; +// operator | var rj1 = a | a; var rj2 = a | b; var rj3 = a | 0; diff --git a/tests/baselines/reference/arithmeticOperatorWithAnyAndNumber.types b/tests/baselines/reference/arithmeticOperatorWithAnyAndNumber.types new file mode 100644 index 00000000000..f0120f328c4 --- /dev/null +++ b/tests/baselines/reference/arithmeticOperatorWithAnyAndNumber.types @@ -0,0 +1,437 @@ +=== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithAnyAndNumber.ts === +var a: any; +>a : any + +var b: number; +>b : number + +// operator * +var ra1 = a * a; +>ra1 : number +>a * a : number +>a : any +>a : any + +var ra2 = a * b; +>ra2 : number +>a * b : number +>a : any +>b : number + +var ra3 = a * 0; +>ra3 : number +>a * 0 : number +>a : any + +var ra4 = 0 * a; +>ra4 : number +>0 * a : number +>a : any + +var ra5 = 0 * 0; +>ra5 : number +>0 * 0 : number + +var ra6 = b * 0; +>ra6 : number +>b * 0 : number +>b : number + +var ra7 = 0 * b; +>ra7 : number +>0 * b : number +>b : number + +var ra8 = b * b; +>ra8 : number +>b * b : number +>b : number +>b : number + +// operator / +var rb1 = a / a; +>rb1 : number +>a / a : number +>a : any +>a : any + +var rb2 = a / b; +>rb2 : number +>a / b : number +>a : any +>b : number + +var rb3 = a / 0; +>rb3 : number +>a / 0 : number +>a : any + +var rb4 = 0 / a; +>rb4 : number +>0 / a : number +>a : any + +var rb5 = 0 / 0; +>rb5 : number +>0 / 0 : number + +var rb6 = b / 0; +>rb6 : number +>b / 0 : number +>b : number + +var rb7 = 0 / b; +>rb7 : number +>0 / b : number +>b : number + +var rb8 = b / b; +>rb8 : number +>b / b : number +>b : number +>b : number + +// operator % +var rc1 = a % a; +>rc1 : number +>a % a : number +>a : any +>a : any + +var rc2 = a % b; +>rc2 : number +>a % b : number +>a : any +>b : number + +var rc3 = a % 0; +>rc3 : number +>a % 0 : number +>a : any + +var rc4 = 0 % a; +>rc4 : number +>0 % a : number +>a : any + +var rc5 = 0 % 0; +>rc5 : number +>0 % 0 : number + +var rc6 = b % 0; +>rc6 : number +>b % 0 : number +>b : number + +var rc7 = 0 % b; +>rc7 : number +>0 % b : number +>b : number + +var rc8 = b % b; +>rc8 : number +>b % b : number +>b : number +>b : number + +// operator - +var rd1 = a - a; +>rd1 : number +>a - a : number +>a : any +>a : any + +var rd2 = a - b; +>rd2 : number +>a - b : number +>a : any +>b : number + +var rd3 = a - 0; +>rd3 : number +>a - 0 : number +>a : any + +var rd4 = 0 - a; +>rd4 : number +>0 - a : number +>a : any + +var rd5 = 0 - 0; +>rd5 : number +>0 - 0 : number + +var rd6 = b - 0; +>rd6 : number +>b - 0 : number +>b : number + +var rd7 = 0 - b; +>rd7 : number +>0 - b : number +>b : number + +var rd8 = b - b; +>rd8 : number +>b - b : number +>b : number +>b : number + +// operator << +var re1 = a << a; +>re1 : number +>a << a : number +>a : any +>a : any + +var re2 = a << b; +>re2 : number +>a << b : number +>a : any +>b : number + +var re3 = a << 0; +>re3 : number +>a << 0 : number +>a : any + +var re4 = 0 << a; +>re4 : number +>0 << a : number +>a : any + +var re5 = 0 << 0; +>re5 : number +>0 << 0 : number + +var re6 = b << 0; +>re6 : number +>b << 0 : number +>b : number + +var re7 = 0 << b; +>re7 : number +>0 << b : number +>b : number + +var re8 = b << b; +>re8 : number +>b << b : number +>b : number +>b : number + +// operator >> +var rf1 = a >> a; +>rf1 : number +>a >> a : number +>a : any +>a : any + +var rf2 = a >> b; +>rf2 : number +>a >> b : number +>a : any +>b : number + +var rf3 = a >> 0; +>rf3 : number +>a >> 0 : number +>a : any + +var rf4 = 0 >> a; +>rf4 : number +>0 >> a : number +>a : any + +var rf5 = 0 >> 0; +>rf5 : number +>0 >> 0 : number + +var rf6 = b >> 0; +>rf6 : number +>b >> 0 : number +>b : number + +var rf7 = 0 >> b; +>rf7 : number +>0 >> b : number +>b : number + +var rf8 = b >> b; +>rf8 : number +>b >> b : number +>b : number +>b : number + +// operator >>> +var rg1 = a >>> a; +>rg1 : number +>a >>> a : number +>a : any +>a : any + +var rg2 = a >>> b; +>rg2 : number +>a >>> b : number +>a : any +>b : number + +var rg3 = a >>> 0; +>rg3 : number +>a >>> 0 : number +>a : any + +var rg4 = 0 >>> a; +>rg4 : number +>0 >>> a : number +>a : any + +var rg5 = 0 >>> 0; +>rg5 : number +>0 >>> 0 : number + +var rg6 = b >>> 0; +>rg6 : number +>b >>> 0 : number +>b : number + +var rg7 = 0 >>> b; +>rg7 : number +>0 >>> b : number +>b : number + +var rg8 = b >>> b; +>rg8 : number +>b >>> b : number +>b : number +>b : number + +// operator & +var rh1 = a & a; +>rh1 : number +>a & a : number +>a : any +>a : any + +var rh2 = a & b; +>rh2 : number +>a & b : number +>a : any +>b : number + +var rh3 = a & 0; +>rh3 : number +>a & 0 : number +>a : any + +var rh4 = 0 & a; +>rh4 : number +>0 & a : number +>a : any + +var rh5 = 0 & 0; +>rh5 : number +>0 & 0 : number + +var rh6 = b & 0; +>rh6 : number +>b & 0 : number +>b : number + +var rh7 = 0 & b; +>rh7 : number +>0 & b : number +>b : number + +var rh8 = b & b; +>rh8 : number +>b & b : number +>b : number +>b : number + +// operator ^ +var ri1 = a ^ a; +>ri1 : number +>a ^ a : number +>a : any +>a : any + +var ri2 = a ^ b; +>ri2 : number +>a ^ b : number +>a : any +>b : number + +var ri3 = a ^ 0; +>ri3 : number +>a ^ 0 : number +>a : any + +var ri4 = 0 ^ a; +>ri4 : number +>0 ^ a : number +>a : any + +var ri5 = 0 ^ 0; +>ri5 : number +>0 ^ 0 : number + +var ri6 = b ^ 0; +>ri6 : number +>b ^ 0 : number +>b : number + +var ri7 = 0 ^ b; +>ri7 : number +>0 ^ b : number +>b : number + +var ri8 = b ^ b; +>ri8 : number +>b ^ b : number +>b : number +>b : number + +// operator | +var rj1 = a | a; +>rj1 : number +>a | a : number +>a : any +>a : any + +var rj2 = a | b; +>rj2 : number +>a | b : number +>a : any +>b : number + +var rj3 = a | 0; +>rj3 : number +>a | 0 : number +>a : any + +var rj4 = 0 | a; +>rj4 : number +>0 | a : number +>a : any + +var rj5 = 0 | 0; +>rj5 : number +>0 | 0 : number + +var rj6 = b | 0; +>rj6 : number +>b | 0 : number +>b : number + +var rj7 = 0 | b; +>rj7 : number +>0 | b : number +>b : number + +var rj8 = b | b; +>rj8 : number +>b | b : number +>b : number +>b : number + diff --git a/tests/baselines/reference/arithmeticOperatorWithEnum.js b/tests/baselines/reference/arithmeticOperatorWithEnum.js index ac2bfb233ed..9ef2790b4ce 100644 --- a/tests/baselines/reference/arithmeticOperatorWithEnum.js +++ b/tests/baselines/reference/arithmeticOperatorWithEnum.js @@ -151,6 +151,7 @@ var rj11 = b | E.b; var rj12 = 1 | E.b; //// [arithmeticOperatorWithEnum.js] +// operands of an enum type are treated as having the primitive type Number. var E; (function (E) { E[E["a"] = 0] = "a"; @@ -159,6 +160,7 @@ var E; var a; var b; var c; +// operator * var ra1 = c * a; var ra2 = c * b; var ra3 = c * c; @@ -171,6 +173,7 @@ var ra9 = 0 /* a */ * 1; var ra10 = a * 1 /* b */; var ra11 = b * 1 /* b */; var ra12 = 1 * 1 /* b */; +// operator / var rb1 = c / a; var rb2 = c / b; var rb3 = c / c; @@ -183,6 +186,7 @@ var rb9 = 0 /* a */ / 1; var rb10 = a / 1 /* b */; var rb11 = b / 1 /* b */; var rb12 = 1 / 1 /* b */; +// operator % var rc1 = c % a; var rc2 = c % b; var rc3 = c % c; @@ -195,6 +199,7 @@ var rc9 = 0 /* a */ % 1; var rc10 = a % 1 /* b */; var rc11 = b % 1 /* b */; var rc12 = 1 % 1 /* b */; +// operator - var rd1 = c - a; var rd2 = c - b; var rd3 = c - c; @@ -207,6 +212,7 @@ var rd9 = 0 /* a */ - 1; var rd10 = a - 1 /* b */; var rd11 = b - 1 /* b */; var rd12 = 1 - 1 /* b */; +// operator << var re1 = c << a; var re2 = c << b; var re3 = c << c; @@ -219,6 +225,7 @@ var re9 = 0 /* a */ << 1; var re10 = a << 1 /* b */; var re11 = b << 1 /* b */; var re12 = 1 << 1 /* b */; +// operator >> var rf1 = c >> a; var rf2 = c >> b; var rf3 = c >> c; @@ -231,6 +238,7 @@ var rf9 = 0 /* a */ >> 1; var rf10 = a >> 1 /* b */; var rf11 = b >> 1 /* b */; var rf12 = 1 >> 1 /* b */; +// operator >>> var rg1 = c >>> a; var rg2 = c >>> b; var rg3 = c >>> c; @@ -243,6 +251,7 @@ var rg9 = 0 /* a */ >>> 1; var rg10 = a >>> 1 /* b */; var rg11 = b >>> 1 /* b */; var rg12 = 1 >>> 1 /* b */; +// operator & var rh1 = c & a; var rh2 = c & b; var rh3 = c & c; @@ -255,6 +264,7 @@ var rh9 = 0 /* a */ & 1; var rh10 = a & 1 /* b */; var rh11 = b & 1 /* b */; var rh12 = 1 & 1 /* b */; +// operator ^ var ri1 = c ^ a; var ri2 = c ^ b; var ri3 = c ^ c; @@ -267,6 +277,7 @@ var ri9 = 0 /* a */ ^ 1; var ri10 = a ^ 1 /* b */; var ri11 = b ^ 1 /* b */; var ri12 = 1 ^ 1 /* b */; +// operator | var rj1 = c | a; var rj2 = c | b; var rj3 = c | c; diff --git a/tests/baselines/reference/arithmeticOperatorWithEnum.types b/tests/baselines/reference/arithmeticOperatorWithEnum.types new file mode 100644 index 00000000000..2f4ebce8f32 --- /dev/null +++ b/tests/baselines/reference/arithmeticOperatorWithEnum.types @@ -0,0 +1,893 @@ +=== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithEnum.ts === +// operands of an enum type are treated as having the primitive type Number. + +enum E { +>E : E + + a, +>a : E + + b +>b : E +} + +var a: any; +>a : any + +var b: number; +>b : number + +var c: E; +>c : E +>E : E + +// operator * +var ra1 = c * a; +>ra1 : number +>c * a : number +>c : E +>a : any + +var ra2 = c * b; +>ra2 : number +>c * b : number +>c : E +>b : number + +var ra3 = c * c; +>ra3 : number +>c * c : number +>c : E +>c : E + +var ra4 = a * c; +>ra4 : number +>a * c : number +>a : any +>c : E + +var ra5 = b * c; +>ra5 : number +>b * c : number +>b : number +>c : E + +var ra6 = E.a * a; +>ra6 : number +>E.a * a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var ra7 = E.a * b; +>ra7 : number +>E.a * b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var ra8 = E.a * E.b; +>ra8 : number +>E.a * E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var ra9 = E.a * 1; +>ra9 : number +>E.a * 1 : number +>E.a : E +>E : typeof E +>a : E + +var ra10 = a * E.b; +>ra10 : number +>a * E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var ra11 = b * E.b; +>ra11 : number +>b * E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var ra12 = 1 * E.b; +>ra12 : number +>1 * E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator / +var rb1 = c / a; +>rb1 : number +>c / a : number +>c : E +>a : any + +var rb2 = c / b; +>rb2 : number +>c / b : number +>c : E +>b : number + +var rb3 = c / c; +>rb3 : number +>c / c : number +>c : E +>c : E + +var rb4 = a / c; +>rb4 : number +>a / c : number +>a : any +>c : E + +var rb5 = b / c; +>rb5 : number +>b / c : number +>b : number +>c : E + +var rb6 = E.a / a; +>rb6 : number +>E.a / a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var rb7 = E.a / b; +>rb7 : number +>E.a / b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var rb8 = E.a / E.b; +>rb8 : number +>E.a / E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var rb9 = E.a / 1; +>rb9 : number +>E.a / 1 : number +>E.a : E +>E : typeof E +>a : E + +var rb10 = a / E.b; +>rb10 : number +>a / E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var rb11 = b / E.b; +>rb11 : number +>b / E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var rb12 = 1 / E.b; +>rb12 : number +>1 / E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator % +var rc1 = c % a; +>rc1 : number +>c % a : number +>c : E +>a : any + +var rc2 = c % b; +>rc2 : number +>c % b : number +>c : E +>b : number + +var rc3 = c % c; +>rc3 : number +>c % c : number +>c : E +>c : E + +var rc4 = a % c; +>rc4 : number +>a % c : number +>a : any +>c : E + +var rc5 = b % c; +>rc5 : number +>b % c : number +>b : number +>c : E + +var rc6 = E.a % a; +>rc6 : number +>E.a % a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var rc7 = E.a % b; +>rc7 : number +>E.a % b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var rc8 = E.a % E.b; +>rc8 : number +>E.a % E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var rc9 = E.a % 1; +>rc9 : number +>E.a % 1 : number +>E.a : E +>E : typeof E +>a : E + +var rc10 = a % E.b; +>rc10 : number +>a % E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var rc11 = b % E.b; +>rc11 : number +>b % E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var rc12 = 1 % E.b; +>rc12 : number +>1 % E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator - +var rd1 = c - a; +>rd1 : number +>c - a : number +>c : E +>a : any + +var rd2 = c - b; +>rd2 : number +>c - b : number +>c : E +>b : number + +var rd3 = c - c; +>rd3 : number +>c - c : number +>c : E +>c : E + +var rd4 = a - c; +>rd4 : number +>a - c : number +>a : any +>c : E + +var rd5 = b - c; +>rd5 : number +>b - c : number +>b : number +>c : E + +var rd6 = E.a - a; +>rd6 : number +>E.a - a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var rd7 = E.a - b; +>rd7 : number +>E.a - b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var rd8 = E.a - E.b; +>rd8 : number +>E.a - E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var rd9 = E.a - 1; +>rd9 : number +>E.a - 1 : number +>E.a : E +>E : typeof E +>a : E + +var rd10 = a - E.b; +>rd10 : number +>a - E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var rd11 = b - E.b; +>rd11 : number +>b - E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var rd12 = 1 - E.b; +>rd12 : number +>1 - E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator << +var re1 = c << a; +>re1 : number +>c << a : number +>c : E +>a : any + +var re2 = c << b; +>re2 : number +>c << b : number +>c : E +>b : number + +var re3 = c << c; +>re3 : number +>c << c : number +>c : E +>c : E + +var re4 = a << c; +>re4 : number +>a << c : number +>a : any +>c : E + +var re5 = b << c; +>re5 : number +>b << c : number +>b : number +>c : E + +var re6 = E.a << a; +>re6 : number +>E.a << a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var re7 = E.a << b; +>re7 : number +>E.a << b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var re8 = E.a << E.b; +>re8 : number +>E.a << E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var re9 = E.a << 1; +>re9 : number +>E.a << 1 : number +>E.a : E +>E : typeof E +>a : E + +var re10 = a << E.b; +>re10 : number +>a << E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var re11 = b << E.b; +>re11 : number +>b << E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var re12 = 1 << E.b; +>re12 : number +>1 << E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator >> +var rf1 = c >> a; +>rf1 : number +>c >> a : number +>c : E +>a : any + +var rf2 = c >> b; +>rf2 : number +>c >> b : number +>c : E +>b : number + +var rf3 = c >> c; +>rf3 : number +>c >> c : number +>c : E +>c : E + +var rf4 = a >> c; +>rf4 : number +>a >> c : number +>a : any +>c : E + +var rf5 = b >> c; +>rf5 : number +>b >> c : number +>b : number +>c : E + +var rf6 = E.a >> a; +>rf6 : number +>E.a >> a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var rf7 = E.a >> b; +>rf7 : number +>E.a >> b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var rf8 = E.a >> E.b; +>rf8 : number +>E.a >> E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var rf9 = E.a >> 1; +>rf9 : number +>E.a >> 1 : number +>E.a : E +>E : typeof E +>a : E + +var rf10 = a >> E.b; +>rf10 : number +>a >> E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var rf11 = b >> E.b; +>rf11 : number +>b >> E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var rf12 = 1 >> E.b; +>rf12 : number +>1 >> E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator >>> +var rg1 = c >>> a; +>rg1 : number +>c >>> a : number +>c : E +>a : any + +var rg2 = c >>> b; +>rg2 : number +>c >>> b : number +>c : E +>b : number + +var rg3 = c >>> c; +>rg3 : number +>c >>> c : number +>c : E +>c : E + +var rg4 = a >>> c; +>rg4 : number +>a >>> c : number +>a : any +>c : E + +var rg5 = b >>> c; +>rg5 : number +>b >>> c : number +>b : number +>c : E + +var rg6 = E.a >>> a; +>rg6 : number +>E.a >>> a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var rg7 = E.a >>> b; +>rg7 : number +>E.a >>> b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var rg8 = E.a >>> E.b; +>rg8 : number +>E.a >>> E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var rg9 = E.a >>> 1; +>rg9 : number +>E.a >>> 1 : number +>E.a : E +>E : typeof E +>a : E + +var rg10 = a >>> E.b; +>rg10 : number +>a >>> E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var rg11 = b >>> E.b; +>rg11 : number +>b >>> E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var rg12 = 1 >>> E.b; +>rg12 : number +>1 >>> E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator & +var rh1 = c & a; +>rh1 : number +>c & a : number +>c : E +>a : any + +var rh2 = c & b; +>rh2 : number +>c & b : number +>c : E +>b : number + +var rh3 = c & c; +>rh3 : number +>c & c : number +>c : E +>c : E + +var rh4 = a & c; +>rh4 : number +>a & c : number +>a : any +>c : E + +var rh5 = b & c; +>rh5 : number +>b & c : number +>b : number +>c : E + +var rh6 = E.a & a; +>rh6 : number +>E.a & a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var rh7 = E.a & b; +>rh7 : number +>E.a & b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var rh8 = E.a & E.b; +>rh8 : number +>E.a & E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var rh9 = E.a & 1; +>rh9 : number +>E.a & 1 : number +>E.a : E +>E : typeof E +>a : E + +var rh10 = a & E.b; +>rh10 : number +>a & E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var rh11 = b & E.b; +>rh11 : number +>b & E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var rh12 = 1 & E.b; +>rh12 : number +>1 & E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator ^ +var ri1 = c ^ a; +>ri1 : number +>c ^ a : number +>c : E +>a : any + +var ri2 = c ^ b; +>ri2 : number +>c ^ b : number +>c : E +>b : number + +var ri3 = c ^ c; +>ri3 : number +>c ^ c : number +>c : E +>c : E + +var ri4 = a ^ c; +>ri4 : number +>a ^ c : number +>a : any +>c : E + +var ri5 = b ^ c; +>ri5 : number +>b ^ c : number +>b : number +>c : E + +var ri6 = E.a ^ a; +>ri6 : number +>E.a ^ a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var ri7 = E.a ^ b; +>ri7 : number +>E.a ^ b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var ri8 = E.a ^ E.b; +>ri8 : number +>E.a ^ E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var ri9 = E.a ^ 1; +>ri9 : number +>E.a ^ 1 : number +>E.a : E +>E : typeof E +>a : E + +var ri10 = a ^ E.b; +>ri10 : number +>a ^ E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var ri11 = b ^ E.b; +>ri11 : number +>b ^ E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var ri12 = 1 ^ E.b; +>ri12 : number +>1 ^ E.b : number +>E.b : E +>E : typeof E +>b : E + +// operator | +var rj1 = c | a; +>rj1 : number +>c | a : number +>c : E +>a : any + +var rj2 = c | b; +>rj2 : number +>c | b : number +>c : E +>b : number + +var rj3 = c | c; +>rj3 : number +>c | c : number +>c : E +>c : E + +var rj4 = a | c; +>rj4 : number +>a | c : number +>a : any +>c : E + +var rj5 = b | c; +>rj5 : number +>b | c : number +>b : number +>c : E + +var rj6 = E.a | a; +>rj6 : number +>E.a | a : number +>E.a : E +>E : typeof E +>a : E +>a : any + +var rj7 = E.a | b; +>rj7 : number +>E.a | b : number +>E.a : E +>E : typeof E +>a : E +>b : number + +var rj8 = E.a | E.b; +>rj8 : number +>E.a | E.b : number +>E.a : E +>E : typeof E +>a : E +>E.b : E +>E : typeof E +>b : E + +var rj9 = E.a | 1; +>rj9 : number +>E.a | 1 : number +>E.a : E +>E : typeof E +>a : E + +var rj10 = a | E.b; +>rj10 : number +>a | E.b : number +>a : any +>E.b : E +>E : typeof E +>b : E + +var rj11 = b | E.b; +>rj11 : number +>b | E.b : number +>b : number +>E.b : E +>E : typeof E +>b : E + +var rj12 = 1 | E.b; +>rj12 : number +>1 | E.b : number +>E.b : E +>E : typeof E +>b : E + diff --git a/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.js b/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.js index 6e4fb872d1e..8a9e6549144 100644 --- a/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.js +++ b/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.js @@ -582,6 +582,8 @@ var r10h5 = e | E.b; var r10h6 = f | E.b; //// [arithmeticOperatorWithInvalidOperands.js] +// these operators require their operands to be of type Any, the Number primitive type, or +// an enum type var E; (function (E) { E[E["a"] = 0] = "a"; @@ -594,9 +596,11 @@ var c; var d; var e; var f; -var r1a1 = a * a; +// All of the below should be an error unless otherwise noted +// operator * +var r1a1 = a * a; //ok var r1a2 = a * b; -var r1a3 = a * c; +var r1a3 = a * c; //ok var r1a4 = a * d; var r1a5 = a * e; var r1a6 = a * f; @@ -606,9 +610,9 @@ var r1b3 = b * c; var r1b4 = b * d; var r1b5 = b * e; var r1b6 = b * f; -var r1c1 = c * a; +var r1c1 = c * a; //ok var r1c2 = c * b; -var r1c3 = c * c; +var r1c3 = c * c; //ok var r1c4 = c * d; var r1c5 = c * e; var r1c6 = c * f; @@ -630,21 +634,22 @@ var r1f3 = f * c; var r1f4 = f * d; var r1f5 = f * e; var r1f6 = f * f; -var r1g1 = 0 /* a */ * a; +var r1g1 = 0 /* a */ * a; //ok var r1g2 = 0 /* a */ * b; -var r1g3 = 0 /* a */ * c; +var r1g3 = 0 /* a */ * c; //ok var r1g4 = 0 /* a */ * d; var r1g5 = 0 /* a */ * e; var r1g6 = 0 /* a */ * f; -var r1h1 = a * 1 /* b */; +var r1h1 = a * 1 /* b */; //ok var r1h2 = b * 1 /* b */; -var r1h3 = c * 1 /* b */; +var r1h3 = c * 1 /* b */; //ok var r1h4 = d * 1 /* b */; var r1h5 = e * 1 /* b */; var r1h6 = f * 1 /* b */; -var r2a1 = a / a; +// operator / +var r2a1 = a / a; //ok var r2a2 = a / b; -var r2a3 = a / c; +var r2a3 = a / c; //ok var r2a4 = a / d; var r2a5 = a / e; var r2a6 = a / f; @@ -654,9 +659,9 @@ var r2b3 = b / c; var r2b4 = b / d; var r2b5 = b / e; var r2b6 = b / f; -var r2c1 = c / a; +var r2c1 = c / a; //ok var r2c2 = c / b; -var r2c3 = c / c; +var r2c3 = c / c; //ok var r2c4 = c / d; var r2c5 = c / e; var r2c6 = c / f; @@ -678,21 +683,22 @@ var r2f3 = f / c; var r2f4 = f / d; var r2f5 = f / e; var r2f6 = f / f; -var r2g1 = 0 /* a */ / a; +var r2g1 = 0 /* a */ / a; //ok var r2g2 = 0 /* a */ / b; -var r2g3 = 0 /* a */ / c; +var r2g3 = 0 /* a */ / c; //ok var r2g4 = 0 /* a */ / d; var r2g5 = 0 /* a */ / e; var r2g6 = 0 /* a */ / f; -var r2h1 = a / 1 /* b */; +var r2h1 = a / 1 /* b */; //ok var r2h2 = b / 1 /* b */; -var r2h3 = c / 1 /* b */; +var r2h3 = c / 1 /* b */; //ok var r2h4 = d / 1 /* b */; var r2h5 = e / 1 /* b */; var r2h6 = f / 1 /* b */; -var r3a1 = a % a; +// operator % +var r3a1 = a % a; //ok var r3a2 = a % b; -var r3a3 = a % c; +var r3a3 = a % c; //ok var r3a4 = a % d; var r3a5 = a % e; var r3a6 = a % f; @@ -702,9 +708,9 @@ var r3b3 = b % c; var r3b4 = b % d; var r3b5 = b % e; var r3b6 = b % f; -var r3c1 = c % a; +var r3c1 = c % a; //ok var r3c2 = c % b; -var r3c3 = c % c; +var r3c3 = c % c; //ok var r3c4 = c % d; var r3c5 = c % e; var r3c6 = c % f; @@ -726,21 +732,22 @@ var r3f3 = f % c; var r3f4 = f % d; var r3f5 = f % e; var r3f6 = f % f; -var r3g1 = 0 /* a */ % a; +var r3g1 = 0 /* a */ % a; //ok var r3g2 = 0 /* a */ % b; -var r3g3 = 0 /* a */ % c; +var r3g3 = 0 /* a */ % c; //ok var r3g4 = 0 /* a */ % d; var r3g5 = 0 /* a */ % e; var r3g6 = 0 /* a */ % f; -var r3h1 = a % 1 /* b */; +var r3h1 = a % 1 /* b */; //ok var r3h2 = b % 1 /* b */; -var r3h3 = c % 1 /* b */; +var r3h3 = c % 1 /* b */; //ok var r3h4 = d % 1 /* b */; var r3h5 = e % 1 /* b */; var r3h6 = f % 1 /* b */; -var r4a1 = a - a; +// operator - +var r4a1 = a - a; //ok var r4a2 = a - b; -var r4a3 = a - c; +var r4a3 = a - c; //ok var r4a4 = a - d; var r4a5 = a - e; var r4a6 = a - f; @@ -750,9 +757,9 @@ var r4b3 = b - c; var r4b4 = b - d; var r4b5 = b - e; var r4b6 = b - f; -var r4c1 = c - a; +var r4c1 = c - a; //ok var r4c2 = c - b; -var r4c3 = c - c; +var r4c3 = c - c; //ok var r4c4 = c - d; var r4c5 = c - e; var r4c6 = c - f; @@ -774,21 +781,22 @@ var r4f3 = f - c; var r4f4 = f - d; var r4f5 = f - e; var r4f6 = f - f; -var r4g1 = 0 /* a */ - a; +var r4g1 = 0 /* a */ - a; //ok var r4g2 = 0 /* a */ - b; -var r4g3 = 0 /* a */ - c; +var r4g3 = 0 /* a */ - c; //ok var r4g4 = 0 /* a */ - d; var r4g5 = 0 /* a */ - e; var r4g6 = 0 /* a */ - f; -var r4h1 = a - 1 /* b */; +var r4h1 = a - 1 /* b */; //ok var r4h2 = b - 1 /* b */; -var r4h3 = c - 1 /* b */; +var r4h3 = c - 1 /* b */; //ok var r4h4 = d - 1 /* b */; var r4h5 = e - 1 /* b */; var r4h6 = f - 1 /* b */; -var r5a1 = a << a; +// operator << +var r5a1 = a << a; //ok var r5a2 = a << b; -var r5a3 = a << c; +var r5a3 = a << c; //ok var r5a4 = a << d; var r5a5 = a << e; var r5a6 = a << f; @@ -798,9 +806,9 @@ var r5b3 = b << c; var r5b4 = b << d; var r5b5 = b << e; var r5b6 = b << f; -var r5c1 = c << a; +var r5c1 = c << a; //ok var r5c2 = c << b; -var r5c3 = c << c; +var r5c3 = c << c; //ok var r5c4 = c << d; var r5c5 = c << e; var r5c6 = c << f; @@ -822,21 +830,22 @@ var r5f3 = f << c; var r5f4 = f << d; var r5f5 = f << e; var r5f6 = f << f; -var r5g1 = 0 /* a */ << a; +var r5g1 = 0 /* a */ << a; //ok var r5g2 = 0 /* a */ << b; -var r5g3 = 0 /* a */ << c; +var r5g3 = 0 /* a */ << c; //ok var r5g4 = 0 /* a */ << d; var r5g5 = 0 /* a */ << e; var r5g6 = 0 /* a */ << f; -var r5h1 = a << 1 /* b */; +var r5h1 = a << 1 /* b */; //ok var r5h2 = b << 1 /* b */; -var r5h3 = c << 1 /* b */; +var r5h3 = c << 1 /* b */; //ok var r5h4 = d << 1 /* b */; var r5h5 = e << 1 /* b */; var r5h6 = f << 1 /* b */; -var r6a1 = a >> a; +// operator >> +var r6a1 = a >> a; //ok var r6a2 = a >> b; -var r6a3 = a >> c; +var r6a3 = a >> c; //ok var r6a4 = a >> d; var r6a5 = a >> e; var r6a6 = a >> f; @@ -846,9 +855,9 @@ var r6b3 = b >> c; var r6b4 = b >> d; var r6b5 = b >> e; var r6b6 = b >> f; -var r6c1 = c >> a; +var r6c1 = c >> a; //ok var r6c2 = c >> b; -var r6c3 = c >> c; +var r6c3 = c >> c; //ok var r6c4 = c >> d; var r6c5 = c >> e; var r6c6 = c >> f; @@ -870,21 +879,22 @@ var r6f3 = f >> c; var r6f4 = f >> d; var r6f5 = f >> e; var r6f6 = f >> f; -var r6g1 = 0 /* a */ >> a; +var r6g1 = 0 /* a */ >> a; //ok var r6g2 = 0 /* a */ >> b; -var r6g3 = 0 /* a */ >> c; +var r6g3 = 0 /* a */ >> c; //ok var r6g4 = 0 /* a */ >> d; var r6g5 = 0 /* a */ >> e; var r6g6 = 0 /* a */ >> f; -var r6h1 = a >> 1 /* b */; +var r6h1 = a >> 1 /* b */; //ok var r6h2 = b >> 1 /* b */; -var r6h3 = c >> 1 /* b */; +var r6h3 = c >> 1 /* b */; //ok var r6h4 = d >> 1 /* b */; var r6h5 = e >> 1 /* b */; var r6h6 = f >> 1 /* b */; -var r7a1 = a >>> a; +// operator >>> +var r7a1 = a >>> a; //ok var r7a2 = a >>> b; -var r7a3 = a >>> c; +var r7a3 = a >>> c; //ok var r7a4 = a >>> d; var r7a5 = a >>> e; var r7a6 = a >>> f; @@ -894,9 +904,9 @@ var r7b3 = b >>> c; var r7b4 = b >>> d; var r7b5 = b >>> e; var r7b6 = b >>> f; -var r7c1 = c >>> a; +var r7c1 = c >>> a; //ok var r7c2 = c >>> b; -var r7c3 = c >>> c; +var r7c3 = c >>> c; //ok var r7c4 = c >>> d; var r7c5 = c >>> e; var r7c6 = c >>> f; @@ -918,21 +928,22 @@ var r7f3 = f >>> c; var r7f4 = f >>> d; var r7f5 = f >>> e; var r7f6 = f >>> f; -var r7g1 = 0 /* a */ >>> a; +var r7g1 = 0 /* a */ >>> a; //ok var r7g2 = 0 /* a */ >>> b; -var r7g3 = 0 /* a */ >>> c; +var r7g3 = 0 /* a */ >>> c; //ok var r7g4 = 0 /* a */ >>> d; var r7g5 = 0 /* a */ >>> e; var r7g6 = 0 /* a */ >>> f; -var r7h1 = a >>> 1 /* b */; +var r7h1 = a >>> 1 /* b */; //ok var r7h2 = b >>> 1 /* b */; -var r7h3 = c >>> 1 /* b */; +var r7h3 = c >>> 1 /* b */; //ok var r7h4 = d >>> 1 /* b */; var r7h5 = e >>> 1 /* b */; var r7h6 = f >>> 1 /* b */; -var r8a1 = a & a; +// operator & +var r8a1 = a & a; //ok var r8a2 = a & b; -var r8a3 = a & c; +var r8a3 = a & c; //ok var r8a4 = a & d; var r8a5 = a & e; var r8a6 = a & f; @@ -942,9 +953,9 @@ var r8b3 = b & c; var r8b4 = b & d; var r8b5 = b & e; var r8b6 = b & f; -var r8c1 = c & a; +var r8c1 = c & a; //ok var r8c2 = c & b; -var r8c3 = c & c; +var r8c3 = c & c; //ok var r8c4 = c & d; var r8c5 = c & e; var r8c6 = c & f; @@ -966,21 +977,22 @@ var r8f3 = f & c; var r8f4 = f & d; var r8f5 = f & e; var r8f6 = f & f; -var r8g1 = 0 /* a */ & a; +var r8g1 = 0 /* a */ & a; //ok var r8g2 = 0 /* a */ & b; -var r8g3 = 0 /* a */ & c; +var r8g3 = 0 /* a */ & c; //ok var r8g4 = 0 /* a */ & d; var r8g5 = 0 /* a */ & e; var r8g6 = 0 /* a */ & f; -var r8h1 = a & 1 /* b */; +var r8h1 = a & 1 /* b */; //ok var r8h2 = b & 1 /* b */; -var r8h3 = c & 1 /* b */; +var r8h3 = c & 1 /* b */; //ok var r8h4 = d & 1 /* b */; var r8h5 = e & 1 /* b */; var r8h6 = f & 1 /* b */; -var r9a1 = a ^ a; +// operator ^ +var r9a1 = a ^ a; //ok var r9a2 = a ^ b; -var r9a3 = a ^ c; +var r9a3 = a ^ c; //ok var r9a4 = a ^ d; var r9a5 = a ^ e; var r9a6 = a ^ f; @@ -990,9 +1002,9 @@ var r9b3 = b ^ c; var r9b4 = b ^ d; var r9b5 = b ^ e; var r9b6 = b ^ f; -var r9c1 = c ^ a; +var r9c1 = c ^ a; //ok var r9c2 = c ^ b; -var r9c3 = c ^ c; +var r9c3 = c ^ c; //ok var r9c4 = c ^ d; var r9c5 = c ^ e; var r9c6 = c ^ f; @@ -1014,21 +1026,22 @@ var r9f3 = f ^ c; var r9f4 = f ^ d; var r9f5 = f ^ e; var r9f6 = f ^ f; -var r9g1 = 0 /* a */ ^ a; +var r9g1 = 0 /* a */ ^ a; //ok var r9g2 = 0 /* a */ ^ b; -var r9g3 = 0 /* a */ ^ c; +var r9g3 = 0 /* a */ ^ c; //ok var r9g4 = 0 /* a */ ^ d; var r9g5 = 0 /* a */ ^ e; var r9g6 = 0 /* a */ ^ f; -var r9h1 = a ^ 1 /* b */; +var r9h1 = a ^ 1 /* b */; //ok var r9h2 = b ^ 1 /* b */; -var r9h3 = c ^ 1 /* b */; +var r9h3 = c ^ 1 /* b */; //ok var r9h4 = d ^ 1 /* b */; var r9h5 = e ^ 1 /* b */; var r9h6 = f ^ 1 /* b */; -var r10a1 = a | a; +// operator | +var r10a1 = a | a; //ok var r10a2 = a | b; -var r10a3 = a | c; +var r10a3 = a | c; //ok var r10a4 = a | d; var r10a5 = a | e; var r10a6 = a | f; @@ -1038,9 +1051,9 @@ var r10b3 = b | c; var r10b4 = b | d; var r10b5 = b | e; var r10b6 = b | f; -var r10c1 = c | a; +var r10c1 = c | a; //ok var r10c2 = c | b; -var r10c3 = c | c; +var r10c3 = c | c; //ok var r10c4 = c | d; var r10c5 = c | e; var r10c6 = c | f; @@ -1062,15 +1075,15 @@ var r10f3 = f | c; var r10f4 = f | d; var r10f5 = f | e; var r10f6 = f | f; -var r10g1 = 0 /* a */ | a; +var r10g1 = 0 /* a */ | a; //ok var r10g2 = 0 /* a */ | b; -var r10g3 = 0 /* a */ | c; +var r10g3 = 0 /* a */ | c; //ok var r10g4 = 0 /* a */ | d; var r10g5 = 0 /* a */ | e; var r10g6 = 0 /* a */ | f; -var r10h1 = a | 1 /* b */; +var r10h1 = a | 1 /* b */; //ok var r10h2 = b | 1 /* b */; -var r10h3 = c | 1 /* b */; +var r10h3 = c | 1 /* b */; //ok var r10h4 = d | 1 /* b */; var r10h5 = e | 1 /* b */; var r10h6 = f | 1 /* b */; diff --git a/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.js b/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.js index 99849fbb818..b277abb668d 100644 --- a/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.js +++ b/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.js @@ -177,9 +177,12 @@ var r10d2 = '' | null; var r10d3 = {} | null; //// [arithmeticOperatorWithNullValueAndInvalidOperands.js] +// If one operand is the null or undefined value, it is treated as having the type of the +// other operand. var a; var b; var c; +// operator * var r1a1 = null * a; var r1a2 = null * b; var r1a3 = null * c; @@ -192,6 +195,7 @@ var r1c3 = null * {}; var r1d1 = true * null; var r1d2 = '' * null; var r1d3 = {} * null; +// operator / var r2a1 = null / a; var r2a2 = null / b; var r2a3 = null / c; @@ -204,6 +208,7 @@ var r2c3 = null / {}; var r2d1 = true / null; var r2d2 = '' / null; var r2d3 = {} / null; +// operator % var r3a1 = null % a; var r3a2 = null % b; var r3a3 = null % c; @@ -216,6 +221,7 @@ var r3c3 = null % {}; var r3d1 = true % null; var r3d2 = '' % null; var r3d3 = {} % null; +// operator - var r4a1 = null - a; var r4a2 = null - b; var r4a3 = null - c; @@ -228,6 +234,7 @@ var r4c3 = null - {}; var r4d1 = true - null; var r4d2 = '' - null; var r4d3 = {} - null; +// operator << var r5a1 = null << a; var r5a2 = null << b; var r5a3 = null << c; @@ -240,6 +247,7 @@ var r5c3 = null << {}; var r5d1 = true << null; var r5d2 = '' << null; var r5d3 = {} << null; +// operator >> var r6a1 = null >> a; var r6a2 = null >> b; var r6a3 = null >> c; @@ -252,6 +260,7 @@ var r6c3 = null >> {}; var r6d1 = true >> null; var r6d2 = '' >> null; var r6d3 = {} >> null; +// operator >>> var r7a1 = null >>> a; var r7a2 = null >>> b; var r7a3 = null >>> c; @@ -264,6 +273,7 @@ var r7c3 = null >>> {}; var r7d1 = true >>> null; var r7d2 = '' >>> null; var r7d3 = {} >>> null; +// operator & var r8a1 = null & a; var r8a2 = null & b; var r8a3 = null & c; @@ -276,6 +286,7 @@ var r8c3 = null & {}; var r8d1 = true & null; var r8d2 = '' & null; var r8d3 = {} & null; +// operator ^ var r9a1 = null ^ a; var r9a2 = null ^ b; var r9a3 = null ^ c; @@ -288,6 +299,7 @@ var r9c3 = null ^ {}; var r9d1 = true ^ null; var r9d2 = '' ^ null; var r9d3 = {} ^ null; +// operator | var r10a1 = null | a; var r10a2 = null | b; var r10a3 = null | c; diff --git a/tests/baselines/reference/arithmeticOperatorWithNullValueAndValidOperands.js b/tests/baselines/reference/arithmeticOperatorWithNullValueAndValidOperands.js index 1775564bfa2..40676ef4495 100644 --- a/tests/baselines/reference/arithmeticOperatorWithNullValueAndValidOperands.js +++ b/tests/baselines/reference/arithmeticOperatorWithNullValueAndValidOperands.js @@ -111,6 +111,8 @@ var rj7 = 0 | null; var rj8 = E.b | null; //// [arithmeticOperatorWithNullValueAndValidOperands.js] +// If one operand is the null or undefined value, it is treated as having the type of the +// other operand. var E; (function (E) { E[E["a"] = 0] = "a"; @@ -118,6 +120,7 @@ var E; })(E || (E = {})); var a; var b; +// operator * var ra1 = null * a; var ra2 = null * b; var ra3 = null * 1; @@ -126,6 +129,7 @@ var ra5 = a * null; var ra6 = b * null; var ra7 = 0 * null; var ra8 = 1 /* b */ * null; +// operator / var rb1 = null / a; var rb2 = null / b; var rb3 = null / 1; @@ -134,6 +138,7 @@ var rb5 = a / null; var rb6 = b / null; var rb7 = 0 / null; var rb8 = 1 /* b */ / null; +// operator % var rc1 = null % a; var rc2 = null % b; var rc3 = null % 1; @@ -142,6 +147,7 @@ var rc5 = a % null; var rc6 = b % null; var rc7 = 0 % null; var rc8 = 1 /* b */ % null; +// operator - var rd1 = null - a; var rd2 = null - b; var rd3 = null - 1; @@ -150,6 +156,7 @@ var rd5 = a - null; var rd6 = b - null; var rd7 = 0 - null; var rd8 = 1 /* b */ - null; +// operator << var re1 = null << a; var re2 = null << b; var re3 = null << 1; @@ -158,6 +165,7 @@ var re5 = a << null; var re6 = b << null; var re7 = 0 << null; var re8 = 1 /* b */ << null; +// operator >> var rf1 = null >> a; var rf2 = null >> b; var rf3 = null >> 1; @@ -166,6 +174,7 @@ var rf5 = a >> null; var rf6 = b >> null; var rf7 = 0 >> null; var rf8 = 1 /* b */ >> null; +// operator >>> var rg1 = null >>> a; var rg2 = null >>> b; var rg3 = null >>> 1; @@ -174,6 +183,7 @@ var rg5 = a >>> null; var rg6 = b >>> null; var rg7 = 0 >>> null; var rg8 = 1 /* b */ >>> null; +// operator & var rh1 = null & a; var rh2 = null & b; var rh3 = null & 1; @@ -182,6 +192,7 @@ var rh5 = a & null; var rh6 = b & null; var rh7 = 0 & null; var rh8 = 1 /* b */ & null; +// operator ^ var ri1 = null ^ a; var ri2 = null ^ b; var ri3 = null ^ 1; @@ -190,6 +201,7 @@ var ri5 = a ^ null; var ri6 = b ^ null; var ri7 = 0 ^ null; var ri8 = 1 /* b */ ^ null; +// operator | var rj1 = null | a; var rj2 = null | b; var rj3 = null | 1; diff --git a/tests/baselines/reference/arithmeticOperatorWithNullValueAndValidOperands.types b/tests/baselines/reference/arithmeticOperatorWithNullValueAndValidOperands.types new file mode 100644 index 00000000000..711ccd0c66c --- /dev/null +++ b/tests/baselines/reference/arithmeticOperatorWithNullValueAndValidOperands.types @@ -0,0 +1,450 @@ +=== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndValidOperands.ts === +// If one operand is the null or undefined value, it is treated as having the type of the +// other operand. + +enum E { +>E : E + + a, +>a : E + + b +>b : E +} + +var a: any; +>a : any + +var b: number; +>b : number + +// operator * +var ra1 = null * a; +>ra1 : number +>null * a : number +>a : any + +var ra2 = null * b; +>ra2 : number +>null * b : number +>b : number + +var ra3 = null * 1; +>ra3 : number +>null * 1 : number + +var ra4 = null * E.a; +>ra4 : number +>null * E.a : number +>E.a : E +>E : typeof E +>a : E + +var ra5 = a * null; +>ra5 : number +>a * null : number +>a : any + +var ra6 = b * null; +>ra6 : number +>b * null : number +>b : number + +var ra7 = 0 * null; +>ra7 : number +>0 * null : number + +var ra8 = E.b * null; +>ra8 : number +>E.b * null : number +>E.b : E +>E : typeof E +>b : E + +// operator / +var rb1 = null / a; +>rb1 : number +>null / a : number +>a : any + +var rb2 = null / b; +>rb2 : number +>null / b : number +>b : number + +var rb3 = null / 1; +>rb3 : number +>null / 1 : number + +var rb4 = null / E.a; +>rb4 : number +>null / E.a : number +>E.a : E +>E : typeof E +>a : E + +var rb5 = a / null; +>rb5 : number +>a / null : number +>a : any + +var rb6 = b / null; +>rb6 : number +>b / null : number +>b : number + +var rb7 = 0 / null; +>rb7 : number +>0 / null : number + +var rb8 = E.b / null; +>rb8 : number +>E.b / null : number +>E.b : E +>E : typeof E +>b : E + +// operator % +var rc1 = null % a; +>rc1 : number +>null % a : number +>a : any + +var rc2 = null % b; +>rc2 : number +>null % b : number +>b : number + +var rc3 = null % 1; +>rc3 : number +>null % 1 : number + +var rc4 = null % E.a; +>rc4 : number +>null % E.a : number +>E.a : E +>E : typeof E +>a : E + +var rc5 = a % null; +>rc5 : number +>a % null : number +>a : any + +var rc6 = b % null; +>rc6 : number +>b % null : number +>b : number + +var rc7 = 0 % null; +>rc7 : number +>0 % null : number + +var rc8 = E.b % null; +>rc8 : number +>E.b % null : number +>E.b : E +>E : typeof E +>b : E + +// operator - +var rd1 = null - a; +>rd1 : number +>null - a : number +>a : any + +var rd2 = null - b; +>rd2 : number +>null - b : number +>b : number + +var rd3 = null - 1; +>rd3 : number +>null - 1 : number + +var rd4 = null - E.a; +>rd4 : number +>null - E.a : number +>E.a : E +>E : typeof E +>a : E + +var rd5 = a - null; +>rd5 : number +>a - null : number +>a : any + +var rd6 = b - null; +>rd6 : number +>b - null : number +>b : number + +var rd7 = 0 - null; +>rd7 : number +>0 - null : number + +var rd8 = E.b - null; +>rd8 : number +>E.b - null : number +>E.b : E +>E : typeof E +>b : E + +// operator << +var re1 = null << a; +>re1 : number +>null << a : number +>a : any + +var re2 = null << b; +>re2 : number +>null << b : number +>b : number + +var re3 = null << 1; +>re3 : number +>null << 1 : number + +var re4 = null << E.a; +>re4 : number +>null << E.a : number +>E.a : E +>E : typeof E +>a : E + +var re5 = a << null; +>re5 : number +>a << null : number +>a : any + +var re6 = b << null; +>re6 : number +>b << null : number +>b : number + +var re7 = 0 << null; +>re7 : number +>0 << null : number + +var re8 = E.b << null; +>re8 : number +>E.b << null : number +>E.b : E +>E : typeof E +>b : E + +// operator >> +var rf1 = null >> a; +>rf1 : number +>null >> a : number +>a : any + +var rf2 = null >> b; +>rf2 : number +>null >> b : number +>b : number + +var rf3 = null >> 1; +>rf3 : number +>null >> 1 : number + +var rf4 = null >> E.a; +>rf4 : number +>null >> E.a : number +>E.a : E +>E : typeof E +>a : E + +var rf5 = a >> null; +>rf5 : number +>a >> null : number +>a : any + +var rf6 = b >> null; +>rf6 : number +>b >> null : number +>b : number + +var rf7 = 0 >> null; +>rf7 : number +>0 >> null : number + +var rf8 = E.b >> null; +>rf8 : number +>E.b >> null : number +>E.b : E +>E : typeof E +>b : E + +// operator >>> +var rg1 = null >>> a; +>rg1 : number +>null >>> a : number +>a : any + +var rg2 = null >>> b; +>rg2 : number +>null >>> b : number +>b : number + +var rg3 = null >>> 1; +>rg3 : number +>null >>> 1 : number + +var rg4 = null >>> E.a; +>rg4 : number +>null >>> E.a : number +>E.a : E +>E : typeof E +>a : E + +var rg5 = a >>> null; +>rg5 : number +>a >>> null : number +>a : any + +var rg6 = b >>> null; +>rg6 : number +>b >>> null : number +>b : number + +var rg7 = 0 >>> null; +>rg7 : number +>0 >>> null : number + +var rg8 = E.b >>> null; +>rg8 : number +>E.b >>> null : number +>E.b : E +>E : typeof E +>b : E + +// operator & +var rh1 = null & a; +>rh1 : number +>null & a : number +>a : any + +var rh2 = null & b; +>rh2 : number +>null & b : number +>b : number + +var rh3 = null & 1; +>rh3 : number +>null & 1 : number + +var rh4 = null & E.a; +>rh4 : number +>null & E.a : number +>E.a : E +>E : typeof E +>a : E + +var rh5 = a & null; +>rh5 : number +>a & null : number +>a : any + +var rh6 = b & null; +>rh6 : number +>b & null : number +>b : number + +var rh7 = 0 & null; +>rh7 : number +>0 & null : number + +var rh8 = E.b & null; +>rh8 : number +>E.b & null : number +>E.b : E +>E : typeof E +>b : E + +// operator ^ +var ri1 = null ^ a; +>ri1 : number +>null ^ a : number +>a : any + +var ri2 = null ^ b; +>ri2 : number +>null ^ b : number +>b : number + +var ri3 = null ^ 1; +>ri3 : number +>null ^ 1 : number + +var ri4 = null ^ E.a; +>ri4 : number +>null ^ E.a : number +>E.a : E +>E : typeof E +>a : E + +var ri5 = a ^ null; +>ri5 : number +>a ^ null : number +>a : any + +var ri6 = b ^ null; +>ri6 : number +>b ^ null : number +>b : number + +var ri7 = 0 ^ null; +>ri7 : number +>0 ^ null : number + +var ri8 = E.b ^ null; +>ri8 : number +>E.b ^ null : number +>E.b : E +>E : typeof E +>b : E + +// operator | +var rj1 = null | a; +>rj1 : number +>null | a : number +>a : any + +var rj2 = null | b; +>rj2 : number +>null | b : number +>b : number + +var rj3 = null | 1; +>rj3 : number +>null | 1 : number + +var rj4 = null | E.a; +>rj4 : number +>null | E.a : number +>E.a : E +>E : typeof E +>a : E + +var rj5 = a | null; +>rj5 : number +>a | null : number +>a : any + +var rj6 = b | null; +>rj6 : number +>b | null : number +>b : number + +var rj7 = 0 | null; +>rj7 : number +>0 | null : number + +var rj8 = E.b | null; +>rj8 : number +>E.b | null : number +>E.b : E +>E : typeof E +>b : E + diff --git a/tests/baselines/reference/arithmeticOperatorWithOnlyNullValueOrUndefinedValue.js b/tests/baselines/reference/arithmeticOperatorWithOnlyNullValueOrUndefinedValue.js index d0dbdead8c8..f1421a6b5c9 100644 --- a/tests/baselines/reference/arithmeticOperatorWithOnlyNullValueOrUndefinedValue.js +++ b/tests/baselines/reference/arithmeticOperatorWithOnlyNullValueOrUndefinedValue.js @@ -60,42 +60,52 @@ var rj3 = undefined | null; var rj4 = undefined | undefined; //// [arithmeticOperatorWithOnlyNullValueOrUndefinedValue.js] +// operator * var ra1 = null * null; var ra2 = null * undefined; var ra3 = undefined * null; var ra4 = undefined * undefined; +// operator / var rb1 = null / null; var rb2 = null / undefined; var rb3 = undefined / null; var rb4 = undefined / undefined; +// operator % var rc1 = null % null; var rc2 = null % undefined; var rc3 = undefined % null; var rc4 = undefined % undefined; +// operator - var rd1 = null - null; var rd2 = null - undefined; var rd3 = undefined - null; var rd4 = undefined - undefined; +// operator << var re1 = null << null; var re2 = null << undefined; var re3 = undefined << null; var re4 = undefined << undefined; +// operator >> var rf1 = null >> null; var rf2 = null >> undefined; var rf3 = undefined >> null; var rf4 = undefined >> undefined; +// operator >>> var rg1 = null >>> null; var rg2 = null >>> undefined; var rg3 = undefined >>> null; var rg4 = undefined >>> undefined; +// operator & var rh1 = null & null; var rh2 = null & undefined; var rh3 = undefined & null; var rh4 = undefined & undefined; +// operator ^ var ri1 = null ^ null; var ri2 = null ^ undefined; var ri3 = undefined ^ null; var ri4 = undefined ^ undefined; +// operator | var rj1 = null | null; var rj2 = null | undefined; var rj3 = undefined | null; diff --git a/tests/baselines/reference/arithmeticOperatorWithTypeParameter.js b/tests/baselines/reference/arithmeticOperatorWithTypeParameter.js index e3b823373d7..94475b88fd8 100644 --- a/tests/baselines/reference/arithmeticOperatorWithTypeParameter.js +++ b/tests/baselines/reference/arithmeticOperatorWithTypeParameter.js @@ -130,6 +130,7 @@ function foo(t: T) { } //// [arithmeticOperatorWithTypeParameter.js] +// type parameter type is not valid for arithmetic operand function foo(t) { var a; var b; diff --git a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.js b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.js index 4b79d44f1f0..b64c2d9dc09 100644 --- a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.js +++ b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.js @@ -177,9 +177,12 @@ var r10d2 = '' | undefined; var r10d3 = {} | undefined; //// [arithmeticOperatorWithUndefinedValueAndInvalidOperands.js] +// If one operand is the undefined or undefined value, it is treated as having the type of the +// other operand. var a; var b; var c; +// operator * var r1a1 = undefined * a; var r1a2 = undefined * b; var r1a3 = undefined * c; @@ -192,6 +195,7 @@ var r1c3 = undefined * {}; var r1d1 = true * undefined; var r1d2 = '' * undefined; var r1d3 = {} * undefined; +// operator / var r2a1 = undefined / a; var r2a2 = undefined / b; var r2a3 = undefined / c; @@ -204,6 +208,7 @@ var r2c3 = undefined / {}; var r2d1 = true / undefined; var r2d2 = '' / undefined; var r2d3 = {} / undefined; +// operator % var r3a1 = undefined % a; var r3a2 = undefined % b; var r3a3 = undefined % c; @@ -216,6 +221,7 @@ var r3c3 = undefined % {}; var r3d1 = true % undefined; var r3d2 = '' % undefined; var r3d3 = {} % undefined; +// operator - var r4a1 = undefined - a; var r4a2 = undefined - b; var r4a3 = undefined - c; @@ -228,6 +234,7 @@ var r4c3 = undefined - {}; var r4d1 = true - undefined; var r4d2 = '' - undefined; var r4d3 = {} - undefined; +// operator << var r5a1 = undefined << a; var r5a2 = undefined << b; var r5a3 = undefined << c; @@ -240,6 +247,7 @@ var r5c3 = undefined << {}; var r5d1 = true << undefined; var r5d2 = '' << undefined; var r5d3 = {} << undefined; +// operator >> var r6a1 = undefined >> a; var r6a2 = undefined >> b; var r6a3 = undefined >> c; @@ -252,6 +260,7 @@ var r6c3 = undefined >> {}; var r6d1 = true >> undefined; var r6d2 = '' >> undefined; var r6d3 = {} >> undefined; +// operator >>> var r7a1 = undefined >>> a; var r7a2 = undefined >>> b; var r7a3 = undefined >>> c; @@ -264,6 +273,7 @@ var r7c3 = undefined >>> {}; var r7d1 = true >>> undefined; var r7d2 = '' >>> undefined; var r7d3 = {} >>> undefined; +// operator & var r8a1 = undefined & a; var r8a2 = undefined & b; var r8a3 = undefined & c; @@ -276,6 +286,7 @@ var r8c3 = undefined & {}; var r8d1 = true & undefined; var r8d2 = '' & undefined; var r8d3 = {} & undefined; +// operator ^ var r9a1 = undefined ^ a; var r9a2 = undefined ^ b; var r9a3 = undefined ^ c; @@ -288,6 +299,7 @@ var r9c3 = undefined ^ {}; var r9d1 = true ^ undefined; var r9d2 = '' ^ undefined; var r9d3 = {} ^ undefined; +// operator | var r10a1 = undefined | a; var r10a2 = undefined | b; var r10a3 = undefined | c; diff --git a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndValidOperands.js b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndValidOperands.js index 41a0900d64a..ddc2c87dd7a 100644 --- a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndValidOperands.js +++ b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndValidOperands.js @@ -111,6 +111,8 @@ var rj7 = 0 | undefined; var rj8 = E.b | undefined; //// [arithmeticOperatorWithUndefinedValueAndValidOperands.js] +// If one operand is the undefined or undefined value, it is treated as having the type of the +// other operand. var E; (function (E) { E[E["a"] = 0] = "a"; @@ -118,6 +120,7 @@ var E; })(E || (E = {})); var a; var b; +// operator * var ra1 = undefined * a; var ra2 = undefined * b; var ra3 = undefined * 1; @@ -126,6 +129,7 @@ var ra5 = a * undefined; var ra6 = b * undefined; var ra7 = 0 * undefined; var ra8 = 1 /* b */ * undefined; +// operator / var rb1 = undefined / a; var rb2 = undefined / b; var rb3 = undefined / 1; @@ -134,6 +138,7 @@ var rb5 = a / undefined; var rb6 = b / undefined; var rb7 = 0 / undefined; var rb8 = 1 /* b */ / undefined; +// operator % var rc1 = undefined % a; var rc2 = undefined % b; var rc3 = undefined % 1; @@ -142,6 +147,7 @@ var rc5 = a % undefined; var rc6 = b % undefined; var rc7 = 0 % undefined; var rc8 = 1 /* b */ % undefined; +// operator - var rd1 = undefined - a; var rd2 = undefined - b; var rd3 = undefined - 1; @@ -150,6 +156,7 @@ var rd5 = a - undefined; var rd6 = b - undefined; var rd7 = 0 - undefined; var rd8 = 1 /* b */ - undefined; +// operator << var re1 = undefined << a; var re2 = undefined << b; var re3 = undefined << 1; @@ -158,6 +165,7 @@ var re5 = a << undefined; var re6 = b << undefined; var re7 = 0 << undefined; var re8 = 1 /* b */ << undefined; +// operator >> var rf1 = undefined >> a; var rf2 = undefined >> b; var rf3 = undefined >> 1; @@ -166,6 +174,7 @@ var rf5 = a >> undefined; var rf6 = b >> undefined; var rf7 = 0 >> undefined; var rf8 = 1 /* b */ >> undefined; +// operator >>> var rg1 = undefined >>> a; var rg2 = undefined >>> b; var rg3 = undefined >>> 1; @@ -174,6 +183,7 @@ var rg5 = a >>> undefined; var rg6 = b >>> undefined; var rg7 = 0 >>> undefined; var rg8 = 1 /* b */ >>> undefined; +// operator & var rh1 = undefined & a; var rh2 = undefined & b; var rh3 = undefined & 1; @@ -182,6 +192,7 @@ var rh5 = a & undefined; var rh6 = b & undefined; var rh7 = 0 & undefined; var rh8 = 1 /* b */ & undefined; +// operator ^ var ri1 = undefined ^ a; var ri2 = undefined ^ b; var ri3 = undefined ^ 1; @@ -190,6 +201,7 @@ var ri5 = a ^ undefined; var ri6 = b ^ undefined; var ri7 = 0 ^ undefined; var ri8 = 1 /* b */ ^ undefined; +// operator | var rj1 = undefined | a; var rj2 = undefined | b; var rj3 = undefined | 1; diff --git a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndValidOperands.types b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndValidOperands.types new file mode 100644 index 00000000000..7db074df8bb --- /dev/null +++ b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndValidOperands.types @@ -0,0 +1,530 @@ +=== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndValidOperands.ts === +// If one operand is the undefined or undefined value, it is treated as having the type of the +// other operand. + +enum E { +>E : E + + a, +>a : E + + b +>b : E +} + +var a: any; +>a : any + +var b: number; +>b : number + +// operator * +var ra1 = undefined * a; +>ra1 : number +>undefined * a : number +>undefined : undefined +>a : any + +var ra2 = undefined * b; +>ra2 : number +>undefined * b : number +>undefined : undefined +>b : number + +var ra3 = undefined * 1; +>ra3 : number +>undefined * 1 : number +>undefined : undefined + +var ra4 = undefined * E.a; +>ra4 : number +>undefined * E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var ra5 = a * undefined; +>ra5 : number +>a * undefined : number +>a : any +>undefined : undefined + +var ra6 = b * undefined; +>ra6 : number +>b * undefined : number +>b : number +>undefined : undefined + +var ra7 = 0 * undefined; +>ra7 : number +>0 * undefined : number +>undefined : undefined + +var ra8 = E.b * undefined; +>ra8 : number +>E.b * undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator / +var rb1 = undefined / a; +>rb1 : number +>undefined / a : number +>undefined : undefined +>a : any + +var rb2 = undefined / b; +>rb2 : number +>undefined / b : number +>undefined : undefined +>b : number + +var rb3 = undefined / 1; +>rb3 : number +>undefined / 1 : number +>undefined : undefined + +var rb4 = undefined / E.a; +>rb4 : number +>undefined / E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var rb5 = a / undefined; +>rb5 : number +>a / undefined : number +>a : any +>undefined : undefined + +var rb6 = b / undefined; +>rb6 : number +>b / undefined : number +>b : number +>undefined : undefined + +var rb7 = 0 / undefined; +>rb7 : number +>0 / undefined : number +>undefined : undefined + +var rb8 = E.b / undefined; +>rb8 : number +>E.b / undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator % +var rc1 = undefined % a; +>rc1 : number +>undefined % a : number +>undefined : undefined +>a : any + +var rc2 = undefined % b; +>rc2 : number +>undefined % b : number +>undefined : undefined +>b : number + +var rc3 = undefined % 1; +>rc3 : number +>undefined % 1 : number +>undefined : undefined + +var rc4 = undefined % E.a; +>rc4 : number +>undefined % E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var rc5 = a % undefined; +>rc5 : number +>a % undefined : number +>a : any +>undefined : undefined + +var rc6 = b % undefined; +>rc6 : number +>b % undefined : number +>b : number +>undefined : undefined + +var rc7 = 0 % undefined; +>rc7 : number +>0 % undefined : number +>undefined : undefined + +var rc8 = E.b % undefined; +>rc8 : number +>E.b % undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator - +var rd1 = undefined - a; +>rd1 : number +>undefined - a : number +>undefined : undefined +>a : any + +var rd2 = undefined - b; +>rd2 : number +>undefined - b : number +>undefined : undefined +>b : number + +var rd3 = undefined - 1; +>rd3 : number +>undefined - 1 : number +>undefined : undefined + +var rd4 = undefined - E.a; +>rd4 : number +>undefined - E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var rd5 = a - undefined; +>rd5 : number +>a - undefined : number +>a : any +>undefined : undefined + +var rd6 = b - undefined; +>rd6 : number +>b - undefined : number +>b : number +>undefined : undefined + +var rd7 = 0 - undefined; +>rd7 : number +>0 - undefined : number +>undefined : undefined + +var rd8 = E.b - undefined; +>rd8 : number +>E.b - undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator << +var re1 = undefined << a; +>re1 : number +>undefined << a : number +>undefined : undefined +>a : any + +var re2 = undefined << b; +>re2 : number +>undefined << b : number +>undefined : undefined +>b : number + +var re3 = undefined << 1; +>re3 : number +>undefined << 1 : number +>undefined : undefined + +var re4 = undefined << E.a; +>re4 : number +>undefined << E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var re5 = a << undefined; +>re5 : number +>a << undefined : number +>a : any +>undefined : undefined + +var re6 = b << undefined; +>re6 : number +>b << undefined : number +>b : number +>undefined : undefined + +var re7 = 0 << undefined; +>re7 : number +>0 << undefined : number +>undefined : undefined + +var re8 = E.b << undefined; +>re8 : number +>E.b << undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator >> +var rf1 = undefined >> a; +>rf1 : number +>undefined >> a : number +>undefined : undefined +>a : any + +var rf2 = undefined >> b; +>rf2 : number +>undefined >> b : number +>undefined : undefined +>b : number + +var rf3 = undefined >> 1; +>rf3 : number +>undefined >> 1 : number +>undefined : undefined + +var rf4 = undefined >> E.a; +>rf4 : number +>undefined >> E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var rf5 = a >> undefined; +>rf5 : number +>a >> undefined : number +>a : any +>undefined : undefined + +var rf6 = b >> undefined; +>rf6 : number +>b >> undefined : number +>b : number +>undefined : undefined + +var rf7 = 0 >> undefined; +>rf7 : number +>0 >> undefined : number +>undefined : undefined + +var rf8 = E.b >> undefined; +>rf8 : number +>E.b >> undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator >>> +var rg1 = undefined >>> a; +>rg1 : number +>undefined >>> a : number +>undefined : undefined +>a : any + +var rg2 = undefined >>> b; +>rg2 : number +>undefined >>> b : number +>undefined : undefined +>b : number + +var rg3 = undefined >>> 1; +>rg3 : number +>undefined >>> 1 : number +>undefined : undefined + +var rg4 = undefined >>> E.a; +>rg4 : number +>undefined >>> E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var rg5 = a >>> undefined; +>rg5 : number +>a >>> undefined : number +>a : any +>undefined : undefined + +var rg6 = b >>> undefined; +>rg6 : number +>b >>> undefined : number +>b : number +>undefined : undefined + +var rg7 = 0 >>> undefined; +>rg7 : number +>0 >>> undefined : number +>undefined : undefined + +var rg8 = E.b >>> undefined; +>rg8 : number +>E.b >>> undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator & +var rh1 = undefined & a; +>rh1 : number +>undefined & a : number +>undefined : undefined +>a : any + +var rh2 = undefined & b; +>rh2 : number +>undefined & b : number +>undefined : undefined +>b : number + +var rh3 = undefined & 1; +>rh3 : number +>undefined & 1 : number +>undefined : undefined + +var rh4 = undefined & E.a; +>rh4 : number +>undefined & E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var rh5 = a & undefined; +>rh5 : number +>a & undefined : number +>a : any +>undefined : undefined + +var rh6 = b & undefined; +>rh6 : number +>b & undefined : number +>b : number +>undefined : undefined + +var rh7 = 0 & undefined; +>rh7 : number +>0 & undefined : number +>undefined : undefined + +var rh8 = E.b & undefined; +>rh8 : number +>E.b & undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator ^ +var ri1 = undefined ^ a; +>ri1 : number +>undefined ^ a : number +>undefined : undefined +>a : any + +var ri2 = undefined ^ b; +>ri2 : number +>undefined ^ b : number +>undefined : undefined +>b : number + +var ri3 = undefined ^ 1; +>ri3 : number +>undefined ^ 1 : number +>undefined : undefined + +var ri4 = undefined ^ E.a; +>ri4 : number +>undefined ^ E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var ri5 = a ^ undefined; +>ri5 : number +>a ^ undefined : number +>a : any +>undefined : undefined + +var ri6 = b ^ undefined; +>ri6 : number +>b ^ undefined : number +>b : number +>undefined : undefined + +var ri7 = 0 ^ undefined; +>ri7 : number +>0 ^ undefined : number +>undefined : undefined + +var ri8 = E.b ^ undefined; +>ri8 : number +>E.b ^ undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + +// operator | +var rj1 = undefined | a; +>rj1 : number +>undefined | a : number +>undefined : undefined +>a : any + +var rj2 = undefined | b; +>rj2 : number +>undefined | b : number +>undefined : undefined +>b : number + +var rj3 = undefined | 1; +>rj3 : number +>undefined | 1 : number +>undefined : undefined + +var rj4 = undefined | E.a; +>rj4 : number +>undefined | E.a : number +>undefined : undefined +>E.a : E +>E : typeof E +>a : E + +var rj5 = a | undefined; +>rj5 : number +>a | undefined : number +>a : any +>undefined : undefined + +var rj6 = b | undefined; +>rj6 : number +>b | undefined : number +>b : number +>undefined : undefined + +var rj7 = 0 | undefined; +>rj7 : number +>0 | undefined : number +>undefined : undefined + +var rj8 = E.b | undefined; +>rj8 : number +>E.b | undefined : number +>E.b : E +>E : typeof E +>b : E +>undefined : undefined + diff --git a/tests/baselines/reference/arrayAssignmentTest1.js b/tests/baselines/reference/arrayAssignmentTest1.js index 18550d61d5c..2a82d436596 100644 --- a/tests/baselines/reference/arrayAssignmentTest1.js +++ b/tests/baselines/reference/arrayAssignmentTest1.js @@ -121,6 +121,17 @@ var C3 = (function () { }; return C3; })(); +/* + +This behaves unexpectedly with the following types: + +Type 1 of any[]: + +* Type 2 of the following throws an error but shouldn't: () => void[], SomeClass[], and {one: 1}[]. + +* Type 2 of the following doesn't throw an error but should: {one: 1}, new() => SomeClass, SomeClass. + +*/ var a1 = null; var c1 = new C1(); var i1 = c1; @@ -138,33 +149,36 @@ var arr_i1_2 = []; var arr_c1_2 = []; var arr_c2_2 = []; var arr_c3 = []; -var i1_error = []; -var c1_error = []; -var c2_error = []; -var c3_error = []; -arr_any = arr_i1; -arr_any = arr_c1; -arr_any = arr_c2; -arr_any = arr_c3; -arr_i1 = arr_i1; -arr_i1 = arr_c1; -arr_i1 = arr_c2; -arr_i1 = arr_c3; -arr_c1 = arr_c1; -arr_c1 = arr_c2; -arr_c1 = arr_i1; -arr_c1 = arr_c3; -arr_c2 = arr_c2; -arr_c2 = arr_c1; -arr_c2 = arr_i1; -arr_c2 = arr_c3; -arr_c3 = arr_c2_2; -arr_c3 = arr_c1_2; -arr_c3 = arr_i1_2; -arr_any = f1; -arr_any = o1; -arr_any = a1; -arr_any = c1; -arr_any = c2; -arr_any = c3; -arr_any = i1; +var i1_error = []; // should be an error - is +var c1_error = []; // should be an error - is +var c2_error = []; // should be an error - is +var c3_error = []; // should be an error - is +arr_any = arr_i1; // should be ok - is +arr_any = arr_c1; // should be ok - is +arr_any = arr_c2; // should be ok - is +arr_any = arr_c3; // should be ok - is +arr_i1 = arr_i1; // should be ok - subtype relationship - is +arr_i1 = arr_c1; // should be ok - subtype relationship - is +arr_i1 = arr_c2; // should be ok - subtype relationship - is +arr_i1 = arr_c3; // should be an error - is +arr_c1 = arr_c1; // should be ok - subtype relationship - is +arr_c1 = arr_c2; // should be ok - subtype relationship - is +arr_c1 = arr_i1; // should be an error - is +arr_c1 = arr_c3; // should be an error - is +arr_c2 = arr_c2; // should be ok - subtype relationship - is +arr_c2 = arr_c1; // should be an error - subtype relationship - is +arr_c2 = arr_i1; // should be an error - subtype relationship - is +arr_c2 = arr_c3; // should be an error - is +// "clean up bug" occurs at this point +// if you move these three expressions to another file, they raise an error +// something to do with state from the above propagating forward? +arr_c3 = arr_c2_2; // should be an error - is +arr_c3 = arr_c1_2; // should be an error - is +arr_c3 = arr_i1_2; // should be an error - is +arr_any = f1; // should be an error - is +arr_any = o1; // should be an error - is +arr_any = a1; // should be ok - is +arr_any = c1; // should be an error - is +arr_any = c2; // should be an error - is +arr_any = c3; // should be an error - is +arr_any = i1; // should be an error - is diff --git a/tests/baselines/reference/arrayAssignmentTest2.js b/tests/baselines/reference/arrayAssignmentTest2.js index 85d65f0ef6a..a62e0eec9ac 100644 --- a/tests/baselines/reference/arrayAssignmentTest2.js +++ b/tests/baselines/reference/arrayAssignmentTest2.js @@ -95,6 +95,17 @@ var C3 = (function () { }; return C3; })(); +/* + +This behaves unexpectedly with the following types: + +Type 1 of any[]: + +* Type 2 of the following throws an error but shouldn't: () => void[], SomeClass[], and {one: 1}[]. + +* Type 2 of the following doesn't throw an error but should: {one: 1}, new() => SomeClass, SomeClass. + +*/ var a1 = null; var c1 = new C1(); var i1 = c1; @@ -112,16 +123,17 @@ var arr_i1_2 = []; var arr_c1_2 = []; var arr_c2_2 = []; var arr_c3 = []; -arr_c3 = arr_c2_2; -arr_c3 = arr_c1_2; -arr_c3 = arr_i1_2; -arr_any = f1; +// "clean up error" occurs at this point +arr_c3 = arr_c2_2; // should be an error - is +arr_c3 = arr_c1_2; // should be an error - is +arr_c3 = arr_i1_2; // should be an error - is +arr_any = f1; // should be an error - is arr_any = function () { return null; -}; -arr_any = o1; -arr_any = a1; -arr_any = c1; -arr_any = c2; -arr_any = c3; -arr_any = i1; +}; // should be an error - is +arr_any = o1; // should be an error - is +arr_any = a1; // should be ok - is +arr_any = c1; // should be an error - is +arr_any = c2; // should be an error - is +arr_any = c3; // should be an error - is +arr_any = i1; // should be an error - is diff --git a/tests/baselines/reference/arrayAssignmentTest3.js b/tests/baselines/reference/arrayAssignmentTest3.js index 714e73c8b3d..74cd6662623 100644 --- a/tests/baselines/reference/arrayAssignmentTest3.js +++ b/tests/baselines/reference/arrayAssignmentTest3.js @@ -15,6 +15,9 @@ var xx = new a(null, 7, new B()); //// [arrayAssignmentTest3.js] +// The following gives no error +// Michal saw no error if he used number instead of B, +// but I do... var B = (function () { function B() { } diff --git a/tests/baselines/reference/arrayAssignmentTest4.js b/tests/baselines/reference/arrayAssignmentTest4.js index db40934368b..7ac0ccde77f 100644 --- a/tests/baselines/reference/arrayAssignmentTest4.js +++ b/tests/baselines/reference/arrayAssignmentTest4.js @@ -35,10 +35,21 @@ var C3 = (function () { }; return C3; })(); +/* + +This behaves unexpectedly with teh following types: + +Type 1 of any[]: + +* Type 2 of the following throws an error but shouldn't: () => void[], SomeClass[], and {one: 1}[]. + +* Type 2 of the following doesn't throw an error but should: {one: 1}, new() => SomeClass, SomeClass. + +*/ var c3 = new C3(); var o1 = { one: 1 }; var arr_any = []; arr_any = function () { return null; -}; -arr_any = c3; +}; // should be an error - is +arr_any = c3; // should be an error - is diff --git a/tests/baselines/reference/arrayAssignmentTest5.js b/tests/baselines/reference/arrayAssignmentTest5.js index 8eb2b65154a..a4775536783 100644 --- a/tests/baselines/reference/arrayAssignmentTest5.js +++ b/tests/baselines/reference/arrayAssignmentTest5.js @@ -43,7 +43,7 @@ var Test; var lineTokens = this.tokenize(line, state, true); var tokens = lineTokens.tokens; if (tokens.length === 0) { - return this.onEnter(line, tokens, offset); + return this.onEnter(line, tokens, offset); // <== this should produce an error since onEnter can not be called with (string, IStateToken[], offset) } }; Bug.prototype.tokenize = function (line, state, includeStates) { diff --git a/tests/baselines/reference/arrayAssignmentTest6.types b/tests/baselines/reference/arrayAssignmentTest6.types new file mode 100644 index 00000000000..0c932cb7556 --- /dev/null +++ b/tests/baselines/reference/arrayAssignmentTest6.types @@ -0,0 +1,52 @@ +=== tests/cases/compiler/arrayAssignmentTest6.ts === +module Test { +>Test : typeof Test + + interface IState { +>IState : IState + } + interface IToken { +>IToken : IToken + + startIndex: number; +>startIndex : number + } + interface ILineTokens { +>ILineTokens : ILineTokens + + tokens: IToken[]; +>tokens : IToken[] +>IToken : IToken + + endState: IState; +>endState : IState +>IState : IState + } + interface IMode { +>IMode : IMode + + tokenize(line:string, state:IState, includeStates:boolean):ILineTokens; +>tokenize : (line: string, state: IState, includeStates: boolean) => ILineTokens +>line : string +>state : IState +>IState : IState +>includeStates : boolean +>ILineTokens : ILineTokens + } + export class Bug implements IMode { +>Bug : Bug +>IMode : IMode + + public tokenize(line:string, tokens:IToken[], includeStates:boolean):ILineTokens { +>tokenize : (line: string, tokens: IToken[], includeStates: boolean) => ILineTokens +>line : string +>tokens : IToken[] +>IToken : IToken +>includeStates : boolean +>ILineTokens : ILineTokens + + return null; + } + } +} + diff --git a/tests/baselines/reference/arrayAugment.js b/tests/baselines/reference/arrayAugment.js index b9023a5b15e..20cf510712a 100644 --- a/tests/baselines/reference/arrayAugment.js +++ b/tests/baselines/reference/arrayAugment.js @@ -11,4 +11,4 @@ var y: string[][]; // Expect no error here //// [arrayAugment.js] var x = ['']; var y = x.split(4); -var y; +var y; // Expect no error here diff --git a/tests/baselines/reference/arrayAugment.types b/tests/baselines/reference/arrayAugment.types new file mode 100644 index 00000000000..b338d7f5c5f --- /dev/null +++ b/tests/baselines/reference/arrayAugment.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/arrayAugment.ts === +interface Array { +>Array : T[] +>T : T + + split: (parts: number) => T[][]; +>split : (parts: number) => T[][] +>parts : number +>T : T +} + +var x = ['']; +>x : string[] +>[''] : string[] + +var y = x.split(4); +>y : string[][] +>x.split(4) : string[][] +>x.split : (parts: number) => string[][] +>x : string[] +>split : (parts: number) => string[][] + +var y: string[][]; // Expect no error here +>y : string[][] + diff --git a/tests/baselines/reference/arrayBestCommonTypes.js b/tests/baselines/reference/arrayBestCommonTypes.js index 0a1b29e5e7f..675d84119c0 100644 --- a/tests/baselines/reference/arrayBestCommonTypes.js +++ b/tests/baselines/reference/arrayBestCommonTypes.js @@ -102,6 +102,7 @@ var f = (function () { var t2 = [{ x: true, y: new derived() }, { x: false, y: new base() }]; var t3 = [{ x: undefined, y: new base() }, { x: '', y: new derived() }]; var anyObj = null; + // Order matters here so test all the variants var a1 = [{ x: 0, y: 'a' }, { x: 'a', y: 'a' }, { x: anyObj, y: 'a' }]; var a2 = [{ x: anyObj, y: 'a' }, { x: 0, y: 'a' }, { x: 'a', y: 'a' }]; var a3 = [{ x: 0, y: 'a' }, { x: anyObj, y: 'a' }, { x: 'a', y: 'a' }]; diff --git a/tests/baselines/reference/arrayBestCommonTypes.types b/tests/baselines/reference/arrayBestCommonTypes.types new file mode 100644 index 00000000000..40f74350fe5 --- /dev/null +++ b/tests/baselines/reference/arrayBestCommonTypes.types @@ -0,0 +1,327 @@ +=== tests/cases/compiler/arrayBestCommonTypes.ts === +interface iface { } +>iface : iface + +class base implements iface { } +>base : base +>iface : iface + +class base2 implements iface { } +>base2 : base2 +>iface : iface + +class derived extends base { } +>derived : derived +>base : base + + +class f { +>f : f + + public voidIfAny(x: boolean, y?: boolean): number; +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>x : boolean +>y : boolean + + public voidIfAny(x: string, y?: boolean): number; +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>x : string +>y : boolean + + public voidIfAny(x: number, y?: boolean): number; +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>x : number +>y : boolean + + public voidIfAny(x: any, y =false): any { return null; } +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>x : any +>y : boolean + + public x() { +>x : () => void + + (this.voidIfAny([4, 2][0])); +>(this.voidIfAny([4, 2][0])) : number +>(this.voidIfAny([4, 2][0])) : number +>this.voidIfAny([4, 2][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[4, 2][0] : number +>[4, 2] : number[] + + (this.voidIfAny([4, 2, undefined][0])); +>(this.voidIfAny([4, 2, undefined][0])) : number +>(this.voidIfAny([4, 2, undefined][0])) : number +>this.voidIfAny([4, 2, undefined][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[4, 2, undefined][0] : number +>[4, 2, undefined] : number[] +>undefined : undefined + + (this.voidIfAny([undefined, 2, 4][0])); +>(this.voidIfAny([undefined, 2, 4][0])) : number +>(this.voidIfAny([undefined, 2, 4][0])) : number +>this.voidIfAny([undefined, 2, 4][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[undefined, 2, 4][0] : number +>[undefined, 2, 4] : number[] +>undefined : undefined + + (this.voidIfAny([null, 2, 4][0])); +>(this.voidIfAny([null, 2, 4][0])) : number +>(this.voidIfAny([null, 2, 4][0])) : number +>this.voidIfAny([null, 2, 4][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[null, 2, 4][0] : number +>[null, 2, 4] : number[] + + (this.voidIfAny([2, 4, null][0])); +>(this.voidIfAny([2, 4, null][0])) : number +>(this.voidIfAny([2, 4, null][0])) : number +>this.voidIfAny([2, 4, null][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[2, 4, null][0] : number +>[2, 4, null] : number[] + + (this.voidIfAny([undefined, 4, null][0])); +>(this.voidIfAny([undefined, 4, null][0])) : number +>(this.voidIfAny([undefined, 4, null][0])) : number +>this.voidIfAny([undefined, 4, null][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[undefined, 4, null][0] : number +>[undefined, 4, null] : number[] +>undefined : undefined + + (this.voidIfAny(['', "q"][0])); +>(this.voidIfAny(['', "q"][0])) : number +>(this.voidIfAny(['', "q"][0])) : number +>this.voidIfAny(['', "q"][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>['', "q"][0] : string +>['', "q"] : string[] + + (this.voidIfAny(['', "q", undefined][0])); +>(this.voidIfAny(['', "q", undefined][0])) : number +>(this.voidIfAny(['', "q", undefined][0])) : number +>this.voidIfAny(['', "q", undefined][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>['', "q", undefined][0] : string +>['', "q", undefined] : string[] +>undefined : undefined + + (this.voidIfAny([undefined, "q", ''][0])); +>(this.voidIfAny([undefined, "q", ''][0])) : number +>(this.voidIfAny([undefined, "q", ''][0])) : number +>this.voidIfAny([undefined, "q", ''][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[undefined, "q", ''][0] : string +>[undefined, "q", ''] : string[] +>undefined : undefined + + (this.voidIfAny([null, "q", ''][0])); +>(this.voidIfAny([null, "q", ''][0])) : number +>(this.voidIfAny([null, "q", ''][0])) : number +>this.voidIfAny([null, "q", ''][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[null, "q", ''][0] : string +>[null, "q", ''] : string[] + + (this.voidIfAny(["q", '', null][0])); +>(this.voidIfAny(["q", '', null][0])) : number +>(this.voidIfAny(["q", '', null][0])) : number +>this.voidIfAny(["q", '', null][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>["q", '', null][0] : string +>["q", '', null] : string[] + + (this.voidIfAny([undefined, '', null][0])); +>(this.voidIfAny([undefined, '', null][0])) : number +>(this.voidIfAny([undefined, '', null][0])) : number +>this.voidIfAny([undefined, '', null][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[undefined, '', null][0] : string +>[undefined, '', null] : string[] +>undefined : undefined + + (this.voidIfAny([[3,4],[null]][0][0])); +>(this.voidIfAny([[3,4],[null]][0][0])) : number +>(this.voidIfAny([[3,4],[null]][0][0])) : number +>this.voidIfAny([[3,4],[null]][0][0]) : number +>this.voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>this : f +>voidIfAny : { (x: boolean, y?: boolean): number; (x: string, y?: boolean): number; (x: number, y?: boolean): number; } +>[[3,4],[null]][0][0] : number +>[[3,4],[null]][0] : number[] +>[[3,4],[null]] : number[][] +>[3,4] : number[] +>[null] : null[] + + + var t1: { x: number; y: base; }[] = [ { x: 7, y: new derived() }, { x: 5, y: new base() } ]; +>t1 : { x: number; y: base; }[] +>x : number +>y : base +>base : base +>[ { x: 7, y: new derived() }, { x: 5, y: new base() } ] : { x: number; y: base; }[] +>{ x: 7, y: new derived() } : { x: number; y: derived; } +>x : number +>y : derived +>new derived() : derived +>derived : typeof derived +>{ x: 5, y: new base() } : { x: number; y: base; } +>x : number +>y : base +>new base() : base +>base : typeof base + + var t2: { x: boolean; y: base; }[] = [ { x: true, y: new derived() }, { x: false, y: new base() } ]; +>t2 : { x: boolean; y: base; }[] +>x : boolean +>y : base +>base : base +>[ { x: true, y: new derived() }, { x: false, y: new base() } ] : { x: boolean; y: base; }[] +>{ x: true, y: new derived() } : { x: boolean; y: derived; } +>x : boolean +>y : derived +>new derived() : derived +>derived : typeof derived +>{ x: false, y: new base() } : { x: boolean; y: base; } +>x : boolean +>y : base +>new base() : base +>base : typeof base + + var t3: { x: string; y: base; }[] = [ { x: undefined, y: new base() }, { x: '', y: new derived() } ]; +>t3 : { x: string; y: base; }[] +>x : string +>y : base +>base : base +>[ { x: undefined, y: new base() }, { x: '', y: new derived() } ] : { x: string; y: base; }[] +>{ x: undefined, y: new base() } : { x: undefined; y: base; } +>x : any +>undefined : undefined +>y : base +>new base() : base +>base : typeof base +>{ x: '', y: new derived() } : { x: string; y: derived; } +>x : string +>y : derived +>new derived() : derived +>derived : typeof derived + + var anyObj: any = null; +>anyObj : any + + // Order matters here so test all the variants + var a1 = [ {x: 0, y: 'a'}, {x: 'a', y: 'a'}, {x: anyObj, y: 'a'} ]; +>a1 : { x: any; y: string; }[] +>[ {x: 0, y: 'a'}, {x: 'a', y: 'a'}, {x: anyObj, y: 'a'} ] : { x: any; y: string; }[] +>{x: 0, y: 'a'} : { x: number; y: string; } +>x : number +>y : string +>{x: 'a', y: 'a'} : { x: string; y: string; } +>x : string +>y : string +>{x: anyObj, y: 'a'} : { x: any; y: string; } +>x : any +>anyObj : any +>y : string + + var a2 = [ {x: anyObj, y: 'a'}, {x: 0, y: 'a'}, {x: 'a', y: 'a'} ]; +>a2 : { x: any; y: string; }[] +>[ {x: anyObj, y: 'a'}, {x: 0, y: 'a'}, {x: 'a', y: 'a'} ] : { x: any; y: string; }[] +>{x: anyObj, y: 'a'} : { x: any; y: string; } +>x : any +>anyObj : any +>y : string +>{x: 0, y: 'a'} : { x: number; y: string; } +>x : number +>y : string +>{x: 'a', y: 'a'} : { x: string; y: string; } +>x : string +>y : string + + var a3 = [ {x: 0, y: 'a'}, {x: anyObj, y: 'a'}, {x: 'a', y: 'a'} ]; +>a3 : { x: any; y: string; }[] +>[ {x: 0, y: 'a'}, {x: anyObj, y: 'a'}, {x: 'a', y: 'a'} ] : { x: any; y: string; }[] +>{x: 0, y: 'a'} : { x: number; y: string; } +>x : number +>y : string +>{x: anyObj, y: 'a'} : { x: any; y: string; } +>x : any +>anyObj : any +>y : string +>{x: 'a', y: 'a'} : { x: string; y: string; } +>x : string +>y : string + + var ifaceObj: iface = null; +>ifaceObj : iface +>iface : iface + + var baseObj = new base(); +>baseObj : base +>new base() : base +>base : typeof base + + var base2Obj = new base2(); +>base2Obj : base2 +>new base2() : base2 +>base2 : typeof base2 + + var b1 = [ baseObj, base2Obj, ifaceObj ]; +>b1 : base[] +>[ baseObj, base2Obj, ifaceObj ] : base[] +>baseObj : base +>base2Obj : base2 +>ifaceObj : iface + + var b2 = [ base2Obj, baseObj, ifaceObj ]; +>b2 : base2[] +>[ base2Obj, baseObj, ifaceObj ] : base2[] +>base2Obj : base2 +>baseObj : base +>ifaceObj : iface + + var b3 = [ baseObj, ifaceObj, base2Obj ]; +>b3 : base[] +>[ baseObj, ifaceObj, base2Obj ] : base[] +>baseObj : base +>ifaceObj : iface +>base2Obj : base2 + + var b4 = [ ifaceObj, baseObj, base2Obj ]; +>b4 : iface[] +>[ ifaceObj, baseObj, base2Obj ] : iface[] +>ifaceObj : iface +>baseObj : base +>base2Obj : base2 + } +} + + + diff --git a/tests/baselines/reference/arrayCast.js b/tests/baselines/reference/arrayCast.js index 5d3ee9b73f3..214bf642250 100644 --- a/tests/baselines/reference/arrayCast.js +++ b/tests/baselines/reference/arrayCast.js @@ -7,5 +7,8 @@ <{ id: number; }[]>[{ foo: "s" }, {}]; //// [arrayCast.js] +// Should fail. Even though the array is contextually typed with { id: number }[], it still +// has type { foo: string }[], which is not assignable to { id: number }[]. [{ foo: "s" }]; +// Should succeed, as the {} element causes the type of the array to be {}[] [{ foo: "s" }, {}]; diff --git a/tests/baselines/reference/arrayConcat2.types b/tests/baselines/reference/arrayConcat2.types new file mode 100644 index 00000000000..a4036560305 --- /dev/null +++ b/tests/baselines/reference/arrayConcat2.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/arrayConcat2.ts === +var a: string[] = []; +>a : string[] +>[] : string[] + +a.concat("hello", 'world'); +>a.concat("hello", 'world') : string[] +>a.concat : { (...items: U[]): string[]; (...items: string[]): string[]; } +>a : string[] +>concat : { (...items: U[]): string[]; (...items: string[]): string[]; } + +a.concat('Hello'); +>a.concat('Hello') : string[] +>a.concat : { (...items: U[]): string[]; (...items: string[]): string[]; } +>a : string[] +>concat : { (...items: U[]): string[]; (...items: string[]): string[]; } + +var b = new Array(); +>b : string[] +>new Array() : string[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +b.concat('hello'); +>b.concat('hello') : string[] +>b.concat : { (...items: U[]): string[]; (...items: string[]): string[]; } +>b : string[] +>concat : { (...items: U[]): string[]; (...items: string[]): string[]; } + diff --git a/tests/baselines/reference/arrayConcatMap.types b/tests/baselines/reference/arrayConcatMap.types new file mode 100644 index 00000000000..92da3edf93f --- /dev/null +++ b/tests/baselines/reference/arrayConcatMap.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/arrayConcatMap.ts === +var x = [].concat([{ a: 1 }], [{ a: 2 }]) +>x : any[] +>[].concat([{ a: 1 }], [{ a: 2 }]) .map(b => b.a) : any[] +>[].concat([{ a: 1 }], [{ a: 2 }]) .map : (callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[] +>[].concat([{ a: 1 }], [{ a: 2 }]) : any[] +>[].concat : { (...items: U[]): any[]; (...items: any[]): any[]; } +>[] : undefined[] +>concat : { (...items: U[]): any[]; (...items: any[]): any[]; } +>[{ a: 1 }] : { a: number; }[] +>{ a: 1 } : { a: number; } +>a : number +>[{ a: 2 }] : { a: number; }[] +>{ a: 2 } : { a: number; } +>a : number + + .map(b => b.a); +>map : (callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[] +>b => b.a : (b: any) => any +>b : any +>b.a : any +>b : any +>a : any + diff --git a/tests/baselines/reference/arrayConstructors1.types b/tests/baselines/reference/arrayConstructors1.types new file mode 100644 index 00000000000..8b34f32205e --- /dev/null +++ b/tests/baselines/reference/arrayConstructors1.types @@ -0,0 +1,43 @@ +=== tests/cases/compiler/arrayConstructors1.ts === +var x: string[]; +>x : string[] + +x = new Array(1); +>x = new Array(1) : any[] +>x : string[] +>new Array(1) : any[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +x = new Array('hi', 'bye'); +>x = new Array('hi', 'bye') : string[] +>x : string[] +>new Array('hi', 'bye') : string[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +x = new Array('hi', 'bye'); +>x = new Array('hi', 'bye') : string[] +>x : string[] +>new Array('hi', 'bye') : string[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +var y: number[]; +>y : number[] + +y = new Array(1); +>y = new Array(1) : any[] +>y : number[] +>new Array(1) : any[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +y = new Array(1,2); +>y = new Array(1,2) : number[] +>y : number[] +>new Array(1,2) : number[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +y = new Array(1, 2); +>y = new Array(1, 2) : number[] +>y : number[] +>new Array(1, 2) : number[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + diff --git a/tests/baselines/reference/arrayLiteral.js b/tests/baselines/reference/arrayLiteral.js index 557b9be6a80..ae210aabd42 100644 --- a/tests/baselines/reference/arrayLiteral.js +++ b/tests/baselines/reference/arrayLiteral.js @@ -16,6 +16,7 @@ var y2: number[] = [1, 2]; var y2: number[] = new Array(); //// [arrayLiteral.js] +// valid uses of array literals var x = []; var x = new Array(1); var y = [1]; diff --git a/tests/baselines/reference/arrayLiteral.types b/tests/baselines/reference/arrayLiteral.types new file mode 100644 index 00000000000..1b356773dc7 --- /dev/null +++ b/tests/baselines/reference/arrayLiteral.types @@ -0,0 +1,47 @@ +=== tests/cases/conformance/types/specifyingTypes/typeLiterals/arrayLiteral.ts === +// valid uses of array literals + +var x = []; +>x : any[] +>[] : undefined[] + +var x = new Array(1); +>x : any[] +>new Array(1) : any[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +var y = [1]; +>y : number[] +>[1] : number[] + +var y = [1, 2]; +>y : number[] +>[1, 2] : number[] + +var y = new Array(); +>y : number[] +>new Array() : number[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +var x2: number[] = []; +>x2 : number[] +>[] : number[] + +var x2: number[] = new Array(1); +>x2 : number[] +>new Array(1) : any[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +var y2: number[] = [1]; +>y2 : number[] +>[1] : number[] + +var y2: number[] = [1, 2]; +>y2 : number[] +>[1, 2] : number[] + +var y2: number[] = new Array(); +>y2 : number[] +>new Array() : number[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + diff --git a/tests/baselines/reference/arrayLiteral1.types b/tests/baselines/reference/arrayLiteral1.types new file mode 100644 index 00000000000..79d00f5f46f --- /dev/null +++ b/tests/baselines/reference/arrayLiteral1.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/arrayLiteral1.ts === +var v30 = [1, 2]; +>v30 : number[] +>[1, 2] : number[] + diff --git a/tests/baselines/reference/arrayLiteral2.types b/tests/baselines/reference/arrayLiteral2.types new file mode 100644 index 00000000000..cd370c0f1a9 --- /dev/null +++ b/tests/baselines/reference/arrayLiteral2.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/arrayLiteral2.ts === +var v30 = [1, 2], v31; +>v30 : number[] +>[1, 2] : number[] +>v31 : any + diff --git a/tests/baselines/reference/arrayLiteralAndArrayConstructorEquivalence1.js b/tests/baselines/reference/arrayLiteralAndArrayConstructorEquivalence1.js index 879c08073a6..0b9f543e382 100644 --- a/tests/baselines/reference/arrayLiteralAndArrayConstructorEquivalence1.js +++ b/tests/baselines/reference/arrayLiteralAndArrayConstructorEquivalence1.js @@ -16,7 +16,7 @@ myCars3 = myCars5; //// [arrayLiteralAndArrayConstructorEquivalence1.js] var myCars = new Array(); var myCars3 = new Array({}); -var myCars4; +var myCars4; // error var myCars5; myCars = myCars3; myCars = myCars4; diff --git a/tests/baselines/reference/arrayLiteralContextualType.js b/tests/baselines/reference/arrayLiteralContextualType.js index 427b14a8800..a551a754204 100644 --- a/tests/baselines/reference/arrayLiteralContextualType.js +++ b/tests/baselines/reference/arrayLiteralContextualType.js @@ -51,11 +51,11 @@ function bar(animals) { foo([ new Giraffe(), new Elephant() -]); +]); // Legal because of the contextual type IAnimal provided by the parameter bar([ new Giraffe(), new Elephant() -]); +]); // Legal because of the contextual type IAnimal provided by the parameter var arr = [new Giraffe(), new Elephant()]; -foo(arr); -bar(arr); +foo(arr); // Error because of no contextual type +bar(arr); // Error because of no contextual type diff --git a/tests/baselines/reference/arrayLiteralInNonVarArgParameter.types b/tests/baselines/reference/arrayLiteralInNonVarArgParameter.types new file mode 100644 index 00000000000..c4889e223bb --- /dev/null +++ b/tests/baselines/reference/arrayLiteralInNonVarArgParameter.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/arrayLiteralInNonVarArgParameter.ts === +function panic(val: string[], ...opt: string[]) { } +>panic : (val: string[], ...opt: string[]) => void +>val : string[] +>opt : string[] + +panic([], 'one', 'two'); +>panic([], 'one', 'two') : void +>panic : (val: string[], ...opt: string[]) => void +>[] : string[] + diff --git a/tests/baselines/reference/arrayLiteralTypeInference.types b/tests/baselines/reference/arrayLiteralTypeInference.types new file mode 100644 index 00000000000..5b4d9b7fff8 --- /dev/null +++ b/tests/baselines/reference/arrayLiteralTypeInference.types @@ -0,0 +1,136 @@ +=== tests/cases/compiler/arrayLiteralTypeInference.ts === +class Action { +>Action : Action + + id: number; +>id : number +} + +class ActionA extends Action { +>ActionA : ActionA +>Action : Action + + value: string; +>value : string +} + +class ActionB extends Action { +>ActionB : ActionB +>Action : Action + + trueNess: boolean; +>trueNess : boolean +} + +var x1: Action[] = [ +>x1 : Action[] +>Action : Action +>[ { id: 2, trueness: false }, { id: 3, name: "three" }] : Action[] + + { id: 2, trueness: false }, +>{ id: 2, trueness: false } : { id: number; trueness: boolean; } +>id : number +>trueness : boolean + + { id: 3, name: "three" } +>{ id: 3, name: "three" } : { id: number; name: string; } +>id : number +>name : string + +] + +var x2: Action[] = [ +>x2 : Action[] +>Action : Action +>[ new ActionA(), new ActionB()] : Action[] + + new ActionA(), +>new ActionA() : ActionA +>ActionA : typeof ActionA + + new ActionB() +>new ActionB() : ActionB +>ActionB : typeof ActionB + +] + +var x3: Action[] = [ +>x3 : Action[] +>Action : Action +>[ new Action(), new ActionA(), new ActionB()] : Action[] + + new Action(), +>new Action() : Action +>Action : typeof Action + + new ActionA(), +>new ActionA() : ActionA +>ActionA : typeof ActionA + + new ActionB() +>new ActionB() : ActionB +>ActionB : typeof ActionB + +] + +var z1: { id: number }[] = +>z1 : { id: number; }[] +>id : number + + [ +>[ { id: 2, trueness: false }, { id: 3, name: "three" } ] : { id: number; }[] + + { id: 2, trueness: false }, +>{ id: 2, trueness: false } : { id: number; trueness: boolean; } +>id : number +>trueness : boolean + + { id: 3, name: "three" } +>{ id: 3, name: "three" } : { id: number; name: string; } +>id : number +>name : string + + ] + +var z2: { id: number }[] = +>z2 : { id: number; }[] +>id : number + + [ +>[ new ActionA(), new ActionB() ] : { id: number; }[] + + new ActionA(), +>new ActionA() : ActionA +>ActionA : typeof ActionA + + new ActionB() +>new ActionB() : ActionB +>ActionB : typeof ActionB + + ] + +var z3: { id: number }[] = +>z3 : { id: number; }[] +>id : number + + [ +>[ new Action(), new ActionA(), new ActionB() ] : { id: number; }[] + + new Action(), +>new Action() : Action +>Action : typeof Action + + new ActionA(), +>new ActionA() : ActionA +>ActionA : typeof ActionA + + new ActionB() +>new ActionB() : ActionB +>ActionB : typeof ActionB + + ] + + + + + diff --git a/tests/baselines/reference/arrayLiteralWidened.js b/tests/baselines/reference/arrayLiteralWidened.js index 11fad71e9f2..a250c47849d 100644 --- a/tests/baselines/reference/arrayLiteralWidened.js +++ b/tests/baselines/reference/arrayLiteralWidened.js @@ -15,11 +15,12 @@ var c = [[[null]],[undefined]] //// [arrayLiteralWidened.js] -var a = []; +// array literals are widened upon assignment according to their element type +var a = []; // any[] var a = [null, null]; var a = [undefined, undefined]; -var b = [[], [null, null]]; +var b = [[], [null, null]]; // any[][] var b = [[], []]; var b = [[undefined, undefined]]; -var c = [[[]]]; +var c = [[[]]]; // any[][][] var c = [[[null]], [undefined]]; diff --git a/tests/baselines/reference/arrayLiteralWidened.types b/tests/baselines/reference/arrayLiteralWidened.types new file mode 100644 index 00000000000..6e89bc50892 --- /dev/null +++ b/tests/baselines/reference/arrayLiteralWidened.types @@ -0,0 +1,50 @@ +=== tests/cases/conformance/types/typeRelationships/widenedTypes/arrayLiteralWidened.ts === +// array literals are widened upon assignment according to their element type + +var a = []; // any[] +>a : any[] +>[] : undefined[] + +var a = [null, null]; +>a : any[] +>[null, null] : null[] + +var a = [undefined, undefined]; +>a : any[] +>[undefined, undefined] : undefined[] +>undefined : undefined +>undefined : undefined + +var b = [[], [null, null]]; // any[][] +>b : any[][] +>[[], [null, null]] : null[][] +>[] : undefined[] +>[null, null] : null[] + +var b = [[], []]; +>b : any[][] +>[[], []] : undefined[][] +>[] : undefined[] +>[] : undefined[] + +var b = [[undefined, undefined]]; +>b : any[][] +>[[undefined, undefined]] : undefined[][] +>[undefined, undefined] : undefined[] +>undefined : undefined +>undefined : undefined + +var c = [[[]]]; // any[][][] +>c : any[][][] +>[[[]]] : undefined[][][] +>[[]] : undefined[][] +>[] : undefined[] + +var c = [[[null]],[undefined]] +>c : any[][][] +>[[[null]],[undefined]] : null[][][] +>[[null]] : null[][] +>[null] : null[] +>[undefined] : undefined[] +>undefined : undefined + diff --git a/tests/baselines/reference/arrayLiteralWithMultipleBestCommonTypes.js b/tests/baselines/reference/arrayLiteralWithMultipleBestCommonTypes.js index f1720efd418..b4f869d499e 100644 --- a/tests/baselines/reference/arrayLiteralWithMultipleBestCommonTypes.js +++ b/tests/baselines/reference/arrayLiteralWithMultipleBestCommonTypes.js @@ -16,13 +16,14 @@ var gs = [(b: { x: number; z?: number }) => 2, (a: { x: number; y?: number }) => //// [arrayLiteralWithMultipleBestCommonTypes.js] +// when multiple best common types exist we will choose the first candidate var a; var b; var c; -var as = [a, b]; -var bs = [b, a]; -var cs = [a, b, c]; -var ds = [function (x) { return 1; }, function (x) { return 2; }]; -var es = [function (x) { return 2; }, function (x) { return 1; }]; -var fs = [function (a) { return 1; }, function (b) { return 2; }]; -var gs = [function (b) { return 2; }, function (a) { return 1; }]; +var as = [a, b]; // { x: number; y?: number };[] +var bs = [b, a]; // { x: number; z?: number };[] +var cs = [a, b, c]; // { x: number; y?: number };[] +var ds = [function (x) { return 1; }, function (x) { return 2; }]; // { (x:Object) => number }[] +var es = [function (x) { return 2; }, function (x) { return 1; }]; // { (x:string) => number }[] +var fs = [function (a) { return 1; }, function (b) { return 2; }]; // (a: { x: number; y?: number }) => number[] +var gs = [function (b) { return 2; }, function (a) { return 1; }]; // (b: { x: number; z?: number }) => number[] diff --git a/tests/baselines/reference/arrayLiteralWithMultipleBestCommonTypes.types b/tests/baselines/reference/arrayLiteralWithMultipleBestCommonTypes.types new file mode 100644 index 00000000000..7729b280160 --- /dev/null +++ b/tests/baselines/reference/arrayLiteralWithMultipleBestCommonTypes.types @@ -0,0 +1,79 @@ +=== tests/cases/conformance/types/typeRelationships/bestCommonType/arrayLiteralWithMultipleBestCommonTypes.ts === +// when multiple best common types exist we will choose the first candidate + +var a: { x: number; y?: number }; +>a : { x: number; y?: number; } +>x : number +>y : number + +var b: { x: number; z?: number }; +>b : { x: number; z?: number; } +>x : number +>z : number + +var c: { x: number; a?: number }; +>c : { x: number; a?: number; } +>x : number +>a : number + +var as = [a, b]; // { x: number; y?: number };[] +>as : { x: number; y?: number; }[] +>[a, b] : { x: number; y?: number; }[] +>a : { x: number; y?: number; } +>b : { x: number; z?: number; } + +var bs = [b, a]; // { x: number; z?: number };[] +>bs : { x: number; z?: number; }[] +>[b, a] : { x: number; z?: number; }[] +>b : { x: number; z?: number; } +>a : { x: number; y?: number; } + +var cs = [a, b, c]; // { x: number; y?: number };[] +>cs : { x: number; y?: number; }[] +>[a, b, c] : { x: number; y?: number; }[] +>a : { x: number; y?: number; } +>b : { x: number; z?: number; } +>c : { x: number; a?: number; } + +var ds = [(x: Object) => 1, (x: string) => 2]; // { (x:Object) => number }[] +>ds : { (x: Object): number; }[] +>[(x: Object) => 1, (x: string) => 2] : { (x: Object): number; }[] +>(x: Object) => 1 : (x: Object) => number +>x : Object +>Object : Object +>(x: string) => 2 : (x: string) => number +>x : string + +var es = [(x: string) => 2, (x: Object) => 1]; // { (x:string) => number }[] +>es : { (x: string): number; }[] +>[(x: string) => 2, (x: Object) => 1] : { (x: string): number; }[] +>(x: string) => 2 : (x: string) => number +>x : string +>(x: Object) => 1 : (x: Object) => number +>x : Object +>Object : Object + +var fs = [(a: { x: number; y?: number }) => 1, (b: { x: number; z?: number }) => 2]; // (a: { x: number; y?: number }) => number[] +>fs : { (a: { x: number; y?: number; }): number; }[] +>[(a: { x: number; y?: number }) => 1, (b: { x: number; z?: number }) => 2] : { (a: { x: number; y?: number; }): number; }[] +>(a: { x: number; y?: number }) => 1 : (a: { x: number; y?: number; }) => number +>a : { x: number; y?: number; } +>x : number +>y : number +>(b: { x: number; z?: number }) => 2 : (b: { x: number; z?: number; }) => number +>b : { x: number; z?: number; } +>x : number +>z : number + +var gs = [(b: { x: number; z?: number }) => 2, (a: { x: number; y?: number }) => 1]; // (b: { x: number; z?: number }) => number[] +>gs : { (b: { x: number; z?: number; }): number; }[] +>[(b: { x: number; z?: number }) => 2, (a: { x: number; y?: number }) => 1] : { (b: { x: number; z?: number; }): number; }[] +>(b: { x: number; z?: number }) => 2 : (b: { x: number; z?: number; }) => number +>b : { x: number; z?: number; } +>x : number +>z : number +>(a: { x: number; y?: number }) => 1 : (a: { x: number; y?: number; }) => number +>a : { x: number; y?: number; } +>x : number +>y : number + diff --git a/tests/baselines/reference/arrayLiterals.js b/tests/baselines/reference/arrayLiterals.js index e4d9b138b56..800d2a12550 100644 --- a/tests/baselines/reference/arrayLiterals.js +++ b/tests/baselines/reference/arrayLiterals.js @@ -45,6 +45,7 @@ var context4: Base[] = [new Derived1(), new Derived1()]; //// [arrayLiterals.js] +// Empty array literal with no contextual type has type Undefined[] var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -52,9 +53,10 @@ var __extends = this.__extends || function (d, b) { d.prototype = new __(); }; var arr1 = [[], [1], ['']]; -var arr1; +var arr1; // Bug 825172: Error ({}[] does not match {}[]), but should be OK var arr2 = [[null], [1], ['']]; -var arr2; +var arr2; // Bug 825172: Error ({}[] does not match {}[]), but should be OK +// Array literal with elements of only EveryType E has type E[] var stringArrArr = [[''], [""]]; var stringArrArr; var stringArr = ['', ""]; @@ -69,12 +71,14 @@ var C = (function () { return C; })(); var classArr = [new C(), new C()]; -var classArr; +var classArr; // Should be OK var classTypeArray = [C, C, C]; -var classTypeArray; +var classTypeArray; // Should OK, not be a parse error +// Contextual type C with numeric index signature makes array literal of EveryType E of type BCT(E,C)[] var context1 = [{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }]; var context2 = [{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }]; -var context2; +var context2; // Should be OK +// Contextual type C with numeric index signature of type Base makes array literal of Derived have type Base[] var Base = (function () { function Base() { } @@ -97,4 +101,5 @@ var Derived2 = (function (_super) { })(Base); ; var context3 = [new Derived1(), new Derived2()]; +// Contextual type C with numeric index signature of type Base makes array literal of Derived1 and Derived2 have type Base[] var context4 = [new Derived1(), new Derived1()]; diff --git a/tests/baselines/reference/arrayLiterals.types b/tests/baselines/reference/arrayLiterals.types new file mode 100644 index 00000000000..29dd1b19970 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals.types @@ -0,0 +1,150 @@ +=== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals.ts === +// Empty array literal with no contextual type has type Undefined[] + +var arr1= [[], [1], ['']]; +>arr1 : {}[] +>[[], [1], ['']] : {}[] +>[] : undefined[] +>[1] : number[] +>[''] : string[] + +var arr1: {}[]; // Bug 825172: Error ({}[] does not match {}[]), but should be OK +>arr1 : {}[] + +var arr2 = [[null], [1], ['']]; +>arr2 : {}[] +>[[null], [1], ['']] : {}[] +>[null] : null[] +>[1] : number[] +>[''] : string[] + +var arr2: {}[]; // Bug 825172: Error ({}[] does not match {}[]), but should be OK +>arr2 : {}[] + + +// Array literal with elements of only EveryType E has type E[] +var stringArrArr = [[''], [""]]; +>stringArrArr : string[][] +>[[''], [""]] : string[][] +>[''] : string[] +>[""] : string[] + +var stringArrArr: string[][]; +>stringArrArr : string[][] + +var stringArr = ['', ""]; +>stringArr : string[] +>['', ""] : string[] + +var stringArr: string[]; +>stringArr : string[] + +var numberArr = [0, 0.0, 0x00, 1e1]; +>numberArr : number[] +>[0, 0.0, 0x00, 1e1] : number[] + +var numberArr: number[]; +>numberArr : number[] + +var boolArr = [false, true, false, true]; +>boolArr : boolean[] +>[false, true, false, true] : boolean[] + +var boolArr: boolean[]; +>boolArr : boolean[] + +class C { private p; } +>C : C +>p : any + +var classArr = [new C(), new C()]; +>classArr : C[] +>[new C(), new C()] : C[] +>new C() : C +>C : typeof C +>new C() : C +>C : typeof C + +var classArr: C[]; // Should be OK +>classArr : C[] +>C : C + +var classTypeArray = [C, C, C]; +>classTypeArray : typeof C[] +>[C, C, C] : typeof C[] +>C : typeof C +>C : typeof C +>C : typeof C + +var classTypeArray: Array; // Should OK, not be a parse error +>classTypeArray : typeof C[] +>Array : T[] +>C : typeof C + +// Contextual type C with numeric index signature makes array literal of EveryType E of type BCT(E,C)[] +var context1: { [n: number]: { a: string; b: number; }; } = [{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }]; +>context1 : { [x: number]: { a: string; b: number; }; } +>n : number +>a : string +>b : number +>[{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }] : { a: string; b: number; }[] +>{ a: '', b: 0, c: '' } : { a: string; b: number; c: string; } +>a : string +>b : number +>c : string +>{ a: "", b: 3, c: 0 } : { a: string; b: number; c: number; } +>a : string +>b : number +>c : number + +var context2 = [{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }]; +>context2 : {}[] +>[{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }] : {}[] +>{ a: '', b: 0, c: '' } : { a: string; b: number; c: string; } +>a : string +>b : number +>c : string +>{ a: "", b: 3, c: 0 } : { a: string; b: number; c: number; } +>a : string +>b : number +>c : number + +var context2: Array<{}>; // Should be OK +>context2 : {}[] +>Array : T[] + +// Contextual type C with numeric index signature of type Base makes array literal of Derived have type Base[] +class Base { private p; } +>Base : Base +>p : any + +class Derived1 extends Base { private m }; +>Derived1 : Derived1 +>Base : Base +>m : any + +class Derived2 extends Base { private n }; +>Derived2 : Derived2 +>Base : Base +>n : any + +var context3: Base[] = [new Derived1(), new Derived2()]; +>context3 : Base[] +>Base : Base +>[new Derived1(), new Derived2()] : Base[] +>new Derived1() : Derived1 +>Derived1 : typeof Derived1 +>new Derived2() : Derived2 +>Derived2 : typeof Derived2 + +// Contextual type C with numeric index signature of type Base makes array literal of Derived1 and Derived2 have type Base[] +var context4: Base[] = [new Derived1(), new Derived1()]; +>context4 : Base[] +>Base : Base +>[new Derived1(), new Derived1()] : Base[] +>new Derived1() : Derived1 +>Derived1 : typeof Derived1 +>new Derived1() : Derived1 +>Derived1 : typeof Derived1 + + diff --git a/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.js b/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.js index 335446ea3be..f15215a88eb 100644 --- a/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.js +++ b/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.js @@ -52,8 +52,8 @@ var MyList = (function () { var list; var list2; var myList; -var xs = [list, myList]; -var ys = [list, list2]; -var zs = [list, null]; +var xs = [list, myList]; // {}[] +var ys = [list, list2]; // {}[] +var zs = [list, null]; // List[] var myDerivedList; -var as = [list, myDerivedList]; +var as = [list, myDerivedList]; // List[] diff --git a/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types b/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types new file mode 100644 index 00000000000..becff7617b7 --- /dev/null +++ b/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types @@ -0,0 +1,83 @@ +=== tests/cases/conformance/types/typeRelationships/recursiveTypes/arrayLiteralsWithRecursiveGenerics.ts === +class List { +>List : List +>T : T + + data: T; +>data : T +>T : T + + next: List>; +>next : List> +>List : List +>List : List +>T : T +} + +class DerivedList extends List { +>DerivedList : DerivedList +>U : U +>List : List +>U : U + + foo: U; +>foo : U +>U : U + + // next: List> +} + +class MyList { +>MyList : MyList +>T : T + + data: T; +>data : T +>T : T + + next: MyList>; +>next : MyList> +>MyList : MyList +>MyList : MyList +>T : T +} + +var list: List; +>list : List +>List : List + +var list2: List; +>list2 : List +>List : List + +var myList: MyList; +>myList : MyList +>MyList : MyList + +var xs = [list, myList]; // {}[] +>xs : List[] +>[list, myList] : List[] +>list : List +>myList : MyList + +var ys = [list, list2]; // {}[] +>ys : {}[] +>[list, list2] : {}[] +>list : List +>list2 : List + +var zs = [list, null]; // List[] +>zs : List[] +>[list, null] : List[] +>list : List + +var myDerivedList: DerivedList; +>myDerivedList : DerivedList +>DerivedList : DerivedList + +var as = [list, myDerivedList]; // List[] +>as : List[] +>[list, myDerivedList] : List[] +>list : List +>myDerivedList : DerivedList + diff --git a/tests/baselines/reference/arrayOfExportedClass.types b/tests/baselines/reference/arrayOfExportedClass.types new file mode 100644 index 00000000000..3d542b88d80 --- /dev/null +++ b/tests/baselines/reference/arrayOfExportedClass.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/arrayOfExportedClass_1.ts === +/// +import Car = require('arrayOfExportedClass_0'); +>Car : typeof Car + +class Road { +>Road : Road + + public cars: Car[]; +>cars : Car[] +>Car : Car + + public AddCars(cars: Car[]) { +>AddCars : (cars: Car[]) => void +>cars : Car[] +>Car : Car + + this.cars = cars; +>this.cars = cars : Car[] +>this.cars : Car[] +>this : Road +>cars : Car[] +>cars : Car[] + } +} + +export = Road; +>Road : Road + +=== tests/cases/compiler/arrayOfExportedClass_0.ts === +class Car { +>Car : Car + + foo: string; +>foo : string +} + +export = Car; +>Car : Car + diff --git a/tests/baselines/reference/arrayOfFunctionTypes3.js b/tests/baselines/reference/arrayOfFunctionTypes3.js index cf720720195..ab7c6778a71 100644 --- a/tests/baselines/reference/arrayOfFunctionTypes3.js +++ b/tests/baselines/reference/arrayOfFunctionTypes3.js @@ -27,6 +27,7 @@ var r6 = z2[0]; var r7 = r6(''); // any not string //// [arrayOfFunctionTypes3.js] +// valid uses of arrays of function types var x = [function () { return 1; }, function () { }]; var r2 = x[0](); @@ -42,11 +43,11 @@ var b; var c; var z = [a, b, c]; var r4 = z[0]; -var r5 = r4(''); +var r5 = r4(''); // any not string var r5b = r4(1); var a2; var b2; var c2; var z2 = [a2, b2, c2]; var r6 = z2[0]; -var r7 = r6(''); +var r7 = r6(''); // any not string diff --git a/tests/baselines/reference/arrayOfFunctionTypes3.types b/tests/baselines/reference/arrayOfFunctionTypes3.types new file mode 100644 index 00000000000..b224ff881e3 --- /dev/null +++ b/tests/baselines/reference/arrayOfFunctionTypes3.types @@ -0,0 +1,108 @@ +=== tests/cases/conformance/types/specifyingTypes/typeLiterals/arrayOfFunctionTypes3.ts === +// valid uses of arrays of function types + +var x = [() => 1, () => { }]; +>x : { (): void; }[] +>[() => 1, () => { }] : { (): void; }[] +>() => 1 : () => number +>() => { } : () => void + +var r2 = x[0](); +>r2 : void +>x[0]() : void +>x[0] : () => void +>x : { (): void; }[] + +class C { +>C : C + + foo: string; +>foo : string +} +var y = [C, C]; +>y : typeof C[] +>[C, C] : typeof C[] +>C : typeof C +>C : typeof C + +var r3 = new y[0](); +>r3 : C +>new y[0]() : C +>y[0] : typeof C +>y : typeof C[] + +var a: { (x: number): number; (x: string): string; }; +>a : { (x: number): number; (x: string): string; } +>x : number +>x : string + +var b: { (x: number): number; (x: string): string; }; +>b : { (x: number): number; (x: string): string; } +>x : number +>x : string + +var c: { (x: number): number; (x: any): any; }; +>c : { (x: number): number; (x: any): any; } +>x : number +>x : any + +var z = [a, b, c]; +>z : { (x: number): number; (x: any): any; }[] +>[a, b, c] : { (x: number): number; (x: any): any; }[] +>a : { (x: number): number; (x: string): string; } +>b : { (x: number): number; (x: string): string; } +>c : { (x: number): number; (x: any): any; } + +var r4 = z[0]; +>r4 : { (x: number): number; (x: any): any; } +>z[0] : { (x: number): number; (x: any): any; } +>z : { (x: number): number; (x: any): any; }[] + +var r5 = r4(''); // any not string +>r5 : any +>r4('') : any +>r4 : { (x: number): number; (x: any): any; } + +var r5b = r4(1); +>r5b : number +>r4(1) : number +>r4 : { (x: number): number; (x: any): any; } + +var a2: { (x: T): number; (x: string): string;}; +>a2 : { (x: T): number; (x: string): string; } +>T : T +>x : T +>T : T +>x : string + +var b2: { (x: T): number; (x: string): string; }; +>b2 : { (x: T): number; (x: string): string; } +>T : T +>x : T +>T : T +>x : string + +var c2: { (x: number): number; (x: T): any; }; +>c2 : { (x: number): number; (x: T): any; } +>x : number +>T : T +>x : T +>T : T + +var z2 = [a2, b2, c2]; +>z2 : { (x: number): number; (x: T): any; }[] +>[a2, b2, c2] : { (x: number): number; (x: T): any; }[] +>a2 : { (x: T): number; (x: string): string; } +>b2 : { (x: T): number; (x: string): string; } +>c2 : { (x: number): number; (x: T): any; } + +var r6 = z2[0]; +>r6 : { (x: number): number; (x: T): any; } +>z2[0] : { (x: number): number; (x: T): any; } +>z2 : { (x: number): number; (x: T): any; }[] + +var r7 = r6(''); // any not string +>r7 : any +>r6('') : any +>r6 : { (x: number): number; (x: T): any; } + diff --git a/tests/baselines/reference/arrayTypeInSignatureOfInterfaceAndClass.types b/tests/baselines/reference/arrayTypeInSignatureOfInterfaceAndClass.types new file mode 100644 index 00000000000..419db571c05 --- /dev/null +++ b/tests/baselines/reference/arrayTypeInSignatureOfInterfaceAndClass.types @@ -0,0 +1,89 @@ +=== tests/cases/compiler/arrayTypeInSignatureOfInterfaceAndClass.ts === +declare module WinJS { +>WinJS : typeof WinJS + + class Promise { +>Promise : Promise +>T : T + + then(success?: (value: T) => Promise, error?: (error: any) => Promise, progress?: (progress: any) => void): Promise; +>then : (success?: (value: T) => Promise, error?: (error: any) => Promise, progress?: (progress: any) => void) => Promise +>U : U +>success : (value: T) => Promise +>value : T +>T : T +>Promise : Promise +>U : U +>error : (error: any) => Promise +>error : any +>Promise : Promise +>U : U +>progress : (progress: any) => void +>progress : any +>Promise : Promise +>U : U + } +} +declare module Data { +>Data : typeof Data + + export interface IListItem { +>IListItem : IListItem +>T : T + + itemIndex: number; +>itemIndex : number + + key: any; +>key : any + + data: T; +>data : T +>T : T + + group: any; +>group : any + + isHeader: boolean; +>isHeader : boolean + + cached: boolean; +>cached : boolean + + isNonSourceData: boolean; +>isNonSourceData : boolean + + preventAugmentation: boolean; +>preventAugmentation : boolean + } + export interface IVirtualList { +>IVirtualList : IVirtualList +>T : T + + //removeIndices: WinJS.Promise[]>; + removeIndices(indices: number[], options?: any): WinJS.Promise[]>; +>removeIndices : (indices: number[], options?: any) => WinJS.Promise[]> +>indices : number[] +>options : any +>WinJS : unknown +>Promise : WinJS.Promise +>IListItem : IListItem +>T : T + } + export class VirtualList implements IVirtualList { +>VirtualList : VirtualList +>T : T +>IVirtualList : IVirtualList +>T : T + + //removeIndices: WinJS.Promise[]>; + public removeIndices(indices: number[], options?: any): WinJS.Promise[]>; +>removeIndices : (indices: number[], options?: any) => WinJS.Promise[]> +>indices : number[] +>options : any +>WinJS : unknown +>Promise : WinJS.Promise +>IListItem : IListItem +>T : T + } +} diff --git a/tests/baselines/reference/arrayTypeOfFunctionTypes.js b/tests/baselines/reference/arrayTypeOfFunctionTypes.js index 355070d48d8..9a7a4516cb5 100644 --- a/tests/baselines/reference/arrayTypeOfFunctionTypes.js +++ b/tests/baselines/reference/arrayTypeOfFunctionTypes.js @@ -17,6 +17,7 @@ var r6 = r5(); var r6b = new r5(); // error //// [arrayTypeOfFunctionTypes.js] +// valid uses of arrays of function types var x; var r = x[1]; var r2 = r(); @@ -24,8 +25,8 @@ var r2b = new r(); var x2; var r3 = x2[1]; var r4 = r3(); -var r4b = new r3(); +var r4b = new r3(); // error var x3; var r5 = x2[1]; var r6 = r5(); -var r6b = new r5(); +var r6b = new r5(); // error diff --git a/tests/baselines/reference/arrayTypeOfFunctionTypes2.js b/tests/baselines/reference/arrayTypeOfFunctionTypes2.js index 530a826700d..f9baa9871e1 100644 --- a/tests/baselines/reference/arrayTypeOfFunctionTypes2.js +++ b/tests/baselines/reference/arrayTypeOfFunctionTypes2.js @@ -17,6 +17,7 @@ var r6 = new r5(); var r6b = r5(); //// [arrayTypeOfFunctionTypes2.js] +// valid uses of arrays of function types var x; var r = x[1]; var r2 = new r(); diff --git a/tests/baselines/reference/arrayconcat.types b/tests/baselines/reference/arrayconcat.types new file mode 100644 index 00000000000..37e7308aad9 --- /dev/null +++ b/tests/baselines/reference/arrayconcat.types @@ -0,0 +1,90 @@ +=== tests/cases/compiler/arrayconcat.ts === +interface IOptions { +>IOptions : IOptions + + name?: string; +>name : string + + flag?: boolean; +>flag : boolean + + short?: string; +>short : string + + usage?: string; +>usage : string + + set?: (s: string) => void; +>set : (s: string) => void +>s : string + + type?: string; +>type : string + + experimental?: boolean; +>experimental : boolean +} + +class parser { +>parser : parser + + public options: IOptions[]; +>options : IOptions[] +>IOptions : IOptions + + public m() { +>m : () => void + + this.options = this.options.sort(function(a, b) { +>this.options = this.options.sort(function(a, b) { var aName = a.name.toLowerCase(); var bName = b.name.toLowerCase(); if (aName > bName) { return 1; } else if (aName < bName) { return -1; } else { return 0; } }) : IOptions[] +>this.options : IOptions[] +>this : parser +>options : IOptions[] +>this.options.sort(function(a, b) { var aName = a.name.toLowerCase(); var bName = b.name.toLowerCase(); if (aName > bName) { return 1; } else if (aName < bName) { return -1; } else { return 0; } }) : IOptions[] +>this.options.sort : (compareFn?: (a: IOptions, b: IOptions) => number) => IOptions[] +>this.options : IOptions[] +>this : parser +>options : IOptions[] +>sort : (compareFn?: (a: IOptions, b: IOptions) => number) => IOptions[] +>function(a, b) { var aName = a.name.toLowerCase(); var bName = b.name.toLowerCase(); if (aName > bName) { return 1; } else if (aName < bName) { return -1; } else { return 0; } } : (a: IOptions, b: IOptions) => number +>a : IOptions +>b : IOptions + + var aName = a.name.toLowerCase(); +>aName : string +>a.name.toLowerCase() : string +>a.name.toLowerCase : () => string +>a.name : string +>a : IOptions +>name : string +>toLowerCase : () => string + + var bName = b.name.toLowerCase(); +>bName : string +>b.name.toLowerCase() : string +>b.name.toLowerCase : () => string +>b.name : string +>b : IOptions +>name : string +>toLowerCase : () => string + + if (aName > bName) { +>aName > bName : boolean +>aName : string +>bName : string + + return 1; + } else if (aName < bName) { +>aName < bName : boolean +>aName : string +>bName : string + + return -1; +>-1 : number + + } else { + return 0; + } + }); + } +} diff --git a/tests/baselines/reference/arrowFunctionContexts.errors.txt b/tests/baselines/reference/arrowFunctionContexts.errors.txt index b768abb8575..9a1e3cdb618 100644 --- a/tests/baselines/reference/arrowFunctionContexts.errors.txt +++ b/tests/baselines/reference/arrowFunctionContexts.errors.txt @@ -3,9 +3,9 @@ // Arrow function used in with statement with (window) { ~~~~~~ -!!! All symbols within a 'with' block will be resolved to 'any'. - ~~~~~~ !!! Cannot find name 'window'. + ~~~~~~ +!!! All symbols within a 'with' block will be resolved to 'any'. var p = () => this; } @@ -54,9 +54,9 @@ // Arrow function used in with statement with (window) { ~~~~~~ -!!! All symbols within a 'with' block will be resolved to 'any'. - ~~~~~~ !!! Cannot find name 'window'. + ~~~~~~ +!!! All symbols within a 'with' block will be resolved to 'any'. var p = () => this; } diff --git a/tests/baselines/reference/arrowFunctionContexts.js b/tests/baselines/reference/arrowFunctionContexts.js index d0b43e61c84..abb8fd0ab7a 100644 --- a/tests/baselines/reference/arrowFunctionContexts.js +++ b/tests/baselines/reference/arrowFunctionContexts.js @@ -106,6 +106,7 @@ var __extends = this.__extends || function (d, b) { with (window) { var p = function () { return this; }; } +// Arrow function as argument to super call var Base = (function () { function Base(n) { } @@ -119,26 +120,32 @@ var Derived = (function (_super) { } return Derived; })(Base); +// Arrow function as function argument window.setTimeout(function () { return null; }, 100); +// Arrow function as value in array literal var obj = function (n) { return ''; }; -var obj; +var obj; // OK var arr = [function (n) { return ''; }]; -var arr; +var arr; // Incorrect error here (bug 829597) +// Arrow function as enum value var E; (function (E) { E[E["x"] = function () { return 4; }] = "x"; - E[E["y"] = (function () { return _this; }).length] = "y"; + E[E["y"] = (function () { return _this; }).length] = "y"; // error, can't use this in enum })(E || (E = {})); +// Arrow function as module variable initializer var M; (function (M) { M.a = function (s) { return ''; }; var b = function (s) { return s; }; })(M || (M = {})); +// Repeat above for module members that are functions? (necessary to redo all of them?) var M2; (function (M2) { with (window) { var p = function () { return this; }; } + // Arrow function as argument to super call var Base = (function () { function Base(n) { } @@ -152,28 +159,34 @@ var M2; } return Derived; })(Base); + // Arrow function as function argument window.setTimeout(function () { return null; }, 100); + // Arrow function as value in array literal var obj = function (n) { return ''; }; - var obj; + var obj; // OK var arr = [function (n) { return ''; }]; - var arr; + var arr; // Incorrect error here (bug 829597) + // Arrow function as enum value var E; (function (E) { E[E["x"] = function () { return 4; }] = "x"; E[E["y"] = (function () { return _this; }).length] = "y"; })(E || (E = {})); + // Arrow function as module variable initializer var M; (function (M) { M.a = function (s) { return ''; }; var b = function (s) { return s; }; })(M || (M = {})); })(M2 || (M2 = {})); +// (ParamList) => { ... } is a generic arrow function var generic1 = function (n) { return [n]; }; -var generic1; +var generic1; // Incorrect error, Bug 829597 var generic2 = function (n) { return [n]; }; var generic2; +// ((ParamList) => { ... } ) is a type assertion to an arrow function var asserted1 = (function (n) { return [n]; }); var asserted1; var asserted2 = (function (n) { diff --git a/tests/baselines/reference/arrowFunctionExpressions.js b/tests/baselines/reference/arrowFunctionExpressions.js index b403f30906c..9aa049b9f6f 100644 --- a/tests/baselines/reference/arrowFunctionExpressions.js +++ b/tests/baselines/reference/arrowFunctionExpressions.js @@ -89,20 +89,25 @@ function tryCatchFn() { //// [arrowFunctionExpressions.js] +// ArrowFormalParameters => AssignmentExpression is equivalent to ArrowFormalParameters => { return AssignmentExpression; } var a = function (p) { return p.length; }; var a = function (p) { return p.length; }; +// Identifier => Block is equivalent to(Identifier) => Block var b = function (j) { return 0; }; var b = function (j) { return 0; }; +// Identifier => AssignmentExpression is equivalent to(Identifier) => AssignmentExpression var c; var d = function (n) { return c = n; }; var d = function (n) { return c = n; }; var d; +// Arrow function used in class member initializer +// Arrow function used in class member function var MyClass = (function () { function MyClass() { var _this = this; @@ -116,17 +121,21 @@ var MyClass = (function () { }; return MyClass; })(); +// Arrow function used in arrow function var arrrr = function () { return function (m) { return function () { return function (n) { return m + n; }; }; }; }; var e = arrrr()(3)()(4); var e; +// Arrow function used in arrow function used in function function someFn() { var arr = function (n) { return function (p) { return p * n; }; }; arr(3)(4).toExponential(); } +// Arrow function used in function function someOtherFn() { var arr = function (n) { return '' + n; }; arr(4).charAt(0); } +// Arrow function used in nested function in function function outerFn() { function innerFn() { var arrowFn = function () { @@ -135,6 +144,7 @@ function outerFn() { var p; } } +// Arrow function used in nested function in arrow function var f = function (n) { function fn(x) { return function () { return n + x; }; @@ -143,6 +153,7 @@ var f = function (n) { }; var g = f('')(); var g; +// Arrow function used in nested function in arrow function in nested function function someOuterFn() { var arr = function (n) { function innerFn() { @@ -154,6 +165,7 @@ function someOuterFn() { } var h = someOuterFn()('')()(); h.toExponential(); +// Arrow function used in try/catch/finally in function function tryCatchFn() { var _this = this; try { diff --git a/tests/baselines/reference/arrowFunctionExpressions.types b/tests/baselines/reference/arrowFunctionExpressions.types new file mode 100644 index 00000000000..5807f6d6a7d --- /dev/null +++ b/tests/baselines/reference/arrowFunctionExpressions.types @@ -0,0 +1,278 @@ +=== tests/cases/conformance/expressions/functions/arrowFunctionExpressions.ts === +// ArrowFormalParameters => AssignmentExpression is equivalent to ArrowFormalParameters => { return AssignmentExpression; } +var a = (p: string) => p.length; +>a : (p: string) => number +>(p: string) => p.length : (p: string) => number +>p : string +>p.length : number +>p : string +>length : number + +var a = (p: string) => { return p.length; } +>a : (p: string) => number +>(p: string) => { return p.length; } : (p: string) => number +>p : string +>p.length : number +>p : string +>length : number + +// Identifier => Block is equivalent to(Identifier) => Block +var b = j => { return 0; } +>b : (j: any) => number +>j => { return 0; } : (j: any) => number +>j : any + +var b = (j) => { return 0; } +>b : (j: any) => number +>(j) => { return 0; } : (j: any) => number +>j : any + +// Identifier => AssignmentExpression is equivalent to(Identifier) => AssignmentExpression +var c: number; +>c : number + +var d = n => c = n; +>d : (n: any) => any +>n => c = n : (n: any) => any +>n : any +>c = n : any +>c : number +>n : any + +var d = (n) => c = n; +>d : (n: any) => any +>(n) => c = n : (n: any) => any +>n : any +>c = n : any +>c : number +>n : any + +var d: (n: any) => any; +>d : (n: any) => any +>n : any + + +// Arrow function used in class member initializer +// Arrow function used in class member function +class MyClass { +>MyClass : MyClass + + m = (n) => n + 1; +>m : (n: any) => any +>(n) => n + 1 : (n: any) => any +>n : any +>n + 1 : any +>n : any + + p = (n) => n && this; +>p : (n: any) => MyClass +>(n) => n && this : (n: any) => MyClass +>n : any +>n && this : MyClass +>n : any +>this : MyClass + + fn() { +>fn : () => void + + var m = (n) => n + 1; +>m : (n: any) => any +>(n) => n + 1 : (n: any) => any +>n : any +>n + 1 : any +>n : any + + var p = (n) => n && this; +>p : (n: any) => MyClass +>(n) => n && this : (n: any) => MyClass +>n : any +>n && this : MyClass +>n : any +>this : MyClass + } +} + +// Arrow function used in arrow function +var arrrr = () => (m: number) => () => (n: number) => m + n; +>arrrr : () => (m: number) => () => (n: number) => number +>() => (m: number) => () => (n: number) => m + n : () => (m: number) => () => (n: number) => number +>(m: number) => () => (n: number) => m + n : (m: number) => () => (n: number) => number +>m : number +>() => (n: number) => m + n : () => (n: number) => number +>(n: number) => m + n : (n: number) => number +>n : number +>m + n : number +>m : number +>n : number + +var e = arrrr()(3)()(4); +>e : number +>arrrr()(3)()(4) : number +>arrrr()(3)() : (n: number) => number +>arrrr()(3) : () => (n: number) => number +>arrrr() : (m: number) => () => (n: number) => number +>arrrr : () => (m: number) => () => (n: number) => number + +var e: number; +>e : number + +// Arrow function used in arrow function used in function +function someFn() { +>someFn : () => void + + var arr = (n: number) => (p: number) => p * n; +>arr : (n: number) => (p: number) => number +>(n: number) => (p: number) => p * n : (n: number) => (p: number) => number +>n : number +>(p: number) => p * n : (p: number) => number +>p : number +>p * n : number +>p : number +>n : number + + arr(3)(4).toExponential(); +>arr(3)(4).toExponential() : string +>arr(3)(4).toExponential : (fractionDigits?: number) => string +>arr(3)(4) : number +>arr(3) : (p: number) => number +>arr : (n: number) => (p: number) => number +>toExponential : (fractionDigits?: number) => string +} + +// Arrow function used in function +function someOtherFn() { +>someOtherFn : () => void + + var arr = (n: number) => '' + n; +>arr : (n: number) => string +>(n: number) => '' + n : (n: number) => string +>n : number +>'' + n : string +>n : number + + arr(4).charAt(0); +>arr(4).charAt(0) : string +>arr(4).charAt : (pos: number) => string +>arr(4) : string +>arr : (n: number) => string +>charAt : (pos: number) => string +} + +// Arrow function used in nested function in function +function outerFn() { +>outerFn : () => void + + function innerFn() { +>innerFn : () => void + + var arrowFn = () => { }; +>arrowFn : () => void +>() => { } : () => void + + var p = arrowFn(); +>p : void +>arrowFn() : void +>arrowFn : () => void + + var p: void; +>p : void + } +} + +// Arrow function used in nested function in arrow function +var f = (n: string) => { +>f : (n: string) => () => string +>(n: string) => { function fn(x: number) { return () => n + x; } return fn(4);} : (n: string) => () => string +>n : string + + function fn(x: number) { +>fn : (x: number) => () => string +>x : number + + return () => n + x; +>() => n + x : () => string +>n + x : string +>n : string +>x : number + } + return fn(4); +>fn(4) : () => string +>fn : (x: number) => () => string +} +var g = f('')(); +>g : string +>f('')() : string +>f('') : () => string +>f : (n: string) => () => string + +var g: string; +>g : string + + +// Arrow function used in nested function in arrow function in nested function +function someOuterFn() { +>someOuterFn : () => (n: string) => () => () => number + + var arr = (n: string) => { +>arr : (n: string) => () => () => number +>(n: string) => { function innerFn() { return () => n.length; } return innerFn; } : (n: string) => () => () => number +>n : string + + function innerFn() { +>innerFn : () => () => number + + return () => n.length; +>() => n.length : () => number +>n.length : number +>n : string +>length : number + } + return innerFn; +>innerFn : () => () => number + } + return arr; +>arr : (n: string) => () => () => number +} +var h = someOuterFn()('')()(); +>h : number +>someOuterFn()('')()() : number +>someOuterFn()('')() : () => number +>someOuterFn()('') : () => () => number +>someOuterFn() : (n: string) => () => () => number +>someOuterFn : () => (n: string) => () => () => number + +h.toExponential(); +>h.toExponential() : string +>h.toExponential : (fractionDigits?: number) => string +>h : number +>toExponential : (fractionDigits?: number) => string + +// Arrow function used in try/catch/finally in function +function tryCatchFn() { +>tryCatchFn : () => void + + try { + var x = () => this; +>x : () => any +>() => this : () => any +>this : any + + } catch (e) { +>e : any + + var t = () => e + this; +>t : () => any +>() => e + this : () => any +>e + this : any +>e : any +>this : any + + } finally { + var m = () => this + ''; +>m : () => string +>() => this + '' : () => string +>this + '' : string +>this : any + } +} + diff --git a/tests/baselines/reference/arrowFunctionInConstructorArgument1.js b/tests/baselines/reference/arrowFunctionInConstructorArgument1.js index 01645771343..3cfc18d2cf7 100644 --- a/tests/baselines/reference/arrowFunctionInConstructorArgument1.js +++ b/tests/baselines/reference/arrowFunctionInConstructorArgument1.js @@ -13,4 +13,4 @@ var C = (function () { })(); var c = new C(function () { return asdf; -}); +}); // should error diff --git a/tests/baselines/reference/arrowFunctionInExpressionStatement1.types b/tests/baselines/reference/arrowFunctionInExpressionStatement1.types new file mode 100644 index 00000000000..a5360a18fc0 --- /dev/null +++ b/tests/baselines/reference/arrowFunctionInExpressionStatement1.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/arrowFunctionInExpressionStatement1.ts === +() => 0; +>() => 0 : () => number + diff --git a/tests/baselines/reference/arrowFunctionInExpressionStatement2.types b/tests/baselines/reference/arrowFunctionInExpressionStatement2.types new file mode 100644 index 00000000000..d4bb431fa8d --- /dev/null +++ b/tests/baselines/reference/arrowFunctionInExpressionStatement2.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/arrowFunctionInExpressionStatement2.ts === +module M { +>M : typeof M + + () => 0; +>() => 0 : () => number +} diff --git a/tests/baselines/reference/asiAmbientFunctionDeclaration.types b/tests/baselines/reference/asiAmbientFunctionDeclaration.types new file mode 100644 index 00000000000..40ad7f2ba94 --- /dev/null +++ b/tests/baselines/reference/asiAmbientFunctionDeclaration.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/asiAmbientFunctionDeclaration.ts === +declare function foo() +>foo : () => any + diff --git a/tests/baselines/reference/asiArith.types b/tests/baselines/reference/asiArith.types new file mode 100644 index 00000000000..d6c0c7abd71 --- /dev/null +++ b/tests/baselines/reference/asiArith.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/asiArith.ts === +var x = 1; +>x : number + +var y = 1; +>y : number + +var z = +>z : number + +x +>x+++y : number +>x : number + ++ + ++ +>++y : number + ++ +>+y : number + +y +>y : number + + +var a = 1; +>a : number + +var b = 1; +>b : number + +var c = +>c : number + +x +>x---y : number +>x : number + +- + +- +>--y : number + +- +>-y : number + +y +>y : number + + diff --git a/tests/baselines/reference/asiBreak.types b/tests/baselines/reference/asiBreak.types new file mode 100644 index 00000000000..355d27f2a43 --- /dev/null +++ b/tests/baselines/reference/asiBreak.types @@ -0,0 +1,3 @@ +=== tests/cases/compiler/asiBreak.ts === +while (true) break +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/asiContinue.types b/tests/baselines/reference/asiContinue.types new file mode 100644 index 00000000000..5b3f0145377 --- /dev/null +++ b/tests/baselines/reference/asiContinue.types @@ -0,0 +1,3 @@ +=== tests/cases/compiler/asiContinue.ts === +while (true) continue +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/asiInES6Classes.types b/tests/baselines/reference/asiInES6Classes.types new file mode 100644 index 00000000000..90c7f71aba6 --- /dev/null +++ b/tests/baselines/reference/asiInES6Classes.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/asiInES6Classes.ts === +class Foo { +>Foo : Foo + + + + defaults = { +>defaults : { done: boolean; } +>{ done: false } : { done: boolean; } + + done: false +>done : boolean + + } + + + + bar() { +>bar : () => number + + return 3; + + } + + + +} + diff --git a/tests/baselines/reference/assign1.types b/tests/baselines/reference/assign1.types new file mode 100644 index 00000000000..32b93af647d --- /dev/null +++ b/tests/baselines/reference/assign1.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/assign1.ts === +module M { +>M : typeof M + + interface I { +>I : I + + salt:number; +>salt : number + + pepper:number; +>pepper : number + } + + var x:I={salt:2,pepper:0}; +>x : I +>I : I +>{salt:2,pepper:0} : { salt: number; pepper: number; } +>salt : number +>pepper : number +} + diff --git a/tests/baselines/reference/assignAnyToEveryType.js b/tests/baselines/reference/assignAnyToEveryType.js index 483cef6d82b..47093cd0852 100644 --- a/tests/baselines/reference/assignAnyToEveryType.js +++ b/tests/baselines/reference/assignAnyToEveryType.js @@ -46,6 +46,7 @@ function k(a: T) { } //// [assignAnyToEveryType.js] +// all of these are valid var x; var a = x; var b = x; diff --git a/tests/baselines/reference/assignEveryTypeToAny.js b/tests/baselines/reference/assignEveryTypeToAny.js index 7f36d13d64c..c88fc2edc17 100644 --- a/tests/baselines/reference/assignEveryTypeToAny.js +++ b/tests/baselines/reference/assignEveryTypeToAny.js @@ -56,6 +56,7 @@ function j(a: T) { } //// [assignEveryTypeToAny.js] +// all of these are valid var x; x = 1; var a = 2; diff --git a/tests/baselines/reference/assignEveryTypeToAny.types b/tests/baselines/reference/assignEveryTypeToAny.types new file mode 100644 index 00000000000..b25aba00837 --- /dev/null +++ b/tests/baselines/reference/assignEveryTypeToAny.types @@ -0,0 +1,162 @@ +=== tests/cases/conformance/types/any/assignEveryTypeToAny.ts === +// all of these are valid + +var x: any; +>x : any + +x = 1; +>x = 1 : number +>x : any + +var a = 2; +>a : number + +x = a; +>x = a : number +>x : any +>a : number + +x = true; +>x = true : boolean +>x : any + +var b = true; +>b : boolean + +x = b; +>x = b : boolean +>x : any +>b : boolean + +x = ""; +>x = "" : string +>x : any + +var c = ""; +>c : string + +x = c; +>x = c : string +>x : any +>c : string + +var d: void; +>d : void + +x = d; +>x = d : void +>x : any +>d : void + +var e = undefined; +>e : any +>undefined : undefined + +x = e; +>x = e : any +>x : any +>e : any + +var e2: typeof undefined; +>e2 : any +>undefined : undefined + +x = e2; +>x = e2 : any +>x : any +>e2 : any + +enum E { +>E : E + + A +>A : E +} + +x = E.A; +>x = E.A : E +>x : any +>E.A : E +>E : typeof E +>A : E + +var f = E.A; +>f : E +>E.A : E +>E : typeof E +>A : E + +x = f; +>x = f : E +>x : any +>f : E + +interface I { +>I : I + + foo: string; +>foo : string +} + +var g: I; +>g : I +>I : I + +x = g; +>x = g : I +>x : any +>g : I + +class C { +>C : C + + bar: string; +>bar : string +} + +var h: C; +>h : C +>C : C + +x = h; +>x = h : C +>x : any +>h : C + +var i: { (): string }; +>i : () => string + +x = i; +>x = i : () => string +>x : any +>i : () => string + +x = { f() { return 1; } } +>x = { f() { return 1; } } : { f: () => number; } +>x : any +>{ f() { return 1; } } : { f: () => number; } +>f : () => number +>f() { return 1; } : () => number + +x = { f(x: T) { return x; } } +>x = { f(x: T) { return x; } } : { f: (x: T) => T; } +>x : any +>{ f(x: T) { return x; } } : { f: (x: T) => T; } +>f : (x: T) => T +>f(x: T) { return x; } : (x: T) => T +>T : T +>x : T +>T : T +>x : T + +function j(a: T) { +>j : (a: T) => void +>T : T +>a : T +>T : T + + x = a; +>x = a : T +>x : any +>a : T +} diff --git a/tests/baselines/reference/assignFromBooleanInterface2.js b/tests/baselines/reference/assignFromBooleanInterface2.js index cb74309cbc7..be376b293c0 100644 --- a/tests/baselines/reference/assignFromBooleanInterface2.js +++ b/tests/baselines/reference/assignFromBooleanInterface2.js @@ -30,5 +30,5 @@ a = x; a = b; b = a; b = x; -x = a; -x = b; +x = a; // expected error +x = b; // expected error diff --git a/tests/baselines/reference/assignFromNumberInterface2.js b/tests/baselines/reference/assignFromNumberInterface2.js index 017ef95a626..74384d42302 100644 --- a/tests/baselines/reference/assignFromNumberInterface2.js +++ b/tests/baselines/reference/assignFromNumberInterface2.js @@ -34,5 +34,5 @@ a = x; a = b; b = a; b = x; -x = a; -x = b; +x = a; // expected error +x = b; // expected error diff --git a/tests/baselines/reference/assignFromStringInterface2.js b/tests/baselines/reference/assignFromStringInterface2.js index f13fd55288b..7e4821ac2a7 100644 --- a/tests/baselines/reference/assignFromStringInterface2.js +++ b/tests/baselines/reference/assignFromStringInterface2.js @@ -57,5 +57,5 @@ a = x; a = b; b = a; b = x; -x = a; -x = b; +x = a; // expected error +x = b; // expected error diff --git a/tests/baselines/reference/assignToEnum.js b/tests/baselines/reference/assignToEnum.js index 37f98fa4146..153068738d1 100644 --- a/tests/baselines/reference/assignToEnum.js +++ b/tests/baselines/reference/assignToEnum.js @@ -13,7 +13,7 @@ var A; A[A["foo"] = 0] = "foo"; A[A["bar"] = 1] = "bar"; })(A || (A = {})); -A = undefined; -A = 1 /* bar */; -0 /* foo */ = 1; -0 /* foo */ = 1 /* bar */; +A = undefined; // invalid LHS +A = 1 /* bar */; // invalid LHS +0 /* foo */ = 1; // invalid LHS +0 /* foo */ = 1 /* bar */; // invalid LHS diff --git a/tests/baselines/reference/assignToInvalidLHS.js b/tests/baselines/reference/assignToInvalidLHS.js index 9307105cf10..13906d28fdf 100644 --- a/tests/baselines/reference/assignToInvalidLHS.js +++ b/tests/baselines/reference/assignToInvalidLHS.js @@ -5,4 +5,5 @@ declare var y:any; var x = new y = 5; //// [assignToInvalidLHS.js] +// Below is actually valid JavaScript (see http://es5.github.com/#x8.7 ), even though will always fail at runtime with 'invalid left-hand side' var x = new y = 5; diff --git a/tests/baselines/reference/assignToModule.js b/tests/baselines/reference/assignToModule.js index 132a8b9ad9c..ae81518bee2 100644 --- a/tests/baselines/reference/assignToModule.js +++ b/tests/baselines/reference/assignToModule.js @@ -3,4 +3,4 @@ module A {} A = undefined; // invalid LHS //// [assignToModule.js] -A = undefined; +A = undefined; // invalid LHS diff --git a/tests/baselines/reference/assignToObjectTypeWithPrototypeProperty.types b/tests/baselines/reference/assignToObjectTypeWithPrototypeProperty.types new file mode 100644 index 00000000000..7ea260f8c15 --- /dev/null +++ b/tests/baselines/reference/assignToObjectTypeWithPrototypeProperty.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/assignToObjectTypeWithPrototypeProperty.ts === +class XEvent {} +>XEvent : XEvent + +var p: XEvent = XEvent.prototype; +>p : XEvent +>XEvent : XEvent +>XEvent.prototype : XEvent +>XEvent : typeof XEvent +>prototype : XEvent + +var x: {prototype: XEvent} = XEvent; +>x : { prototype: XEvent; } +>prototype : XEvent +>XEvent : XEvent +>XEvent : typeof XEvent + diff --git a/tests/baselines/reference/assignToPrototype1.types b/tests/baselines/reference/assignToPrototype1.types new file mode 100644 index 00000000000..f4631c89e0b --- /dev/null +++ b/tests/baselines/reference/assignToPrototype1.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/assignToPrototype1.ts === +declare class Point { +>Point : Point + + add(dx: number, dy: number): void; +>add : (dx: number, dy: number) => void +>dx : number +>dy : number +} + +Point.prototype.add = function(dx, dy) { +>Point.prototype.add = function(dx, dy) {} : (dx: number, dy: number) => void +>Point.prototype.add : (dx: number, dy: number) => void +>Point.prototype : Point +>Point : typeof Point +>prototype : Point +>add : (dx: number, dy: number) => void +>function(dx, dy) {} : (dx: number, dy: number) => void +>dx : number +>dy : number + +}; diff --git a/tests/baselines/reference/assignmentCompatBug2.js b/tests/baselines/reference/assignmentCompatBug2.js index 10c2a090ca5..77d1e1b7d16 100644 --- a/tests/baselines/reference/assignmentCompatBug2.js +++ b/tests/baselines/reference/assignmentCompatBug2.js @@ -39,8 +39,8 @@ b3 = { }; // error //// [assignmentCompatBug2.js] -var b2 = { a: 0 }; -b2 = { a: 0 }; +var b2 = { a: 0 }; // error +b2 = { a: 0 }; // error b2 = { b: 0, a: 0 }; var b3; b3 = { @@ -51,7 +51,7 @@ b3 = { return 0; }, m: 0 -}; +}; // ok b3 = { f: function (n) { return 0; @@ -59,13 +59,13 @@ b3 = { g: function (s) { return 0; } -}; +}; // error b3 = { f: function (n) { return 0; }, m: 0 -}; +}; // error b3 = { f: function (n) { return 0; @@ -78,7 +78,7 @@ b3 = { k: function (a) { return null; } -}; +}; // ok b3 = { f: function (n) { return 0; @@ -90,4 +90,4 @@ b3 = { k: function (a) { return null; } -}; +}; // error diff --git a/tests/baselines/reference/assignmentCompatForEnums.types b/tests/baselines/reference/assignmentCompatForEnums.types new file mode 100644 index 00000000000..53e8caab638 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatForEnums.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/assignmentCompatForEnums.ts === +enum TokenType { One, Two }; +>TokenType : TokenType +>One : TokenType +>Two : TokenType + +var list = {}; +>list : {} +>{} : {} + + +function returnType(): TokenType { return null; } +>returnType : () => TokenType +>TokenType : TokenType + +function foo() { +>foo : () => void + + var x = returnType(); +>x : TokenType +>returnType() : TokenType +>returnType : () => TokenType + + var x: TokenType = list['one']; +>x : TokenType +>TokenType : TokenType +>list['one'] : any +>list : {} +} + + diff --git a/tests/baselines/reference/assignmentCompatFunctionsWithOptionalArgs.js b/tests/baselines/reference/assignmentCompatFunctionsWithOptionalArgs.js index 9fa9ec4c526..c96c739bf3c 100644 --- a/tests/baselines/reference/assignmentCompatFunctionsWithOptionalArgs.js +++ b/tests/baselines/reference/assignmentCompatFunctionsWithOptionalArgs.js @@ -6,7 +6,7 @@ foo({ id: 1234, name: false }); // Error, name of wrong type foo({ name: "hello" }); // Error, id required but missing //// [assignmentCompatFunctionsWithOptionalArgs.js] -foo({ id: 1234 }); -foo({ id: 1234, name: "hello" }); -foo({ id: 1234, name: false }); -foo({ name: "hello" }); +foo({ id: 1234 }); // Ok +foo({ id: 1234, name: "hello" }); // Ok +foo({ id: 1234, name: false }); // Error, name of wrong type +foo({ name: "hello" }); // Error, id required but missing diff --git a/tests/baselines/reference/assignmentCompatOnNew.js b/tests/baselines/reference/assignmentCompatOnNew.js index 5829fe9eea6..bc3b7e6ba96 100644 --- a/tests/baselines/reference/assignmentCompatOnNew.js +++ b/tests/baselines/reference/assignmentCompatOnNew.js @@ -15,4 +15,4 @@ var Foo = (function () { ; function bar(x) { } -bar(Foo); +bar(Foo); // Error, but should be allowed diff --git a/tests/baselines/reference/assignmentCompatOnNew.types b/tests/baselines/reference/assignmentCompatOnNew.types new file mode 100644 index 00000000000..19994e61df8 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatOnNew.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/assignmentCompatOnNew.ts === +class Foo{}; +>Foo : Foo + +function bar(x: {new(): Foo;}){} +>bar : (x: new () => Foo) => void +>x : new () => Foo +>Foo : Foo + +bar(Foo); // Error, but should be allowed +>bar(Foo) : void +>bar : (x: new () => Foo) => void +>Foo : typeof Foo + diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures.js b/tests/baselines/reference/assignmentCompatWithCallSignatures.js index bfee6f14941..0539463ddb1 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures.js +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures.js @@ -44,6 +44,7 @@ a = function (x: string) { return ''; } //// [assignmentCompatWithCallSignatures.js] +// void returning call signatures can be assigned a non-void returning call signature that otherwise matches var t; var a; t = a; @@ -66,6 +67,7 @@ a = function (x) { }; var s2; var a3; +// these are errors t = s2; t = a3; t = function (x) { return 1; }; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures2.js b/tests/baselines/reference/assignmentCompatWithCallSignatures2.js index b010064aba1..6fabe9b6af7 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures2.js +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures2.js @@ -51,6 +51,7 @@ a = function (x: string) { return ''; } //// [assignmentCompatWithCallSignatures2.js] +// void returning call signatures can be assigned a non-void returning call signature that otherwise matches var t; var a; t = a; @@ -74,6 +75,7 @@ a = { f: function (x) { return 1; } }; a = { f: function (x) { return ''; } }; +// errors t = function () { return 1; }; t = function (x) { return ''; @@ -84,6 +86,7 @@ a = function (x) { }; var s2; var a3; +// these are errors t = s2; t = a3; t = function (x) { return 1; }; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures3.js b/tests/baselines/reference/assignmentCompatWithCallSignatures3.js index 67779d01fb3..8d33412bb4b 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures3.js +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures3.js @@ -100,6 +100,7 @@ b18 = a18; // ok //// [assignmentCompatWithCallSignatures3.js] +// these are all permitted with the current rules, since we do not do contextual signature instantiation var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -151,56 +152,56 @@ var a16; var a17; var a18; var b; -a = b; -b = a; +a = b; // ok +b = a; // ok var b2; -a2 = b2; -b2 = a2; +a2 = b2; // ok +b2 = a2; // ok var b3; -a3 = b3; -b3 = a3; +a3 = b3; // ok +b3 = a3; // ok var b4; -a4 = b4; -b4 = a4; +a4 = b4; // ok +b4 = a4; // ok var b5; -a5 = b5; -b5 = a5; +a5 = b5; // ok +b5 = a5; // ok var b6; -a6 = b6; -b6 = a6; +a6 = b6; // ok +b6 = a6; // ok var b7; -a7 = b7; -b7 = a7; +a7 = b7; // ok +b7 = a7; // ok var b8; -a8 = b8; -b8 = a8; +a8 = b8; // ok +b8 = a8; // ok var b9; -a9 = b9; -b9 = a9; +a9 = b9; // ok +b9 = a9; // ok var b10; -a10 = b10; -b10 = a10; +a10 = b10; // ok +b10 = a10; // ok var b11; -a11 = b11; -b11 = a11; +a11 = b11; // ok +b11 = a11; // ok var b12; -a12 = b12; -b12 = a12; +a12 = b12; // ok +b12 = a12; // ok var b13; -a13 = b13; -b13 = a13; +a13 = b13; // ok +b13 = a13; // ok var b14; -a14 = b14; -b14 = a14; +a14 = b14; // ok +b14 = a14; // ok var b15; -a15 = b15; -b15 = a15; +a15 = b15; // ok +b15 = a15; // ok var b16; -a16 = b16; -b16 = a16; -var b17; -a17 = b17; -b17 = a17; +a16 = b16; // ok +b16 = a16; // ok +var b17; // ok +a17 = b17; // ok +b17 = a17; // ok var b18; -a18 = b18; -b18 = a18; +a18 = b18; // ok +b18 = a18; // ok diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures3.types b/tests/baselines/reference/assignmentCompatWithCallSignatures3.types new file mode 100644 index 00000000000..72cceae84ff --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures3.types @@ -0,0 +1,565 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithCallSignatures3.ts === +// these are all permitted with the current rules, since we do not do contextual signature instantiation + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +var a: (x: number) => number[]; +>a : (x: number) => number[] +>x : number + +var a2: (x: number) => string[]; +>a2 : (x: number) => string[] +>x : number + +var a3: (x: number) => void; +>a3 : (x: number) => void +>x : number + +var a4: (x: string, y: number) => string; +>a4 : (x: string, y: number) => string +>x : string +>y : number + +var a5: (x: (arg: string) => number) => string; +>a5 : (x: (arg: string) => number) => string +>x : (arg: string) => number +>arg : string + +var a6: (x: (arg: Base) => Derived) => Base; +>a6 : (x: (arg: Base) => Derived) => Base +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>Base : Base + +var a7: (x: (arg: Base) => Derived) => (r: Base) => Derived; +>a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + +var a8: (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a8 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + +var a9: (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a9 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + +var a10: (...x: Derived[]) => Derived; +>a10 : (...x: Derived[]) => Derived +>x : Derived[] +>Derived : Derived +>Derived : Derived + +var a11: (x: { foo: string }, y: { foo: string; bar: string }) => Base; +>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>x : { foo: string; } +>foo : string +>y : { foo: string; bar: string; } +>foo : string +>bar : string +>Base : Base + +var a12: (x: Array, y: Array) => Array; +>a12 : (x: Base[], y: Derived2[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived2[] +>Array : T[] +>Derived2 : Derived2 +>Array : T[] +>Derived : Derived + +var a13: (x: Array, y: Array) => Array; +>a13 : (x: Base[], y: Derived[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived[] +>Array : T[] +>Derived : Derived +>Array : T[] +>Derived : Derived + +var a14: (x: { a: string; b: number }) => Object; +>a14 : (x: { a: string; b: number; }) => Object +>x : { a: string; b: number; } +>a : string +>b : number +>Object : Object + +var a15: { +>a15 : { (x: number): number[]; (x: string): string[]; } + + (x: number): number[]; +>x : number + + (x: string): string[]; +>x : string +} +var a16: { +>a16 : { (x: T): number[]; (x: U): number[]; } + + (x: T): number[]; +>T : T +>Derived : Derived +>x : T +>T : T + + (x: U): number[]; +>U : U +>Base : Base +>x : U +>U : U +} +var a17: { +>a17 : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; } + + (x: (a: number) => number): number[]; +>x : (a: number) => number +>a : number + + (x: (a: string) => string): string[]; +>x : (a: string) => string +>a : string + +}; +var a18: { +>a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; } + + (x: { +>x : { (a: number): number; (a: string): string; } + + (a: number): number; +>a : number + + (a: string): string; +>a : string + + }): any[]; + (x: { +>x : { (a: boolean): boolean; (a: Date): Date; } + + (a: boolean): boolean; +>a : boolean + + (a: Date): Date; +>a : Date +>Date : Date +>Date : Date + + }): any[]; +} + +var b: (x: T) => T[]; +>b : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +a = b; // ok +>a = b : (x: T) => T[] +>a : (x: number) => number[] +>b : (x: T) => T[] + +b = a; // ok +>b = a : (x: number) => number[] +>b : (x: T) => T[] +>a : (x: number) => number[] + +var b2: (x: T) => string[]; +>b2 : (x: T) => string[] +>T : T +>x : T +>T : T + +a2 = b2; // ok +>a2 = b2 : (x: T) => string[] +>a2 : (x: number) => string[] +>b2 : (x: T) => string[] + +b2 = a2; // ok +>b2 = a2 : (x: number) => string[] +>b2 : (x: T) => string[] +>a2 : (x: number) => string[] + +var b3: (x: T) => T; +>b3 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +a3 = b3; // ok +>a3 = b3 : (x: T) => T +>a3 : (x: number) => void +>b3 : (x: T) => T + +b3 = a3; // ok +>b3 = a3 : (x: number) => void +>b3 : (x: T) => T +>a3 : (x: number) => void + +var b4: (x: T, y: U) => T; +>b4 : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + +a4 = b4; // ok +>a4 = b4 : (x: T, y: U) => T +>a4 : (x: string, y: number) => string +>b4 : (x: T, y: U) => T + +b4 = a4; // ok +>b4 = a4 : (x: string, y: number) => string +>b4 : (x: T, y: U) => T +>a4 : (x: string, y: number) => string + +var b5: (x: (arg: T) => U) => T; +>b5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +a5 = b5; // ok +>a5 = b5 : (x: (arg: T) => U) => T +>a5 : (x: (arg: string) => number) => string +>b5 : (x: (arg: T) => U) => T + +b5 = a5; // ok +>b5 = a5 : (x: (arg: string) => number) => string +>b5 : (x: (arg: T) => U) => T +>a5 : (x: (arg: string) => number) => string + +var b6: (x: (arg: T) => U) => T; +>b6 : (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +a6 = b6; // ok +>a6 = b6 : (x: (arg: T) => U) => T +>a6 : (x: (arg: Base) => Derived) => Base +>b6 : (x: (arg: T) => U) => T + +b6 = a6; // ok +>b6 = a6 : (x: (arg: Base) => Derived) => Base +>b6 : (x: (arg: T) => U) => T +>a6 : (x: (arg: Base) => Derived) => Base + +var b7: (x: (arg: T) => U) => (r: T) => U; +>b7 : (x: (arg: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>r : T +>T : T +>U : U + +a7 = b7; // ok +>a7 = b7 : (x: (arg: T) => U) => (r: T) => U +>a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived +>b7 : (x: (arg: T) => U) => (r: T) => U + +b7 = a7; // ok +>b7 = a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived +>b7 : (x: (arg: T) => U) => (r: T) => U +>a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived + +var b8: (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U; +>b8 : (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: T) => U +>arg2 : T +>T : T +>U : U +>r : T +>T : T +>U : U + +a8 = b8; // ok +>a8 = b8 : (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>a8 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>b8 : (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U + +b8 = a8; // ok +>b8 = a8 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>b8 : (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>a8 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived + +var b9: (x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U; +>b9 : (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: { foo: string; bing: number; }) => U +>arg2 : { foo: string; bing: number; } +>foo : string +>bing : number +>U : U +>r : T +>T : T +>U : U + +a9 = b9; // ok +>a9 = b9 : (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>a9 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>b9 : (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U + +b9 = a9; // ok +>b9 = a9 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>b9 : (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>a9 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived + +var b10: (...x: T[]) => T; +>b10 : (...x: T[]) => T +>T : T +>Derived : Derived +>x : T[] +>T : T +>T : T + +a10 = b10; // ok +>a10 = b10 : (...x: T[]) => T +>a10 : (...x: Derived[]) => Derived +>b10 : (...x: T[]) => T + +b10 = a10; // ok +>b10 = a10 : (...x: Derived[]) => Derived +>b10 : (...x: T[]) => T +>a10 : (...x: Derived[]) => Derived + +var b11: (x: T, y: T) => T; +>b11 : (x: T, y: T) => T +>T : T +>Base : Base +>x : T +>T : T +>y : T +>T : T +>T : T + +a11 = b11; // ok +>a11 = b11 : (x: T, y: T) => T +>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>b11 : (x: T, y: T) => T + +b11 = a11; // ok +>b11 = a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>b11 : (x: T, y: T) => T +>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base + +var b12: >(x: Array, y: T) => Array; +>b12 : (x: Base[], y: T) => Derived[] +>T : T +>Array : T[] +>Base : Base +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>Array : T[] +>Derived : Derived + +a12 = b12; // ok +>a12 = b12 : (x: Base[], y: T) => Derived[] +>a12 : (x: Base[], y: Derived2[]) => Derived[] +>b12 : (x: Base[], y: T) => Derived[] + +b12 = a12; // ok +>b12 = a12 : (x: Base[], y: Derived2[]) => Derived[] +>b12 : (x: Base[], y: T) => Derived[] +>a12 : (x: Base[], y: Derived2[]) => Derived[] + +var b13: >(x: Array, y: T) => T; +>b13 : (x: Base[], y: T) => T +>T : T +>Array : T[] +>Derived : Derived +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>T : T + +a13 = b13; // ok +>a13 = b13 : (x: Base[], y: T) => T +>a13 : (x: Base[], y: Derived[]) => Derived[] +>b13 : (x: Base[], y: T) => T + +b13 = a13; // ok +>b13 = a13 : (x: Base[], y: Derived[]) => Derived[] +>b13 : (x: Base[], y: T) => T +>a13 : (x: Base[], y: Derived[]) => Derived[] + +var b14: (x: { a: T; b: T }) => T; +>b14 : (x: { a: T; b: T; }) => T +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +a14 = b14; // ok +>a14 = b14 : (x: { a: T; b: T; }) => T +>a14 : (x: { a: string; b: number; }) => Object +>b14 : (x: { a: T; b: T; }) => T + +b14 = a14; // ok +>b14 = a14 : (x: { a: string; b: number; }) => Object +>b14 : (x: { a: T; b: T; }) => T +>a14 : (x: { a: string; b: number; }) => Object + +var b15: (x: T) => T[]; +>b15 : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +a15 = b15; // ok +>a15 = b15 : (x: T) => T[] +>a15 : { (x: number): number[]; (x: string): string[]; } +>b15 : (x: T) => T[] + +b15 = a15; // ok +>b15 = a15 : { (x: number): number[]; (x: string): string[]; } +>b15 : (x: T) => T[] +>a15 : { (x: number): number[]; (x: string): string[]; } + +var b16: (x: T) => number[]; +>b16 : (x: T) => number[] +>T : T +>Base : Base +>x : T +>T : T + +a16 = b16; // ok +>a16 = b16 : (x: T) => number[] +>a16 : { (x: T): number[]; (x: U): number[]; } +>b16 : (x: T) => number[] + +b16 = a16; // ok +>b16 = a16 : { (x: T): number[]; (x: U): number[]; } +>b16 : (x: T) => number[] +>a16 : { (x: T): number[]; (x: U): number[]; } + +var b17: (x: (a: T) => T) => T[]; // ok +>b17 : (x: (a: T) => T) => T[] +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + +a17 = b17; // ok +>a17 = b17 : (x: (a: T) => T) => T[] +>a17 : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; } +>b17 : (x: (a: T) => T) => T[] + +b17 = a17; // ok +>b17 = a17 : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; } +>b17 : (x: (a: T) => T) => T[] +>a17 : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; } + +var b18: (x: (a: T) => T) => T[]; +>b18 : (x: (a: T) => T) => T[] +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + +a18 = b18; // ok +>a18 = b18 : (x: (a: T) => T) => T[] +>a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; } +>b18 : (x: (a: T) => T) => T[] + +b18 = a18; // ok +>b18 = a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; } +>b18 : (x: (a: T) => T) => T[] +>a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; } + diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures4.js b/tests/baselines/reference/assignmentCompatWithCallSignatures4.js index a52e6e13137..926d8eb13e1 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures4.js +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures4.js @@ -99,6 +99,7 @@ module Errors { } //// [assignmentCompatWithCallSignatures4.js] +// These are mostly permitted with the current loose rules. All ok unless otherwise noted. var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -135,6 +136,7 @@ var Errors; })(Base); var WithNonGenericSignaturesInBaseType; (function (WithNonGenericSignaturesInBaseType) { + // target type with non-generic call signatures var a2; var a7; var a8; @@ -152,8 +154,8 @@ var Errors; a7 = b7; b7 = a7; var b8; - a8 = b8; - b8 = a8; + a8 = b8; // error, { foo: number } and Base are incompatible + b8 = a8; // error, { foo: number } and Base are incompatible var b10; a10 = b10; b10 = a10; @@ -178,10 +180,12 @@ var Errors; })(WithNonGenericSignaturesInBaseType || (WithNonGenericSignaturesInBaseType = {})); var WithGenericSignaturesInBaseType; (function (WithGenericSignaturesInBaseType) { + // target type has generic call signature var a2; var b2; a2 = b2; b2 = a2; + // target type has generic call signature var a3; var b3; a3 = b3; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures5.js b/tests/baselines/reference/assignmentCompatWithCallSignatures5.js index e86614a4c58..afe3166ccb5 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures5.js +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures5.js @@ -66,6 +66,7 @@ b18 = a18; // ok //// [assignmentCompatWithCallSignatures5.js] +// checking assignment compat for function types. No errors in this file var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -110,35 +111,35 @@ var a16; var a17; var a18; var b; -a = b; -b = a; +a = b; // ok +b = a; // ok var b2; -a2 = b2; -b2 = a2; +a2 = b2; // ok +b2 = a2; // ok var b3; -a3 = b3; -b3 = a3; +a3 = b3; // ok +b3 = a3; // ok var b4; -a4 = b4; -b4 = a4; +a4 = b4; // ok +b4 = a4; // ok var b5; -a5 = b5; -b5 = a5; +a5 = b5; // ok +b5 = a5; // ok var b6; -a6 = b6; -b6 = a6; +a6 = b6; // ok +b6 = a6; // ok var b11; -a11 = b11; -b11 = a11; +a11 = b11; // ok +b11 = a11; // ok var b15; -a15 = b15; -b15 = a15; +a15 = b15; // ok, T = U, T = V +b15 = a15; // ok var b16; -a15 = b16; -b15 = a16; +a15 = b16; // ok +b15 = a16; // ok var b17; -a17 = b17; -b17 = a17; +a17 = b17; // ok +b17 = a17; // ok var b18; -a18 = b18; -b18 = a18; +a18 = b18; // ok +b18 = a18; // ok diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures5.types b/tests/baselines/reference/assignmentCompatWithCallSignatures5.types new file mode 100644 index 00000000000..2652a2a4e68 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures5.types @@ -0,0 +1,380 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithCallSignatures5.ts === +// checking assignment compat for function types. No errors in this file + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +var a: (x: T) => T[]; +>a : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +var a2: (x: T) => string[]; +>a2 : (x: T) => string[] +>T : T +>x : T +>T : T + +var a3: (x: T) => void; +>a3 : (x: T) => void +>T : T +>x : T +>T : T + +var a4: (x: T, y: U) => string; +>a4 : (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + +var a5: (x: (arg: T) => U) => T; +>a5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +var a6: (x: (arg: T) => Derived) => T; +>a6 : (x: (arg: T) => Derived) => T +>T : T +>Base : Base +>x : (arg: T) => Derived +>arg : T +>T : T +>Derived : Derived +>T : T + +var a11: (x: { foo: T }, y: { foo: T; bar: T }) => Base; +>a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>T : T +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T +>Base : Base + +var a15: (x: { a: T; b: T }) => T[]; +>a15 : (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +var a16: (x: { a: T; b: T }) => T[]; +>a16 : (x: { a: T; b: T; }) => T[] +>T : T +>Base : Base +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +var a17: { +>a17 : { (x: (a: T) => T): T[]; (x: (a: T) => T): T[]; } + + (x: (a: T) => T): T[]; +>T : T +>Derived : Derived +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + + (x: (a: T) => T): T[]; +>T : T +>Base : Base +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + +}; +var a18: { +>a18 : { (x: { (a: T): T; (a: T): T; }): any[]; (x: { (a: T): T; (a: T): T; }): any[]; } + + (x: { +>x : { (a: T): T; (a: T): T; } + + (a: T): T; +>T : T +>Derived : Derived +>a : T +>T : T +>T : T + + (a: T): T; +>T : T +>Base : Base +>a : T +>T : T +>T : T + + }): any[]; + (x: { +>x : { (a: T): T; (a: T): T; } + + (a: T): T; +>T : T +>Derived2 : Derived2 +>a : T +>T : T +>T : T + + (a: T): T; +>T : T +>Base : Base +>a : T +>T : T +>T : T + + }): any[]; +}; + +var b: (x: T) => T[]; +>b : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +a = b; // ok +>a = b : (x: T) => T[] +>a : (x: T) => T[] +>b : (x: T) => T[] + +b = a; // ok +>b = a : (x: T) => T[] +>b : (x: T) => T[] +>a : (x: T) => T[] + +var b2: (x: T) => string[]; +>b2 : (x: T) => string[] +>T : T +>x : T +>T : T + +a2 = b2; // ok +>a2 = b2 : (x: T) => string[] +>a2 : (x: T) => string[] +>b2 : (x: T) => string[] + +b2 = a2; // ok +>b2 = a2 : (x: T) => string[] +>b2 : (x: T) => string[] +>a2 : (x: T) => string[] + +var b3: (x: T) => T; +>b3 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +a3 = b3; // ok +>a3 = b3 : (x: T) => T +>a3 : (x: T) => void +>b3 : (x: T) => T + +b3 = a3; // ok +>b3 = a3 : (x: T) => void +>b3 : (x: T) => T +>a3 : (x: T) => void + +var b4: (x: T, y: U) => string; +>b4 : (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + +a4 = b4; // ok +>a4 = b4 : (x: T, y: U) => string +>a4 : (x: T, y: U) => string +>b4 : (x: T, y: U) => string + +b4 = a4; // ok +>b4 = a4 : (x: T, y: U) => string +>b4 : (x: T, y: U) => string +>a4 : (x: T, y: U) => string + +var b5: (x: (arg: T) => U) => T; +>b5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +a5 = b5; // ok +>a5 = b5 : (x: (arg: T) => U) => T +>a5 : (x: (arg: T) => U) => T +>b5 : (x: (arg: T) => U) => T + +b5 = a5; // ok +>b5 = a5 : (x: (arg: T) => U) => T +>b5 : (x: (arg: T) => U) => T +>a5 : (x: (arg: T) => U) => T + +var b6: (x: (arg: T) => U) => T; +>b6 : (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +a6 = b6; // ok +>a6 = b6 : (x: (arg: T) => U) => T +>a6 : (x: (arg: T) => Derived) => T +>b6 : (x: (arg: T) => U) => T + +b6 = a6; // ok +>b6 = a6 : (x: (arg: T) => Derived) => T +>b6 : (x: (arg: T) => U) => T +>a6 : (x: (arg: T) => Derived) => T + +var b11: (x: { foo: T }, y: { foo: U; bar: U }) => Base; +>b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>T : T +>U : U +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: U; bar: U; } +>foo : U +>U : U +>bar : U +>U : U +>Base : Base + +a11 = b11; // ok +>a11 = b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base + +b11 = a11; // ok +>b11 = a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base + +var b15: (x: { a: U; b: V; }) => U[]; +>b15 : (x: { a: U; b: V; }) => U[] +>U : U +>V : V +>x : { a: U; b: V; } +>a : U +>U : U +>b : V +>V : V +>U : U + +a15 = b15; // ok, T = U, T = V +>a15 = b15 : (x: { a: U; b: V; }) => U[] +>a15 : (x: { a: T; b: T; }) => T[] +>b15 : (x: { a: U; b: V; }) => U[] + +b15 = a15; // ok +>b15 = a15 : (x: { a: T; b: T; }) => T[] +>b15 : (x: { a: U; b: V; }) => U[] +>a15 : (x: { a: T; b: T; }) => T[] + +var b16: (x: { a: T; b: T }) => T[]; +>b16 : (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +a15 = b16; // ok +>a15 = b16 : (x: { a: T; b: T; }) => T[] +>a15 : (x: { a: T; b: T; }) => T[] +>b16 : (x: { a: T; b: T; }) => T[] + +b15 = a16; // ok +>b15 = a16 : (x: { a: T; b: T; }) => T[] +>b15 : (x: { a: U; b: V; }) => U[] +>a16 : (x: { a: T; b: T; }) => T[] + +var b17: (x: (a: T) => T) => T[]; +>b17 : (x: (a: T) => T) => T[] +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + +a17 = b17; // ok +>a17 = b17 : (x: (a: T) => T) => T[] +>a17 : { (x: (a: T) => T): T[]; (x: (a: T) => T): T[]; } +>b17 : (x: (a: T) => T) => T[] + +b17 = a17; // ok +>b17 = a17 : { (x: (a: T) => T): T[]; (x: (a: T) => T): T[]; } +>b17 : (x: (a: T) => T) => T[] +>a17 : { (x: (a: T) => T): T[]; (x: (a: T) => T): T[]; } + +var b18: (x: (a: T) => T) => any[]; +>b18 : (x: (a: T) => T) => any[] +>x : (a: T) => T +>T : T +>a : T +>T : T +>T : T + +a18 = b18; // ok +>a18 = b18 : (x: (a: T) => T) => any[] +>a18 : { (x: { (a: T): T; (a: T): T; }): any[]; (x: { (a: T): T; (a: T): T; }): any[]; } +>b18 : (x: (a: T) => T) => any[] + +b18 = a18; // ok +>b18 = a18 : { (x: { (a: T): T; (a: T): T; }): any[]; (x: { (a: T): T; (a: T): T; }): any[]; } +>b18 : (x: (a: T) => T) => any[] +>a18 : { (x: { (a: T): T; (a: T): T; }): any[]; (x: { (a: T): T; (a: T): T; }): any[]; } + diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures6.js b/tests/baselines/reference/assignmentCompatWithCallSignatures6.js index e2c099f1e7b..0db1f1f79fb 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures6.js +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures6.js @@ -43,6 +43,7 @@ x.a16 = b16; b16 = x.a16; //// [assignmentCompatWithCallSignatures6.js] +// checking assignment compatibility relations for function types. All valid var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures6.types b/tests/baselines/reference/assignmentCompatWithCallSignatures6.types new file mode 100644 index 00000000000..b45f3357942 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures6.types @@ -0,0 +1,273 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithCallSignatures6.ts === +// checking assignment compatibility relations for function types. All valid + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { +>A : A + + a: (x: T) => T[]; +>a : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: (x: T) => string[]; +>a2 : (x: T) => string[] +>T : T +>x : T +>T : T + + a3: (x: T) => void; +>a3 : (x: T) => void +>T : T +>x : T +>T : T + + a4: (x: T, y: U) => string; +>a4 : (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + a5: (x: (arg: T) => U) => T; +>a5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: (x: (arg: T) => Derived) => T; +>a6 : (x: (arg: T) => Derived) => T +>T : T +>Base : Base +>x : (arg: T) => Derived +>arg : T +>T : T +>Derived : Derived +>T : T + + a11: (x: { foo: T }, y: { foo: T; bar: T }) => Base; +>a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>T : T +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T +>Base : Base + + a15: (x: { a: T; b: T }) => T[]; +>a15 : (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a16: (x: { a: T; b: T }) => T[]; +>a16 : (x: { a: T; b: T; }) => T[] +>T : T +>Base : Base +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T +} + +var x: A; +>x : A +>A : A + +var b: (x: T) => T[]; +>b : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +x.a = b; +>x.a = b : (x: T) => T[] +>x.a : (x: T) => T[] +>x : A +>a : (x: T) => T[] +>b : (x: T) => T[] + +b = x.a; +>b = x.a : (x: T) => T[] +>b : (x: T) => T[] +>x.a : (x: T) => T[] +>x : A +>a : (x: T) => T[] + +var b2: (x: T) => string[]; +>b2 : (x: T) => string[] +>T : T +>x : T +>T : T + +x.a2 = b2; +>x.a2 = b2 : (x: T) => string[] +>x.a2 : (x: T) => string[] +>x : A +>a2 : (x: T) => string[] +>b2 : (x: T) => string[] + +b2 = x.a2; +>b2 = x.a2 : (x: T) => string[] +>b2 : (x: T) => string[] +>x.a2 : (x: T) => string[] +>x : A +>a2 : (x: T) => string[] + +var b3: (x: T) => T; +>b3 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +x.a3 = b3; +>x.a3 = b3 : (x: T) => T +>x.a3 : (x: T) => void +>x : A +>a3 : (x: T) => void +>b3 : (x: T) => T + +b3 = x.a3; +>b3 = x.a3 : (x: T) => void +>b3 : (x: T) => T +>x.a3 : (x: T) => void +>x : A +>a3 : (x: T) => void + +var b4: (x: T, y: U) => string; +>b4 : (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + +x.a4 = b4; +>x.a4 = b4 : (x: T, y: U) => string +>x.a4 : (x: T, y: U) => string +>x : A +>a4 : (x: T, y: U) => string +>b4 : (x: T, y: U) => string + +b4 = x.a4; +>b4 = x.a4 : (x: T, y: U) => string +>b4 : (x: T, y: U) => string +>x.a4 : (x: T, y: U) => string +>x : A +>a4 : (x: T, y: U) => string + +var b5: (x: (arg: T) => U) => T; +>b5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +x.a5 = b5; +>x.a5 = b5 : (x: (arg: T) => U) => T +>x.a5 : (x: (arg: T) => U) => T +>x : A +>a5 : (x: (arg: T) => U) => T +>b5 : (x: (arg: T) => U) => T + +b5 = x.a5; +>b5 = x.a5 : (x: (arg: T) => U) => T +>b5 : (x: (arg: T) => U) => T +>x.a5 : (x: (arg: T) => U) => T +>x : A +>a5 : (x: (arg: T) => U) => T + +var b11: (x: { foo: T }, y: { foo: U; bar: U }) => Base; +>b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>T : T +>U : U +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: U; bar: U; } +>foo : U +>U : U +>bar : U +>U : U +>Base : Base + +x.a11 = b11; +>x.a11 = b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>x.a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>x : A +>a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base + +b11 = x.a11; +>b11 = x.a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>x.a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>x : A +>a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base + +var b16: (x: { a: T; b: T }) => T[]; +>b16 : (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +x.a16 = b16; +>x.a16 = b16 : (x: { a: T; b: T; }) => T[] +>x.a16 : (x: { a: T; b: T; }) => T[] +>x : A +>a16 : (x: { a: T; b: T; }) => T[] +>b16 : (x: { a: T; b: T; }) => T[] + +b16 = x.a16; +>b16 = x.a16 : (x: { a: T; b: T; }) => T[] +>b16 : (x: { a: T; b: T; }) => T[] +>x.a16 : (x: { a: T; b: T; }) => T[] +>x : A +>a16 : (x: { a: T; b: T; }) => T[] + diff --git a/tests/baselines/reference/assignmentCompatWithCallSignaturesWithOptionalParameters.js b/tests/baselines/reference/assignmentCompatWithCallSignaturesWithOptionalParameters.js index da0bb3bac22..e12a741cd0f 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignaturesWithOptionalParameters.js +++ b/tests/baselines/reference/assignmentCompatWithCallSignaturesWithOptionalParameters.js @@ -70,57 +70,58 @@ var a5: (x?: number, y?: number) => number; a5 = b.a6; // ok, same number of params //// [assignmentCompatWithCallSignaturesWithOptionalParameters.js] +// call signatures in derived types must have the same or fewer optional parameters as the base type var b; var a; -a = function () { return 1; }; -a = function (x) { return 1; }; -a = function (x) { return 1; }; -a = b.a; -a = b.a2; -a = b.a3; -a = b.a4; -a = b.a5; -a = b.a6; +a = function () { return 1; }; // ok, same number of required params +a = function (x) { return 1; }; // ok, same number of required params +a = function (x) { return 1; }; // error, too many required params +a = b.a; // ok +a = b.a2; // ok +a = b.a3; // error +a = b.a4; // error +a = b.a5; // ok +a = b.a6; // error var a2; -a2 = function () { return 1; }; -a2 = function (x) { return 1; }; -a2 = function (x) { return 1; }; -a2 = b.a; -a2 = b.a2; -a2 = b.a3; -a2 = b.a4; -a2 = b.a5; -a2 = b.a6; +a2 = function () { return 1; }; // ok, same number of required params +a2 = function (x) { return 1; }; // ok, same number of required params +a2 = function (x) { return 1; }; // ok, same number of params +a2 = b.a; // ok +a2 = b.a2; // ok +a2 = b.a3; // ok, same number of params +a2 = b.a4; // ok, excess params are optional in b.a3 +a2 = b.a5; // ok +a2 = b.a6; // error var a3; -a3 = function () { return 1; }; -a3 = function (x) { return 1; }; -a3 = function (x) { return 1; }; -a3 = function (x, y) { return 1; }; -a3 = b.a; -a3 = b.a2; -a3 = b.a3; -a3 = b.a4; -a3 = b.a5; -a3 = b.a6; +a3 = function () { return 1; }; // ok, fewer required params +a3 = function (x) { return 1; }; // ok, fewer required params +a3 = function (x) { return 1; }; // ok, same number of required params +a3 = function (x, y) { return 1; }; // error, too many required params +a3 = b.a; // ok +a3 = b.a2; // ok +a3 = b.a3; // ok +a3 = b.a4; // ok +a3 = b.a5; // ok +a3 = b.a6; // error var a4; -a4 = function () { return 1; }; -a4 = function (x, y) { return 1; }; -a4 = function (x) { return 1; }; -a4 = function (x, y) { return 1; }; -a4 = b.a; -a4 = b.a2; -a4 = b.a3; -a4 = b.a4; -a4 = b.a5; -a4 = b.a6; +a4 = function () { return 1; }; // ok, fewer required params +a4 = function (x, y) { return 1; }; // ok, fewer required params +a4 = function (x) { return 1; }; // ok, same number of required params +a4 = function (x, y) { return 1; }; // ok, same number of params +a4 = b.a; // ok +a4 = b.a2; // ok +a4 = b.a3; // ok +a4 = b.a4; // ok +a4 = b.a5; // ok +a4 = b.a6; // ok, same number of params var a5; -a5 = function () { return 1; }; -a5 = function (x, y) { return 1; }; -a5 = function (x) { return 1; }; -a5 = function (x, y) { return 1; }; -a5 = b.a; -a5 = b.a2; -a5 = b.a3; -a5 = b.a4; -a5 = b.a5; -a5 = b.a6; +a5 = function () { return 1; }; // ok, fewer required params +a5 = function (x, y) { return 1; }; // ok, fewer required params +a5 = function (x) { return 1; }; // ok, fewer params in lambda +a5 = function (x, y) { return 1; }; // ok, same number of params +a5 = b.a; // ok +a5 = b.a2; // ok +a5 = b.a3; // ok, fewer params in b.a3 +a5 = b.a4; // ok, same number of params +a5 = b.a5; // ok +a5 = b.a6; // ok, same number of params diff --git a/tests/baselines/reference/assignmentCompatWithCallSignaturesWithRestParameters.js b/tests/baselines/reference/assignmentCompatWithCallSignaturesWithRestParameters.js index 25bc22acb64..f4cf5cc79e2 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignaturesWithRestParameters.js +++ b/tests/baselines/reference/assignmentCompatWithCallSignaturesWithRestParameters.js @@ -46,77 +46,78 @@ var a4: (x?: number, y?: string, ...z: number[]) => number; a4 = (x: number, ...args: string[]) => 1; // error, rest params have type mismatch //// [assignmentCompatWithCallSignaturesWithRestParameters.js] -var a; -a = function () { return 1; }; +// call signatures in derived types must have the same or fewer optional parameters as the target for assignment +var a; // ok, same number of required params +a = function () { return 1; }; // ok, same number of required params a = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i - 0] = arguments[_i]; } return 1; -}; +}; // ok, same number of required params a = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i - 0] = arguments[_i]; } return 1; -}; -a = function (x) { return 1; }; -a = function (x, y, z) { return 1; }; -a = function (x) { return 1; }; -a = function (x) { return 1; }; +}; // error, type mismatch +a = function (x) { return 1; }; // ok, same number of required params +a = function (x, y, z) { return 1; }; // ok, same number of required params +a = function (x) { return 1; }; // ok, rest param corresponds to infinite number of params +a = function (x) { return 1; }; // error, incompatible type var a2; -a2 = function () { return 1; }; +a2 = function () { return 1; }; // ok, fewer required params a2 = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i - 0] = arguments[_i]; } return 1; -}; -a2 = function (x) { return 1; }; -a2 = function (x) { return 1; }; +}; // ok, fewer required params +a2 = function (x) { return 1; }; // ok, fewer required params +a2 = function (x) { return 1; }; // ok, same number of required params a2 = function (x) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return 1; -}; +}; // ok, same number of required params a2 = function (x) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return 1; -}; -a2 = function (x, y) { return 1; }; -a2 = function (x, y) { return 1; }; +}; // should be type mismatch error +a2 = function (x, y) { return 1; }; // ok, rest param corresponds to infinite number of params +a2 = function (x, y) { return 1; }; // ok, same number of required params var a3; -a3 = function () { return 1; }; -a3 = function (x) { return 1; }; -a3 = function (x) { return 1; }; -a3 = function (x, y) { return 1; }; -a3 = function (x, y, z) { return 1; }; +a3 = function () { return 1; }; // ok, fewer required params +a3 = function (x) { return 1; }; // ok, fewer required params +a3 = function (x) { return 1; }; // ok, same number of required params +a3 = function (x, y) { return 1; }; // ok, all present params match +a3 = function (x, y, z) { return 1; }; // error a3 = function (x) { var z = []; for (var _i = 1; _i < arguments.length; _i++) { z[_i - 1] = arguments[_i]; } return 1; -}; -a3 = function (x, y, z) { return 1; }; +}; // error +a3 = function (x, y, z) { return 1; }; // error var a4; -a4 = function () { return 1; }; -a4 = function (x, y) { return 1; }; -a4 = function (x) { return 1; }; -a4 = function (x, y) { return 1; }; -a4 = function (x, y) { return 1; }; +a4 = function () { return 1; }; // ok, fewer required params +a4 = function (x, y) { return 1; }; // error, type mismatch +a4 = function (x) { return 1; }; // ok, all present params match +a4 = function (x, y) { return 1; }; // error, second param has type mismatch +a4 = function (x, y) { return 1; }; // ok, same number of required params with matching types a4 = function (x) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return 1; -}; +}; // error, rest params have type mismatch diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures.js b/tests/baselines/reference/assignmentCompatWithConstructSignatures.js index 7c08c37ed9c..3dc7511fec0 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures.js +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures.js @@ -37,6 +37,7 @@ a = function (x: string) { return ''; } //// [assignmentCompatWithConstructSignatures.js] +// void returning call signatures can be assigned a non-void returning call signature that otherwise matches var t; var a; t = a; @@ -49,6 +50,7 @@ a = s; a = a2; var s2; var a3; +// these are errors t = s2; t = a3; t = function (x) { return 1; }; diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures2.js b/tests/baselines/reference/assignmentCompatWithConstructSignatures2.js index 5e525b92299..7f173224bc9 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures2.js +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures2.js @@ -43,6 +43,7 @@ a = function (x: string) { return ''; } //// [assignmentCompatWithConstructSignatures2.js] +// void returning call signatures can be assigned a non-void returning call signature that otherwise matches var t; var a; t = a; @@ -53,6 +54,7 @@ t = s; t = a2; a = s; a = a2; +// errors t = function () { return 1; }; t = function (x) { return ''; @@ -63,6 +65,7 @@ a = function (x) { }; var s2; var a3; +// these are errors t = s2; t = a3; t = function (x) { return 1; }; diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.js b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.js index 73f59ee4c86..1926f0e0684 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.js +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.js @@ -100,6 +100,7 @@ b18 = a18; // ok //// [assignmentCompatWithConstructSignatures3.js] +// checking assignment compatibility relations for function types. All of these are valid. var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -151,56 +152,56 @@ var a16; var a17; var a18; var b; -a = b; -b = a; +a = b; // ok +b = a; // ok var b2; -a2 = b2; -b2 = a2; +a2 = b2; // ok +b2 = a2; // ok var b3; -a3 = b3; -b3 = a3; +a3 = b3; // ok +b3 = a3; // ok var b4; -a4 = b4; -b4 = a4; +a4 = b4; // ok +b4 = a4; // ok var b5; -a5 = b5; -b5 = a5; +a5 = b5; // ok +b5 = a5; // ok var b6; -a6 = b6; -b6 = a6; +a6 = b6; // ok +b6 = a6; // ok var b7; -a7 = b7; -b7 = a7; +a7 = b7; // ok +b7 = a7; // ok var b8; -a8 = b8; -b8 = a8; +a8 = b8; // ok +b8 = a8; // ok var b9; -a9 = b9; -b9 = a9; +a9 = b9; // ok +b9 = a9; // ok var b10; -a10 = b10; -b10 = a10; +a10 = b10; // ok +b10 = a10; // ok var b11; -a11 = b11; -b11 = a11; +a11 = b11; // ok +b11 = a11; // ok var b12; -a12 = b12; -b12 = a12; +a12 = b12; // ok +b12 = a12; // ok var b13; -a13 = b13; -b13 = a13; +a13 = b13; // ok +b13 = a13; // ok var b14; -a14 = b14; -b14 = a14; +a14 = b14; // ok +b14 = a14; // ok var b15; -a15 = b15; -b15 = a15; +a15 = b15; // ok +b15 = a15; // ok var b16; -a16 = b16; -b16 = a16; -var b17; -a17 = b17; -b17 = a17; +a16 = b16; // ok +b16 = a16; // ok +var b17; // ok +a17 = b17; // ok +b17 = a17; // ok var b18; -a18 = b18; -b18 = a18; +a18 = b18; // ok +b18 = a18; // ok diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types new file mode 100644 index 00000000000..807f31b0e6e --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types @@ -0,0 +1,565 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithConstructSignatures3.ts === +// checking assignment compatibility relations for function types. All of these are valid. + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +var a: new (x: number) => number[]; +>a : new (x: number) => number[] +>x : number + +var a2: new (x: number) => string[]; +>a2 : new (x: number) => string[] +>x : number + +var a3: new (x: number) => void; +>a3 : new (x: number) => void +>x : number + +var a4: new (x: string, y: number) => string; +>a4 : new (x: string, y: number) => string +>x : string +>y : number + +var a5: new (x: (arg: string) => number) => string; +>a5 : new (x: (arg: string) => number) => string +>x : (arg: string) => number +>arg : string + +var a6: new (x: (arg: Base) => Derived) => Base; +>a6 : new (x: (arg: Base) => Derived) => Base +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>Base : Base + +var a7: new (x: (arg: Base) => Derived) => (r: Base) => Derived; +>a7 : new (x: (arg: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + +var a8: new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a8 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + +var a9: new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a9 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + +var a10: new (...x: Derived[]) => Derived; +>a10 : new (...x: Derived[]) => Derived +>x : Derived[] +>Derived : Derived +>Derived : Derived + +var a11: new (x: { foo: string }, y: { foo: string; bar: string }) => Base; +>a11 : new (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>x : { foo: string; } +>foo : string +>y : { foo: string; bar: string; } +>foo : string +>bar : string +>Base : Base + +var a12: new (x: Array, y: Array) => Array; +>a12 : new (x: Base[], y: Derived2[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived2[] +>Array : T[] +>Derived2 : Derived2 +>Array : T[] +>Derived : Derived + +var a13: new (x: Array, y: Array) => Array; +>a13 : new (x: Base[], y: Derived[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived[] +>Array : T[] +>Derived : Derived +>Array : T[] +>Derived : Derived + +var a14: new (x: { a: string; b: number }) => Object; +>a14 : new (x: { a: string; b: number; }) => Object +>x : { a: string; b: number; } +>a : string +>b : number +>Object : Object + +var a15: { +>a15 : { new (x: number): number[]; new (x: string): string[]; } + + new (x: number): number[]; +>x : number + + new (x: string): string[]; +>x : string +} +var a16: { +>a16 : { new (x: T): number[]; new (x: U): number[]; } + + new (x: T): number[]; +>T : T +>Derived : Derived +>x : T +>T : T + + new (x: U): number[]; +>U : U +>Base : Base +>x : U +>U : U +} +var a17: { +>a17 : { new (x: new (a: number) => number): number[]; new (x: new (a: string) => string): string[]; } + + new (x: new (a: number) => number): number[]; +>x : new (a: number) => number +>a : number + + new (x: new (a: string) => string): string[]; +>x : new (a: string) => string +>a : string + +}; +var a18: { +>a18 : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; } + + new (x: { +>x : { new (a: number): number; new (a: string): string; } + + new (a: number): number; +>a : number + + new (a: string): string; +>a : string + + }): any[]; + new (x: { +>x : { new (a: boolean): boolean; new (a: Date): Date; } + + new (a: boolean): boolean; +>a : boolean + + new (a: Date): Date; +>a : Date +>Date : Date +>Date : Date + + }): any[]; +} + +var b: new (x: T) => T[]; +>b : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +a = b; // ok +>a = b : new (x: T) => T[] +>a : new (x: number) => number[] +>b : new (x: T) => T[] + +b = a; // ok +>b = a : new (x: number) => number[] +>b : new (x: T) => T[] +>a : new (x: number) => number[] + +var b2: new (x: T) => string[]; +>b2 : new (x: T) => string[] +>T : T +>x : T +>T : T + +a2 = b2; // ok +>a2 = b2 : new (x: T) => string[] +>a2 : new (x: number) => string[] +>b2 : new (x: T) => string[] + +b2 = a2; // ok +>b2 = a2 : new (x: number) => string[] +>b2 : new (x: T) => string[] +>a2 : new (x: number) => string[] + +var b3: new (x: T) => T; +>b3 : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + +a3 = b3; // ok +>a3 = b3 : new (x: T) => T +>a3 : new (x: number) => void +>b3 : new (x: T) => T + +b3 = a3; // ok +>b3 = a3 : new (x: number) => void +>b3 : new (x: T) => T +>a3 : new (x: number) => void + +var b4: new (x: T, y: U) => T; +>b4 : new (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + +a4 = b4; // ok +>a4 = b4 : new (x: T, y: U) => T +>a4 : new (x: string, y: number) => string +>b4 : new (x: T, y: U) => T + +b4 = a4; // ok +>b4 = a4 : new (x: string, y: number) => string +>b4 : new (x: T, y: U) => T +>a4 : new (x: string, y: number) => string + +var b5: new (x: (arg: T) => U) => T; +>b5 : new (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +a5 = b5; // ok +>a5 = b5 : new (x: (arg: T) => U) => T +>a5 : new (x: (arg: string) => number) => string +>b5 : new (x: (arg: T) => U) => T + +b5 = a5; // ok +>b5 = a5 : new (x: (arg: string) => number) => string +>b5 : new (x: (arg: T) => U) => T +>a5 : new (x: (arg: string) => number) => string + +var b6: new (x: (arg: T) => U) => T; +>b6 : new (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +a6 = b6; // ok +>a6 = b6 : new (x: (arg: T) => U) => T +>a6 : new (x: (arg: Base) => Derived) => Base +>b6 : new (x: (arg: T) => U) => T + +b6 = a6; // ok +>b6 = a6 : new (x: (arg: Base) => Derived) => Base +>b6 : new (x: (arg: T) => U) => T +>a6 : new (x: (arg: Base) => Derived) => Base + +var b7: new (x: (arg: T) => U) => (r: T) => U; +>b7 : new (x: (arg: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>r : T +>T : T +>U : U + +a7 = b7; // ok +>a7 = b7 : new (x: (arg: T) => U) => (r: T) => U +>a7 : new (x: (arg: Base) => Derived) => (r: Base) => Derived +>b7 : new (x: (arg: T) => U) => (r: T) => U + +b7 = a7; // ok +>b7 = a7 : new (x: (arg: Base) => Derived) => (r: Base) => Derived +>b7 : new (x: (arg: T) => U) => (r: T) => U +>a7 : new (x: (arg: Base) => Derived) => (r: Base) => Derived + +var b8: new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U; +>b8 : new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: T) => U +>arg2 : T +>T : T +>U : U +>r : T +>T : T +>U : U + +a8 = b8; // ok +>a8 = b8 : new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>a8 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>b8 : new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U + +b8 = a8; // ok +>b8 = a8 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>b8 : new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>a8 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived + +var b9: new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U; +>b9 : new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: { foo: string; bing: number; }) => U +>arg2 : { foo: string; bing: number; } +>foo : string +>bing : number +>U : U +>r : T +>T : T +>U : U + +a9 = b9; // ok +>a9 = b9 : new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>a9 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>b9 : new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U + +b9 = a9; // ok +>b9 = a9 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>b9 : new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>a9 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived + +var b10: new (...x: T[]) => T; +>b10 : new (...x: T[]) => T +>T : T +>Derived : Derived +>x : T[] +>T : T +>T : T + +a10 = b10; // ok +>a10 = b10 : new (...x: T[]) => T +>a10 : new (...x: Derived[]) => Derived +>b10 : new (...x: T[]) => T + +b10 = a10; // ok +>b10 = a10 : new (...x: Derived[]) => Derived +>b10 : new (...x: T[]) => T +>a10 : new (...x: Derived[]) => Derived + +var b11: new (x: T, y: T) => T; +>b11 : new (x: T, y: T) => T +>T : T +>Base : Base +>x : T +>T : T +>y : T +>T : T +>T : T + +a11 = b11; // ok +>a11 = b11 : new (x: T, y: T) => T +>a11 : new (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>b11 : new (x: T, y: T) => T + +b11 = a11; // ok +>b11 = a11 : new (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>b11 : new (x: T, y: T) => T +>a11 : new (x: { foo: string; }, y: { foo: string; bar: string; }) => Base + +var b12: new >(x: Array, y: T) => Array; +>b12 : new (x: Base[], y: T) => Derived[] +>T : T +>Array : T[] +>Base : Base +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>Array : T[] +>Derived : Derived + +a12 = b12; // ok +>a12 = b12 : new (x: Base[], y: T) => Derived[] +>a12 : new (x: Base[], y: Derived2[]) => Derived[] +>b12 : new (x: Base[], y: T) => Derived[] + +b12 = a12; // ok +>b12 = a12 : new (x: Base[], y: Derived2[]) => Derived[] +>b12 : new (x: Base[], y: T) => Derived[] +>a12 : new (x: Base[], y: Derived2[]) => Derived[] + +var b13: new >(x: Array, y: T) => T; +>b13 : new (x: Base[], y: T) => T +>T : T +>Array : T[] +>Derived : Derived +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>T : T + +a13 = b13; // ok +>a13 = b13 : new (x: Base[], y: T) => T +>a13 : new (x: Base[], y: Derived[]) => Derived[] +>b13 : new (x: Base[], y: T) => T + +b13 = a13; // ok +>b13 = a13 : new (x: Base[], y: Derived[]) => Derived[] +>b13 : new (x: Base[], y: T) => T +>a13 : new (x: Base[], y: Derived[]) => Derived[] + +var b14: new (x: { a: T; b: T }) => T; +>b14 : new (x: { a: T; b: T; }) => T +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +a14 = b14; // ok +>a14 = b14 : new (x: { a: T; b: T; }) => T +>a14 : new (x: { a: string; b: number; }) => Object +>b14 : new (x: { a: T; b: T; }) => T + +b14 = a14; // ok +>b14 = a14 : new (x: { a: string; b: number; }) => Object +>b14 : new (x: { a: T; b: T; }) => T +>a14 : new (x: { a: string; b: number; }) => Object + +var b15: new (x: T) => T[]; +>b15 : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +a15 = b15; // ok +>a15 = b15 : new (x: T) => T[] +>a15 : { new (x: number): number[]; new (x: string): string[]; } +>b15 : new (x: T) => T[] + +b15 = a15; // ok +>b15 = a15 : { new (x: number): number[]; new (x: string): string[]; } +>b15 : new (x: T) => T[] +>a15 : { new (x: number): number[]; new (x: string): string[]; } + +var b16: new (x: T) => number[]; +>b16 : new (x: T) => number[] +>T : T +>Base : Base +>x : T +>T : T + +a16 = b16; // ok +>a16 = b16 : new (x: T) => number[] +>a16 : { new (x: T): number[]; new (x: U): number[]; } +>b16 : new (x: T) => number[] + +b16 = a16; // ok +>b16 = a16 : { new (x: T): number[]; new (x: U): number[]; } +>b16 : new (x: T) => number[] +>a16 : { new (x: T): number[]; new (x: U): number[]; } + +var b17: new (x: new (a: T) => T) => T[]; // ok +>b17 : new (x: new (a: T) => T) => T[] +>T : T +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T + +a17 = b17; // ok +>a17 = b17 : new (x: new (a: T) => T) => T[] +>a17 : { new (x: new (a: number) => number): number[]; new (x: new (a: string) => string): string[]; } +>b17 : new (x: new (a: T) => T) => T[] + +b17 = a17; // ok +>b17 = a17 : { new (x: new (a: number) => number): number[]; new (x: new (a: string) => string): string[]; } +>b17 : new (x: new (a: T) => T) => T[] +>a17 : { new (x: new (a: number) => number): number[]; new (x: new (a: string) => string): string[]; } + +var b18: new (x: new (a: T) => T) => T[]; +>b18 : new (x: new (a: T) => T) => T[] +>T : T +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T + +a18 = b18; // ok +>a18 = b18 : new (x: new (a: T) => T) => T[] +>a18 : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; } +>b18 : new (x: new (a: T) => T) => T[] + +b18 = a18; // ok +>b18 = a18 : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; } +>b18 : new (x: new (a: T) => T) => T[] +>a18 : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; } + diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures4.js b/tests/baselines/reference/assignmentCompatWithConstructSignatures4.js index b4f6a4903a5..9e12f0f360d 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures4.js +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures4.js @@ -99,6 +99,7 @@ module Errors { } //// [assignmentCompatWithConstructSignatures4.js] +// checking assignment compatibility relations for function types. var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -135,6 +136,7 @@ var Errors; })(Base); var WithNonGenericSignaturesInBaseType; (function (WithNonGenericSignaturesInBaseType) { + // target type with non-generic call signatures var a2; var a7; var a8; @@ -146,45 +148,47 @@ var Errors; var a16; var a17; var b2; - a2 = b2; - b2 = a2; + a2 = b2; // ok + b2 = a2; // ok var b7; - a7 = b7; - b7 = a7; + a7 = b7; // ok + b7 = a7; // ok var b8; - a8 = b8; - b8 = a8; + a8 = b8; // error, type mismatch + b8 = a8; // error var b10; - a10 = b10; - b10 = a10; + a10 = b10; // ok + b10 = a10; // ok var b11; - a11 = b11; - b11 = a11; + a11 = b11; // ok + b11 = a11; // ok var b12; - a12 = b12; - b12 = a12; + a12 = b12; // ok + b12 = a12; // ok var b15; - a15 = b15; - b15 = a15; + a15 = b15; // ok + b15 = a15; // ok var b15a; - a15 = b15a; - b15a = a15; + a15 = b15a; // ok + b15a = a15; // ok var b16; - a16 = b16; - b16 = a16; + a16 = b16; // error + b16 = a16; // error var b17; - a17 = b17; - b17 = a17; + a17 = b17; // error + b17 = a17; // error })(WithNonGenericSignaturesInBaseType || (WithNonGenericSignaturesInBaseType = {})); var WithGenericSignaturesInBaseType; (function (WithGenericSignaturesInBaseType) { + // target type has generic call signature var a2; var b2; - a2 = b2; - b2 = a2; + a2 = b2; // ok + b2 = a2; // ok + // target type has generic call signature var a3; var b3; - a3 = b3; - b3 = a3; + a3 = b3; // ok + b3 = a3; // ok })(WithGenericSignaturesInBaseType || (WithGenericSignaturesInBaseType = {})); })(Errors || (Errors = {})); diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures5.js b/tests/baselines/reference/assignmentCompatWithConstructSignatures5.js index a1d6d859dd9..1b26d813d45 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures5.js +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures5.js @@ -66,6 +66,7 @@ b18 = a18; // ok //// [assignmentCompatWithConstructSignatures5.js] +// checking assignment compat for function types. All valid var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -110,35 +111,35 @@ var a16; var a17; var a18; var b; -a = b; -b = a; +a = b; // ok +b = a; // ok var b2; -a2 = b2; -b2 = a2; +a2 = b2; // ok +b2 = a2; // ok var b3; -a3 = b3; -b3 = a3; +a3 = b3; // ok +b3 = a3; // ok var b4; -a4 = b4; -b4 = a4; +a4 = b4; // ok +b4 = a4; // ok var b5; -a5 = b5; -b5 = a5; +a5 = b5; // ok +b5 = a5; // ok var b6; -a6 = b6; -b6 = a6; +a6 = b6; // ok +b6 = a6; // ok var b11; -a11 = b11; -b11 = a11; +a11 = b11; // ok +b11 = a11; // ok var b15; -a15 = b15; -b15 = a15; +a15 = b15; // ok +b15 = a15; // ok var b16; -a15 = b16; -b15 = a16; +a15 = b16; // ok +b15 = a16; // ok var b17; -a17 = b17; -b17 = a17; +a17 = b17; // ok +b17 = a17; // ok var b18; -a18 = b18; -b18 = a18; +a18 = b18; // ok +b18 = a18; // ok diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types new file mode 100644 index 00000000000..6e6a1457a76 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types @@ -0,0 +1,380 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithConstructSignatures5.ts === +// checking assignment compat for function types. All valid + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +var a: new (x: T) => T[]; +>a : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +var a2: new (x: T) => string[]; +>a2 : new (x: T) => string[] +>T : T +>x : T +>T : T + +var a3: new (x: T) => void; +>a3 : new (x: T) => void +>T : T +>x : T +>T : T + +var a4: new (x: T, y: U) => string; +>a4 : new (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + +var a5: new (x: new (arg: T) => U) => T; +>a5 : new (x: new (arg: T) => U) => T +>T : T +>U : U +>x : new (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +var a6: new (x: new (arg: T) => Derived) => T; +>a6 : new (x: new (arg: T) => Derived) => T +>T : T +>Base : Base +>x : new (arg: T) => Derived +>arg : T +>T : T +>Derived : Derived +>T : T + +var a11: new (x: { foo: T }, y: { foo: T; bar: T }) => Base; +>a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>T : T +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T +>Base : Base + +var a15: new (x: { a: T; b: T }) => T[]; +>a15 : new (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +var a16: new (x: { a: T; b: T }) => T[]; +>a16 : new (x: { a: T; b: T; }) => T[] +>T : T +>Base : Base +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +var a17: { +>a17 : { new (x: new (a: T) => T): T[]; new (x: new (a: T) => T): T[]; } + + new (x: new (a: T) => T): T[]; +>T : T +>Derived : Derived +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T + + new (x: new (a: T) => T): T[]; +>T : T +>Base : Base +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T + +}; +var a18: { +>a18 : { new (x: { new (a: T): T; new (a: T): T; }): any[]; new (x: { new (a: T): T; new (a: T): T; }): any[]; } + + new (x: { +>x : { new (a: T): T; new (a: T): T; } + + new (a: T): T; +>T : T +>Derived : Derived +>a : T +>T : T +>T : T + + new (a: T): T; +>T : T +>Base : Base +>a : T +>T : T +>T : T + + }): any[]; + new (x: { +>x : { new (a: T): T; new (a: T): T; } + + new (a: T): T; +>T : T +>Derived2 : Derived2 +>a : T +>T : T +>T : T + + new (a: T): T; +>T : T +>Base : Base +>a : T +>T : T +>T : T + + }): any[]; +}; + +var b: new (x: T) => T[]; +>b : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +a = b; // ok +>a = b : new (x: T) => T[] +>a : new (x: T) => T[] +>b : new (x: T) => T[] + +b = a; // ok +>b = a : new (x: T) => T[] +>b : new (x: T) => T[] +>a : new (x: T) => T[] + +var b2: new (x: T) => string[]; +>b2 : new (x: T) => string[] +>T : T +>x : T +>T : T + +a2 = b2; // ok +>a2 = b2 : new (x: T) => string[] +>a2 : new (x: T) => string[] +>b2 : new (x: T) => string[] + +b2 = a2; // ok +>b2 = a2 : new (x: T) => string[] +>b2 : new (x: T) => string[] +>a2 : new (x: T) => string[] + +var b3: new (x: T) => T; +>b3 : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + +a3 = b3; // ok +>a3 = b3 : new (x: T) => T +>a3 : new (x: T) => void +>b3 : new (x: T) => T + +b3 = a3; // ok +>b3 = a3 : new (x: T) => void +>b3 : new (x: T) => T +>a3 : new (x: T) => void + +var b4: new (x: T, y: U) => string; +>b4 : new (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + +a4 = b4; // ok +>a4 = b4 : new (x: T, y: U) => string +>a4 : new (x: T, y: U) => string +>b4 : new (x: T, y: U) => string + +b4 = a4; // ok +>b4 = a4 : new (x: T, y: U) => string +>b4 : new (x: T, y: U) => string +>a4 : new (x: T, y: U) => string + +var b5: new (x: new (arg: T) => U) => T; +>b5 : new (x: new (arg: T) => U) => T +>T : T +>U : U +>x : new (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +a5 = b5; // ok +>a5 = b5 : new (x: new (arg: T) => U) => T +>a5 : new (x: new (arg: T) => U) => T +>b5 : new (x: new (arg: T) => U) => T + +b5 = a5; // ok +>b5 = a5 : new (x: new (arg: T) => U) => T +>b5 : new (x: new (arg: T) => U) => T +>a5 : new (x: new (arg: T) => U) => T + +var b6: new (x: new (arg: T) => U) => T; +>b6 : new (x: new (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : new (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +a6 = b6; // ok +>a6 = b6 : new (x: new (arg: T) => U) => T +>a6 : new (x: new (arg: T) => Derived) => T +>b6 : new (x: new (arg: T) => U) => T + +b6 = a6; // ok +>b6 = a6 : new (x: new (arg: T) => Derived) => T +>b6 : new (x: new (arg: T) => U) => T +>a6 : new (x: new (arg: T) => Derived) => T + +var b11: new (x: { foo: T }, y: { foo: U; bar: U }) => Base; +>b11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>T : T +>U : U +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: U; bar: U; } +>foo : U +>U : U +>bar : U +>U : U +>Base : Base + +a11 = b11; // ok +>a11 = b11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>b11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base + +b11 = a11; // ok +>b11 = a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>b11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base + +var b15: new (x: { a: U; b: V; }) => U[]; +>b15 : new (x: { a: U; b: V; }) => U[] +>U : U +>V : V +>x : { a: U; b: V; } +>a : U +>U : U +>b : V +>V : V +>U : U + +a15 = b15; // ok +>a15 = b15 : new (x: { a: U; b: V; }) => U[] +>a15 : new (x: { a: T; b: T; }) => T[] +>b15 : new (x: { a: U; b: V; }) => U[] + +b15 = a15; // ok +>b15 = a15 : new (x: { a: T; b: T; }) => T[] +>b15 : new (x: { a: U; b: V; }) => U[] +>a15 : new (x: { a: T; b: T; }) => T[] + +var b16: new (x: { a: T; b: T }) => T[]; +>b16 : new (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +a15 = b16; // ok +>a15 = b16 : new (x: { a: T; b: T; }) => T[] +>a15 : new (x: { a: T; b: T; }) => T[] +>b16 : new (x: { a: T; b: T; }) => T[] + +b15 = a16; // ok +>b15 = a16 : new (x: { a: T; b: T; }) => T[] +>b15 : new (x: { a: U; b: V; }) => U[] +>a16 : new (x: { a: T; b: T; }) => T[] + +var b17: new (x: new (a: T) => T) => T[]; +>b17 : new (x: new (a: T) => T) => T[] +>T : T +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T + +a17 = b17; // ok +>a17 = b17 : new (x: new (a: T) => T) => T[] +>a17 : { new (x: new (a: T) => T): T[]; new (x: new (a: T) => T): T[]; } +>b17 : new (x: new (a: T) => T) => T[] + +b17 = a17; // ok +>b17 = a17 : { new (x: new (a: T) => T): T[]; new (x: new (a: T) => T): T[]; } +>b17 : new (x: new (a: T) => T) => T[] +>a17 : { new (x: new (a: T) => T): T[]; new (x: new (a: T) => T): T[]; } + +var b18: new (x: new (a: T) => T) => any[]; +>b18 : new (x: new (a: T) => T) => any[] +>x : new (a: T) => T +>T : T +>a : T +>T : T +>T : T + +a18 = b18; // ok +>a18 = b18 : new (x: new (a: T) => T) => any[] +>a18 : { new (x: { new (a: T): T; new (a: T): T; }): any[]; new (x: { new (a: T): T; new (a: T): T; }): any[]; } +>b18 : new (x: new (a: T) => T) => any[] + +b18 = a18; // ok +>b18 = a18 : { new (x: { new (a: T): T; new (a: T): T; }): any[]; new (x: { new (a: T): T; new (a: T): T; }): any[]; } +>b18 : new (x: new (a: T) => T) => any[] +>a18 : { new (x: { new (a: T): T; new (a: T): T; }): any[]; new (x: { new (a: T): T; new (a: T): T; }): any[]; } + diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures6.js b/tests/baselines/reference/assignmentCompatWithConstructSignatures6.js index 46218420d67..ccca809c281 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures6.js +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures6.js @@ -43,6 +43,7 @@ x.a16 = b16; b16 = x.a16; //// [assignmentCompatWithConstructSignatures6.js] +// checking assignment compatibility relations for function types. All valid. var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types new file mode 100644 index 00000000000..74a20b9b21e --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types @@ -0,0 +1,273 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithConstructSignatures6.ts === +// checking assignment compatibility relations for function types. All valid. + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { +>A : A + + a: new (x: T) => T[]; +>a : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: new (x: T) => string[]; +>a2 : new (x: T) => string[] +>T : T +>x : T +>T : T + + a3: new (x: T) => void; +>a3 : new (x: T) => void +>T : T +>x : T +>T : T + + a4: new (x: T, y: U) => string; +>a4 : new (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + a5: new (x: (arg: T) => U) => T; +>a5 : new (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: new (x: (arg: T) => Derived) => T; +>a6 : new (x: (arg: T) => Derived) => T +>T : T +>Base : Base +>x : (arg: T) => Derived +>arg : T +>T : T +>Derived : Derived +>T : T + + a11: new (x: { foo: T }, y: { foo: T; bar: T }) => Base; +>a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>T : T +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T +>Base : Base + + a15: new (x: { a: T; b: T }) => T[]; +>a15 : new (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a16: new (x: { a: T; b: T }) => T[]; +>a16 : new (x: { a: T; b: T; }) => T[] +>T : T +>Base : Base +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T +} + +var x: A; +>x : A +>A : A + +var b: new (x: T) => T[]; +>b : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + +x.a = b; +>x.a = b : new (x: T) => T[] +>x.a : new (x: T) => T[] +>x : A +>a : new (x: T) => T[] +>b : new (x: T) => T[] + +b = x.a; +>b = x.a : new (x: T) => T[] +>b : new (x: T) => T[] +>x.a : new (x: T) => T[] +>x : A +>a : new (x: T) => T[] + +var b2: new (x: T) => string[]; +>b2 : new (x: T) => string[] +>T : T +>x : T +>T : T + +x.a2 = b2; +>x.a2 = b2 : new (x: T) => string[] +>x.a2 : new (x: T) => string[] +>x : A +>a2 : new (x: T) => string[] +>b2 : new (x: T) => string[] + +b2 = x.a2; +>b2 = x.a2 : new (x: T) => string[] +>b2 : new (x: T) => string[] +>x.a2 : new (x: T) => string[] +>x : A +>a2 : new (x: T) => string[] + +var b3: new (x: T) => T; +>b3 : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + +x.a3 = b3; +>x.a3 = b3 : new (x: T) => T +>x.a3 : new (x: T) => void +>x : A +>a3 : new (x: T) => void +>b3 : new (x: T) => T + +b3 = x.a3; +>b3 = x.a3 : new (x: T) => void +>b3 : new (x: T) => T +>x.a3 : new (x: T) => void +>x : A +>a3 : new (x: T) => void + +var b4: new (x: T, y: U) => string; +>b4 : new (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + +x.a4 = b4; +>x.a4 = b4 : new (x: T, y: U) => string +>x.a4 : new (x: T, y: U) => string +>x : A +>a4 : new (x: T, y: U) => string +>b4 : new (x: T, y: U) => string + +b4 = x.a4; +>b4 = x.a4 : new (x: T, y: U) => string +>b4 : new (x: T, y: U) => string +>x.a4 : new (x: T, y: U) => string +>x : A +>a4 : new (x: T, y: U) => string + +var b5: new (x: (arg: T) => U) => T; +>b5 : new (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + +x.a5 = b5; +>x.a5 = b5 : new (x: (arg: T) => U) => T +>x.a5 : new (x: (arg: T) => U) => T +>x : A +>a5 : new (x: (arg: T) => U) => T +>b5 : new (x: (arg: T) => U) => T + +b5 = x.a5; +>b5 = x.a5 : new (x: (arg: T) => U) => T +>b5 : new (x: (arg: T) => U) => T +>x.a5 : new (x: (arg: T) => U) => T +>x : A +>a5 : new (x: (arg: T) => U) => T + +var b11: new (x: { foo: T }, y: { foo: U; bar: U }) => Base; +>b11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>T : T +>U : U +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: U; bar: U; } +>foo : U +>U : U +>bar : U +>U : U +>Base : Base + +x.a11 = b11; +>x.a11 = b11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>x.a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>x : A +>a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>b11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base + +b11 = x.a11; +>b11 = x.a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>b11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>x.a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>x : A +>a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base + +var b16: new (x: { a: T; b: T }) => T[]; +>b16 : new (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + +x.a16 = b16; +>x.a16 = b16 : new (x: { a: T; b: T; }) => T[] +>x.a16 : new (x: { a: T; b: T; }) => T[] +>x : A +>a16 : new (x: { a: T; b: T; }) => T[] +>b16 : new (x: { a: T; b: T; }) => T[] + +b16 = x.a16; +>b16 = x.a16 : new (x: { a: T; b: T; }) => T[] +>b16 : new (x: { a: T; b: T; }) => T[] +>x.a16 : new (x: { a: T; b: T; }) => T[] +>x : A +>a16 : new (x: { a: T; b: T; }) => T[] + diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignaturesWithOptionalParameters.js b/tests/baselines/reference/assignmentCompatWithConstructSignaturesWithOptionalParameters.js index 81494071a42..e41011021d2 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignaturesWithOptionalParameters.js +++ b/tests/baselines/reference/assignmentCompatWithConstructSignaturesWithOptionalParameters.js @@ -53,39 +53,40 @@ var a5: new (x?: number, y?: number) => number; //// [assignmentCompatWithConstructSignaturesWithOptionalParameters.js] +// call signatures in derived types must have the same or fewer optional parameters as the base type var b; var a; -a = b.a; -a = b.a2; -a = b.a3; -a = b.a4; -a = b.a5; -a = b.a6; +a = b.a; // ok +a = b.a2; // ok +a = b.a3; // error +a = b.a4; // error +a = b.a5; // ok +a = b.a6; // error var a2; -a2 = b.a; -a2 = b.a2; -a2 = b.a3; -a2 = b.a4; -a2 = b.a5; -a2 = b.a6; +a2 = b.a; // ok +a2 = b.a2; // ok +a2 = b.a3; // ok +a2 = b.a4; // ok +a2 = b.a5; // ok +a2 = b.a6; // error var a3; -a3 = b.a; -a3 = b.a2; -a3 = b.a3; -a3 = b.a4; -a3 = b.a5; -a3 = b.a6; +a3 = b.a; // ok +a3 = b.a2; // ok +a3 = b.a3; // ok +a3 = b.a4; // ok +a3 = b.a5; // ok +a3 = b.a6; // error var a4; -a4 = b.a; -a4 = b.a2; -a4 = b.a3; -a4 = b.a4; -a4 = b.a5; -a4 = b.a6; +a4 = b.a; // ok +a4 = b.a2; // ok +a4 = b.a3; // ok +a4 = b.a4; // ok +a4 = b.a5; // ok +a4 = b.a6; // ok var a5; -a5 = b.a; -a5 = b.a2; -a5 = b.a3; -a5 = b.a4; -a5 = b.a5; -a5 = b.a6; +a5 = b.a; // ok +a5 = b.a2; // ok +a5 = b.a3; // ok +a5 = b.a4; // ok +a5 = b.a5; // ok +a5 = b.a6; // ok diff --git a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures.js b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures.js index 649a6b72477..ba4093f523d 100644 --- a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures.js +++ b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures.js @@ -8,7 +8,8 @@ f = g; // ok g = f; // ok //// [assignmentCompatWithGenericCallSignatures.js] +// some complex cases of assignment compat of generic signatures that stress contextual signature instantiation var f; var g; -f = g; -g = f; +f = g; // ok +g = f; // ok diff --git a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures.types b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures.types new file mode 100644 index 00000000000..ac503fb1873 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures.types @@ -0,0 +1,27 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithGenericCallSignatures.ts === +// some complex cases of assignment compat of generic signatures that stress contextual signature instantiation + +var f: (x: S) => void +>f : (x: S) => void +>S : S +>p : string +>x : S +>S : S + +var g: (x: T[]) => void +>g : (x: T[]) => void +>T : T +>p : string +>x : T[] +>T : T + +f = g; // ok +>f = g : (x: T[]) => void +>f : (x: S) => void +>g : (x: T[]) => void + +g = f; // ok +>g = f : (x: S) => void +>g : (x: T[]) => void +>f : (x: S) => void + diff --git a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures2.js b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures2.js index 51d5160b119..dd9b553791d 100644 --- a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures2.js +++ b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures2.js @@ -18,7 +18,9 @@ b = a; //// [assignmentCompatWithGenericCallSignatures2.js] +// some complex cases of assignment compat of generic signatures. No contextual signature instantiation var a; var b; +// Both ok a = b; b = a; diff --git a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures2.types b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures2.types new file mode 100644 index 00000000000..a5f3f06b9c8 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures2.types @@ -0,0 +1,44 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithGenericCallSignatures2.ts === +// some complex cases of assignment compat of generic signatures. No contextual signature instantiation + +interface A { +>A : A + + (x: T, ...y: T[][]): void +>T : T +>x : T +>T : T +>y : T[][] +>T : T +} + +interface B { +>B : B + + (x: S, ...y: S[]): void +>S : S +>x : S +>S : S +>y : S[] +>S : S +} + +var a: A; +>a : A +>A : A + +var b: B; +>b : B +>B : B + +// Both ok +a = b; +>a = b : B +>a : A +>b : B + +b = a; +>b = a : A +>b : B +>a : A + diff --git a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures3.js b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures3.js index f5f076c5816..ae83c39f2a0 100644 --- a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures3.js +++ b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures3.js @@ -11,6 +11,7 @@ var h: (x: T) => (y: S) => { (f: (x: T) => (y: S) => U): U } g = h // ok //// [assignmentCompatWithGenericCallSignatures3.js] +// some complex cases of assignment compat of generic signatures that stress contextual signature instantiation var g; var h; -g = h; +g = h; // ok diff --git a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures3.types b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures3.types new file mode 100644 index 00000000000..0e2eec9c02d --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures3.types @@ -0,0 +1,53 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithGenericCallSignatures3.ts === +// some complex cases of assignment compat of generic signatures that stress contextual signature instantiation + +interface I { +>I : I +>T : T +>S : S + + (f: (x: T) => (y: S) => U): U +>U : U +>f : (x: T) => (y: S) => U +>x : T +>T : T +>y : S +>S : S +>U : U +>U : U +} + +var g: (x: T) => (y: S) => I +>g : (x: T) => (y: S) => I +>T : T +>x : T +>T : T +>S : S +>y : S +>S : S +>I : I +>T : T +>S : S + +var h: (x: T) => (y: S) => { (f: (x: T) => (y: S) => U): U } +>h : (x: T) => (y: S) => (f: (x: T) => (y: S) => U) => U +>T : T +>x : T +>T : T +>S : S +>y : S +>S : S +>U : U +>f : (x: T) => (y: S) => U +>x : T +>T : T +>y : S +>S : S +>U : U +>U : U + +g = h // ok +>g = h : (x: T) => (y: S) => (f: (x: T) => (y: S) => U) => U +>g : (x: T) => (y: S) => I +>h : (x: T) => (y: S) => (f: (x: T) => (y: S) => U) => U + diff --git a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures4.js b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures4.js index 8d1b6e5d47d..6114e6fdb54 100644 --- a/tests/baselines/reference/assignmentCompatWithGenericCallSignatures4.js +++ b/tests/baselines/reference/assignmentCompatWithGenericCallSignatures4.js @@ -14,7 +14,9 @@ y = x //// [assignmentCompatWithGenericCallSignatures4.js] +// some complex cases of assignment compat of generic signatures. var x; var y; +// These both do not make sense as we would eventually be comparing I2 to I2>, and they are self referencing anyway x = y; y = x; diff --git a/tests/baselines/reference/assignmentCompatWithGenericCallSignaturesWithOptionalParameters.js b/tests/baselines/reference/assignmentCompatWithGenericCallSignaturesWithOptionalParameters.js index 64ceab90181..f5a3499c8cc 100644 --- a/tests/baselines/reference/assignmentCompatWithGenericCallSignaturesWithOptionalParameters.js +++ b/tests/baselines/reference/assignmentCompatWithGenericCallSignaturesWithOptionalParameters.js @@ -131,30 +131,31 @@ module GenericSignaturesValid { } //// [assignmentCompatWithGenericCallSignaturesWithOptionalParameters.js] +// call signatures in derived types must have the same or fewer optional parameters as the target for assignment var ClassTypeParam; (function (ClassTypeParam) { var Base = (function () { function Base() { var _this = this; this.init = function () { - _this.a = function () { return null; }; - _this.a = function (x) { return null; }; - _this.a = function (x) { return null; }; - _this.a2 = function () { return null; }; - _this.a2 = function (x) { return null; }; - _this.a2 = function (x) { return null; }; - _this.a3 = function () { return null; }; - _this.a3 = function (x) { return null; }; - _this.a3 = function (x) { return null; }; - _this.a3 = function (x, y) { return null; }; - _this.a4 = function () { return null; }; - _this.a4 = function (x, y) { return null; }; - _this.a4 = function (x) { return null; }; - _this.a4 = function (x, y) { return null; }; - _this.a5 = function () { return null; }; - _this.a5 = function (x, y) { return null; }; - _this.a5 = function (x) { return null; }; - _this.a5 = function (x, y) { return null; }; + _this.a = function () { return null; }; // ok, same T of required params + _this.a = function (x) { return null; }; // ok, same T of required params + _this.a = function (x) { return null; }; // error, too many required params + _this.a2 = function () { return null; }; // ok, same T of required params + _this.a2 = function (x) { return null; }; // ok, same T of required params + _this.a2 = function (x) { return null; }; // ok, same number of params + _this.a3 = function () { return null; }; // ok, fewer required params + _this.a3 = function (x) { return null; }; // ok, fewer required params + _this.a3 = function (x) { return null; }; // ok, same T of required params + _this.a3 = function (x, y) { return null; }; // error, too many required params + _this.a4 = function () { return null; }; // ok, fewer required params + _this.a4 = function (x, y) { return null; }; // ok, fewer required params + _this.a4 = function (x) { return null; }; // ok, same T of required params + _this.a4 = function (x, y) { return null; }; // ok, same number of params + _this.a5 = function () { return null; }; // ok, fewer required params + _this.a5 = function (x, y) { return null; }; // ok, fewer required params + _this.a5 = function (x) { return null; }; // ok, all present params match + _this.a5 = function (x, y) { return null; }; // ok, same number of params }; } return Base; @@ -175,6 +176,7 @@ var GenericSignaturesInvalid; function foo() { var b; var t; + // all errors b.a = t.a; b.a = t.a2; b.a = t.a3; @@ -208,24 +210,24 @@ var GenericSignaturesValid; function Base2() { var _this = this; this.init = function () { - _this.a = function () { return null; }; - _this.a = function (x) { return null; }; - _this.a = function (x) { return null; }; - _this.a2 = function () { return null; }; - _this.a2 = function (x) { return null; }; - _this.a2 = function (x) { return null; }; - _this.a3 = function () { return null; }; - _this.a3 = function (x) { return null; }; - _this.a3 = function (x) { return null; }; - _this.a3 = function (x, y) { return null; }; - _this.a4 = function () { return null; }; - _this.a4 = function (x, y) { return null; }; - _this.a4 = function (x) { return null; }; - _this.a4 = function (x, y) { return null; }; - _this.a5 = function () { return null; }; - _this.a5 = function (x, y) { return null; }; - _this.a5 = function (x) { return null; }; - _this.a5 = function (x, y) { return null; }; + _this.a = function () { return null; }; // ok, same T of required params + _this.a = function (x) { return null; }; // ok, same T of required params + _this.a = function (x) { return null; }; // error, too many required params + _this.a2 = function () { return null; }; // ok, same T of required params + _this.a2 = function (x) { return null; }; // ok, same T of required params + _this.a2 = function (x) { return null; }; // ok, same number of params + _this.a3 = function () { return null; }; // ok, fewer required params + _this.a3 = function (x) { return null; }; // ok, fewer required params + _this.a3 = function (x) { return null; }; // ok, same T of required params + _this.a3 = function (x, y) { return null; }; // error, too many required params + _this.a4 = function () { return null; }; // ok, fewer required params + _this.a4 = function (x, y) { return null; }; // ok, fewer required params + _this.a4 = function (x) { return null; }; // ok, same T of required params + _this.a4 = function (x, y) { return null; }; // ok, same number of params + _this.a5 = function () { return null; }; // ok, fewer required params + _this.a5 = function (x, y) { return null; }; // ok, fewer required params + _this.a5 = function (x) { return null; }; // ok, all present params match + _this.a5 = function (x, y) { return null; }; // ok, same number of params }; } return Base2; diff --git a/tests/baselines/reference/assignmentCompatWithNumericIndexer.js b/tests/baselines/reference/assignmentCompatWithNumericIndexer.js index 075a9b286a7..a139787130e 100644 --- a/tests/baselines/reference/assignmentCompatWithNumericIndexer.js +++ b/tests/baselines/reference/assignmentCompatWithNumericIndexer.js @@ -44,6 +44,7 @@ module Generics { } //// [assignmentCompatWithNumericIndexer.js] +// Derived type indexer must be subtype of base type indexer var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -58,10 +59,10 @@ var A = (function () { var a; var b; a = b; -b = a; +b = a; // error var b2; a = b2; -b2 = a; +b2 = a; // error var Generics; (function (Generics) { var A = (function () { @@ -79,13 +80,13 @@ var Generics; function foo() { var a; var b; - a = b; - b = a; + a = b; // error + b = a; // error var b2; - a = b2; - b2 = a; + a = b2; // error + b2 = a; // error var b3; - a = b3; - b3 = a; + a = b3; // ok + b3 = a; // ok } })(Generics || (Generics = {})); diff --git a/tests/baselines/reference/assignmentCompatWithNumericIndexer2.js b/tests/baselines/reference/assignmentCompatWithNumericIndexer2.js index 47a28b8ce2a..8af454eaf8d 100644 --- a/tests/baselines/reference/assignmentCompatWithNumericIndexer2.js +++ b/tests/baselines/reference/assignmentCompatWithNumericIndexer2.js @@ -44,25 +44,26 @@ module Generics { } //// [assignmentCompatWithNumericIndexer2.js] +// Derived type indexer must be subtype of base type indexer var a; var b; a = b; -b = a; +b = a; // error var b2; a = b2; -b2 = a; +b2 = a; // error var Generics; (function (Generics) { function foo() { var a; var b; - a = b; - b = a; + a = b; // error + b = a; // error var b2; - a = b2; - b2 = a; + a = b2; // error + b2 = a; // error var b3; - a = b3; - b3 = a; + a = b3; // ok + b3 = a; // ok } })(Generics || (Generics = {})); diff --git a/tests/baselines/reference/assignmentCompatWithNumericIndexer3.js b/tests/baselines/reference/assignmentCompatWithNumericIndexer3.js index f59a0a99bd7..8aa8dca511e 100644 --- a/tests/baselines/reference/assignmentCompatWithNumericIndexer3.js +++ b/tests/baselines/reference/assignmentCompatWithNumericIndexer3.js @@ -41,6 +41,7 @@ module Generics { } //// [assignmentCompatWithNumericIndexer3.js] +// Derived type indexer must be subtype of base type indexer var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -54,8 +55,8 @@ var A = (function () { })(); var a; var b; -a = b; -b = a; +a = b; // error +b = a; // ok var B2 = (function (_super) { __extends(B2, _super); function B2() { @@ -64,8 +65,8 @@ var B2 = (function (_super) { return B2; })(A); var b2; -a = b2; -b2 = a; +a = b2; // ok +b2 = a; // error var Generics; (function (Generics) { var A = (function () { @@ -76,10 +77,10 @@ var Generics; function foo() { var a; var b; - a = b; - b = a; + a = b; // error + b = a; // ok var b2; - a = b2; - b2 = a; + a = b2; // ok + b2 = a; // ok } })(Generics || (Generics = {})); diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembers.js b/tests/baselines/reference/assignmentCompatWithObjectMembers.js index 14b49dcd1e7..3bd457f19d3 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembers.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembers.js @@ -86,6 +86,8 @@ module ObjectTypes { } //// [assignmentCompatWithObjectMembers.js] +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// no errors expected var SimpleTypes; (function (SimpleTypes) { var S = (function () { diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembers.types b/tests/baselines/reference/assignmentCompatWithObjectMembers.types new file mode 100644 index 00000000000..940b1d7071d --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithObjectMembers.types @@ -0,0 +1,310 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers.ts === +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// no errors expected + +module SimpleTypes { +>SimpleTypes : typeof SimpleTypes + + class S { foo: string; } +>S : S +>foo : string + + class T { foo: string; } +>T : T +>foo : string + + var s: S; +>s : S +>S : S + + var t: T; +>t : T +>T : T + + interface S2 { foo: string; } +>S2 : S2 +>foo : string + + interface T2 { foo: string; } +>T2 : T2 +>foo : string + + var s2: S2; +>s2 : S2 +>S2 : S2 + + var t2: T2; +>t2 : T2 +>T2 : T2 + + var a: { foo: string; } +>a : { foo: string; } +>foo : string + + var b: { foo: string; } +>b : { foo: string; } +>foo : string + + var a2 = { foo: '' }; +>a2 : { foo: string; } +>{ foo: '' } : { foo: string; } +>foo : string + + var b2 = { foo: '' }; +>b2 : { foo: string; } +>{ foo: '' } : { foo: string; } +>foo : string + + s = t; +>s = t : T +>s : S +>t : T + + t = s; +>t = s : S +>t : T +>s : S + + s = s2; +>s = s2 : S2 +>s : S +>s2 : S2 + + s = a2; +>s = a2 : { foo: string; } +>s : S +>a2 : { foo: string; } + + s2 = t2; +>s2 = t2 : T2 +>s2 : S2 +>t2 : T2 + + t2 = s2; +>t2 = s2 : S2 +>t2 : T2 +>s2 : S2 + + s2 = t; +>s2 = t : T +>s2 : S2 +>t : T + + s2 = b; +>s2 = b : { foo: string; } +>s2 : S2 +>b : { foo: string; } + + s2 = a2; +>s2 = a2 : { foo: string; } +>s2 : S2 +>a2 : { foo: string; } + + a = b; +>a = b : { foo: string; } +>a : { foo: string; } +>b : { foo: string; } + + b = a; +>b = a : { foo: string; } +>b : { foo: string; } +>a : { foo: string; } + + a = s; +>a = s : S +>a : { foo: string; } +>s : S + + a = s2; +>a = s2 : S2 +>a : { foo: string; } +>s2 : S2 + + a = a2; +>a = a2 : { foo: string; } +>a : { foo: string; } +>a2 : { foo: string; } + + a2 = b2; +>a2 = b2 : { foo: string; } +>a2 : { foo: string; } +>b2 : { foo: string; } + + b2 = a2; +>b2 = a2 : { foo: string; } +>b2 : { foo: string; } +>a2 : { foo: string; } + + a2 = b; +>a2 = b : { foo: string; } +>a2 : { foo: string; } +>b : { foo: string; } + + a2 = t2; +>a2 = t2 : T2 +>a2 : { foo: string; } +>t2 : T2 + + a2 = t; +>a2 = t : T +>a2 : { foo: string; } +>t : T +} + +module ObjectTypes { +>ObjectTypes : typeof ObjectTypes + + class S { foo: S; } +>S : S +>foo : S +>S : S + + class T { foo: T; } +>T : T +>foo : T +>T : T + + var s: S; +>s : S +>S : S + + var t: T; +>t : T +>T : T + + interface S2 { foo: S2; } +>S2 : S2 +>foo : S2 +>S2 : S2 + + interface T2 { foo: T2; } +>T2 : T2 +>foo : T2 +>T2 : T2 + + var s2: S2; +>s2 : S2 +>S2 : S2 + + var t2: T2; +>t2 : T2 +>T2 : T2 + + var a: { foo: typeof a; } +>a : { foo: any; } +>foo : { foo: any; } +>a : { foo: any; } + + var b: { foo: typeof b; } +>b : { foo: any; } +>foo : { foo: any; } +>b : { foo: any; } + + var a2 = { foo: a2 }; +>a2 : any +>{ foo: a2 } : { foo: any; } +>foo : any +>a2 : any + + var b2 = { foo: b2 }; +>b2 : any +>{ foo: b2 } : { foo: any; } +>foo : any +>b2 : any + + s = t; +>s = t : T +>s : S +>t : T + + t = s; +>t = s : S +>t : T +>s : S + + s = s2; +>s = s2 : S2 +>s : S +>s2 : S2 + + s = a2; +>s = a2 : any +>s : S +>a2 : any + + s2 = t2; +>s2 = t2 : T2 +>s2 : S2 +>t2 : T2 + + t2 = s2; +>t2 = s2 : S2 +>t2 : T2 +>s2 : S2 + + s2 = t; +>s2 = t : T +>s2 : S2 +>t : T + + s2 = b; +>s2 = b : { foo: any; } +>s2 : S2 +>b : { foo: any; } + + s2 = a2; +>s2 = a2 : any +>s2 : S2 +>a2 : any + + a = b; +>a = b : { foo: any; } +>a : { foo: any; } +>b : { foo: any; } + + b = a; +>b = a : { foo: any; } +>b : { foo: any; } +>a : { foo: any; } + + a = s; +>a = s : S +>a : { foo: any; } +>s : S + + a = s2; +>a = s2 : S2 +>a : { foo: any; } +>s2 : S2 + + a = a2; +>a = a2 : any +>a : { foo: any; } +>a2 : any + + a2 = b2; +>a2 = b2 : any +>a2 : any +>b2 : any + + b2 = a2; +>b2 = a2 : any +>b2 : any +>a2 : any + + a2 = b; +>a2 = b : { foo: any; } +>a2 : any +>b : { foo: any; } + + a2 = t2; +>a2 = t2 : T2 +>a2 : any +>t2 : T2 + + a2 = t; +>a2 = t : T +>a2 : any +>t : T + +} diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembers2.js b/tests/baselines/reference/assignmentCompatWithObjectMembers2.js index 7a2c4ae0fce..ea565e9545c 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembers2.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembers2.js @@ -43,6 +43,8 @@ a2 = t; //// [assignmentCompatWithObjectMembers2.js] +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// additional optional properties do not cause errors var S = (function () { function S() { } diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembers2.types b/tests/baselines/reference/assignmentCompatWithObjectMembers2.types new file mode 100644 index 00000000000..962b29732a5 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithObjectMembers2.types @@ -0,0 +1,153 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers2.ts === +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// additional optional properties do not cause errors + +class S { foo: string; } +>S : S +>foo : string + +class T { foo: string; } +>T : T +>foo : string + +var s: S; +>s : S +>S : S + +var t: T; +>t : T +>T : T + +interface S2 { foo: string; bar?: string } +>S2 : S2 +>foo : string +>bar : string + +interface T2 { foo: string; baz?: string } +>T2 : T2 +>foo : string +>baz : string + +var s2: S2; +>s2 : S2 +>S2 : S2 + +var t2: T2; +>t2 : T2 +>T2 : T2 + +var a: { foo: string; bar?: string } +>a : { foo: string; bar?: string; } +>foo : string +>bar : string + +var b: { foo: string; baz?: string } +>b : { foo: string; baz?: string; } +>foo : string +>baz : string + +var a2 = { foo: '' }; +>a2 : { foo: string; } +>{ foo: '' } : { foo: string; } +>foo : string + +var b2 = { foo: '' }; +>b2 : { foo: string; } +>{ foo: '' } : { foo: string; } +>foo : string + +s = t; +>s = t : T +>s : S +>t : T + +t = s; +>t = s : S +>t : T +>s : S + +s = s2; +>s = s2 : S2 +>s : S +>s2 : S2 + +s = a2; +>s = a2 : { foo: string; } +>s : S +>a2 : { foo: string; } + +s2 = t2; +>s2 = t2 : T2 +>s2 : S2 +>t2 : T2 + +t2 = s2; +>t2 = s2 : S2 +>t2 : T2 +>s2 : S2 + +s2 = t; +>s2 = t : T +>s2 : S2 +>t : T + +s2 = b; +>s2 = b : { foo: string; baz?: string; } +>s2 : S2 +>b : { foo: string; baz?: string; } + +s2 = a2; +>s2 = a2 : { foo: string; } +>s2 : S2 +>a2 : { foo: string; } + +a = b; +>a = b : { foo: string; baz?: string; } +>a : { foo: string; bar?: string; } +>b : { foo: string; baz?: string; } + +b = a; +>b = a : { foo: string; bar?: string; } +>b : { foo: string; baz?: string; } +>a : { foo: string; bar?: string; } + +a = s; +>a = s : S +>a : { foo: string; bar?: string; } +>s : S + +a = s2; +>a = s2 : S2 +>a : { foo: string; bar?: string; } +>s2 : S2 + +a = a2; +>a = a2 : { foo: string; } +>a : { foo: string; bar?: string; } +>a2 : { foo: string; } + +a2 = b2; +>a2 = b2 : { foo: string; } +>a2 : { foo: string; } +>b2 : { foo: string; } + +b2 = a2; +>b2 = a2 : { foo: string; } +>b2 : { foo: string; } +>a2 : { foo: string; } + +a2 = b; +>a2 = b : { foo: string; baz?: string; } +>a2 : { foo: string; } +>b : { foo: string; baz?: string; } + +a2 = t2; +>a2 = t2 : T2 +>a2 : { foo: string; } +>t2 : T2 + +a2 = t; +>a2 = t : T +>a2 : { foo: string; } +>t : T + diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembers3.js b/tests/baselines/reference/assignmentCompatWithObjectMembers3.js index ce8b9ad806e..091a1e53d15 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembers3.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembers3.js @@ -43,6 +43,8 @@ a2 = t; //// [assignmentCompatWithObjectMembers3.js] +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// additional optional properties do not cause errors var S = (function () { function S() { } diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembers3.types b/tests/baselines/reference/assignmentCompatWithObjectMembers3.types new file mode 100644 index 00000000000..85a7e59ffbc --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithObjectMembers3.types @@ -0,0 +1,157 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembers3.ts === +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// additional optional properties do not cause errors + +class S implements S2 { foo: string; } +>S : S +>S2 : S2 +>foo : string + +class T implements T2 { foo: string; } +>T : T +>T2 : T2 +>foo : string + +var s: S; +>s : S +>S : S + +var t: T; +>t : T +>T : T + +interface S2 { foo: string; bar?: string } +>S2 : S2 +>foo : string +>bar : string + +interface T2 { foo: string; baz?: string } +>T2 : T2 +>foo : string +>baz : string + +var s2: S2; +>s2 : S2 +>S2 : S2 + +var t2: T2; +>t2 : T2 +>T2 : T2 + +var a: { foo: string; bar?: string } +>a : { foo: string; bar?: string; } +>foo : string +>bar : string + +var b: { foo: string; baz?: string } +>b : { foo: string; baz?: string; } +>foo : string +>baz : string + +var a2: S2 = { foo: '' }; +>a2 : S2 +>S2 : S2 +>{ foo: '' } : { foo: string; } +>foo : string + +var b2: T2 = { foo: '' }; +>b2 : T2 +>T2 : T2 +>{ foo: '' } : { foo: string; } +>foo : string + +s = t; +>s = t : T +>s : S +>t : T + +t = s; +>t = s : S +>t : T +>s : S + +s = s2; +>s = s2 : S2 +>s : S +>s2 : S2 + +s = a2; +>s = a2 : S2 +>s : S +>a2 : S2 + +s2 = t2; +>s2 = t2 : T2 +>s2 : S2 +>t2 : T2 + +t2 = s2; +>t2 = s2 : S2 +>t2 : T2 +>s2 : S2 + +s2 = t; +>s2 = t : T +>s2 : S2 +>t : T + +s2 = b; +>s2 = b : { foo: string; baz?: string; } +>s2 : S2 +>b : { foo: string; baz?: string; } + +s2 = a2; +>s2 = a2 : S2 +>s2 : S2 +>a2 : S2 + +a = b; +>a = b : { foo: string; baz?: string; } +>a : { foo: string; bar?: string; } +>b : { foo: string; baz?: string; } + +b = a; +>b = a : { foo: string; bar?: string; } +>b : { foo: string; baz?: string; } +>a : { foo: string; bar?: string; } + +a = s; +>a = s : S +>a : { foo: string; bar?: string; } +>s : S + +a = s2; +>a = s2 : S2 +>a : { foo: string; bar?: string; } +>s2 : S2 + +a = a2; +>a = a2 : S2 +>a : { foo: string; bar?: string; } +>a2 : S2 + +a2 = b2; +>a2 = b2 : T2 +>a2 : S2 +>b2 : T2 + +b2 = a2; +>b2 = a2 : S2 +>b2 : T2 +>a2 : S2 + +a2 = b; +>a2 = b : { foo: string; baz?: string; } +>a2 : S2 +>b : { foo: string; baz?: string; } + +a2 = t2; +>a2 = t2 : T2 +>a2 : S2 +>t2 : T2 + +a2 = t; +>a2 = t : T +>a2 : S2 +>t : T + diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembers4.js b/tests/baselines/reference/assignmentCompatWithObjectMembers4.js index a412e06f847..0d535cbb20d 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembers4.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembers4.js @@ -92,6 +92,7 @@ module WithBase { } //// [assignmentCompatWithObjectMembers4.js] +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is not assignable M var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -137,25 +138,25 @@ var OnlyDerived; var b; var a2 = { foo: new Derived() }; var b2 = { foo: new Derived2() }; - s = t; - t = s; - s = s2; - s = a2; - s2 = t2; - t2 = s2; - s2 = t; - s2 = b; - s2 = a2; - a = b; - b = a; - a = s; - a = s2; - a = a2; - a2 = b2; - b2 = a2; - a2 = b; - a2 = t2; - a2 = t; + s = t; // error + t = s; // error + s = s2; // ok + s = a2; // ok + s2 = t2; // error + t2 = s2; // error + s2 = t; // error + s2 = b; // error + s2 = a2; // ok + a = b; // error + b = a; // error + a = s; // ok + a = s2; // ok + a = a2; // ok + a2 = b2; // error + b2 = a2; // error + a2 = b; // error + a2 = t2; // error + a2 = t; // error })(OnlyDerived || (OnlyDerived = {})); var WithBase; (function (WithBase) { @@ -196,23 +197,23 @@ var WithBase; var b; var a2 = { foo: new Base() }; var b2 = { foo: new Derived2() }; - s = t; - t = s; - s = s2; - s = a2; - s2 = t2; - t2 = s2; - s2 = t; - s2 = b; - s2 = a2; - a = b; - b = a; - a = s; - a = s2; - a = a2; - a2 = b2; - b2 = a2; - a2 = b; - a2 = t2; - a2 = t; + s = t; // ok + t = s; // error + s = s2; // ok + s = a2; // ok + s2 = t2; // ok + t2 = s2; // error + s2 = t; // ok + s2 = b; // ok + s2 = a2; // ok + a = b; // ok + b = a; // error + a = s; // ok + a = s2; // ok + a = a2; // ok + a2 = b2; // ok + b2 = a2; // error + a2 = b; // ok + a2 = t2; // ok + a2 = t; // ok })(WithBase || (WithBase = {})); diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembers5.js b/tests/baselines/reference/assignmentCompatWithObjectMembers5.js index 87ef37370bb..d7556298414 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembers5.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembers5.js @@ -22,5 +22,5 @@ var C = (function () { })(); var c; var i; -c = i; -i = c; +c = i; // error +i = c; // error diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembersAccessibility.js b/tests/baselines/reference/assignmentCompatWithObjectMembersAccessibility.js index c6c7da92653..3363ed70890 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembersAccessibility.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembersAccessibility.js @@ -110,8 +110,10 @@ module TargetIsPublic { } //// [assignmentCompatWithObjectMembersAccessibility.js] +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M var TargetIsPublic; (function (TargetIsPublic) { + // targets var Base = (function () { function Base() { } @@ -120,6 +122,7 @@ var TargetIsPublic; var a; var b; var i; + // sources var D = (function () { function D() { } @@ -135,27 +138,28 @@ var TargetIsPublic; a = b; a = i; a = d; - a = e; + a = e; // error b = a; b = i; b = d; - b = e; + b = e; // error i = a; i = b; i = d; - i = e; + i = e; // error d = a; d = b; d = i; - d = e; - e = a; - e = b; - e = i; - e = d; + d = e; // error + e = a; // errror + e = b; // errror + e = i; // errror + e = d; // errror e = e; })(TargetIsPublic || (TargetIsPublic = {})); var TargetIsPublic; (function (TargetIsPublic) { + // targets var Base = (function () { function Base() { } @@ -164,6 +168,7 @@ var TargetIsPublic; var a; var b; var i; + // sources var D = (function () { function D() { } @@ -176,27 +181,27 @@ var TargetIsPublic; })(); var d; var e; - a = b; - a = i; + a = b; // error + a = i; // error a = d; - a = e; - b = a; + a = e; // error + b = a; // error b = i; - b = d; - b = e; + b = d; // error + b = e; // error b = b; - i = a; + i = a; // error i = b; - i = d; - i = e; + i = d; // error + i = e; // error i = i; d = a; - d = b; - d = i; - d = e; - e = a; - e = b; - e = i; - e = d; + d = b; // error + d = i; // error + d = e; // error + e = a; // errror + e = b; // errror + e = i; // errror + e = d; // errror e = e; })(TargetIsPublic || (TargetIsPublic = {})); diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembersNumericNames.js b/tests/baselines/reference/assignmentCompatWithObjectMembersNumericNames.js index d72a006b176..2a1a08a97ed 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembersNumericNames.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembersNumericNames.js @@ -43,6 +43,8 @@ a2 = t; //// [assignmentCompatWithObjectMembersNumericNames.js] +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// numeric named properties work correctly, no errors expected var S = (function () { function S() { } diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembersNumericNames.types b/tests/baselines/reference/assignmentCompatWithObjectMembersNumericNames.types new file mode 100644 index 00000000000..4c76ce1e88a --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithObjectMembersNumericNames.types @@ -0,0 +1,145 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithObjectMembersNumericNames.ts === +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// numeric named properties work correctly, no errors expected + +class S { 1: string; } +>S : S + +class T { 1.: string; } +>T : T + +var s: S; +>s : S +>S : S + +var t: T; +>t : T +>T : T + +interface S2 { 1: string; bar?: string } +>S2 : S2 +>bar : string + +interface T2 { 1.0: string; baz?: string } +>T2 : T2 +>baz : string + +var s2: S2; +>s2 : S2 +>S2 : S2 + +var t2: T2; +>t2 : T2 +>T2 : T2 + +var a: { 1.: string; bar?: string } +>a : { 1.: string; bar?: string; } +>bar : string + +var b: { 1.0: string; baz?: string } +>b : { 1.0: string; baz?: string; } +>baz : string + +var a2 = { 1.0: '' }; +>a2 : { 1.0: string; } +>{ 1.0: '' } : { 1.0: string; } + +var b2 = { 1: '' }; +>b2 : { 1: string; } +>{ 1: '' } : { 1: string; } + +s = t; +>s = t : T +>s : S +>t : T + +t = s; +>t = s : S +>t : T +>s : S + +s = s2; +>s = s2 : S2 +>s : S +>s2 : S2 + +s = a2; +>s = a2 : { 1.0: string; } +>s : S +>a2 : { 1.0: string; } + +s2 = t2; +>s2 = t2 : T2 +>s2 : S2 +>t2 : T2 + +t2 = s2; +>t2 = s2 : S2 +>t2 : T2 +>s2 : S2 + +s2 = t; +>s2 = t : T +>s2 : S2 +>t : T + +s2 = b; +>s2 = b : { 1.0: string; baz?: string; } +>s2 : S2 +>b : { 1.0: string; baz?: string; } + +s2 = a2; +>s2 = a2 : { 1.0: string; } +>s2 : S2 +>a2 : { 1.0: string; } + +a = b; +>a = b : { 1.0: string; baz?: string; } +>a : { 1.: string; bar?: string; } +>b : { 1.0: string; baz?: string; } + +b = a; +>b = a : { 1.: string; bar?: string; } +>b : { 1.0: string; baz?: string; } +>a : { 1.: string; bar?: string; } + +a = s; +>a = s : S +>a : { 1.: string; bar?: string; } +>s : S + +a = s2; +>a = s2 : S2 +>a : { 1.: string; bar?: string; } +>s2 : S2 + +a = a2; +>a = a2 : { 1.0: string; } +>a : { 1.: string; bar?: string; } +>a2 : { 1.0: string; } + +a2 = b2; +>a2 = b2 : { 1: string; } +>a2 : { 1.0: string; } +>b2 : { 1: string; } + +b2 = a2; +>b2 = a2 : { 1.0: string; } +>b2 : { 1: string; } +>a2 : { 1.0: string; } + +a2 = b; +>a2 = b : { 1.0: string; baz?: string; } +>a2 : { 1.0: string; } +>b : { 1.0: string; baz?: string; } + +a2 = t2; +>a2 = t2 : T2 +>a2 : { 1.0: string; } +>t2 : T2 + +a2 = t; +>a2 = t : T +>a2 : { 1.0: string; } +>t : T + diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembersOptionality.js b/tests/baselines/reference/assignmentCompatWithObjectMembersOptionality.js index 1dd81e0d428..5525b623ecc 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembersOptionality.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembersOptionality.js @@ -89,6 +89,7 @@ module SourceHasOptional { } //// [assignmentCompatWithObjectMembersOptionality.js] +// Derived member is not optional but base member is, should be ok var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -122,6 +123,7 @@ var TargetHasOptional; var d; var e; var f; + // all ok c = d; c = e; c = f; @@ -144,17 +146,17 @@ var SourceHasOptional; var d; var e; var f; - c = d; - c = e; - c = f; - c = a; - a = d; - a = e; - a = f; - a = c; - b = d; - b = e; - b = f; - b = a; - b = c; + c = d; // error + c = e; // error + c = f; // ok + c = a; // ok + a = d; // error + a = e; // error + a = f; // ok + a = c; // ok + b = d; // error + b = e; // error + b = f; // ok + b = a; // ok + b = c; // ok })(SourceHasOptional || (SourceHasOptional = {})); diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembersOptionality2.js b/tests/baselines/reference/assignmentCompatWithObjectMembersOptionality2.js index 85a3bc4f6fa..8859a4c9ab0 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembersOptionality2.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembersOptionality2.js @@ -90,6 +90,8 @@ module SourceHasOptional { } //// [assignmentCompatWithObjectMembersOptionality2.js] +// M is optional and S contains no property with the same name as M +// N is optional and T contains no property with the same name as N var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -123,6 +125,7 @@ var TargetHasOptional; var d; var e; var f; + // all ok c = d; c = e; c = f; @@ -145,17 +148,17 @@ var SourceHasOptional; var d; var e; var f; - c = d; - c = e; - c = f; - c = a; - a = d; - a = e; - a = f; - a = c; - b = d; - b = e; - b = f; - b = a; - b = c; + c = d; // error + c = e; // error + c = f; // error + c = a; // ok + a = d; // error + a = e; // error + a = f; // error + a = c; // ok + b = d; // error + b = e; // error + b = f; // error + b = a; // ok + b = c; // ok })(SourceHasOptional || (SourceHasOptional = {})); diff --git a/tests/baselines/reference/assignmentCompatWithObjectMembersStringNumericNames.js b/tests/baselines/reference/assignmentCompatWithObjectMembersStringNumericNames.js index ad3a82cffdb..a042897ba57 100644 --- a/tests/baselines/reference/assignmentCompatWithObjectMembersStringNumericNames.js +++ b/tests/baselines/reference/assignmentCompatWithObjectMembersStringNumericNames.js @@ -86,6 +86,8 @@ module NumbersAndStrings { } //// [assignmentCompatWithObjectMembersStringNumericNames.js] +// members N and M of types S and T have the same name, same accessibility, same optionality, and N is assignable M +// string named numeric properties work correctly, errors below unless otherwise noted var JustStrings; (function (JustStrings) { var S = (function () { @@ -108,7 +110,7 @@ var JustStrings; var b2 = { '1': '' }; s = t; t = s; - s = s2; + s = s2; // ok s = a2; s2 = t2; t2 = s2; @@ -122,8 +124,8 @@ var JustStrings; a = a2; a2 = b2; b2 = a2; - a2 = b; - a2 = t2; + a2 = b; // ok + a2 = t2; // ok a2 = t; })(JustStrings || (JustStrings = {})); var NumbersAndStrings; @@ -146,24 +148,24 @@ var NumbersAndStrings; var b; var a2 = { '1.0': '' }; var b2 = { 1.: '' }; - s = t; - t = s; - s = s2; - s = a2; - s2 = t2; - t2 = s2; - s2 = t; - s2 = b; - s2 = a2; - a = b; - b = a; - a = s; - a = s2; - a = a2; - a = b2; - a2 = b2; - b2 = a2; - a2 = b; - a2 = t2; - a2 = t; + s = t; // ok + t = s; // ok + s = s2; // ok + s = a2; // error + s2 = t2; // ok + t2 = s2; // ok + s2 = t; // ok + s2 = b; // ok + s2 = a2; // error + a = b; // error + b = a; // error + a = s; // error + a = s2; // error + a = a2; // error + a = b2; // error + a2 = b2; // error + b2 = a2; // error + a2 = b; // error + a2 = t2; // error + a2 = t; // error })(NumbersAndStrings || (NumbersAndStrings = {})); diff --git a/tests/baselines/reference/assignmentCompatWithOverloads.js b/tests/baselines/reference/assignmentCompatWithOverloads.js index 0bd69767515..472ebec2967 100644 --- a/tests/baselines/reference/assignmentCompatWithOverloads.js +++ b/tests/baselines/reference/assignmentCompatWithOverloads.js @@ -44,14 +44,14 @@ function f4(x) { return undefined; } var g; -g = f1; -g = f2; -g = f3; -g = f4; +g = f1; // OK +g = f2; // Error +g = f3; // Error +g = f4; // Error var C = (function () { function C(x) { } return C; })(); var d; -d = C; +d = C; // Error diff --git a/tests/baselines/reference/assignmentCompatWithStringIndexer.js b/tests/baselines/reference/assignmentCompatWithStringIndexer.js index 58340fe08cc..b54c75a1bec 100644 --- a/tests/baselines/reference/assignmentCompatWithStringIndexer.js +++ b/tests/baselines/reference/assignmentCompatWithStringIndexer.js @@ -54,6 +54,7 @@ module Generics { } //// [assignmentCompatWithStringIndexer.js] +// index signatures must be compatible in assignments var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -67,11 +68,11 @@ var A = (function () { })(); var a; var b; -a = b; -b = a; +a = b; // ok +b = a; // error var b2; -a = b2; -b2 = a; +a = b2; // ok +b2 = a; // error var Generics; (function (Generics) { var A = (function () { @@ -88,8 +89,8 @@ var Generics; })(A); var b1; var a1; - a1 = b1; - b1 = a1; + a1 = b1; // ok + b1 = a1; // error var B2 = (function (_super) { __extends(B2, _super); function B2() { @@ -98,15 +99,15 @@ var Generics; return B2; })(A); var b2; - a1 = b2; - b2 = a1; + a1 = b2; // ok + b2 = a1; // error function foo() { var b3; var a3; - a3 = b3; - b3 = a3; + a3 = b3; // error + b3 = a3; // error var b4; - a3 = b4; - b4 = a3; + a3 = b4; // error + b4 = a3; // error } })(Generics || (Generics = {})); diff --git a/tests/baselines/reference/assignmentCompatWithStringIndexer2.js b/tests/baselines/reference/assignmentCompatWithStringIndexer2.js index ae8af19da8a..50fe7b3f8b9 100644 --- a/tests/baselines/reference/assignmentCompatWithStringIndexer2.js +++ b/tests/baselines/reference/assignmentCompatWithStringIndexer2.js @@ -54,29 +54,30 @@ module Generics { } //// [assignmentCompatWithStringIndexer2.js] +// index signatures must be compatible in assignments var a; var b; -a = b; -b = a; +a = b; // ok +b = a; // error var b2; -a = b2; -b2 = a; +a = b2; // ok +b2 = a; // error var Generics; (function (Generics) { var b1; var a1; - a1 = b1; - b1 = a1; + a1 = b1; // ok + b1 = a1; // error var b2; - a1 = b2; - b2 = a1; + a1 = b2; // ok + b2 = a1; // error function foo() { var b3; var a3; - a3 = b3; - b3 = a3; + a3 = b3; // error + b3 = a3; // error var b4; - a3 = b4; - b4 = a3; + a3 = b4; // error + b4 = a3; // error } })(Generics || (Generics = {})); diff --git a/tests/baselines/reference/assignmentCompatWithStringIndexer3.js b/tests/baselines/reference/assignmentCompatWithStringIndexer3.js index b706859006f..15263428884 100644 --- a/tests/baselines/reference/assignmentCompatWithStringIndexer3.js +++ b/tests/baselines/reference/assignmentCompatWithStringIndexer3.js @@ -24,10 +24,11 @@ module Generics { } //// [assignmentCompatWithStringIndexer3.js] +// Derived type indexer must be subtype of base type indexer var a; var b1; -a = b1; -b1 = a; +a = b1; // error +b1 = a; // error var Generics; (function (Generics) { var A = (function () { @@ -38,7 +39,7 @@ var Generics; function foo() { var a; var b; - a = b; - b = a; + a = b; // error + b = a; // error } })(Generics || (Generics = {})); diff --git a/tests/baselines/reference/assignmentCompatWithWithGenericConstructSignatures.types b/tests/baselines/reference/assignmentCompatWithWithGenericConstructSignatures.types new file mode 100644 index 00000000000..e6db879f441 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatWithWithGenericConstructSignatures.types @@ -0,0 +1,3 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithWithGenericConstructSignatures.ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/assignmentCompatability1.types b/tests/baselines/reference/assignmentCompatability1.types new file mode 100644 index 00000000000..9949fc14bf5 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability1.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/assignmentCompatability1.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export var aa = {};; +>aa : {} +>{} : {} + + export var __val__aa = aa; +>__val__aa : {} +>aa : {} +} +__test2__.__val__aa = __test1__.__val__obj4 +>__test2__.__val__aa = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__aa : {} +>__test2__ : typeof __test2__ +>__val__aa : {} +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability2.types b/tests/baselines/reference/assignmentCompatability2.types new file mode 100644 index 00000000000..16da45c7e35 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability2.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/assignmentCompatability2.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export var aa:{};; +>aa : {} + + export var __val__aa = aa; +>__val__aa : {} +>aa : {} +} +__test2__.__val__aa = __test1__.__val__obj4 +>__test2__.__val__aa = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__aa : {} +>__test2__ : typeof __test2__ +>__val__aa : {} +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability3.types b/tests/baselines/reference/assignmentCompatability3.types new file mode 100644 index 00000000000..61279b9c7fa --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability3.types @@ -0,0 +1,42 @@ +=== tests/cases/compiler/assignmentCompatability3.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export var obj = {one: 1}; +>obj : { one: number; } +>{one: 1} : { one: number; } +>one : number + + export var __val__obj = obj; +>__val__obj : { one: number; } +>obj : { one: number; } +} +__test2__.__val__obj = __test1__.__val__obj4 +>__test2__.__val__obj = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__obj : { one: number; } +>__test2__ : typeof __test2__ +>__val__obj : { one: number; } +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability4.types b/tests/baselines/reference/assignmentCompatability4.types new file mode 100644 index 00000000000..f7e5801e9b3 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability4.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/assignmentCompatability4.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export var aa:{one:number;};; +>aa : { one: number; } +>one : number + + export var __val__aa = aa; +>__val__aa : { one: number; } +>aa : { one: number; } +} +__test2__.__val__aa = __test1__.__val__obj4 +>__test2__.__val__aa = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__aa : { one: number; } +>__test2__ : typeof __test2__ +>__val__aa : { one: number; } +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability5.types b/tests/baselines/reference/assignmentCompatability5.types new file mode 100644 index 00000000000..80eda3e510b --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability5.types @@ -0,0 +1,47 @@ +=== tests/cases/compiler/assignmentCompatability5.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export interface interfaceOne { one: T; }; var obj1: interfaceOne = { one: 1 };; +>interfaceOne : interfaceOne +>T : T +>one : T +>T : T +>obj1 : interfaceOne +>interfaceOne : interfaceOne +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj1 = obj1; +>__val__obj1 : interfaceOne +>obj1 : interfaceOne +} +__test2__.__val__obj1 = __test1__.__val__obj4 +>__test2__.__val__obj1 = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__obj1 : __test2__.interfaceOne +>__test2__ : typeof __test2__ +>__val__obj1 : __test2__.interfaceOne +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability6.types b/tests/baselines/reference/assignmentCompatability6.types new file mode 100644 index 00000000000..5e9ae8c6a2f --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability6.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/assignmentCompatability6.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export interface interfaceWithOptional { one?: T; }; var obj3: interfaceWithOptional = { };; +>interfaceWithOptional : interfaceWithOptional +>T : T +>one : T +>T : T +>obj3 : interfaceWithOptional +>interfaceWithOptional : interfaceWithOptional +>{ } : {} + + export var __val__obj3 = obj3; +>__val__obj3 : interfaceWithOptional +>obj3 : interfaceWithOptional +} +__test2__.__val__obj3 = __test1__.__val__obj4 +>__test2__.__val__obj3 = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__obj3 : __test2__.interfaceWithOptional +>__test2__ : typeof __test2__ +>__val__obj3 : __test2__.interfaceWithOptional +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability7.types b/tests/baselines/reference/assignmentCompatability7.types new file mode 100644 index 00000000000..b7b2ab70566 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability7.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/assignmentCompatability7.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +__test2__.__val__obj4 = __test1__.__val__obj4 +>__test2__.__val__obj4 = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__obj4 : __test2__.interfaceWithPublicAndOptional +>__test2__ : typeof __test2__ +>__val__obj4 : __test2__.interfaceWithPublicAndOptional +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability8.types b/tests/baselines/reference/assignmentCompatability8.types new file mode 100644 index 00000000000..1c009eea482 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability8.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/assignmentCompatability8.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export class classWithPublic { constructor(public one: T) {} } var x1 = new classWithPublic(1);; +>classWithPublic : classWithPublic +>T : T +>one : T +>T : T +>x1 : classWithPublic +>new classWithPublic(1) : classWithPublic +>classWithPublic : typeof classWithPublic + + export var __val__x1 = x1; +>__val__x1 : classWithPublic +>x1 : classWithPublic +} +__test2__.__val__x1 = __test1__.__val__obj4 +>__test2__.__val__x1 = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__x1 : __test2__.classWithPublic +>__test2__ : typeof __test2__ +>__val__x1 : __test2__.classWithPublic +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability9.types b/tests/baselines/reference/assignmentCompatability9.types new file mode 100644 index 00000000000..a8235220bec --- /dev/null +++ b/tests/baselines/reference/assignmentCompatability9.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/assignmentCompatability9.ts === +module __test1__ { +>__test1__ : typeof __test1__ + + export interface interfaceWithPublicAndOptional { one: T; two?: U; }; var obj4: interfaceWithPublicAndOptional = { one: 1 };; +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>T : T +>U : U +>one : T +>T : T +>two : U +>U : U +>obj4 : interfaceWithPublicAndOptional +>interfaceWithPublicAndOptional : interfaceWithPublicAndOptional +>{ one: 1 } : { one: number; } +>one : number + + export var __val__obj4 = obj4; +>__val__obj4 : interfaceWithPublicAndOptional +>obj4 : interfaceWithPublicAndOptional +} +module __test2__ { +>__test2__ : typeof __test2__ + + export class classWithOptional { constructor(public one?: T) {} } var x3 = new classWithOptional();; +>classWithOptional : classWithOptional +>T : T +>one : T +>T : T +>x3 : classWithOptional +>new classWithOptional() : classWithOptional +>classWithOptional : typeof classWithOptional + + export var __val__x3 = x3; +>__val__x3 : classWithOptional +>x3 : classWithOptional +} +__test2__.__val__x3 = __test1__.__val__obj4 +>__test2__.__val__x3 = __test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test2__.__val__x3 : __test2__.classWithOptional +>__test2__ : typeof __test2__ +>__val__x3 : __test2__.classWithOptional +>__test1__.__val__obj4 : __test1__.interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : __test1__.interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability_checking-apply-member-off-of-function-interface.js b/tests/baselines/reference/assignmentCompatability_checking-apply-member-off-of-function-interface.js index cf00d40094d..637e26a82ce 100644 --- a/tests/baselines/reference/assignmentCompatability_checking-apply-member-off-of-function-interface.js +++ b/tests/baselines/reference/assignmentCompatability_checking-apply-member-off-of-function-interface.js @@ -31,20 +31,25 @@ fn(a => { }); //// [assignmentCompatability_checking-apply-member-off-of-function-interface.js] +// 3.8.4 Assignment Compatibility var x; +// Should fail x = ''; x = ['']; x = 4; x = {}; +// Should work function f() { } ; x = f; function fn(c) { } +// Should Fail fn(''); fn(['']); fn(4); fn({}); +// Should work fn(function (a) { }); diff --git a/tests/baselines/reference/assignmentCompatability_checking-call-member-off-of-function-interface.js b/tests/baselines/reference/assignmentCompatability_checking-call-member-off-of-function-interface.js index 1fde370e36b..07bb9862c80 100644 --- a/tests/baselines/reference/assignmentCompatability_checking-call-member-off-of-function-interface.js +++ b/tests/baselines/reference/assignmentCompatability_checking-call-member-off-of-function-interface.js @@ -31,20 +31,25 @@ fn(a => { }); //// [assignmentCompatability_checking-call-member-off-of-function-interface.js] +// 3.8.4 Assignment Compatibility var x; +// Should fail x = ''; x = ['']; x = 4; x = {}; +// Should work function f() { } ; x = f; function fn(c) { } +// Should Fail fn(''); fn(['']); fn(4); fn({}); +// Should work fn(function (a) { }); diff --git a/tests/baselines/reference/assignmentCompatibilityForConstrainedTypeParameters.types b/tests/baselines/reference/assignmentCompatibilityForConstrainedTypeParameters.types new file mode 100644 index 00000000000..fab8e2baae6 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatibilityForConstrainedTypeParameters.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/assignmentCompatibilityForConstrainedTypeParameters.ts === +function foo() { +>foo : () => void +>T : T +>bar : string + + function bar() { +>bar : () => void +>S : S +>T : T + + var x: S; +>x : S +>S : S + + var y: T; +>y : T +>T : T + + y = x; +>y = x : S +>y : T +>x : S + } +} diff --git a/tests/baselines/reference/assignmentLHSIsReference.js b/tests/baselines/reference/assignmentLHSIsReference.js index 65950ded275..f0af56ebc3b 100644 --- a/tests/baselines/reference/assignmentLHSIsReference.js +++ b/tests/baselines/reference/assignmentLHSIsReference.js @@ -26,14 +26,17 @@ function fn2(x4: number) { //// [assignmentLHSIsReference.js] var value; +// identifiers: variable and parameter var x1; x1 = value; function fn1(x2) { x2 = value; } +// property accesses var x3; x3.a = value; x3['a'] = value; +// parentheses, the contained expression is reference (x1) = value; function fn2(x4) { (x4) = value; diff --git a/tests/baselines/reference/assignmentLHSIsReference.types b/tests/baselines/reference/assignmentLHSIsReference.types new file mode 100644 index 00000000000..0d7bfad3f06 --- /dev/null +++ b/tests/baselines/reference/assignmentLHSIsReference.types @@ -0,0 +1,74 @@ +=== tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsReference.ts === +var value; +>value : any + +// identifiers: variable and parameter +var x1: number; +>x1 : number + +x1 = value; +>x1 = value : any +>x1 : number +>value : any + +function fn1(x2: number) { +>fn1 : (x2: number) => void +>x2 : number + + x2 = value; +>x2 = value : any +>x2 : number +>value : any +} + +// property accesses +var x3: { a: string }; +>x3 : { a: string; } +>a : string + +x3.a = value; +>x3.a = value : any +>x3.a : string +>x3 : { a: string; } +>a : string +>value : any + +x3['a'] = value; +>x3['a'] = value : any +>x3['a'] : string +>x3 : { a: string; } +>value : any + +// parentheses, the contained expression is reference +(x1) = value; +>(x1) = value : any +>(x1) : number +>x1 : number +>value : any + +function fn2(x4: number) { +>fn2 : (x4: number) => void +>x4 : number + + (x4) = value; +>(x4) = value : any +>(x4) : number +>x4 : number +>value : any +} + +(x3.a) = value; +>(x3.a) = value : any +>(x3.a) : string +>x3.a : string +>x3 : { a: string; } +>a : string +>value : any + +(x3['a']) = value; +>(x3['a']) = value : any +>(x3['a']) : string +>x3['a'] : string +>x3 : { a: string; } +>value : any + diff --git a/tests/baselines/reference/assignmentLHSIsValue.errors.txt b/tests/baselines/reference/assignmentLHSIsValue.errors.txt index b5ebd69f67a..90e6a7e3dc2 100644 --- a/tests/baselines/reference/assignmentLHSIsValue.errors.txt +++ b/tests/baselines/reference/assignmentLHSIsValue.errors.txt @@ -76,19 +76,19 @@ class Derived extends C { constructor() { super(); super = value; } ~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! Invalid left-hand side of assignment expression. foo() { super = value } ~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! Invalid left-hand side of assignment expression. static sfoo() { super = value; } ~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! Invalid left-hand side of assignment expression. } diff --git a/tests/baselines/reference/assignmentToObject.js b/tests/baselines/reference/assignmentToObject.js index 6c11d67dd68..d8134080c6a 100644 --- a/tests/baselines/reference/assignmentToObject.js +++ b/tests/baselines/reference/assignmentToObject.js @@ -6,5 +6,5 @@ var c: Object = a; // should be error //// [assignmentToObject.js] var a = { toString: 5 }; -var b = a; -var c = a; +var b = a; // ok +var c = a; // should be error diff --git a/tests/baselines/reference/assignmentToObjectAndFunction.js b/tests/baselines/reference/assignmentToObjectAndFunction.js index 48395b3bdc0..b058765d5f8 100644 --- a/tests/baselines/reference/assignmentToObjectAndFunction.js +++ b/tests/baselines/reference/assignmentToObjectAndFunction.js @@ -30,20 +30,20 @@ module bad { var badFundule: Function = bad; // error //// [assignmentToObjectAndFunction.js] -var errObj = { toString: 0 }; +var errObj = { toString: 0 }; // Error, incompatible toString var goodObj = { toString: function (x) { return ""; } -}; -var errFun = {}; +}; // Ok, because toString is a subtype of Object's toString +var errFun = {}; // Error for no call signature function foo() { } var foo; (function (foo) { foo.boom = 0; })(foo || (foo = {})); -var goodFundule = foo; +var goodFundule = foo; // ok function bar() { } var bar; @@ -52,11 +52,11 @@ var bar; } bar.apply = apply; })(bar || (bar = {})); -var goodFundule2 = bar; +var goodFundule2 = bar; // ok function bad() { } var bad; (function (bad) { bad.apply = 0; })(bad || (bad = {})); -var badFundule = bad; +var badFundule = bad; // error diff --git a/tests/baselines/reference/assignmentToParenthesizedIdentifiers.js b/tests/baselines/reference/assignmentToParenthesizedIdentifiers.js index 9e006251682..cd687a41db9 100644 --- a/tests/baselines/reference/assignmentToParenthesizedIdentifiers.js +++ b/tests/baselines/reference/assignmentToParenthesizedIdentifiers.js @@ -73,66 +73,66 @@ C = undefined; // Error //// [assignmentToParenthesizedIdentifiers.js] var x; -x = 3; -(x) = 3; -x = ''; -(x) = ''; +x = 3; // OK +(x) = 3; // OK +x = ''; // Error +(x) = ''; // Error var M; (function (M) { M.y; })(M || (M = {})); -M.y = 3; -(M).y = 3; -(M.y) = 3; -M.y = ''; -(M).y = ''; -(M.y) = ''; -M = { y: 3 }; -(M) = { y: 3 }; +M.y = 3; // OK +(M).y = 3; // OK +(M.y) = 3; // OK +M.y = ''; // Error +(M).y = ''; // Error +(M.y) = ''; // Error +M = { y: 3 }; // Error +(M) = { y: 3 }; // Error var M2; (function (M2) { (function (M3) { M3.x; })(M2.M3 || (M2.M3 = {})); var M3 = M2.M3; - M3 = { x: 3 }; + M3 = { x: 3 }; // Error })(M2 || (M2 = {})); -M2.M3 = { x: 3 }; -(M2).M3 = { x: 3 }; -(M2.M3) = { x: 3 }; -M2.M3 = { x: '' }; -(M2).M3 = { x: '' }; -(M2.M3) = { x: '' }; +M2.M3 = { x: 3 }; // OK +(M2).M3 = { x: 3 }; // OK +(M2.M3) = { x: 3 }; // OK +M2.M3 = { x: '' }; // Error +(M2).M3 = { x: '' }; // Error +(M2.M3) = { x: '' }; // Error function fn() { } -fn = function () { return 3; }; -(fn) = function () { return 3; }; +fn = function () { return 3; }; // Bug 823548: Should be error (fn is not a reference) +(fn) = function () { return 3; }; // Should be error function fn2(x, y) { x = 3; - (x) = 3; - x = ''; - (x) = ''; - (y).t = 3; - (y.t) = 3; - (y).t = ''; - (y.t) = ''; - y['t'] = 3; - (y)['t'] = 3; - (y['t']) = 3; - y['t'] = ''; - (y)['t'] = ''; - (y['t']) = ''; + (x) = 3; // OK + x = ''; // Error + (x) = ''; // Error + (y).t = 3; // OK + (y.t) = 3; // OK + (y).t = ''; // Error + (y.t) = ''; // Error + y['t'] = 3; // OK + (y)['t'] = 3; // OK + (y['t']) = 3; // OK + y['t'] = ''; // Error + (y)['t'] = ''; // Error + (y['t']) = ''; // Error } var E; (function (E) { E[E["A"] = 0] = "A"; })(E || (E = {})); -E = undefined; -(E) = undefined; +E = undefined; // Error +(E) = undefined; // Error var C = (function () { function C() { } return C; })(); -C = undefined; -(C) = undefined; +C = undefined; // Error +(C) = undefined; // Error diff --git a/tests/baselines/reference/assignmentToReferenceTypes.js b/tests/baselines/reference/assignmentToReferenceTypes.js index 58f6119d125..214e10b9c6c 100644 --- a/tests/baselines/reference/assignmentToReferenceTypes.js +++ b/tests/baselines/reference/assignmentToReferenceTypes.js @@ -24,6 +24,7 @@ function g(x) { } //// [assignmentToReferenceTypes.js] +// Should all be allowed M = null; var C = (function () { function C() { diff --git a/tests/baselines/reference/assignments.js b/tests/baselines/reference/assignments.js index 3a7479a0734..f9bb008ccac 100644 --- a/tests/baselines/reference/assignments.js +++ b/tests/baselines/reference/assignments.js @@ -32,25 +32,33 @@ interface I { } I = null; // Error //// [assignments.js] -M = null; +// In this file: +// Assign to a module +// Assign to a class +// Assign to an enum +// Assign to a function +// Assign to a variable +// Assign to a parameter +// Assign to an interface +M = null; // Error var C = (function () { function C() { } return C; })(); -C = null; +C = null; // Error var E; (function (E) { E[E["A"] = 0] = "A"; })(E || (E = {})); -E = null; -0 /* A */ = null; +E = null; // Error +0 /* A */ = null; // OK per spec, Error per implementation (509581) function fn() { } -fn = null; +fn = null; // Should be error var v; -v = null; +v = null; // OK function fn2(p) { - p = null; + p = null; // OK } -I = null; +I = null; // Error diff --git a/tests/baselines/reference/augmentArray.types b/tests/baselines/reference/augmentArray.types new file mode 100644 index 00000000000..31f7e11edca --- /dev/null +++ b/tests/baselines/reference/augmentArray.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/augmentArray.ts === +interface Array { +>Array : T[] +>T : T + + (): any[]; +} diff --git a/tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.js b/tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.js index f05f0adbe8c..88996de1553 100644 --- a/tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.js +++ b/tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.js @@ -25,5 +25,5 @@ var v2: { var o = {}; var f = function () { }; -var v1 = o; -var v2 = f; +var v1 = o; // Should be allowed +var v2 = f; // Should be allowed diff --git a/tests/baselines/reference/augmentedTypeBracketAccessIndexSignature.js b/tests/baselines/reference/augmentedTypeBracketAccessIndexSignature.js index 87d6b23e973..a1b6bf6805c 100644 --- a/tests/baselines/reference/augmentedTypeBracketAccessIndexSignature.js +++ b/tests/baselines/reference/augmentedTypeBracketAccessIndexSignature.js @@ -14,6 +14,6 @@ var a = {}[0]; // Should be Foo var b = (() => { })[0]; // Should be Bar //// [augmentedTypeBracketAccessIndexSignature.js] -var a = {}[0]; +var a = {}[0]; // Should be Foo var b = (function () { -})[0]; +})[0]; // Should be Bar diff --git a/tests/baselines/reference/augmentedTypeBracketAccessIndexSignature.types b/tests/baselines/reference/augmentedTypeBracketAccessIndexSignature.types new file mode 100644 index 00000000000..d02a36409a7 --- /dev/null +++ b/tests/baselines/reference/augmentedTypeBracketAccessIndexSignature.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/augmentedTypeBracketAccessIndexSignature.ts === +interface Foo { a } +>Foo : Foo +>a : any + +interface Bar { b } +>Bar : Bar +>b : any + +interface Object { +>Object : Object + + [n: number]: Foo; +>n : number +>Foo : Foo +} + +interface Function { +>Function : Function + + [n: number]: Bar; +>n : number +>Bar : Bar +} + +var a = {}[0]; // Should be Foo +>a : any +>{}[0] : any +>{} : {} + +var b = (() => { })[0]; // Should be Bar +>b : any +>(() => { })[0] : any +>(() => { }) : () => void +>() => { } : () => void + diff --git a/tests/baselines/reference/augmentedTypeBracketNamedPropertyAccess.js b/tests/baselines/reference/augmentedTypeBracketNamedPropertyAccess.js index b1d5fb71308..5bc184df667 100644 --- a/tests/baselines/reference/augmentedTypeBracketNamedPropertyAccess.js +++ b/tests/baselines/reference/augmentedTypeBracketNamedPropertyAccess.js @@ -17,7 +17,7 @@ var r4 = f['data']; // Should be number var o = {}; var f = function () { }; -var r1 = o['data']; -var r2 = o['functionData']; -var r3 = f['functionData']; -var r4 = f['data']; +var r1 = o['data']; // Should be number +var r2 = o['functionData']; // Should be any (no property found) +var r3 = f['functionData']; // Should be string +var r4 = f['data']; // Should be number diff --git a/tests/baselines/reference/augmentedTypeBracketNamedPropertyAccess.types b/tests/baselines/reference/augmentedTypeBracketNamedPropertyAccess.types new file mode 100644 index 00000000000..142b08928e3 --- /dev/null +++ b/tests/baselines/reference/augmentedTypeBracketNamedPropertyAccess.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/augmentedTypeBracketNamedPropertyAccess.ts === +interface Object { +>Object : Object + + data: number; +>data : number +} +interface Function { +>Function : Function + + functionData: string; +>functionData : string +} +var o = {}; +>o : {} +>{} : {} + +var f = function () { }; +>f : () => void +>function () { } : () => void + +var r1 = o['data']; // Should be number +>r1 : number +>o['data'] : number +>o : {} + +var r2 = o['functionData']; // Should be any (no property found) +>r2 : any +>o['functionData'] : any +>o : {} + +var r3 = f['functionData']; // Should be string +>r3 : string +>f['functionData'] : string +>f : () => void + +var r4 = f['data']; // Should be number +>r4 : number +>f['data'] : number +>f : () => void + diff --git a/tests/baselines/reference/augmentedTypesClass.js b/tests/baselines/reference/augmentedTypesClass.js index bf80f773fbd..5d0d8ab75d6 100644 --- a/tests/baselines/reference/augmentedTypesClass.js +++ b/tests/baselines/reference/augmentedTypesClass.js @@ -8,6 +8,7 @@ class c4 { public foo() { } } enum c4 { One } // error //// [augmentedTypesClass.js] +//// class then var var c1 = (function () { function c1() { } @@ -15,7 +16,8 @@ var c1 = (function () { }; return c1; })(); -var c1 = 1; +var c1 = 1; // error +//// class then enum var c4 = (function () { function c4() { } @@ -26,4 +28,4 @@ var c4 = (function () { var c4; (function (c4) { c4[c4["One"] = 0] = "One"; -})(c4 || (c4 = {})); +})(c4 || (c4 = {})); // error diff --git a/tests/baselines/reference/augmentedTypesClass2.js b/tests/baselines/reference/augmentedTypesClass2.js index 1255fd94010..b4df1672b69 100644 --- a/tests/baselines/reference/augmentedTypesClass2.js +++ b/tests/baselines/reference/augmentedTypesClass2.js @@ -31,6 +31,8 @@ class c44 { //// [augmentedTypesClass2.js] +// Checking class with other things in type space not value space +// class then interface var c11 = (function () { function c11() { } @@ -39,6 +41,8 @@ var c11 = (function () { }; return c11; })(); +// class then class - covered +// class then enum var c33 = (function () { function c33() { } @@ -52,6 +56,7 @@ var c33; c33[c33["One"] = 0] = "One"; })(c33 || (c33 = {})); ; +// class then import var c44 = (function () { function c44() { } diff --git a/tests/baselines/reference/augmentedTypesClass2a.js b/tests/baselines/reference/augmentedTypesClass2a.js index 3a77cbc2cad..cca45c2c0b3 100644 --- a/tests/baselines/reference/augmentedTypesClass2a.js +++ b/tests/baselines/reference/augmentedTypesClass2a.js @@ -5,6 +5,7 @@ function c2() { } // error var c2 = () => { } //// [augmentedTypesClass2a.js] +//// class then function var c2 = (function () { function c2() { } @@ -13,6 +14,6 @@ var c2 = (function () { return c2; })(); function c2() { -} +} // error var c2 = function () { }; diff --git a/tests/baselines/reference/augmentedTypesClass3.js b/tests/baselines/reference/augmentedTypesClass3.js index 9c0dbc3eb37..dd0da2a1646 100644 --- a/tests/baselines/reference/augmentedTypesClass3.js +++ b/tests/baselines/reference/augmentedTypesClass3.js @@ -14,6 +14,7 @@ class c5c { public foo() { } } //import c5c = require(''); //// [augmentedTypesClass3.js] +// class then module var c5 = (function () { function c5() { } @@ -31,7 +32,7 @@ var c5a = (function () { var c5a; (function (c5a) { var y = 2; -})(c5a || (c5a = {})); +})(c5a || (c5a = {})); // should be ok var c5b = (function () { function c5b() { } @@ -42,7 +43,8 @@ var c5b = (function () { var c5b; (function (c5b) { c5b.y = 2; -})(c5b || (c5b = {})); +})(c5b || (c5b = {})); // should be ok +//// class then import var c5c = (function () { function c5c() { } diff --git a/tests/baselines/reference/augmentedTypesClass3.types b/tests/baselines/reference/augmentedTypesClass3.types new file mode 100644 index 00000000000..b22899b03cf --- /dev/null +++ b/tests/baselines/reference/augmentedTypesClass3.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/augmentedTypesClass3.ts === +// class then module +class c5 { public foo() { } } +>c5 : c5 +>foo : () => void + +module c5 { } // should be ok +>c5 : typeof c5 + +class c5a { public foo() { } } +>c5a : c5a +>foo : () => void + +module c5a { var y = 2; } // should be ok +>c5a : typeof c5a +>y : number + +class c5b { public foo() { } } +>c5b : c5b +>foo : () => void + +module c5b { export var y = 2; } // should be ok +>c5b : typeof c5b +>y : number + +//// class then import +class c5c { public foo() { } } +>c5c : c5c +>foo : () => void + +//import c5c = require(''); diff --git a/tests/baselines/reference/augmentedTypesClass4.js b/tests/baselines/reference/augmentedTypesClass4.js index 08206852d5a..c4e104e714b 100644 --- a/tests/baselines/reference/augmentedTypesClass4.js +++ b/tests/baselines/reference/augmentedTypesClass4.js @@ -5,6 +5,7 @@ class c3 { public bar() { } } // error //// [augmentedTypesClass4.js] +//// class then class var c3 = (function () { function c3() { } @@ -18,4 +19,4 @@ var c3 = (function () { c3.prototype.bar = function () { }; return c3; -})(); +})(); // error diff --git a/tests/baselines/reference/augmentedTypesEnum.js b/tests/baselines/reference/augmentedTypesEnum.js index 55ba96b210a..8422b99798b 100644 --- a/tests/baselines/reference/augmentedTypesEnum.js +++ b/tests/baselines/reference/augmentedTypesEnum.js @@ -36,23 +36,26 @@ module e6b { export var y = 2; } // should be error //import e7 = require(''); // should be error //// [augmentedTypesEnum.js] +// enum then var var e1111; (function (e1111) { e1111[e1111["One"] = 0] = "One"; })(e1111 || (e1111 = {})); -var e1111 = 1; +var e1111 = 1; // error +// enum then function var e2; (function (e2) { e2[e2["One"] = 0] = "One"; })(e2 || (e2 = {})); function e2() { -} +} // error var e3; (function (e3) { e3[e3["One"] = 0] = "One"; })(e3 || (e3 = {})); var e3 = function () { -}; +}; // error +// enum then class var e4; (function (e4) { e4[e4["One"] = 0] = "One"; @@ -63,7 +66,8 @@ var e4 = (function () { e4.prototype.foo = function () { }; return e4; -})(); +})(); // error +// enum then enum var e5; (function (e5) { e5[e5["One"] = 0] = "One"; @@ -79,7 +83,8 @@ var e5a; var e5a; (function (e5a) { e5a[e5a["One"] = 0] = "One"; -})(e5a || (e5a = {})); +})(e5a || (e5a = {})); // error +// enum then internal module var e6; (function (e6) { e6[e6["One"] = 0] = "One"; @@ -91,7 +96,7 @@ var e6a; var e6a; (function (e6a) { var y = 2; -})(e6a || (e6a = {})); +})(e6a || (e6a = {})); // should be error var e6b; (function (e6b) { e6b[e6b["One"] = 0] = "One"; @@ -99,4 +104,4 @@ var e6b; var e6b; (function (e6b) { e6b.y = 2; -})(e6b || (e6b = {})); +})(e6b || (e6b = {})); // should be error diff --git a/tests/baselines/reference/augmentedTypesEnum2.js b/tests/baselines/reference/augmentedTypesEnum2.js index a89f6c8df51..13656b33411 100644 --- a/tests/baselines/reference/augmentedTypesEnum2.js +++ b/tests/baselines/reference/augmentedTypesEnum2.js @@ -20,10 +20,13 @@ class e2 { // error //enum then import - covered //// [augmentedTypesEnum2.js] +// enum then interface var e1; (function (e1) { e1[e1["One"] = 0] = "One"; })(e1 || (e1 = {})); +// interface then enum works +// enum then class var e2; (function (e2) { e2[e2["One"] = 0] = "One"; diff --git a/tests/baselines/reference/augmentedTypesExternalModule1.types b/tests/baselines/reference/augmentedTypesExternalModule1.types new file mode 100644 index 00000000000..ec7e9194df6 --- /dev/null +++ b/tests/baselines/reference/augmentedTypesExternalModule1.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/augmentedTypesExternalModule1.ts === +export var a = 1; +>a : number + +class c5 { public foo() { } } +>c5 : c5 +>foo : () => void + +module c5 { } // should be ok everywhere +>c5 : typeof c5 + diff --git a/tests/baselines/reference/augmentedTypesFunction.js b/tests/baselines/reference/augmentedTypesFunction.js index 42f91d8cabd..097482c7c5b 100644 --- a/tests/baselines/reference/augmentedTypesFunction.js +++ b/tests/baselines/reference/augmentedTypesFunction.js @@ -39,24 +39,27 @@ module y5c { export interface I { foo(): void } } // should be an error //import y6 = require(''); //// [augmentedTypesFunction.js] +// function then var function y1() { } -var y1 = 1; +var y1 = 1; // error +// function then function function y2() { } function y2() { -} +} // error function y2a() { } var y2a = function () { -}; +}; // error +// function then class function y3() { } var y3 = (function () { function y3() { } return y3; -})(); +})(); // error function y3a() { } var y3a = (function () { @@ -65,13 +68,15 @@ var y3a = (function () { y3a.prototype.foo = function () { }; return y3a; -})(); +})(); // error +// function then enum function y4() { } var y4; (function (y4) { y4[y4["One"] = 0] = "One"; -})(y4 || (y4 = {})); +})(y4 || (y4 = {})); // error +// function then internal module function y5() { } function y5a() { @@ -79,12 +84,12 @@ function y5a() { var y5a; (function (y5a) { var y = 2; -})(y5a || (y5a = {})); +})(y5a || (y5a = {})); // should be an error function y5b() { } var y5b; (function (y5b) { y5b.y = 3; -})(y5b || (y5b = {})); +})(y5b || (y5b = {})); // should be an error function y5c() { } diff --git a/tests/baselines/reference/augmentedTypesInterface.js b/tests/baselines/reference/augmentedTypesInterface.js index 85fffd795a3..5c68ba9a744 100644 --- a/tests/baselines/reference/augmentedTypesInterface.js +++ b/tests/baselines/reference/augmentedTypesInterface.js @@ -34,6 +34,7 @@ interface i4 { //import i4 = require(''); // error //// [augmentedTypesInterface.js] +// interface then interface var i2 = (function () { function i2() { } diff --git a/tests/baselines/reference/augmentedTypesModules.js b/tests/baselines/reference/augmentedTypesModules.js index 481db22b83e..5085b1cbda3 100644 --- a/tests/baselines/reference/augmentedTypesModules.js +++ b/tests/baselines/reference/augmentedTypesModules.js @@ -98,7 +98,7 @@ module m6 { export var y = 2; } //// [augmentedTypesModules.js] -var m1 = 1; +var m1 = 1; // Should be allowed var m1a; (function (m1a) { var y = 2; @@ -109,7 +109,7 @@ var m1b; m1b.y = 2; })(m1b || (m1b = {})); var m1b = 1; -var m1c = 1; +var m1c = 1; // Should be allowed var m1d; (function (m1d) { var I = (function () { @@ -121,7 +121,7 @@ var m1d; })(); m1d.I = I; })(m1d || (m1d = {})); -var m1d = 1; +var m1d = 1; // error function m2() { } ; @@ -139,6 +139,7 @@ var m2b; function m2b() { } ; +// should be errors to have function first function m2c() { } ; @@ -167,7 +168,7 @@ var m3 = (function () { function m3() { } return m3; -})(); +})(); // ok since the module is not instantiated var m3a; (function (m3a) { var y = 2; @@ -178,7 +179,7 @@ var m3a = (function () { m3a.prototype.foo = function () { }; return m3a; -})(); +})(); // error, class isn't ambient or declared before the module var m3b = (function () { function m3b() { } @@ -257,10 +258,12 @@ var m4d; (function (m4d) { m4d[m4d["One"] = 0] = "One"; })(m4d || (m4d = {})); +//// module then module var m5; (function (m5) { m5.y = 2; })(m5 || (m5 = {})); +// module then import var m6; (function (m6) { m6.y = 2; diff --git a/tests/baselines/reference/augmentedTypesModules3.js b/tests/baselines/reference/augmentedTypesModules3.js index b02116035ce..7f5c390ea3a 100644 --- a/tests/baselines/reference/augmentedTypesModules3.js +++ b/tests/baselines/reference/augmentedTypesModules3.js @@ -11,7 +11,7 @@ var m3 = (function () { function m3() { } return m3; -})(); +})(); // ok since the module is not instantiated var m3a; (function (m3a) { var y = 2; @@ -22,4 +22,4 @@ var m3a = (function () { m3a.prototype.foo = function () { }; return m3a; -})(); +})(); // error, class isn't ambient or declared before the module diff --git a/tests/baselines/reference/augmentedTypesModules3b.types b/tests/baselines/reference/augmentedTypesModules3b.types new file mode 100644 index 00000000000..af2c33c65da --- /dev/null +++ b/tests/baselines/reference/augmentedTypesModules3b.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/augmentedTypesModules3b.ts === +class m3b { foo() { } } +>m3b : m3b +>foo : () => void + +module m3b { var y = 2; } +>m3b : typeof m3b +>y : number + +class m3c { foo() { } } +>m3c : m3c +>foo : () => void + +module m3c { export var y = 2; } +>m3c : typeof m3c +>y : number + +declare class m3d { foo(): void } +>m3d : m3d +>foo : () => void + +module m3d { export var y = 2; } +>m3d : typeof m3d +>y : number + +module m3e { export var y = 2; } +>m3e : typeof m3e +>y : number + +declare class m3e { foo(): void } +>m3e : m3e +>foo : () => void + +declare class m3f { foo(): void } +>m3f : m3f +>foo : () => void + +module m3f { export interface I { foo(): void } } +>m3f : typeof m3f +>I : I +>foo : () => void + +declare class m3g { foo(): void } +>m3g : m3g +>foo : () => void + +module m3g { export class C { foo() { } } } +>m3g : typeof m3g +>C : C +>foo : () => void + diff --git a/tests/baselines/reference/augmentedTypesModules4.js b/tests/baselines/reference/augmentedTypesModules4.js index 8396d0b7b92..f8407e2e36f 100644 --- a/tests/baselines/reference/augmentedTypesModules4.js +++ b/tests/baselines/reference/augmentedTypesModules4.js @@ -60,6 +60,7 @@ var m4d; (function (m4d) { m4d[m4d["One"] = 0] = "One"; })(m4d || (m4d = {})); +//// module then module var m5; (function (m5) { m5.y = 2; diff --git a/tests/baselines/reference/augmentedTypesModules4.types b/tests/baselines/reference/augmentedTypesModules4.types new file mode 100644 index 00000000000..bf8922a5761 --- /dev/null +++ b/tests/baselines/reference/augmentedTypesModules4.types @@ -0,0 +1,54 @@ +=== tests/cases/compiler/augmentedTypesModules4.ts === +// module then enum +// should be errors +module m4 { } +>m4 : typeof m4 + +enum m4 { } +>m4 : m4 + +module m4a { var y = 2; } +>m4a : typeof m4a +>y : number + +enum m4a { One } +>m4a : m4a +>One : m4a + +module m4b { export var y = 2; } +>m4b : typeof m4b +>y : number + +enum m4b { One } +>m4b : m4b +>One : m4b + +module m4c { interface I { foo(): void } } +>m4c : typeof m4c +>I : I +>foo : () => void + +enum m4c { One } +>m4c : m4c +>One : m4c + +module m4d { class C { foo() { } } } +>m4d : typeof m4d +>C : C +>foo : () => void + +enum m4d { One } +>m4d : m4d +>One : m4d + +//// module then module + +module m5 { export var y = 2; } +>m5 : typeof m5 +>y : number + +module m5 { export interface I { foo(): void } } // should already be reasonably well covered +>m5 : typeof m5 +>I : I +>foo : () => void + diff --git a/tests/baselines/reference/augmentedTypesVar.js b/tests/baselines/reference/augmentedTypesVar.js index 65219d2d2e5..ca50b8ab9a9 100644 --- a/tests/baselines/reference/augmentedTypesVar.js +++ b/tests/baselines/reference/augmentedTypesVar.js @@ -37,20 +37,23 @@ module x6b { export var y = 2; } // error //// [augmentedTypesVar.js] +// var then var var x1 = 1; var x1 = 2; +// var then function var x2 = 1; function x2() { -} +} // should be an error var x3 = 1; var x3 = function () { -}; +}; // should be an error +// var then class var x4 = 1; var x4 = (function () { function x4() { } return x4; -})(); +})(); // error var x4a = 1; var x4a = (function () { function x4a() { @@ -58,20 +61,22 @@ var x4a = (function () { x4a.prototype.foo = function () { }; return x4a; -})(); +})(); // error +// var then enum var x5 = 1; var x5; (function (x5) { x5[x5["One"] = 0] = "One"; -})(x5 || (x5 = {})); +})(x5 || (x5 = {})); // error +// var then module var x6 = 1; var x6a = 1; var x6a; (function (x6a) { var y = 2; -})(x6a || (x6a = {})); +})(x6a || (x6a = {})); // error since instantiated var x6b = 1; var x6b; (function (x6b) { x6b.y = 2; -})(x6b || (x6b = {})); +})(x6b || (x6b = {})); // error diff --git a/tests/baselines/reference/autoAsiForStaticsInClassDeclaration.types b/tests/baselines/reference/autoAsiForStaticsInClassDeclaration.types new file mode 100644 index 00000000000..d902f0b3eaa --- /dev/null +++ b/tests/baselines/reference/autoAsiForStaticsInClassDeclaration.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/autoAsiForStaticsInClassDeclaration.ts === +class C { +>C : C + + static x +>x : any + + static y +>y : any +} diff --git a/tests/baselines/reference/autonumberingInEnums.js b/tests/baselines/reference/autonumberingInEnums.js index 2d0bdc0282d..e6bf29bda8f 100644 --- a/tests/baselines/reference/autonumberingInEnums.js +++ b/tests/baselines/reference/autonumberingInEnums.js @@ -14,5 +14,5 @@ var Foo; })(Foo || (Foo = {})); var Foo; (function (Foo) { - Foo[Foo["b"] = 0] = "b"; + Foo[Foo["b"] = 0] = "b"; // should work fine })(Foo || (Foo = {})); diff --git a/tests/baselines/reference/autonumberingInEnums.types b/tests/baselines/reference/autonumberingInEnums.types new file mode 100644 index 00000000000..ce3366390e8 --- /dev/null +++ b/tests/baselines/reference/autonumberingInEnums.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/autonumberingInEnums.ts === +enum Foo { +>Foo : Foo + + a = 1 +>a : Foo +} + +enum Foo { +>Foo : Foo + + b // should work fine +>b : Foo +} diff --git a/tests/baselines/reference/avoid.js b/tests/baselines/reference/avoid.js index 45f4d52a7bc..ad10d2ac9bc 100644 --- a/tests/baselines/reference/avoid.js +++ b/tests/baselines/reference/avoid.js @@ -23,10 +23,10 @@ var N=new f(); // ok with void fn function f() { var x = 1; } -var y = f(); -var why = f(); +var y = f(); // error void fn +var why = f(); // error void fn var w; -w = f(); +w = f(); // error void fn var C = (function () { function C() { } @@ -34,5 +34,5 @@ var C = (function () { }; return C; })(); -var z = new C().g(); -var N = new f(); +var z = new C().g(); // error void fn +var N = new f(); // ok with void fn diff --git a/tests/baselines/reference/avoid.types b/tests/baselines/reference/avoid.types new file mode 100644 index 00000000000..853d93bdd79 --- /dev/null +++ b/tests/baselines/reference/avoid.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/avoid.ts === +function f() { +>f : () => void + + var x=1; +>x : number +} + +var y=f(); // error void fn +>y : void +>f() : void +>f : () => void + +var why:any=f(); // error void fn +>why : any +>f() : void +>f : () => void + +var w:any; +>w : any + +w=f(); // error void fn +>w=f() : void +>w : any +>f() : void +>f : () => void + +class C { +>C : C + + g() { +>g : () => void + + } +} + +var z=new C().g(); // error void fn +>z : void +>new C().g() : void +>new C().g : () => void +>new C() : C +>C : typeof C +>g : () => void + +var N=new f(); // ok with void fn +>N : any +>new f() : any +>f : () => void + + diff --git a/tests/baselines/reference/badOverloadError.types b/tests/baselines/reference/badOverloadError.types new file mode 100644 index 00000000000..837eb5c5c83 --- /dev/null +++ b/tests/baselines/reference/badOverloadError.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/badOverloadError.ts === +function method() { +>method : () => void + + var dictionary = <{ [index: string]: string; }>{}; +>dictionary : { [x: string]: string; } +><{ [index: string]: string; }>{} : { [x: string]: string; } +>index : string +>{} : { [x: string]: string; } +} + diff --git a/tests/baselines/reference/badThisBinding.types b/tests/baselines/reference/badThisBinding.types new file mode 100644 index 00000000000..a6b1c478d53 --- /dev/null +++ b/tests/baselines/reference/badThisBinding.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/badThisBinding.ts === +declare function foo(a:any): any; +>foo : (a: any) => any +>a : any + +declare function bar(a:any): any; +>bar : (a: any) => any +>a : any + +class Greeter { +>Greeter : Greeter + + constructor() { + foo(() => { +>foo(() => { bar(() => { var x = this; }); }) : any +>foo : (a: any) => any +>() => { bar(() => { var x = this; }); } : () => void + + bar(() => { +>bar(() => { var x = this; }) : any +>bar : (a: any) => any +>() => { var x = this; } : () => void + + var x = this; +>x : Greeter +>this : Greeter + + }); + }); + } + +} diff --git a/tests/baselines/reference/baseCheck.js b/tests/baselines/reference/baseCheck.js index 39eb8a312c9..2ebefcbade2 100644 --- a/tests/baselines/reference/baseCheck.js +++ b/tests/baselines/reference/baseCheck.js @@ -65,7 +65,7 @@ var D = (function (_super) { this.z = z; } return D; -})(C); +})(C); // too few params var E = (function (_super) { __extends(E, _super); function E(z) { @@ -81,7 +81,7 @@ var F = (function (_super) { this.z = z; } return F; -})(C); +})(C); // first param type function f() { if (x < 10) { x = 11; diff --git a/tests/baselines/reference/baseIndexSignatureResolution.types b/tests/baselines/reference/baseIndexSignatureResolution.types new file mode 100644 index 00000000000..5a7ad14d2fa --- /dev/null +++ b/tests/baselines/reference/baseIndexSignatureResolution.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/baseIndexSignatureResolution.ts === +class Base { private a: string; } +>Base : Base +>a : string + +class Derived extends Base { private b: string; } +>Derived : Derived +>Base : Base +>b : string + +// Note - commmenting "extends Foo" prevents the error +interface Foo { +>Foo : Foo + + [i: number]: Base; +>i : number +>Base : Base +} +interface FooOf extends Foo { +>FooOf : FooOf +>TBase : TBase +>Base : Base +>Foo : Foo + + [i: number]: TBase; +>i : number +>TBase : TBase +} +var x: FooOf = null; +>x : FooOf +>FooOf : FooOf +>Derived : Derived + +var y: Derived = x[0]; +>y : Derived +>Derived : Derived +>x[0] : Derived +>x : FooOf + +/* +// 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/baseTypeAfterDerivedType.types b/tests/baselines/reference/baseTypeAfterDerivedType.types new file mode 100644 index 00000000000..2ac50aa019a --- /dev/null +++ b/tests/baselines/reference/baseTypeAfterDerivedType.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/baseTypeAfterDerivedType.ts === +interface Derived extends Base { +>Derived : Derived +>Base : Base + + method(...args: any[]): void; +>method : (...args: any[]) => void +>args : any[] +} + +interface Base { +>Base : Base + + method(...args: any[]): void; +>method : (...args: any[]) => void +>args : any[] +} + +class Derived2 implements Base2 { +>Derived2 : Derived2 +>Base2 : Base2 + + method(...args: any[]): void { } +>method : (...args: any[]) => void +>args : any[] +} + +interface Base2 { +>Base2 : Base2 + + method(...args: any[]): void; +>method : (...args: any[]) => void +>args : any[] +} + diff --git a/tests/baselines/reference/baseTypeOrderChecking.types b/tests/baselines/reference/baseTypeOrderChecking.types new file mode 100644 index 00000000000..4193f255f36 --- /dev/null +++ b/tests/baselines/reference/baseTypeOrderChecking.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/baseTypeOrderChecking.ts === +var someVariable: Class4; +>someVariable : Class4 +>Class4 : Class4 +>Class2 : Class2 + + + +class Class1 +>Class1 : Class1 + +{ + +} + + + +class Class2 extends Class1 +>Class2 : Class2 +>Class1 : Class1 + +{ + +} + + + +class Class3 +>Class3 : Class3 +>T : T + +{ + + public memberVariable: Class2; +>memberVariable : Class2 +>Class2 : Class2 + +} + + + +class Class4 extends Class3 +>Class4 : Class4 +>T : T +>Class3 : Class3 +>T : T + +{ + +} + diff --git a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.js b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.js index 01af9d529ac..69fe778c047 100644 --- a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.js +++ b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.js @@ -27,6 +27,8 @@ function foo5(t: T, u: U): Object { } //// [bestCommonTypeOfConditionalExpressions.js] +// conditional expressions return the best common type of the branches plus contextual type (using the first candidate if multiple BCTs exist) +// no errors expected here var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -59,19 +61,19 @@ var derived; var derived2; var r = true ? 1 : 2; var r3 = true ? 1 : {}; -var r4 = true ? a : b; -var r5 = true ? b : a; +var r4 = true ? a : b; // typeof a +var r5 = true ? b : a; // typeof b var r6 = true ? function (x) { } : function (x) { -}; +}; // returns number => void var r7 = true ? function (x) { } : function (x) { }; var r8 = true ? function (x) { } : function (x) { -}; -var r10 = true ? derived : derived2; +}; // returns Object => void +var r10 = true ? derived : derived2; // no error since we use the contextual type in BCT var r11 = true ? base : derived2; function foo5(t, u) { - return true ? t : u; + return true ? t : u; // BCT is Object } diff --git a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types new file mode 100644 index 00000000000..3deeae69bbe --- /dev/null +++ b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types @@ -0,0 +1,118 @@ +=== tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions.ts === +// conditional expressions return the best common type of the branches plus contextual type (using the first candidate if multiple BCTs exist) +// no errors expected here + +var a: { x: number; y?: number }; +>a : { x: number; y?: number; } +>x : number +>y : number + +var b: { x: number; z?: number }; +>b : { x: number; z?: number; } +>x : number +>z : number + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Base { baz: string; } +>Derived2 : Derived2 +>Base : Base +>baz : string + +var base: Base; +>base : Base +>Base : Base + +var derived: Derived; +>derived : Derived +>Derived : Derived + +var derived2: Derived2; +>derived2 : Derived2 +>Derived2 : Derived2 + +var r = true ? 1 : 2; +>r : number +>true ? 1 : 2 : number + +var r3 = true ? 1 : {}; +>r3 : {} +>true ? 1 : {} : {} +>{} : {} + +var r4 = true ? a : b; // typeof a +>r4 : { x: number; y?: number; } +>true ? a : b : { x: number; y?: number; } +>a : { x: number; y?: number; } +>b : { x: number; z?: number; } + +var r5 = true ? b : a; // typeof b +>r5 : { x: number; z?: number; } +>true ? b : a : { x: number; z?: number; } +>b : { x: number; z?: number; } +>a : { x: number; y?: number; } + +var r6 = true ? (x: number) => { } : (x: Object) => { }; // returns number => void +>r6 : (x: number) => void +>true ? (x: number) => { } : (x: Object) => { } : (x: number) => void +>(x: number) => { } : (x: number) => void +>x : number +>(x: Object) => { } : (x: Object) => void +>x : Object +>Object : Object + +var r7: (x: Object) => void = true ? (x: number) => { } : (x: Object) => { }; +>r7 : (x: Object) => void +>x : Object +>Object : Object +>true ? (x: number) => { } : (x: Object) => { } : (x: Object) => void +>(x: number) => { } : (x: number) => void +>x : number +>(x: Object) => { } : (x: Object) => void +>x : Object +>Object : Object + +var r8 = true ? (x: Object) => { } : (x: number) => { }; // returns Object => void +>r8 : (x: Object) => void +>true ? (x: Object) => { } : (x: number) => { } : (x: Object) => void +>(x: Object) => { } : (x: Object) => void +>x : Object +>Object : Object +>(x: number) => { } : (x: number) => void +>x : number + +var r10: Base = true ? derived : derived2; // no error since we use the contextual type in BCT +>r10 : Base +>Base : Base +>true ? derived : derived2 : Base +>derived : Derived +>derived2 : Derived2 + +var r11 = true ? base : derived2; +>r11 : Base +>true ? base : derived2 : Base +>base : Base +>derived2 : Derived2 + +function foo5(t: T, u: U): Object { +>foo5 : (t: T, u: U) => Object +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U +>Object : Object + + return true ? t : u; // BCT is Object +>true ? t : u : Object +>t : T +>u : U +} diff --git a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions2.js b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions2.js index c205b8a1c1d..49659de94d4 100644 --- a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions2.js +++ b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions2.js @@ -25,6 +25,8 @@ function foo3(t: T, u: U) { } //// [bestCommonTypeOfConditionalExpressions2.js] +// conditional expressions return the best common type of the branches plus contextual type (using the first candidate if multiple BCTs exist) +// these are errors var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -59,7 +61,7 @@ function foo(t, u) { return true ? t : u; } function foo2(t, u) { - return true ? t : u; + return true ? t : u; // Ok because BCT(T, U) = U } function foo3(t, u) { return true ? t : u; diff --git a/tests/baselines/reference/bestCommonTypeReturnStatement.types b/tests/baselines/reference/bestCommonTypeReturnStatement.types new file mode 100644 index 00000000000..3c260ea709b --- /dev/null +++ b/tests/baselines/reference/bestCommonTypeReturnStatement.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/bestCommonTypeReturnStatement.ts === +interface IPromise { +>IPromise : IPromise +>T : T + + then(successCallback: (promiseValue: T) => any, errorCallback?: (reason: any) => any): IPromise; +>then : (successCallback: (promiseValue: T) => any, errorCallback?: (reason: any) => any) => IPromise +>successCallback : (promiseValue: T) => any +>promiseValue : T +>T : T +>errorCallback : (reason: any) => any +>reason : any +>IPromise : IPromise +} + +function f() { +>f : () => IPromise + + if (true) return b(); +>b() : IPromise +>b : () => IPromise + + return d(); +>d() : IPromise +>d : () => IPromise +} + + +function b(): IPromise { return null; } +>b : () => IPromise +>IPromise : IPromise + +function d(): IPromise { return null; } +>d : () => IPromise +>IPromise : IPromise + diff --git a/tests/baselines/reference/bestCommonTypeWithContextualTyping.js b/tests/baselines/reference/bestCommonTypeWithContextualTyping.js index 00814d65526..c45ae88458f 100644 --- a/tests/baselines/reference/bestCommonTypeWithContextualTyping.js +++ b/tests/baselines/reference/bestCommonTypeWithContextualTyping.js @@ -22,7 +22,10 @@ var contextualOr: Contextual = e || e; // Ellement //// [bestCommonTypeWithContextualTyping.js] var e; -var arr = [e]; -var obj = { s: e }; -var conditional = null ? e : e; -var contextualOr = e || e; +// All of these should pass. Neither type is a supertype of the other, but the RHS should +// always use Ellement in these examples (not Contextual). Because Ellement is assignable +// to Contextual, no errors. +var arr = [e]; // Ellement[] +var obj = { s: e }; // { s: Ellement; [s: string]: Ellement } +var conditional = null ? e : e; // Ellement +var contextualOr = e || e; // Ellement diff --git a/tests/baselines/reference/bestCommonTypeWithContextualTyping.types b/tests/baselines/reference/bestCommonTypeWithContextualTyping.types new file mode 100644 index 00000000000..937339d8cbf --- /dev/null +++ b/tests/baselines/reference/bestCommonTypeWithContextualTyping.types @@ -0,0 +1,56 @@ +=== tests/cases/compiler/bestCommonTypeWithContextualTyping.ts === +interface Contextual { +>Contextual : Contextual + + dummy; +>dummy : any + + p?: number; +>p : number +} + +interface Ellement { +>Ellement : Ellement + + dummy; +>dummy : any + + p: any; +>p : any +} + +var e: Ellement; +>e : Ellement +>Ellement : Ellement + +// All of these should pass. Neither type is a supertype of the other, but the RHS should +// always use Ellement in these examples (not Contextual). Because Ellement is assignable +// to Contextual, no errors. +var arr: Contextual[] = [e]; // Ellement[] +>arr : Contextual[] +>Contextual : Contextual +>[e] : Ellement[] +>e : Ellement + +var obj: { [s: string]: Contextual } = { s: e }; // { s: Ellement; [s: string]: Ellement } +>obj : { [x: string]: Contextual; } +>s : string +>Contextual : Contextual +>{ s: e } : { [x: string]: Ellement; s: Ellement; } +>s : Ellement +>e : Ellement + +var conditional: Contextual = null ? e : e; // Ellement +>conditional : Contextual +>Contextual : Contextual +>null ? e : e : Ellement +>e : Ellement +>e : Ellement + +var contextualOr: Contextual = e || e; // Ellement +>contextualOr : Contextual +>Contextual : Contextual +>e || e : Ellement +>e : Ellement +>e : Ellement + diff --git a/tests/baselines/reference/bestCommonTypeWithOptionalProperties.js b/tests/baselines/reference/bestCommonTypeWithOptionalProperties.js index ed994ebf789..25622c3d4f3 100644 --- a/tests/baselines/reference/bestCommonTypeWithOptionalProperties.js +++ b/tests/baselines/reference/bestCommonTypeWithOptionalProperties.js @@ -19,6 +19,7 @@ var b6 = [z, y, x]; var x; var y; var z; +// All these arrays should be X[] var b1 = [x, y, z]; var b2 = [x, z, y]; var b3 = [y, x, z]; diff --git a/tests/baselines/reference/bestCommonTypeWithOptionalProperties.types b/tests/baselines/reference/bestCommonTypeWithOptionalProperties.types new file mode 100644 index 00000000000..df40291b0e5 --- /dev/null +++ b/tests/baselines/reference/bestCommonTypeWithOptionalProperties.types @@ -0,0 +1,70 @@ +=== tests/cases/compiler/bestCommonTypeWithOptionalProperties.ts === +interface X { foo: string } +>X : X +>foo : string + +interface Y extends X { bar?: number } +>Y : Y +>X : X +>bar : number + +interface Z extends X { bar: string } +>Z : Z +>X : X +>bar : string + +var x: X; +>x : X +>X : X + +var y: Y; +>y : Y +>Y : Y + +var z: Z; +>z : Z +>Z : Z + +// All these arrays should be X[] +var b1 = [x, y, z]; +>b1 : X[] +>[x, y, z] : X[] +>x : X +>y : Y +>z : Z + +var b2 = [x, z, y]; +>b2 : X[] +>[x, z, y] : X[] +>x : X +>z : Z +>y : Y + +var b3 = [y, x, z]; +>b3 : X[] +>[y, x, z] : X[] +>y : Y +>x : X +>z : Z + +var b4 = [y, z, x]; +>b4 : X[] +>[y, z, x] : X[] +>y : Y +>z : Z +>x : X + +var b5 = [z, x, y]; +>b5 : X[] +>[z, x, y] : X[] +>z : Z +>x : X +>y : Y + +var b6 = [z, y, x]; +>b6 : X[] +>[z, y, x] : X[] +>z : Z +>y : Y +>x : X + diff --git a/tests/baselines/reference/binaryArithmatic1.types b/tests/baselines/reference/binaryArithmatic1.types new file mode 100644 index 00000000000..2aec9528116 --- /dev/null +++ b/tests/baselines/reference/binaryArithmatic1.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/binaryArithmatic1.ts === +var v = 4 | null; +>v : number +>4 | null : number + diff --git a/tests/baselines/reference/binaryArithmatic2.types b/tests/baselines/reference/binaryArithmatic2.types new file mode 100644 index 00000000000..9fe3350fc24 --- /dev/null +++ b/tests/baselines/reference/binaryArithmatic2.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/binaryArithmatic2.ts === +var v = 4 | undefined; +>v : number +>4 | undefined : number +>undefined : undefined + diff --git a/tests/baselines/reference/bind1.js b/tests/baselines/reference/bind1.js index 2aa31265797..5027e8a03e0 100644 --- a/tests/baselines/reference/bind1.js +++ b/tests/baselines/reference/bind1.js @@ -13,5 +13,5 @@ var M; } return C; })(); - M.C = C; + M.C = C; // this should be an unresolved symbol I error })(M || (M = {})); diff --git a/tests/baselines/reference/bind2.types b/tests/baselines/reference/bind2.types new file mode 100644 index 00000000000..f51d09abcdd --- /dev/null +++ b/tests/baselines/reference/bind2.types @@ -0,0 +1,3 @@ +=== tests/cases/compiler/bind2.ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/binopAssignmentShouldHaveType.types b/tests/baselines/reference/binopAssignmentShouldHaveType.types new file mode 100644 index 00000000000..cf6966147bc --- /dev/null +++ b/tests/baselines/reference/binopAssignmentShouldHaveType.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/binopAssignmentShouldHaveType.ts === +declare var console; +>console : any + +"use strict"; +module Test { +>Test : typeof Test + + export class Bug { +>Bug : Bug + + getName():string { +>getName : () => string + + return "name"; + } + bug() { +>bug : () => void + + var name:string= null; +>name : string + + if ((name= this.getName()).length > 0) { +>(name= this.getName()).length > 0 : boolean +>(name= this.getName()).length : number +>(name= this.getName()) : string +>name= this.getName() : string +>name : string +>this.getName() : string +>this.getName : () => string +>this : Bug +>getName : () => string +>length : number + + console.log(name); +>console.log(name) : any +>console.log : any +>console : any +>log : any +>name : string + } + } + } +} + + + + diff --git a/tests/baselines/reference/bitwiseNotOperatorWithAnyOtherType.js b/tests/baselines/reference/bitwiseNotOperatorWithAnyOtherType.js index b4995f23050..dafacc5cc50 100644 --- a/tests/baselines/reference/bitwiseNotOperatorWithAnyOtherType.js +++ b/tests/baselines/reference/bitwiseNotOperatorWithAnyOtherType.js @@ -63,6 +63,7 @@ var ResultIsNumber20 = ~~~(ANY + ANY1); ~~obj1.x; //// [bitwiseNotOperatorWithAnyOtherType.js] +// ~ operator on any type var ANY; var ANY1; var ANY2 = ["", ""]; @@ -87,14 +88,17 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// any other type var var ResultIsNumber = ~ANY1; var ResultIsNumber1 = ~ANY2; var ResultIsNumber2 = ~A; var ResultIsNumber3 = ~M; var ResultIsNumber4 = ~obj; var ResultIsNumber5 = ~obj1; +// any type literal var ResultIsNumber6 = ~undefined; var ResultIsNumber7 = ~null; +// any type expressions var ResultIsNumber8 = ~ANY2[0]; var ResultIsNumber9 = ~obj1.x; var ResultIsNumber10 = ~obj1.y; @@ -106,8 +110,10 @@ var ResultIsNumber15 = ~(ANY + ANY1); var ResultIsNumber16 = ~(null + undefined); var ResultIsNumber17 = ~(null + null); var ResultIsNumber18 = ~(undefined + undefined); +// multiple ~ operators var ResultIsNumber19 = ~~ANY; var ResultIsNumber20 = ~~~(ANY + ANY1); +//miss assignment operators ~ANY; ~ANY1; ~ANY2[0]; diff --git a/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.js b/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.js index 303be601a8b..9416e7b1a06 100644 --- a/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.js +++ b/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.js @@ -39,6 +39,7 @@ var ResultIsNumber8 = ~~BOOLEAN; ~M.n; //// [bitwiseNotOperatorWithBooleanType.js] +// ~ operator on boolean type var BOOLEAN; function foo() { return true; @@ -56,14 +57,19 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// boolean type var var ResultIsNumber1 = ~BOOLEAN; +// boolean type literal var ResultIsNumber2 = ~true; var ResultIsNumber3 = ~{ x: true, y: false }; +// boolean type expressions var ResultIsNumber4 = ~objA.a; var ResultIsNumber5 = ~M.n; var ResultIsNumber6 = ~foo(); var ResultIsNumber7 = ~A.foo(); +// multiple ~ operators var ResultIsNumber8 = ~~BOOLEAN; +// miss assignment operators ~true; ~BOOLEAN; ~foo(); diff --git a/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.types b/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.types new file mode 100644 index 00000000000..ce870dbc818 --- /dev/null +++ b/tests/baselines/reference/bitwiseNotOperatorWithBooleanType.types @@ -0,0 +1,112 @@ +=== tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithBooleanType.ts === +// ~ operator on boolean type +var BOOLEAN: boolean; +>BOOLEAN : boolean + +function foo(): boolean { return true; } +>foo : () => boolean + +class A { +>A : A + + public a: boolean; +>a : boolean + + static foo() { return false; } +>foo : () => boolean +} +module M { +>M : typeof M + + export var n: boolean; +>n : boolean +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// boolean type var +var ResultIsNumber1 = ~BOOLEAN; +>ResultIsNumber1 : number +>~BOOLEAN : number +>BOOLEAN : boolean + +// boolean type literal +var ResultIsNumber2 = ~true; +>ResultIsNumber2 : number +>~true : number + +var ResultIsNumber3 = ~{ x: true, y: false }; +>ResultIsNumber3 : number +>~{ x: true, y: false } : number +>{ x: true, y: false } : { x: boolean; y: boolean; } +>x : boolean +>y : boolean + +// boolean type expressions +var ResultIsNumber4 = ~objA.a; +>ResultIsNumber4 : number +>~objA.a : number +>objA.a : boolean +>objA : A +>a : boolean + +var ResultIsNumber5 = ~M.n; +>ResultIsNumber5 : number +>~M.n : number +>M.n : boolean +>M : typeof M +>n : boolean + +var ResultIsNumber6 = ~foo(); +>ResultIsNumber6 : number +>~foo() : number +>foo() : boolean +>foo : () => boolean + +var ResultIsNumber7 = ~A.foo(); +>ResultIsNumber7 : number +>~A.foo() : number +>A.foo() : boolean +>A.foo : () => boolean +>A : typeof A +>foo : () => boolean + +// multiple ~ operators +var ResultIsNumber8 = ~~BOOLEAN; +>ResultIsNumber8 : number +>~~BOOLEAN : number +>~BOOLEAN : number +>BOOLEAN : boolean + +// miss assignment operators +~true; +>~true : number + +~BOOLEAN; +>~BOOLEAN : number +>BOOLEAN : boolean + +~foo(); +>~foo() : number +>foo() : boolean +>foo : () => boolean + +~true, false; +>~true, false : boolean +>~true : number + +~objA.a; +>~objA.a : number +>objA.a : boolean +>objA : A +>a : boolean + +~M.n; +>~M.n : number +>M.n : boolean +>M : typeof M +>n : boolean + diff --git a/tests/baselines/reference/bitwiseNotOperatorWithEnumType.js b/tests/baselines/reference/bitwiseNotOperatorWithEnumType.js index 71568eefcec..e38520ef71a 100644 --- a/tests/baselines/reference/bitwiseNotOperatorWithEnumType.js +++ b/tests/baselines/reference/bitwiseNotOperatorWithEnumType.js @@ -19,6 +19,7 @@ var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]); ~ENUM1[1], ~ENUM1[2]; //// [bitwiseNotOperatorWithEnumType.js] +// ~ operator on enum type var ENUM1; (function (ENUM1) { ENUM1[ENUM1["1"] = 0] = "1"; @@ -26,10 +27,14 @@ var ENUM1; ENUM1[ENUM1[""] = 2] = ""; })(ENUM1 || (ENUM1 = {})); ; +// enum type var var ResultIsNumber1 = ~ENUM1; +// enum type expressions var ResultIsNumber2 = ~ENUM1[1]; var ResultIsNumber3 = ~(ENUM1[1] + ENUM1[2]); +// multiple ~ operators var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]); +// miss assignment operators ~ENUM1; ~ENUM1[1]; ~ENUM1[1], ~ENUM1[2]; diff --git a/tests/baselines/reference/bitwiseNotOperatorWithEnumType.types b/tests/baselines/reference/bitwiseNotOperatorWithEnumType.types new file mode 100644 index 00000000000..077b8fdd4d6 --- /dev/null +++ b/tests/baselines/reference/bitwiseNotOperatorWithEnumType.types @@ -0,0 +1,61 @@ +=== tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithEnumType.ts === +// ~ operator on enum type + +enum ENUM1 { 1, 2, "" }; +>ENUM1 : ENUM1 + +// enum type var +var ResultIsNumber1 = ~ENUM1; +>ResultIsNumber1 : number +>~ENUM1 : number +>ENUM1 : typeof ENUM1 + +// enum type expressions +var ResultIsNumber2 = ~ENUM1[1]; +>ResultIsNumber2 : number +>~ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +var ResultIsNumber3 = ~(ENUM1[1] + ENUM1[2]); +>ResultIsNumber3 : number +>~(ENUM1[1] + ENUM1[2]) : number +>(ENUM1[1] + ENUM1[2]) : number +>ENUM1[1] + ENUM1[2] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 +>ENUM1[2] : ENUM1 +>ENUM1 : typeof ENUM1 + +// multiple ~ operators +var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]); +>ResultIsNumber4 : number +>~~~(ENUM1[1] + ENUM1[2]) : number +>~~(ENUM1[1] + ENUM1[2]) : number +>~(ENUM1[1] + ENUM1[2]) : number +>(ENUM1[1] + ENUM1[2]) : number +>ENUM1[1] + ENUM1[2] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 +>ENUM1[2] : ENUM1 +>ENUM1 : typeof ENUM1 + +// miss assignment operators +~ENUM1; +>~ENUM1 : number +>ENUM1 : typeof ENUM1 + +~ENUM1[1]; +>~ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +~ENUM1[1], ~ENUM1[2]; +>~ENUM1[1], ~ENUM1[2] : number +>~ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 +>~ENUM1[2] : number +>ENUM1[2] : ENUM1 +>ENUM1 : typeof ENUM1 + diff --git a/tests/baselines/reference/bitwiseNotOperatorWithNumberType.js b/tests/baselines/reference/bitwiseNotOperatorWithNumberType.js index d1684a65eaf..2f9703ae669 100644 --- a/tests/baselines/reference/bitwiseNotOperatorWithNumberType.js +++ b/tests/baselines/reference/bitwiseNotOperatorWithNumberType.js @@ -45,6 +45,7 @@ var ResultIsNumber13 = ~~~(NUMBER + NUMBER); ~objA.a, M.n; //// [bitwiseNotOperatorWithNumberType.js] +// ~ operator on number type var NUMBER; var NUMBER1 = [1, 2]; function foo() { @@ -63,21 +64,26 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// number type var var ResultIsNumber1 = ~NUMBER; var ResultIsNumber2 = ~NUMBER1; +// number type literal var ResultIsNumber3 = ~1; var ResultIsNumber4 = ~{ x: 1, y: 2 }; var ResultIsNumber5 = ~{ x: 1, y: function (n) { return n; } }; +// number type expressions var ResultIsNumber6 = ~objA.a; var ResultIsNumber7 = ~M.n; var ResultIsNumber8 = ~NUMBER1[0]; var ResultIsNumber9 = ~foo(); var ResultIsNumber10 = ~A.foo(); var ResultIsNumber11 = ~(NUMBER + NUMBER); +// multiple ~ operators var ResultIsNumber12 = ~~NUMBER; var ResultIsNumber13 = ~~~(NUMBER + NUMBER); +// miss assignment operators ~NUMBER; ~NUMBER1; ~foo(); diff --git a/tests/baselines/reference/bitwiseNotOperatorWithNumberType.types b/tests/baselines/reference/bitwiseNotOperatorWithNumberType.types new file mode 100644 index 00000000000..94207a56343 --- /dev/null +++ b/tests/baselines/reference/bitwiseNotOperatorWithNumberType.types @@ -0,0 +1,162 @@ +=== tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithNumberType.ts === +// ~ operator on number type +var NUMBER: number; +>NUMBER : number + +var NUMBER1: number[] = [1, 2]; +>NUMBER1 : number[] +>[1, 2] : number[] + +function foo(): number { return 1; } +>foo : () => number + +class A { +>A : A + + public a: number; +>a : number + + static foo() { return 1; } +>foo : () => number +} +module M { +>M : typeof M + + export var n: number; +>n : number +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// number type var +var ResultIsNumber1 = ~NUMBER; +>ResultIsNumber1 : number +>~NUMBER : number +>NUMBER : number + +var ResultIsNumber2 = ~NUMBER1; +>ResultIsNumber2 : number +>~NUMBER1 : number +>NUMBER1 : number[] + +// number type literal +var ResultIsNumber3 = ~1; +>ResultIsNumber3 : number +>~1 : number + +var ResultIsNumber4 = ~{ x: 1, y: 2}; +>ResultIsNumber4 : number +>~{ x: 1, y: 2} : number +>{ x: 1, y: 2} : { x: number; y: number; } +>x : number +>y : number + +var ResultIsNumber5 = ~{ x: 1, y: (n: number) => { return n; } }; +>ResultIsNumber5 : number +>~{ x: 1, y: (n: number) => { return n; } } : number +>{ x: 1, y: (n: number) => { return n; } } : { x: number; y: (n: number) => number; } +>x : number +>y : (n: number) => number +>(n: number) => { return n; } : (n: number) => number +>n : number +>n : number + +// number type expressions +var ResultIsNumber6 = ~objA.a; +>ResultIsNumber6 : number +>~objA.a : number +>objA.a : number +>objA : A +>a : number + +var ResultIsNumber7 = ~M.n; +>ResultIsNumber7 : number +>~M.n : number +>M.n : number +>M : typeof M +>n : number + +var ResultIsNumber8 = ~NUMBER1[0]; +>ResultIsNumber8 : number +>~NUMBER1[0] : number +>NUMBER1[0] : number +>NUMBER1 : number[] + +var ResultIsNumber9 = ~foo(); +>ResultIsNumber9 : number +>~foo() : number +>foo() : number +>foo : () => number + +var ResultIsNumber10 = ~A.foo(); +>ResultIsNumber10 : number +>~A.foo() : number +>A.foo() : number +>A.foo : () => number +>A : typeof A +>foo : () => number + +var ResultIsNumber11 = ~(NUMBER + NUMBER); +>ResultIsNumber11 : number +>~(NUMBER + NUMBER) : number +>(NUMBER + NUMBER) : number +>NUMBER + NUMBER : number +>NUMBER : number +>NUMBER : number + +// multiple ~ operators +var ResultIsNumber12 = ~~NUMBER; +>ResultIsNumber12 : number +>~~NUMBER : number +>~NUMBER : number +>NUMBER : number + +var ResultIsNumber13 = ~~~(NUMBER + NUMBER); +>ResultIsNumber13 : number +>~~~(NUMBER + NUMBER) : number +>~~(NUMBER + NUMBER) : number +>~(NUMBER + NUMBER) : number +>(NUMBER + NUMBER) : number +>NUMBER + NUMBER : number +>NUMBER : number +>NUMBER : number + +// miss assignment operators +~NUMBER; +>~NUMBER : number +>NUMBER : number + +~NUMBER1; +>~NUMBER1 : number +>NUMBER1 : number[] + +~foo(); +>~foo() : number +>foo() : number +>foo : () => number + +~objA.a; +>~objA.a : number +>objA.a : number +>objA : A +>a : number + +~M.n; +>~M.n : number +>M.n : number +>M : typeof M +>n : number + +~objA.a, M.n; +>~objA.a, M.n : number +>~objA.a : number +>objA.a : number +>objA : A +>a : number +>M.n : number +>M : typeof M +>n : number + diff --git a/tests/baselines/reference/bitwiseNotOperatorWithStringType.js b/tests/baselines/reference/bitwiseNotOperatorWithStringType.js index 4b18f4dbea5..fbd77c6119a 100644 --- a/tests/baselines/reference/bitwiseNotOperatorWithStringType.js +++ b/tests/baselines/reference/bitwiseNotOperatorWithStringType.js @@ -44,6 +44,7 @@ var ResultIsNumber14 = ~~~(STRING + STRING); ~objA.a,M.n; //// [bitwiseNotOperatorWithStringType.js] +// ~ operator on string type var STRING; var STRING1 = ["", "abc"]; function foo() { @@ -62,13 +63,16 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// string type var var ResultIsNumber1 = ~STRING; var ResultIsNumber2 = ~STRING1; +// string type literal var ResultIsNumber3 = ~""; var ResultIsNumber4 = ~{ x: "", y: "" }; var ResultIsNumber5 = ~{ x: "", y: function (s) { return s; } }; +// string type expressions var ResultIsNumber6 = ~objA.a; var ResultIsNumber7 = ~M.n; var ResultIsNumber8 = ~STRING1[0]; @@ -76,8 +80,10 @@ var ResultIsNumber9 = ~foo(); var ResultIsNumber10 = ~A.foo(); var ResultIsNumber11 = ~(STRING + STRING); var ResultIsNumber12 = ~STRING.charAt(0); +// multiple ~ operators var ResultIsNumber13 = ~~STRING; var ResultIsNumber14 = ~~~(STRING + STRING); +//miss assignment operators ~STRING; ~STRING1; ~foo(); diff --git a/tests/baselines/reference/bitwiseNotOperatorWithStringType.types b/tests/baselines/reference/bitwiseNotOperatorWithStringType.types new file mode 100644 index 00000000000..dbe2f29631e --- /dev/null +++ b/tests/baselines/reference/bitwiseNotOperatorWithStringType.types @@ -0,0 +1,158 @@ +=== tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithStringType.ts === +// ~ operator on string type +var STRING: string; +>STRING : string + +var STRING1: string[] = ["", "abc"]; +>STRING1 : string[] +>["", "abc"] : string[] + +function foo(): string { return "abc"; } +>foo : () => string + +class A { +>A : A + + public a: string; +>a : string + + static foo() { return ""; } +>foo : () => string +} +module M { +>M : typeof M + + export var n: string; +>n : string +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// string type var +var ResultIsNumber1 = ~STRING; +>ResultIsNumber1 : number +>~STRING : number +>STRING : string + +var ResultIsNumber2 = ~STRING1; +>ResultIsNumber2 : number +>~STRING1 : number +>STRING1 : string[] + +// string type literal +var ResultIsNumber3 = ~""; +>ResultIsNumber3 : number +>~"" : number + +var ResultIsNumber4 = ~{ x: "", y: "" }; +>ResultIsNumber4 : number +>~{ x: "", y: "" } : number +>{ x: "", y: "" } : { x: string; y: string; } +>x : string +>y : string + +var ResultIsNumber5 = ~{ x: "", y: (s: string) => { return s; } }; +>ResultIsNumber5 : number +>~{ x: "", y: (s: string) => { return s; } } : number +>{ x: "", y: (s: string) => { return s; } } : { x: string; y: (s: string) => string; } +>x : string +>y : (s: string) => string +>(s: string) => { return s; } : (s: string) => string +>s : string +>s : string + +// string type expressions +var ResultIsNumber6 = ~objA.a; +>ResultIsNumber6 : number +>~objA.a : number +>objA.a : string +>objA : A +>a : string + +var ResultIsNumber7 = ~M.n; +>ResultIsNumber7 : number +>~M.n : number +>M.n : string +>M : typeof M +>n : string + +var ResultIsNumber8 = ~STRING1[0]; +>ResultIsNumber8 : number +>~STRING1[0] : number +>STRING1[0] : string +>STRING1 : string[] + +var ResultIsNumber9 = ~foo(); +>ResultIsNumber9 : number +>~foo() : number +>foo() : string +>foo : () => string + +var ResultIsNumber10 = ~A.foo(); +>ResultIsNumber10 : number +>~A.foo() : number +>A.foo() : string +>A.foo : () => string +>A : typeof A +>foo : () => string + +var ResultIsNumber11 = ~(STRING + STRING); +>ResultIsNumber11 : number +>~(STRING + STRING) : number +>(STRING + STRING) : string +>STRING + STRING : string +>STRING : string +>STRING : string + +var ResultIsNumber12 = ~STRING.charAt(0); +>ResultIsNumber12 : number +>~STRING.charAt(0) : number +>STRING.charAt(0) : string +>STRING.charAt : (pos: number) => string +>STRING : string +>charAt : (pos: number) => string + +// multiple ~ operators +var ResultIsNumber13 = ~~STRING; +>ResultIsNumber13 : number +>~~STRING : number +>~STRING : number +>STRING : string + +var ResultIsNumber14 = ~~~(STRING + STRING); +>ResultIsNumber14 : number +>~~~(STRING + STRING) : number +>~~(STRING + STRING) : number +>~(STRING + STRING) : number +>(STRING + STRING) : string +>STRING + STRING : string +>STRING : string +>STRING : string + +//miss assignment operators +~STRING; +>~STRING : number +>STRING : string + +~STRING1; +>~STRING1 : number +>STRING1 : string[] + +~foo(); +>~foo() : number +>foo() : string +>foo : () => string + +~objA.a,M.n; +>~objA.a,M.n : string +>~objA.a : number +>objA.a : string +>objA : A +>a : string +>M.n : string +>M : typeof M +>n : string + diff --git a/tests/baselines/reference/bom-utf16be.types b/tests/baselines/reference/bom-utf16be.types new file mode 100644 index 00000000000..04c6a5a61bb --- /dev/null +++ b/tests/baselines/reference/bom-utf16be.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/bom-utf16be.ts === +var x=10; +>x : number + diff --git a/tests/baselines/reference/bom-utf16le.types b/tests/baselines/reference/bom-utf16le.types new file mode 100644 index 00000000000..15970945942 --- /dev/null +++ b/tests/baselines/reference/bom-utf16le.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/bom-utf16le.ts === +var x=10; +>x : number + diff --git a/tests/baselines/reference/bom-utf8.types b/tests/baselines/reference/bom-utf8.types new file mode 100644 index 00000000000..b8398f7b6b6 --- /dev/null +++ b/tests/baselines/reference/bom-utf8.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/bom-utf8.ts === +var x=10; +>x : number + diff --git a/tests/baselines/reference/booleanPropertyAccess.types b/tests/baselines/reference/booleanPropertyAccess.types new file mode 100644 index 00000000000..d273e3b8852 --- /dev/null +++ b/tests/baselines/reference/booleanPropertyAccess.types @@ -0,0 +1,17 @@ +=== tests/cases/conformance/types/primitives/boolean/booleanPropertyAccess.ts === +var x = true; +>x : boolean + +var a = x.toString(); +>a : string +>x.toString() : string +>x.toString : () => string +>x : boolean +>toString : () => string + +var b = x['toString'](); +>b : string +>x['toString']() : string +>x['toString'] : () => string +>x : boolean + diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement1.js b/tests/baselines/reference/breakInIterationOrSwitchStatement1.js new file mode 100644 index 00000000000..0a3de64c675 --- /dev/null +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement1.js @@ -0,0 +1,9 @@ +//// [breakInIterationOrSwitchStatement1.ts] +while (true) { + break; +} + +//// [breakInIterationOrSwitchStatement1.js] +while (true) { + break; +} diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement1.types b/tests/baselines/reference/breakInIterationOrSwitchStatement1.types new file mode 100644 index 00000000000..6a2bae2c2c4 --- /dev/null +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement1.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/breakInIterationOrSwitchStatement1.ts === +while (true) { +No type information for this code. break; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement2.js b/tests/baselines/reference/breakInIterationOrSwitchStatement2.js new file mode 100644 index 00000000000..903bed733db --- /dev/null +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement2.js @@ -0,0 +1,10 @@ +//// [breakInIterationOrSwitchStatement2.ts] +do { + break; +} +while (true); + +//// [breakInIterationOrSwitchStatement2.js] +do { + break; +} while (true); diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement2.types b/tests/baselines/reference/breakInIterationOrSwitchStatement2.types new file mode 100644 index 00000000000..0f8928a664d --- /dev/null +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement2.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/breakInIterationOrSwitchStatement2.ts === +do { +No type information for this code. break; +No type information for this code.} +No type information for this code.while (true); +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement3.js b/tests/baselines/reference/breakInIterationOrSwitchStatement3.js new file mode 100644 index 00000000000..dfadaf03182 --- /dev/null +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement3.js @@ -0,0 +1,9 @@ +//// [breakInIterationOrSwitchStatement3.ts] +for (;;) { + break; +} + +//// [breakInIterationOrSwitchStatement3.js] +for (;;) { + break; +} diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement3.types b/tests/baselines/reference/breakInIterationOrSwitchStatement3.types new file mode 100644 index 00000000000..5676b2deccd --- /dev/null +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement3.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/breakInIterationOrSwitchStatement3.ts === +for (;;) { +No type information for this code. break; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt b/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt new file mode 100644 index 00000000000..667108c902d --- /dev/null +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt @@ -0,0 +1,6 @@ +==== tests/cases/compiler/breakInIterationOrSwitchStatement4.ts (1 errors) ==== + for (var i in something) { + ~~~~~~~~~ +!!! Cannot find name 'something'. + break; + } \ No newline at end of file diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement4.js b/tests/baselines/reference/breakInIterationOrSwitchStatement4.js new file mode 100644 index 00000000000..ef1978666e2 --- /dev/null +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement4.js @@ -0,0 +1,9 @@ +//// [breakInIterationOrSwitchStatement4.ts] +for (var i in something) { + break; +} + +//// [breakInIterationOrSwitchStatement4.js] +for (var i in something) { + break; +} diff --git a/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.errors.txt b/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.errors.txt new file mode 100644 index 00000000000..6220fd09e9d --- /dev/null +++ b/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.errors.txt @@ -0,0 +1,4 @@ +==== tests/cases/compiler/breakNotInIterationOrSwitchStatement1.ts (1 errors) ==== + break; + ~~~~~~ +!!! A 'break' statement can only be used within an enclosing iteration or switch statement. \ No newline at end of file diff --git a/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.errors.txt b/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.errors.txt new file mode 100644 index 00000000000..e34345f8e8c --- /dev/null +++ b/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.errors.txt @@ -0,0 +1,8 @@ +==== tests/cases/compiler/breakNotInIterationOrSwitchStatement2.ts (1 errors) ==== + while (true) { + function f() { + break; + ~~~~~~ +!!! Jump target cannot cross function boundary. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/breakTarget1.js b/tests/baselines/reference/breakTarget1.js new file mode 100644 index 00000000000..5283dfe1911 --- /dev/null +++ b/tests/baselines/reference/breakTarget1.js @@ -0,0 +1,6 @@ +//// [breakTarget1.ts] +target: + break target; + +//// [breakTarget1.js] +target: break target; diff --git a/tests/baselines/reference/breakTarget1.types b/tests/baselines/reference/breakTarget1.types new file mode 100644 index 00000000000..eda3b1cac35 --- /dev/null +++ b/tests/baselines/reference/breakTarget1.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/breakTarget1.ts === +target: +No type information for this code. break target; +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/breakTarget2.js b/tests/baselines/reference/breakTarget2.js new file mode 100644 index 00000000000..9ca050c18e5 --- /dev/null +++ b/tests/baselines/reference/breakTarget2.js @@ -0,0 +1,10 @@ +//// [breakTarget2.ts] +target: +while (true) { + break target; +} + +//// [breakTarget2.js] +target: while (true) { + break target; +} diff --git a/tests/baselines/reference/breakTarget2.types b/tests/baselines/reference/breakTarget2.types new file mode 100644 index 00000000000..6357695785b --- /dev/null +++ b/tests/baselines/reference/breakTarget2.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/breakTarget2.ts === +target: +No type information for this code.while (true) { +No type information for this code. break target; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/breakTarget3.js b/tests/baselines/reference/breakTarget3.js new file mode 100644 index 00000000000..0fa6cd2d298 --- /dev/null +++ b/tests/baselines/reference/breakTarget3.js @@ -0,0 +1,11 @@ +//// [breakTarget3.ts] +target1: +target2: +while (true) { + break target1; +} + +//// [breakTarget3.js] +target1: target2: while (true) { + break target1; +} diff --git a/tests/baselines/reference/breakTarget3.types b/tests/baselines/reference/breakTarget3.types new file mode 100644 index 00000000000..580706bbd4a --- /dev/null +++ b/tests/baselines/reference/breakTarget3.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/breakTarget3.ts === +target1: +No type information for this code.target2: +No type information for this code.while (true) { +No type information for this code. break target1; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/breakTarget4.js b/tests/baselines/reference/breakTarget4.js new file mode 100644 index 00000000000..4586301d71b --- /dev/null +++ b/tests/baselines/reference/breakTarget4.js @@ -0,0 +1,11 @@ +//// [breakTarget4.ts] +target1: +target2: +while (true) { + break target2; +} + +//// [breakTarget4.js] +target1: target2: while (true) { + break target2; +} diff --git a/tests/baselines/reference/breakTarget4.types b/tests/baselines/reference/breakTarget4.types new file mode 100644 index 00000000000..aba35ddcfdf --- /dev/null +++ b/tests/baselines/reference/breakTarget4.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/breakTarget4.ts === +target1: +No type information for this code.target2: +No type information for this code.while (true) { +No type information for this code. break target2; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/breakTarget5.errors.txt b/tests/baselines/reference/breakTarget5.errors.txt new file mode 100644 index 00000000000..a9b3932bcbb --- /dev/null +++ b/tests/baselines/reference/breakTarget5.errors.txt @@ -0,0 +1,11 @@ +==== tests/cases/compiler/breakTarget5.ts (1 errors) ==== + target: + while (true) { + function f() { + while (true) { + break target; + ~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/breakTarget6.errors.txt b/tests/baselines/reference/breakTarget6.errors.txt new file mode 100644 index 00000000000..3a921bc6d36 --- /dev/null +++ b/tests/baselines/reference/breakTarget6.errors.txt @@ -0,0 +1,6 @@ +==== tests/cases/compiler/breakTarget6.ts (1 errors) ==== + while (true) { + break target; + ~~~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. + } \ No newline at end of file diff --git a/tests/baselines/reference/callConstructAssignment.js b/tests/baselines/reference/callConstructAssignment.js index 936269a996e..9f011c8ec02 100644 --- a/tests/baselines/reference/callConstructAssignment.js +++ b/tests/baselines/reference/callConstructAssignment.js @@ -11,5 +11,5 @@ bar = foo; // error //// [callConstructAssignment.js] var foo; var bar; -foo = bar; -bar = foo; +foo = bar; // error +bar = foo; // error diff --git a/tests/baselines/reference/callExpressionWithTypeParameterConstrainedToOuterTypeParameter.js b/tests/baselines/reference/callExpressionWithTypeParameterConstrainedToOuterTypeParameter.js index 9acb2fd1fb4..dba18d96963 100644 --- a/tests/baselines/reference/callExpressionWithTypeParameterConstrainedToOuterTypeParameter.js +++ b/tests/baselines/reference/callExpressionWithTypeParameterConstrainedToOuterTypeParameter.js @@ -7,4 +7,4 @@ var y = i(""); // y should be string //// [callExpressionWithTypeParameterConstrainedToOuterTypeParameter.js] var i; -var y = i(""); +var y = i(""); // y should be string diff --git a/tests/baselines/reference/callExpressionWithTypeParameterConstrainedToOuterTypeParameter.types b/tests/baselines/reference/callExpressionWithTypeParameterConstrainedToOuterTypeParameter.types new file mode 100644 index 00000000000..6349114bffe --- /dev/null +++ b/tests/baselines/reference/callExpressionWithTypeParameterConstrainedToOuterTypeParameter.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/callExpressionWithTypeParameterConstrainedToOuterTypeParameter.ts === +interface I { +>I : I +>T : T + + (u: U): U; +>U : U +>T : T +>u : U +>U : U +>U : U +} +var i: I; +>i : I +>I : I + +var y = i(""); // y should be string +>y : string +>i("") : string +>i : I + diff --git a/tests/baselines/reference/callGenericFunctionWithIncorrectNumberOfTypeArguments.js b/tests/baselines/reference/callGenericFunctionWithIncorrectNumberOfTypeArguments.js index f02070124b8..59bfabd21d6 100644 --- a/tests/baselines/reference/callGenericFunctionWithIncorrectNumberOfTypeArguments.js +++ b/tests/baselines/reference/callGenericFunctionWithIncorrectNumberOfTypeArguments.js @@ -45,6 +45,8 @@ var r7 = i2.f(1, ''); var r7b = i2.f(1, ''); //// [callGenericFunctionWithIncorrectNumberOfTypeArguments.js] +// type parameter lists must exactly match type argument lists +// all of these invocations are errors function f(x, y) { return null; } diff --git a/tests/baselines/reference/callGenericFunctionWithZeroTypeArguments.js b/tests/baselines/reference/callGenericFunctionWithZeroTypeArguments.js index 44a8e8ee113..04edc93f5d9 100644 --- a/tests/baselines/reference/callGenericFunctionWithZeroTypeArguments.js +++ b/tests/baselines/reference/callGenericFunctionWithZeroTypeArguments.js @@ -37,6 +37,7 @@ var i2: I2; var r7 = i2.f(1); //// [callGenericFunctionWithZeroTypeArguments.js] +// valid invocations of generic functions with no explicit type arguments provided function f(x) { return null; } diff --git a/tests/baselines/reference/callGenericFunctionWithZeroTypeArguments.types b/tests/baselines/reference/callGenericFunctionWithZeroTypeArguments.types new file mode 100644 index 00000000000..34de901e3c0 --- /dev/null +++ b/tests/baselines/reference/callGenericFunctionWithZeroTypeArguments.types @@ -0,0 +1,126 @@ +=== tests/cases/conformance/types/typeParameters/typeArgumentLists/callGenericFunctionWithZeroTypeArguments.ts === +// valid invocations of generic functions with no explicit type arguments provided + +function f(x: T): T { return null; } +>f : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var r = f(1); +>r : number +>f(1) : number +>f : (x: T) => T + +var f2 = (x: T): T => { return null; } +>f2 : (x: T) => T +>(x: T): T => { return null; } : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var r2 = f2(1); +>r2 : number +>f2(1) : number +>f2 : (x: T) => T + +var f3: { (x: T): T; } +>f3 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var r3 = f3(1); +>r3 : number +>f3(1) : number +>f3 : (x: T) => T + +class C { +>C : C + + f(x: T): T { +>f : (x: T) => T +>T : T +>x : T +>T : T +>T : T + + return null; + } +} +var r4 = (new C()).f(1); +>r4 : number +>(new C()).f(1) : number +>(new C()).f : (x: T) => T +>(new C()) : C +>new C() : C +>C : typeof C +>f : (x: T) => T + +interface I { +>I : I + + f(x: T): T; +>f : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} +var i: I; +>i : I +>I : I + +var r5 = i.f(1); +>r5 : number +>i.f(1) : number +>i.f : (x: T) => T +>i : I +>f : (x: T) => T + +class C2 { +>C2 : C2 +>T : T + + f(x: T): T { +>f : (x: T) => T +>x : T +>T : T +>T : T + + return null; + } +} +var r6 = (new C2()).f(1); +>r6 : {} +>(new C2()).f(1) : {} +>(new C2()).f : (x: {}) => {} +>(new C2()) : C2<{}> +>new C2() : C2<{}> +>C2 : typeof C2 +>f : (x: {}) => {} + +interface I2 { +>I2 : I2 +>T : T + + f(x: T): T; +>f : (x: T) => T +>x : T +>T : T +>T : T +} +var i2: I2; +>i2 : I2 +>I2 : I2 + +var r7 = i2.f(1); +>r7 : number +>i2.f(1) : number +>i2.f : (x: number) => number +>i2 : I2 +>f : (x: number) => number + diff --git a/tests/baselines/reference/callNonGenericFunctionWithTypeArguments.js b/tests/baselines/reference/callNonGenericFunctionWithTypeArguments.js index 6d93ed9deb4..306b4c70362 100644 --- a/tests/baselines/reference/callNonGenericFunctionWithTypeArguments.js +++ b/tests/baselines/reference/callNonGenericFunctionWithTypeArguments.js @@ -44,6 +44,8 @@ var a2: any; var r8 = a2(); //// [callNonGenericFunctionWithTypeArguments.js] +// it is always illegal to provide type arguments to a non-generic function +// all invocations here are illegal function f(x) { return null; } diff --git a/tests/baselines/reference/callOnInstance.js b/tests/baselines/reference/callOnInstance.js index fae3108b080..477bdca26a7 100644 --- a/tests/baselines/reference/callOnInstance.js +++ b/tests/baselines/reference/callOnInstance.js @@ -11,6 +11,6 @@ declare class C { constructor(value: number); } (new C(1))(); // Error for calling an instance //// [callOnInstance.js] -var s1 = D(); +var s1 = D(); // OK var s2 = (new D(1))(); -(new C(1))(); +(new C(1))(); // Error for calling an instance diff --git a/tests/baselines/reference/callOverloads1.errors.txt b/tests/baselines/reference/callOverloads1.errors.txt index 7826219c513..a561ffb0c83 100644 --- a/tests/baselines/reference/callOverloads1.errors.txt +++ b/tests/baselines/reference/callOverloads1.errors.txt @@ -9,9 +9,9 @@ function Foo(); // error ~~~ -!!! Function implementation is missing or not immediately following the declaration. - ~~~ !!! Duplicate identifier 'Foo'. + ~~~ +!!! Function implementation is missing or not immediately following the declaration. function F1(s:string); function F1(a:any) { return a;} diff --git a/tests/baselines/reference/callOverloads1.js b/tests/baselines/reference/callOverloads1.js index 4d595108ab2..dc76fcba98a 100644 --- a/tests/baselines/reference/callOverloads1.js +++ b/tests/baselines/reference/callOverloads1.js @@ -20,6 +20,7 @@ Foo(); //// [callOverloads1.js] var Foo = (function () { function Foo(x) { + // WScript.Echo("Constructor function has executed"); } Foo.prototype.bar1 = function () { }; diff --git a/tests/baselines/reference/callOverloads2.js b/tests/baselines/reference/callOverloads2.js index 2bffd50a2ab..be42753bc3d 100644 --- a/tests/baselines/reference/callOverloads2.js +++ b/tests/baselines/reference/callOverloads2.js @@ -28,6 +28,7 @@ Foo(); //// [callOverloads2.js] var Foo = (function () { function Foo(x) { + // WScript.Echo("Constructor function has executed"); } Foo.prototype.bar1 = function () { }; @@ -38,7 +39,7 @@ function F1(s) { } function F1(a) { return a; -} +} // error - duplicate identifier var f1 = new Foo("hey"); f1.bar1(); Foo(); diff --git a/tests/baselines/reference/callOverloads3.js b/tests/baselines/reference/callOverloads3.js index 8e630e437a5..93176cc1edb 100644 --- a/tests/baselines/reference/callOverloads3.js +++ b/tests/baselines/reference/callOverloads3.js @@ -21,11 +21,13 @@ Foo("s"); //// [callOverloads3.js] var Foo = (function () { function Foo(x) { + // WScript.Echo("Constructor function has executed"); } Foo.prototype.bar1 = function () { }; return Foo; })(); +//class Foo(s: String); var f1 = new Foo("hey"); f1.bar1(); Foo(); diff --git a/tests/baselines/reference/callOverloads4.js b/tests/baselines/reference/callOverloads4.js index 19bed1db437..86ec2b91e7e 100644 --- a/tests/baselines/reference/callOverloads4.js +++ b/tests/baselines/reference/callOverloads4.js @@ -21,6 +21,7 @@ Foo("s"); //// [callOverloads4.js] var Foo = (function () { function Foo(x) { + // WScript.Echo("Constructor function has executed"); } Foo.prototype.bar1 = function () { }; diff --git a/tests/baselines/reference/callOverloads5.js b/tests/baselines/reference/callOverloads5.js index b1dba82ae3c..30cc65915ec 100644 --- a/tests/baselines/reference/callOverloads5.js +++ b/tests/baselines/reference/callOverloads5.js @@ -22,11 +22,13 @@ Foo("s"); //// [callOverloads5.js] var Foo = (function () { function Foo(x) { + // WScript.Echo("Constructor function has executed"); } Foo.prototype.bar1 = function (a) { }; return Foo; })(); +//class Foo(s: String); var f1 = new Foo("hey"); f1.bar1("a"); Foo(); diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.js b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.js index b0de8c047c7..8bb4cb665a2 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.js +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.js @@ -70,6 +70,7 @@ interface I extends A { } //// [callSignatureAssignabilityInInheritance2.js] +// checking subtype relations for function types as it relates to contextual signature instantiation var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types new file mode 100644 index 00000000000..335413cd73e --- /dev/null +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types @@ -0,0 +1,398 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance2.ts === +// checking subtype relations for function types as it relates to contextual signature instantiation + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { // T +>A : A + + // M's + a: (x: number) => number[]; +>a : (x: number) => number[] +>x : number + + a2: (x: number) => string[]; +>a2 : (x: number) => string[] +>x : number + + a3: (x: number) => void; +>a3 : (x: number) => void +>x : number + + a4: (x: string, y: number) => string; +>a4 : (x: string, y: number) => string +>x : string +>y : number + + a5: (x: (arg: string) => number) => string; +>a5 : (x: (arg: string) => number) => string +>x : (arg: string) => number +>arg : string + + a6: (x: (arg: Base) => Derived) => Base; +>a6 : (x: (arg: Base) => Derived) => Base +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>Base : Base + + a7: (x: (arg: Base) => Derived) => (r: Base) => Derived; +>a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a8: (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a8 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a9: (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a9 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a10: (...x: Derived[]) => Derived; +>a10 : (...x: Derived[]) => Derived +>x : Derived[] +>Derived : Derived +>Derived : Derived + + a11: (x: { foo: string }, y: { foo: string; bar: string }) => Base; +>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>x : { foo: string; } +>foo : string +>y : { foo: string; bar: string; } +>foo : string +>bar : string +>Base : Base + + a12: (x: Array, y: Array) => Array; +>a12 : (x: Base[], y: Derived2[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived2[] +>Array : T[] +>Derived2 : Derived2 +>Array : T[] +>Derived : Derived + + a13: (x: Array, y: Array) => Array; +>a13 : (x: Base[], y: Derived[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived[] +>Array : T[] +>Derived : Derived +>Array : T[] +>Derived : Derived + + a14: (x: { a: string; b: number }) => Object; +>a14 : (x: { a: string; b: number; }) => Object +>x : { a: string; b: number; } +>a : string +>b : number +>Object : Object + + a15: { +>a15 : { (x: number): number[]; (x: string): string[]; } + + (x: number): number[]; +>x : number + + (x: string): string[]; +>x : string + + }; + a16: { +>a16 : { (x: T): number[]; (x: U): number[]; } + + (x: T): number[]; +>T : T +>Derived : Derived +>x : T +>T : T + + (x: U): number[]; +>U : U +>Base : Base +>x : U +>U : U + + }; + a17: { +>a17 : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; } + + (x: (a: number) => number): number[]; +>x : (a: number) => number +>a : number + + (x: (a: string) => string): string[]; +>x : (a: string) => string +>a : string + + }; + a18: { +>a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; } + + (x: { +>x : { (a: number): number; (a: string): string; } + + (a: number): number; +>a : number + + (a: string): string; +>a : string + + }): any[]; + (x: { +>x : { (a: boolean): boolean; (a: Date): Date; } + + (a: boolean): boolean; +>a : boolean + + (a: Date): Date; +>a : Date +>Date : Date +>Date : Date + + }): any[]; + }; +} + +// S's +interface I extends A { +>I : I +>A : A + + // N's + a: (x: T) => T[]; // ok, instantiation of N is a subtype of M, T is number +>a : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: (x: T) => string[]; // ok +>a2 : (x: T) => string[] +>T : T +>x : T +>T : T + + a3: (x: T) => T; // ok since Base returns void +>a3 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + + a4: (x: T, y: U) => T; // ok, instantiation of N is a subtype of M, T is string, U is number +>a4 : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + + a5: (x: (arg: T) => U) => T; // ok, U is in a parameter position so inferences can be made +>a5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: (x: (arg: T) => U) => T; // ok, same as a5 but with object type hierarchy +>a6 : (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a7: (x: (arg: T) => U) => (r: T) => U; // ok +>a7 : (x: (arg: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>r : T +>T : T +>U : U + + a8: (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U; // ok +>a8 : (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: T) => U +>arg2 : T +>T : T +>U : U +>r : T +>T : T +>U : U + + a9: (x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U; // ok, same as a8 with compatible object literal +>a9 : (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: { foo: string; bing: number; }) => U +>arg2 : { foo: string; bing: number; } +>foo : string +>bing : number +>U : U +>r : T +>T : T +>U : U + + a10: (...x: T[]) => T; // ok +>a10 : (...x: T[]) => T +>T : T +>Derived : Derived +>x : T[] +>T : T +>T : T + + a11: (x: T, y: T) => T; // ok +>a11 : (x: T, y: T) => T +>T : T +>Base : Base +>x : T +>T : T +>y : T +>T : T +>T : T + + a12: >(x: Array, y: T) => Array; // ok, less specific parameter type +>a12 : (x: Base[], y: T) => Derived[] +>T : T +>Array : T[] +>Base : Base +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>Array : T[] +>Derived : Derived + + a13: >(x: Array, y: T) => T; // ok, T = Array, satisfies constraint, contextual signature instantiation succeeds +>a13 : (x: Base[], y: T) => T +>T : T +>Array : T[] +>Derived : Derived +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>T : T + + a14: (x: { a: T; b: T }) => T; // ok, best common type yields T = {} but that's satisfactory for this signature +>a14 : (x: { a: T; b: T; }) => T +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a15: (x: T) => T[]; // ok +>a15 : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a16: (x: T) => number[]; // ok +>a16 : (x: T) => number[] +>T : T +>Base : Base +>x : T +>T : T + + a17: (x: (a: T) => T) => T[]; // ok +>a17 : (x: (a: T) => T) => T[] +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + + a18: (x: (a: T) => T) => T[]; // ok, no inferences for T but assignable to any +>a18 : (x: (a: T) => T) => T[] +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance3.js b/tests/baselines/reference/callSignatureAssignabilityInInheritance3.js index 0f7a1c93b58..31cdc8980fd 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance3.js +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance3.js @@ -114,6 +114,8 @@ module Errors { } //// [callSignatureAssignabilityInInheritance3.js] +// checking subtype relations for function types as it relates to contextual signature instantiation +// error cases var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance4.js b/tests/baselines/reference/callSignatureAssignabilityInInheritance4.js index b48921b69d7..2f9cbc2a9e7 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance4.js +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance4.js @@ -50,6 +50,7 @@ interface I extends A { } //// [callSignatureAssignabilityInInheritance4.js] +// checking subtype relations for function types as it relates to contextual signature instantiation var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types new file mode 100644 index 00000000000..0575d1332ce --- /dev/null +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types @@ -0,0 +1,281 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance4.ts === +// checking subtype relations for function types as it relates to contextual signature instantiation + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { // T +>A : A + + // M's + a: (x: T) => T[]; +>a : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: (x: T) => string[]; +>a2 : (x: T) => string[] +>T : T +>x : T +>T : T + + a3: (x: T) => void; +>a3 : (x: T) => void +>T : T +>x : T +>T : T + + a4: (x: T, y: U) => string; +>a4 : (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + a5: (x: (arg: T) => U) => T; +>a5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: (x: (arg: T) => Derived) => T; +>a6 : (x: (arg: T) => Derived) => T +>T : T +>Base : Base +>x : (arg: T) => Derived +>arg : T +>T : T +>Derived : Derived +>T : T + + a11: (x: { foo: T }, y: { foo: T; bar: T }) => Base; +>a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>T : T +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T +>Base : Base + + a15: (x: { a: T; b: T }) => T[]; +>a15 : (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a16: (x: { a: T; b: T }) => T[]; +>a16 : (x: { a: T; b: T; }) => T[] +>T : T +>Base : Base +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a17: { +>a17 : { (x: (a: T) => T): T[]; (x: (a: T) => T): T[]; } + + (x: (a: T) => T): T[]; +>T : T +>Derived : Derived +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + + (x: (a: T) => T): T[]; +>T : T +>Base : Base +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + + }; + a18: { +>a18 : { (x: { (a: T): T; (a: T): T; }): any[]; (x: { (a: T): T; (a: T): T; }): any[]; } + + (x: { +>x : { (a: T): T; (a: T): T; } + + (a: T): T; +>T : T +>Derived : Derived +>a : T +>T : T +>T : T + + (a: T): T; +>T : T +>Base : Base +>a : T +>T : T +>T : T + + }): any[]; + (x: { +>x : { (a: T): T; (a: T): T; } + + (a: T): T; +>T : T +>Derived2 : Derived2 +>a : T +>T : T +>T : T + + (a: T): T; +>T : T +>Base : Base +>a : T +>T : T +>T : T + + }): any[]; + }; +} + +// S's +interface I extends A { +>I : I +>A : A + + // N's + a: (x: T) => T[]; // ok, instantiation of N is a subtype of M, T is number +>a : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: (x: T) => string[]; // ok +>a2 : (x: T) => string[] +>T : T +>x : T +>T : T + + a3: (x: T) => T; // ok since Base returns void +>a3 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + + a4: (x: T, y: U) => string; // ok, instantiation of N is a subtype of M, T is string, U is number +>a4 : (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + a5: (x: (arg: T) => U) => T; // ok, U is in a parameter position so inferences can be made +>a5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: (x: (arg: T) => U) => T; // ok, same as a5 but with object type hierarchy +>a6 : (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a11: (x: { foo: T }, y: { foo: U; bar: U }) => Base; // ok +>a11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>T : T +>U : U +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: U; bar: U; } +>foo : U +>U : U +>bar : U +>U : U +>Base : Base + + a15: (x: { a: U; b: V; }) => U[]; // ok, T = U, T = V +>a15 : (x: { a: U; b: V; }) => U[] +>U : U +>V : V +>x : { a: U; b: V; } +>a : U +>U : U +>b : V +>V : V +>U : U + + a16: (x: { a: T; b: T }) => T[]; // ok, more general parameter type +>a16 : (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a17: (x: (a: T) => T) => T[]; // ok +>a17 : (x: (a: T) => T) => T[] +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T +>T : T + + a18: (x: (a: T) => T) => any[]; // ok +>a18 : (x: (a: T) => T) => any[] +>x : (a: T) => T +>T : T +>a : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance5.js b/tests/baselines/reference/callSignatureAssignabilityInInheritance5.js index 00298f19079..0cb4830188a 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance5.js +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance5.js @@ -49,6 +49,8 @@ interface I extends B { } //// [callSignatureAssignabilityInInheritance5.js] +// checking subtype relations for function types as it relates to contextual signature instantiation +// same as subtypingWithCallSignatures2 just with an extra level of indirection in the inheritance chain var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types new file mode 100644 index 00000000000..0ffc8257a56 --- /dev/null +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types @@ -0,0 +1,314 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance5.ts === +// checking subtype relations for function types as it relates to contextual signature instantiation +// same as subtypingWithCallSignatures2 just with an extra level of indirection in the inheritance chain + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { // T +>A : A + + // M's + a: (x: number) => number[]; +>a : (x: number) => number[] +>x : number + + a2: (x: number) => string[]; +>a2 : (x: number) => string[] +>x : number + + a3: (x: number) => void; +>a3 : (x: number) => void +>x : number + + a4: (x: string, y: number) => string; +>a4 : (x: string, y: number) => string +>x : string +>y : number + + a5: (x: (arg: string) => number) => string; +>a5 : (x: (arg: string) => number) => string +>x : (arg: string) => number +>arg : string + + a6: (x: (arg: Base) => Derived) => Base; +>a6 : (x: (arg: Base) => Derived) => Base +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>Base : Base + + a7: (x: (arg: Base) => Derived) => (r: Base) => Derived; +>a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a8: (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a8 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a9: (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a9 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a10: (...x: Derived[]) => Derived; +>a10 : (...x: Derived[]) => Derived +>x : Derived[] +>Derived : Derived +>Derived : Derived + + a11: (x: { foo: string }, y: { foo: string; bar: string }) => Base; +>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>x : { foo: string; } +>foo : string +>y : { foo: string; bar: string; } +>foo : string +>bar : string +>Base : Base + + a12: (x: Array, y: Array) => Array; +>a12 : (x: Base[], y: Derived2[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived2[] +>Array : T[] +>Derived2 : Derived2 +>Array : T[] +>Derived : Derived + + a13: (x: Array, y: Array) => Array; +>a13 : (x: Base[], y: Derived[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived[] +>Array : T[] +>Derived : Derived +>Array : T[] +>Derived : Derived + + a14: (x: { a: string; b: number }) => Object; +>a14 : (x: { a: string; b: number; }) => Object +>x : { a: string; b: number; } +>a : string +>b : number +>Object : Object +} + +interface B extends A { +>B : B +>A : A + + a: (x: T) => T[]; +>a : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T +} + +// S's +interface I extends B { +>I : I +>B : B + + // N's + a: (x: T) => T[]; // ok, instantiation of N is a subtype of M, T is number +>a : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: (x: T) => string[]; // ok +>a2 : (x: T) => string[] +>T : T +>x : T +>T : T + + a3: (x: T) => T; // ok since Base returns void +>a3 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + + a4: (x: T, y: U) => T; // ok, instantiation of N is a subtype of M, T is string, U is number +>a4 : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + + a5: (x: (arg: T) => U) => T; // ok, U is in a parameter position so inferences can be made +>a5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: (x: (arg: T) => U) => T; // ok, same as a5 but with object type hierarchy +>a6 : (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a7: (x: (arg: T) => U) => (r: T) => U; // ok +>a7 : (x: (arg: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>r : T +>T : T +>U : U + + a8: (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U; // ok +>a8 : (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: T) => U +>arg2 : T +>T : T +>U : U +>r : T +>T : T +>U : U + + a9: (x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U; // ok, same as a8 with compatible object literal +>a9 : (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: { foo: string; bing: number; }) => U +>arg2 : { foo: string; bing: number; } +>foo : string +>bing : number +>U : U +>r : T +>T : T +>U : U + + a10: (...x: T[]) => T; // ok +>a10 : (...x: T[]) => T +>T : T +>Derived : Derived +>x : T[] +>T : T +>T : T + + a11: (x: T, y: T) => T; // ok +>a11 : (x: T, y: T) => T +>T : T +>Base : Base +>x : T +>T : T +>y : T +>T : T +>T : T + + a12: >(x: Array, y: T) => Array; // ok, less specific parameter type +>a12 : (x: Base[], y: T) => Derived[] +>T : T +>Array : T[] +>Base : Base +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>Array : T[] +>Derived : Derived + + a13: >(x: Array, y: T) => T; // ok, T = Array, satisfies constraint, contextual signature instantiation succeeds +>a13 : (x: Base[], y: T) => T +>T : T +>Array : T[] +>Derived : Derived +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>T : T + + a14: (x: { a: T; b: T }) => T; // ok, best common type yields T = {} but that's satisfactory for this signature +>a14 : (x: { a: T; b: T; }) => T +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance6.js b/tests/baselines/reference/callSignatureAssignabilityInInheritance6.js index 329e57bcab1..dd471f09223 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance6.js +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance6.js @@ -51,6 +51,9 @@ interface I9 extends A { } //// [callSignatureAssignabilityInInheritance6.js] +// checking subtype relations for function types as it relates to contextual signature instantiation +// same as subtypingWithCallSignatures4 but using class type parameters instead of generic signatures +// all are errors var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types new file mode 100644 index 00000000000..721b691be70 --- /dev/null +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types @@ -0,0 +1,209 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance6.ts === +// checking subtype relations for function types as it relates to contextual signature instantiation +// same as subtypingWithCallSignatures4 but using class type parameters instead of generic signatures +// all are errors + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { // T +>A : A + + // M's + a: (x: T) => T[]; +>a : (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: (x: T) => string[]; +>a2 : (x: T) => string[] +>T : T +>x : T +>T : T + + a3: (x: T) => void; +>a3 : (x: T) => void +>T : T +>x : T +>T : T + + a4: (x: T, y: U) => string; +>a4 : (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + a5: (x: (arg: T) => U) => T; +>a5 : (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: (x: (arg: T) => Derived) => T; +>a6 : (x: (arg: T) => Derived) => T +>T : T +>Base : Base +>x : (arg: T) => Derived +>arg : T +>T : T +>Derived : Derived +>T : T + + a11: (x: { foo: T }, y: { foo: T; bar: T }) => Base; +>a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>T : T +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T +>Base : Base + + a15: (x: { a: T; b: T }) => T[]; +>a15 : (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a16: (x: { a: T; b: T }) => T[]; +>a16 : (x: { a: T; b: T; }) => T[] +>T : T +>Base : Base +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T +} + +// S's +interface I extends A { +>I : I +>T : T +>A : A + + a: (x: T) => T[]; +>a : (x: T) => T[] +>x : T +>T : T +>T : T +} + +interface I2 extends A { +>I2 : I2 +>T : T +>A : A + + a2: (x: T) => string[]; +>a2 : (x: T) => string[] +>x : T +>T : T +} + +interface I3 extends A { +>I3 : I3 +>T : T +>A : A + + a3: (x: T) => T; +>a3 : (x: T) => T +>x : T +>T : T +>T : T +} + +interface I4 extends A { +>I4 : I4 +>T : T +>A : A + + a4: (x: T, y: U) => string; +>a4 : (x: T, y: U) => string +>U : U +>x : T +>T : T +>y : U +>U : U +} + +interface I5 extends A { +>I5 : I5 +>T : T +>A : A + + a5: (x: (arg: T) => U) => T; +>a5 : (x: (arg: T) => U) => T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T +} + +interface I7 extends A { +>I7 : I7 +>T : T +>A : A + + a11: (x: { foo: T }, y: { foo: U; bar: U }) => Base; +>a11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>U : U +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: U; bar: U; } +>foo : U +>U : U +>bar : U +>U : U +>Base : Base +} + +interface I9 extends A { +>I9 : I9 +>T : T +>A : A + + a16: (x: { a: T; b: T }) => T[]; +>a16 : (x: { a: T; b: T; }) => T[] +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/callSignatureFunctionOverload.types b/tests/baselines/reference/callSignatureFunctionOverload.types new file mode 100644 index 00000000000..b9788e5b143 --- /dev/null +++ b/tests/baselines/reference/callSignatureFunctionOverload.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/callSignatureFunctionOverload.ts === +var foo: { +>foo : { (name: string): string; (name: 'order'): string; (name: 'content'): string; (name: 'done'): string; } + + (name: string): string; +>name : string + + (name: 'order'): string; +>name : 'order' + + (name: 'content'): string; +>name : 'content' + + (name: 'done'): string; +>name : 'done' +} + +var foo2: { +>foo2 : { (name: string): string; (name: 'order'): string; (name: 'order'): string; (name: 'done'): string; } + + (name: string): string; +>name : string + + (name: 'order'): string; +>name : 'order' + + (name: 'order'): string; +>name : 'order' + + (name: 'done'): string; +>name : 'done' +} + diff --git a/tests/baselines/reference/callSignatureWithoutAnnotationsOrBody.js b/tests/baselines/reference/callSignatureWithoutAnnotationsOrBody.js index 8530026d050..6daa62f83a8 100644 --- a/tests/baselines/reference/callSignatureWithoutAnnotationsOrBody.js +++ b/tests/baselines/reference/callSignatureWithoutAnnotationsOrBody.js @@ -20,9 +20,10 @@ var r4 = a(); var r5 = a.f(); //// [callSignatureWithoutAnnotationsOrBody.js] +// Call signatures without a return type annotation and function body return 'any' function foo(x) { } -var r = foo(1); +var r = foo(1); // void since there's a body var i; var r2 = i(); var r3 = i.f(); diff --git a/tests/baselines/reference/callSignatureWithoutAnnotationsOrBody.types b/tests/baselines/reference/callSignatureWithoutAnnotationsOrBody.types new file mode 100644 index 00000000000..b8b608762f5 --- /dev/null +++ b/tests/baselines/reference/callSignatureWithoutAnnotationsOrBody.types @@ -0,0 +1,55 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignatureWithoutAnnotationsOrBody.ts === +// Call signatures without a return type annotation and function body return 'any' + +function foo(x) { } +>foo : (x: any) => void +>x : any + +var r = foo(1); // void since there's a body +>r : void +>foo(1) : void +>foo : (x: any) => void + +interface I { +>I : I + + (); + f(); +>f : () => any +} +var i: I; +>i : I +>I : I + +var r2 = i(); +>r2 : any +>i() : any +>i : I + +var r3 = i.f(); +>r3 : any +>i.f() : any +>i.f : () => any +>i : I +>f : () => any + +var a: { +>a : { (): any; f(): any; } + + (); + f(); +>f : () => any + +}; +var r4 = a(); +>r4 : any +>a() : any +>a : { (): any; f(): any; } + +var r5 = a.f(); +>r5 : any +>a.f() : any +>a.f : () => any +>a : { (): any; f(): any; } +>f : () => any + diff --git a/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.js b/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.js index 4c7e0312b86..c048c5c56de 100644 --- a/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.js +++ b/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.js @@ -121,6 +121,8 @@ function foo15() { var r15 = foo15(); //// [callSignatureWithoutReturnTypeAnnotationInference.js] +// Call signatures without a return type should infer one from the function body (if present) +// Simple types function foo(x) { return 1; } @@ -161,6 +163,7 @@ function foo7(x) { return typeof x; } var r7 = foo7(1); +// object types function foo8(x) { return { x: x }; } diff --git a/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.types b/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.types new file mode 100644 index 00000000000..dc6a72cf897 --- /dev/null +++ b/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.types @@ -0,0 +1,276 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignatureWithoutReturnTypeAnnotationInference.ts === +// Call signatures without a return type should infer one from the function body (if present) + +// Simple types +function foo(x) { +>foo : (x: any) => number +>x : any + + return 1; +} +var r = foo(1); +>r : number +>foo(1) : number +>foo : (x: any) => number + +function foo2(x) { +>foo2 : (x: any) => number +>x : any + + return foo(x); +>foo(x) : number +>foo : (x: any) => number +>x : any +} +var r2 = foo2(1); +>r2 : number +>foo2(1) : number +>foo2 : (x: any) => number + +function foo3() { +>foo3 : () => any + + return foo3(); +>foo3() : any +>foo3 : () => any +} +var r3 = foo3(); +>r3 : any +>foo3() : any +>foo3 : () => any + +function foo4(x: T) { +>foo4 : (x: T) => T +>T : T +>x : T +>T : T + + return x; +>x : T +} +var r4 = foo4(1); +>r4 : number +>foo4(1) : number +>foo4 : (x: T) => T + +function foo5(x) { +>foo5 : (x: any) => number +>x : any + + if (true) { + return 1; + } else { + return 2; + } +} +var r5 = foo5(1); +>r5 : number +>foo5(1) : number +>foo5 : (x: any) => number + +function foo6(x) { +>foo6 : (x: any) => any[] +>x : any + + try { + } + catch (e) { +>e : any + + return []; +>[] : undefined[] + } + finally { + return []; +>[] : undefined[] + } +} +var r6 = foo6(1); +>r6 : any[] +>foo6(1) : any[] +>foo6 : (x: any) => any[] + +function foo7(x) { +>foo7 : (x: any) => string +>x : any + + return typeof x; +>typeof x : string +>x : any +} +var r7 = foo7(1); +>r7 : string +>foo7(1) : string +>foo7 : (x: any) => string + +// object types +function foo8(x: number) { +>foo8 : (x: number) => { x: number; } +>x : number + + return { x: x }; +>{ x: x } : { x: number; } +>x : number +>x : number +} +var r8 = foo8(1); +>r8 : { x: number; } +>foo8(1) : { x: number; } +>foo8 : (x: number) => { x: number; } + +interface I { +>I : I + + foo: string; +>foo : string +} +function foo9(x: number) { +>foo9 : (x: number) => I +>x : number + + var i: I; +>i : I +>I : I + + return i; +>i : I +} +var r9 = foo9(1); +>r9 : I +>foo9(1) : I +>foo9 : (x: number) => I + +class C { +>C : C + + foo: string; +>foo : string +} +function foo10(x: number) { +>foo10 : (x: number) => C +>x : number + + var c: C; +>c : C +>C : C + + return c; +>c : C +} +var r10 = foo10(1); +>r10 : C +>foo10(1) : C +>foo10 : (x: number) => C + +module M { +>M : typeof M + + export var x = 1; +>x : number + + export class C { foo: string } +>C : C +>foo : string +} +function foo11() { +>foo11 : () => typeof M + + return M; +>M : typeof M +} +var r11 = foo11(); +>r11 : typeof M +>foo11() : typeof M +>foo11 : () => typeof M + +// merged declarations +interface I2 { +>I2 : I2 + + x: number; +>x : number +} +interface I2 { +>I2 : I2 + + y: number; +>y : number +} +function foo12() { +>foo12 : () => I2 + + var i2: I2; +>i2 : I2 +>I2 : I2 + + return i2; +>i2 : I2 +} +var r12 = foo12(); +>r12 : I2 +>foo12() : I2 +>foo12 : () => I2 + +function m1() { return 1; } +>m1 : typeof m1 + +module m1 { export var y = 2; } +>m1 : typeof m1 +>y : number + +function foo13() { +>foo13 : () => typeof m1 + + return m1; +>m1 : typeof m1 +} +var r13 = foo13(); +>r13 : typeof m1 +>foo13() : typeof m1 +>foo13 : () => typeof m1 + +class c1 { +>c1 : c1 + + foo: string; +>foo : string + + constructor(x) { } +>x : any +} +module c1 { +>c1 : typeof c1 + + export var x = 1; +>x : number +} +function foo14() { +>foo14 : () => typeof c1 + + return c1; +>c1 : typeof c1 +} +var r14 = foo14(); +>r14 : typeof c1 +>foo14() : typeof c1 +>foo14 : () => typeof c1 + +enum e1 { A } +>e1 : e1 +>A : e1 + +module e1 { export var y = 1; } +>e1 : typeof e1 +>y : number + +function foo15() { +>foo15 : () => typeof e1 + + return e1; +>e1 : typeof e1 +} +var r15 = foo15(); +>r15 : typeof e1 +>foo15() : typeof e1 +>foo15 : () => typeof e1 + diff --git a/tests/baselines/reference/callSignaturesShouldBeResolvedBeforeSpecialization.js b/tests/baselines/reference/callSignaturesShouldBeResolvedBeforeSpecialization.js index 62ffe63ecf0..b2cf7d5f5c5 100644 --- a/tests/baselines/reference/callSignaturesShouldBeResolvedBeforeSpecialization.js +++ b/tests/baselines/reference/callSignaturesShouldBeResolvedBeforeSpecialization.js @@ -13,6 +13,6 @@ function foo() { //// [callSignaturesShouldBeResolvedBeforeSpecialization.js] function foo() { var test; - test("expects boolean instead of string"); - test(true); + test("expects boolean instead of string"); // should not error - "test" should not expect a boolean + test(true); // should error - string expected } diff --git a/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType.types b/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType.types new file mode 100644 index 00000000000..ff51a6fc60a --- /dev/null +++ b/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType.types @@ -0,0 +1,76 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesThatDifferOnlyByReturnType.ts === +// Each pair of signatures in these types has a signature that should cause an error. +// Overloads, generic or not, that differ only by return type are an error. +interface I { +>I : I + + (x): number; +>x : any + + (x): void; // error +>x : any + + (x: T): number; +>T : T +>x : T +>T : T + + (x: T): string; // error +>T : T +>x : T +>T : T +} + +interface I2 { +>I2 : I2 + + (x: T): number; +>T : T +>x : T +>T : T + + (x: T): string; // error +>T : T +>x : T +>T : T +} + +interface I3 { +>I3 : I3 +>T : T + + (x: T): number; +>x : T +>T : T + + (x: T): string; // error +>x : T +>T : T +} + +var a: { +>a : { (x: any, y: any): Object; (x: any, y: any): any; } + + (x, y): Object; +>x : any +>y : any +>Object : Object + + (x, y): any; // error +>x : any +>y : any +} + +var a2: { +>a2 : { (x: T): number; (x: T): string; } + + (x: T): number; +>T : T +>x : T +>T : T + + (x: T): string; // error +>T : T +>x : T +>T : T +} diff --git a/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType2.js b/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType2.js index e3ee6e2ed01..ae6f4db7e38 100644 --- a/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType2.js +++ b/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType2.js @@ -15,6 +15,9 @@ var r2 = x.foo(''); // error //// [callSignaturesThatDifferOnlyByReturnType2.js] +// Normally it is an error to have multiple overloads which differ only by return type in a single type declaration. +// Here the multiple overloads come from multiple bases. var x; -var r = x.foo(1); -var r2 = x.foo(''); +// BUG 822524 +var r = x.foo(1); // no error +var r2 = x.foo(''); // error diff --git a/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType3.js b/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType3.js index 83af7457795..b67b619d739 100644 --- a/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType3.js +++ b/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType3.js @@ -19,3 +19,5 @@ interface I2 { } //// [callSignaturesThatDifferOnlyByReturnType3.js] +// Normally it is an error to have multiple overloads with identical signatures in a single type declaration. +// Here the multiple overloads come from multiple merged declarations. diff --git a/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType3.types b/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType3.types new file mode 100644 index 00000000000..3b1f2c5ca1a --- /dev/null +++ b/tests/baselines/reference/callSignaturesThatDifferOnlyByReturnType3.types @@ -0,0 +1,33 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesThatDifferOnlyByReturnType3.ts === +// Normally it is an error to have multiple overloads with identical signatures in a single type declaration. +// Here the multiple overloads come from multiple merged declarations. + +interface I { +>I : I + + (x: string): string; +>x : string +} + +interface I { +>I : I + + (x: string): number; +>x : string +} + +interface I2 { +>I2 : I2 +>T : T + + (x: string): string; +>x : string +} + +interface I2 { +>I2 : I2 +>T : T + + (x: string): number; +>x : string +} diff --git a/tests/baselines/reference/callSignaturesWithAccessibilityModifiersOnParameters.js b/tests/baselines/reference/callSignaturesWithAccessibilityModifiersOnParameters.js index 53cb0cc067a..22b312e2570 100644 --- a/tests/baselines/reference/callSignaturesWithAccessibilityModifiersOnParameters.js +++ b/tests/baselines/reference/callSignaturesWithAccessibilityModifiersOnParameters.js @@ -39,6 +39,7 @@ var b = { } //// [callSignaturesWithAccessibilityModifiersOnParameters.js] +// Call signature parameters do not allow accessibility modifiers function foo(x, y) { } var f = function foo(x, y) { diff --git a/tests/baselines/reference/callSignaturesWithDuplicateParameters.js b/tests/baselines/reference/callSignaturesWithDuplicateParameters.js index 1107acc51de..49e20266dad 100644 --- a/tests/baselines/reference/callSignaturesWithDuplicateParameters.js +++ b/tests/baselines/reference/callSignaturesWithDuplicateParameters.js @@ -39,6 +39,7 @@ var b = { } //// [callSignaturesWithDuplicateParameters.js] +// Duplicate parameter names are always an error function foo(x, x) { } var f = function foo(x, x) { diff --git a/tests/baselines/reference/callSignaturesWithOptionalParameters.js b/tests/baselines/reference/callSignaturesWithOptionalParameters.js index 6f70965895a..fa2126fb6c5 100644 --- a/tests/baselines/reference/callSignaturesWithOptionalParameters.js +++ b/tests/baselines/reference/callSignaturesWithOptionalParameters.js @@ -56,6 +56,7 @@ b.b(1); //// [callSignaturesWithOptionalParameters.js] +// Optional parameters should be valid in all the below casts function foo(x) { } var f = function foo(x) { diff --git a/tests/baselines/reference/callSignaturesWithOptionalParameters.types b/tests/baselines/reference/callSignaturesWithOptionalParameters.types new file mode 100644 index 00000000000..8b1e929d9e3 --- /dev/null +++ b/tests/baselines/reference/callSignaturesWithOptionalParameters.types @@ -0,0 +1,192 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters.ts === +// Optional parameters should be valid in all the below casts + +function foo(x?: number) { } +>foo : (x?: number) => void +>x : number + +var f = function foo(x?: number) { } +>f : (x?: number) => void +>function foo(x?: number) { } : (x?: number) => void +>foo : (x?: number) => void +>x : number + +var f2 = (x: number, y?: number) => { } +>f2 : (x: number, y?: number) => void +>(x: number, y?: number) => { } : (x: number, y?: number) => void +>x : number +>y : number + +foo(1); +>foo(1) : void +>foo : (x?: number) => void + +foo(); +>foo() : void +>foo : (x?: number) => void + +f(1); +>f(1) : void +>f : (x?: number) => void + +f(); +>f() : void +>f : (x?: number) => void + +f2(1); +>f2(1) : void +>f2 : (x: number, y?: number) => void + +f2(1, 2); +>f2(1, 2) : void +>f2 : (x: number, y?: number) => void + +class C { +>C : C + + foo(x?: number) { } +>foo : (x?: number) => void +>x : number +} + +var c: C; +>c : C +>C : C + +c.foo(); +>c.foo() : void +>c.foo : (x?: number) => void +>c : C +>foo : (x?: number) => void + +c.foo(1); +>c.foo(1) : void +>c.foo : (x?: number) => void +>c : C +>foo : (x?: number) => void + +interface I { +>I : I + + (x?: number); +>x : number + + foo(x: number, y?: number); +>foo : (x: number, y?: number) => any +>x : number +>y : number +} + +var i: I; +>i : I +>I : I + +i(); +>i() : any +>i : I + +i(1); +>i(1) : any +>i : I + +i.foo(1); +>i.foo(1) : any +>i.foo : (x: number, y?: number) => any +>i : I +>foo : (x: number, y?: number) => any + +i.foo(1, 2); +>i.foo(1, 2) : any +>i.foo : (x: number, y?: number) => any +>i : I +>foo : (x: number, y?: number) => any + +var a: { +>a : { (x?: number): any; foo(x?: number): any; } + + (x?: number); +>x : number + + foo(x?: number); +>foo : (x?: number) => any +>x : number +} + +a(); +>a() : any +>a : { (x?: number): any; foo(x?: number): any; } + +a(1); +>a(1) : any +>a : { (x?: number): any; foo(x?: number): any; } + +a.foo(); +>a.foo() : any +>a.foo : (x?: number) => any +>a : { (x?: number): any; foo(x?: number): any; } +>foo : (x?: number) => any + +a.foo(1); +>a.foo(1) : any +>a.foo : (x?: number) => any +>a : { (x?: number): any; foo(x?: number): any; } +>foo : (x?: number) => any + +var b = { +>b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>{ foo(x?: number) { }, a: function foo(x: number, y?: number) { }, b: (x?: number) => { }} : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } + + foo(x?: number) { }, +>foo : (x?: number) => void +>foo(x?: number) { } : (x?: number) => void +>x : number + + a: function foo(x: number, y?: number) { }, +>a : (x: number, y?: number) => void +>function foo(x: number, y?: number) { } : (x: number, y?: number) => void +>foo : (x: number, y?: number) => void +>x : number +>y : number + + b: (x?: number) => { } +>b : (x?: number) => void +>(x?: number) => { } : (x?: number) => void +>x : number +} + +b.foo(); +>b.foo() : void +>b.foo : (x?: number) => void +>b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>foo : (x?: number) => void + +b.foo(1); +>b.foo(1) : void +>b.foo : (x?: number) => void +>b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>foo : (x?: number) => void + +b.a(1); +>b.a(1) : void +>b.a : (x: number, y?: number) => void +>b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>a : (x: number, y?: number) => void + +b.a(1, 2); +>b.a(1, 2) : void +>b.a : (x: number, y?: number) => void +>b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>a : (x: number, y?: number) => void + +b.b(); +>b.b() : void +>b.b : (x?: number) => void +>b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : (x?: number) => void + +b.b(1); +>b.b(1) : void +>b.b : (x?: number) => void +>b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : (x?: number) => void + diff --git a/tests/baselines/reference/callSignaturesWithOptionalParameters2.js b/tests/baselines/reference/callSignaturesWithOptionalParameters2.js index 9b46124c1ac..95ecb3a0e9c 100644 --- a/tests/baselines/reference/callSignaturesWithOptionalParameters2.js +++ b/tests/baselines/reference/callSignaturesWithOptionalParameters2.js @@ -60,6 +60,7 @@ a.foo(1, 2); a.foo(1, 2, 3); //// [callSignaturesWithOptionalParameters2.js] +// Optional parameters should be valid in all the below casts function foo(x) { } foo(1); diff --git a/tests/baselines/reference/callSignaturesWithOptionalParameters2.types b/tests/baselines/reference/callSignaturesWithOptionalParameters2.types new file mode 100644 index 00000000000..602edd911fe --- /dev/null +++ b/tests/baselines/reference/callSignaturesWithOptionalParameters2.types @@ -0,0 +1,203 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithOptionalParameters2.ts === +// Optional parameters should be valid in all the below casts + +function foo(x?: number); +>foo : (x?: number) => any +>x : number + +function foo(x?: number) { } +>foo : (x?: number) => any +>x : number + +foo(1); +>foo(1) : any +>foo : (x?: number) => any + +foo(); +>foo() : any +>foo : (x?: number) => any + +function foo2(x: number); +>foo2 : { (x: number): any; (x: number, y?: number): any; } +>x : number + +function foo2(x: number, y?: number); +>foo2 : { (x: number): any; (x: number, y?: number): any; } +>x : number +>y : number + +function foo2(x: number, y?: number) { } +>foo2 : { (x: number): any; (x: number, y?: number): any; } +>x : number +>y : number + +foo2(1); +>foo2(1) : any +>foo2 : { (x: number): any; (x: number, y?: number): any; } + +foo2(1, 2); +>foo2(1, 2) : any +>foo2 : { (x: number): any; (x: number, y?: number): any; } + +class C { +>C : C + + foo(x?: number); +>foo : (x?: number) => any +>x : number + + foo(x?: number) { } +>foo : (x?: number) => any +>x : number + + foo2(x: number); +>foo2 : { (x: number): any; (x: number, y?: number): any; } +>x : number + + foo2(x: number, y?: number); +>foo2 : { (x: number): any; (x: number, y?: number): any; } +>x : number +>y : number + + foo2(x: number, y?: number) { } +>foo2 : { (x: number): any; (x: number, y?: number): any; } +>x : number +>y : number +} + +var c: C; +>c : C +>C : C + +c.foo(); +>c.foo() : any +>c.foo : (x?: number) => any +>c : C +>foo : (x?: number) => any + +c.foo(1); +>c.foo(1) : any +>c.foo : (x?: number) => any +>c : C +>foo : (x?: number) => any + +c.foo2(1); +>c.foo2(1) : any +>c.foo2 : { (x: number): any; (x: number, y?: number): any; } +>c : C +>foo2 : { (x: number): any; (x: number, y?: number): any; } + +c.foo2(1, 2); +>c.foo2(1, 2) : any +>c.foo2 : { (x: number): any; (x: number, y?: number): any; } +>c : C +>foo2 : { (x: number): any; (x: number, y?: number): any; } + +interface I { +>I : I + + (x?: number); +>x : number + + (x?: number, y?: number); +>x : number +>y : number + + foo(x: number, y?: number); +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>x : number +>y : number + + foo(x: number, y?: number, z?: number); +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>x : number +>y : number +>z : number +} + +var i: I; +>i : I +>I : I + +i(); +>i() : any +>i : I + +i(1); +>i(1) : any +>i : I + +i(1, 2); +>i(1, 2) : any +>i : I + +i.foo(1); +>i.foo(1) : any +>i.foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>i : I +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } + +i.foo(1, 2); +>i.foo(1, 2) : any +>i.foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>i : I +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } + +i.foo(1, 2, 3); +>i.foo(1, 2, 3) : any +>i.foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>i : I +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } + +var a: { +>a : { (x?: number): any; (x?: number, y?: number): any; foo(x: number, y?: number): any; foo(x: number, y?: number, z?: number): any; } + + (x?: number); +>x : number + + (x?: number, y?: number); +>x : number +>y : number + + foo(x: number, y?: number); +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>x : number +>y : number + + foo(x: number, y?: number, z?: number); +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>x : number +>y : number +>z : number +} + +a(); +>a() : any +>a : { (x?: number): any; (x?: number, y?: number): any; foo(x: number, y?: number): any; foo(x: number, y?: number, z?: number): any; } + +a(1); +>a(1) : any +>a : { (x?: number): any; (x?: number, y?: number): any; foo(x: number, y?: number): any; foo(x: number, y?: number, z?: number): any; } + +a(1, 2); +>a(1, 2) : any +>a : { (x?: number): any; (x?: number, y?: number): any; foo(x: number, y?: number): any; foo(x: number, y?: number, z?: number): any; } + +a.foo(1); +>a.foo(1) : any +>a.foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>a : { (x?: number): any; (x?: number, y?: number): any; foo(x: number, y?: number): any; foo(x: number, y?: number, z?: number): any; } +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } + +a.foo(1, 2); +>a.foo(1, 2) : any +>a.foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>a : { (x?: number): any; (x?: number, y?: number): any; foo(x: number, y?: number): any; foo(x: number, y?: number, z?: number): any; } +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } + +a.foo(1, 2, 3); +>a.foo(1, 2, 3) : any +>a.foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } +>a : { (x?: number): any; (x?: number, y?: number): any; foo(x: number, y?: number): any; foo(x: number, y?: number, z?: number): any; } +>foo : { (x: number, y?: number): any; (x: number, y?: number, z?: number): any; } + diff --git a/tests/baselines/reference/callSignaturesWithParameterInitializers.js b/tests/baselines/reference/callSignaturesWithParameterInitializers.js index a00877e92c0..c95a558e4c8 100644 --- a/tests/baselines/reference/callSignaturesWithParameterInitializers.js +++ b/tests/baselines/reference/callSignaturesWithParameterInitializers.js @@ -58,6 +58,7 @@ b.b(1); //// [callSignaturesWithParameterInitializers.js] +// Optional parameters allow initializers only in implementation signatures function foo(x) { if (x === void 0) { x = 1; } } @@ -89,6 +90,7 @@ i(); i(1); i.foo(1); i.foo(1, 2); +// these are errors var a; a(); a(1); diff --git a/tests/baselines/reference/callbacksDontShareTypes.js b/tests/baselines/reference/callbacksDontShareTypes.js index f1e9865eee9..649ed1cb6ca 100644 --- a/tests/baselines/reference/callbacksDontShareTypes.js +++ b/tests/baselines/reference/callbacksDontShareTypes.js @@ -27,7 +27,7 @@ var rf1 = function (x) { var r1a = _.map(c2, function (x) { return x.toFixed(); }); -var r1b = _.map(c2, rf1); +var r1b = _.map(c2, rf1); // this line should not cause the following 2 to have errors var r5a = _.map(c2, function (x) { return x.toFixed(); }); diff --git a/tests/baselines/reference/callbacksDontShareTypes.types b/tests/baselines/reference/callbacksDontShareTypes.types new file mode 100644 index 00000000000..39ff5d8e306 --- /dev/null +++ b/tests/baselines/reference/callbacksDontShareTypes.types @@ -0,0 +1,110 @@ +=== tests/cases/compiler/callbacksDontShareTypes.ts === +interface Collection { +>Collection : Collection +>T : T + + length: number; +>length : number + + add(x: T): void; +>add : (x: T) => void +>x : T +>T : T + + remove(x: T): boolean; +>remove : (x: T) => boolean +>x : T +>T : T +} +interface Combinators { +>Combinators : Combinators + + map(c: Collection, f: (x: T) => U): Collection; +>map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>T : T +>U : U +>c : Collection +>Collection : Collection +>T : T +>f : (x: T) => U +>x : T +>T : T +>U : U +>Collection : Collection +>U : U + + map(c: Collection, f: (x: T) => any): Collection; +>map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>T : T +>c : Collection +>Collection : Collection +>T : T +>f : (x: T) => any +>x : T +>T : T +>Collection : Collection +} + +var _: Combinators; +>_ : Combinators +>Combinators : Combinators + +var c2: Collection; +>c2 : Collection +>Collection : Collection + +var rf1 = (x: number) => { return x.toFixed() }; +>rf1 : (x: number) => string +>(x: number) => { return x.toFixed() } : (x: number) => string +>x : number +>x.toFixed() : string +>x.toFixed : (fractionDigits?: number) => string +>x : number +>toFixed : (fractionDigits?: number) => string + +var r1a = _.map(c2, (x) => { return x.toFixed() }); +>r1a : Collection +>_.map(c2, (x) => { return x.toFixed() }) : Collection +>_.map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>_ : Combinators +>map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>c2 : Collection +>(x) => { return x.toFixed() } : (x: number) => string +>x : number +>x.toFixed() : string +>x.toFixed : (fractionDigits?: number) => string +>x : number +>toFixed : (fractionDigits?: number) => string + +var r1b = _.map(c2, rf1); // this line should not cause the following 2 to have errors +>r1b : Collection +>_.map(c2, rf1) : Collection +>_.map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>_ : Combinators +>map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>c2 : Collection +>rf1 : (x: number) => string + +var r5a = _.map(c2, (x) => { return x.toFixed() }); +>r5a : Collection +>_.map(c2, (x) => { return x.toFixed() }) : Collection +>_.map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>_ : Combinators +>map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>c2 : Collection +>(x) => { return x.toFixed() } : (x: number) => string +>x : number +>x.toFixed() : string +>x.toFixed : (fractionDigits?: number) => string +>x : number +>toFixed : (fractionDigits?: number) => string + +var r5b = _.map(c2, rf1); +>r5b : Collection +>_.map(c2, rf1) : Collection +>_.map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>_ : Combinators +>map : { (c: Collection, f: (x: T) => U): Collection; (c: Collection, f: (x: T) => any): Collection; } +>c2 : Collection +>rf1 : (x: number) => string + diff --git a/tests/baselines/reference/captureThisInSuperCall.types b/tests/baselines/reference/captureThisInSuperCall.types new file mode 100644 index 00000000000..faa7d2ad97e --- /dev/null +++ b/tests/baselines/reference/captureThisInSuperCall.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/captureThisInSuperCall.ts === +class A { +>A : A + + constructor(p:any) {} +>p : any +} + +class B extends A { +>B : B +>A : A + + constructor() { super({ test: () => this.someMethod()}); } +>super({ test: () => this.someMethod()}) : void +>super : typeof A +>{ test: () => this.someMethod()} : { test: () => void; } +>test : () => void +>() => this.someMethod() : () => void +>this.someMethod() : void +>this.someMethod : () => void +>this : B +>someMethod : () => void + + someMethod() {} +>someMethod : () => void +} diff --git a/tests/baselines/reference/castExpressionParentheses.js b/tests/baselines/reference/castExpressionParentheses.js index 9a33471ea72..2f62d6e9447 100644 --- a/tests/baselines/reference/castExpressionParentheses.js +++ b/tests/baselines/reference/castExpressionParentheses.js @@ -40,6 +40,8 @@ new (A()); //// [castExpressionParentheses.js] +// parentheses should be omitted +// literals { a: 0 }; [1, 3, ]; "string"; @@ -48,6 +50,7 @@ new (A()); false; true; null; +// names and dotted names this; this.x; a.x; @@ -55,6 +58,7 @@ a; a[0]; a.b["0"]; a().x; +// should keep the parentheses in emit (new A).foo; (typeof A).x; (-A).x; @@ -64,5 +68,7 @@ new (A()); (function foo() { })(); (-A).x; +// nested cast, should keep one pair of parenthese (-A).x; +// nested parenthesized expression, should keep one pair of parenthese (A); diff --git a/tests/baselines/reference/castExpressionParentheses.types b/tests/baselines/reference/castExpressionParentheses.types new file mode 100644 index 00000000000..7004aef9c95 --- /dev/null +++ b/tests/baselines/reference/castExpressionParentheses.types @@ -0,0 +1,169 @@ +=== tests/cases/compiler/castExpressionParentheses.ts === +declare var a; +>a : any + +// parentheses should be omitted +// literals +({a:0}); +>({a:0}) : any +>{a:0} : any +>{a:0} : { a: number; } +>a : number + +([1,3,]); +>([1,3,]) : any +>[1,3,] : any +>[1,3,] : number[] + +("string"); +>("string") : any +>"string" : any + +(23.0); +>(23.0) : any +>23.0 : any + +(/regexp/g); +>(/regexp/g) : any +>/regexp/g : any + +(false); +>(false) : any +>false : any + +(true); +>(true) : any +>true : any + +(null); +>(null) : any +>null : any + +// names and dotted names +(this); +>(this) : any +>this : any +>this : any + +(this.x); +>(this.x) : any +>this.x : any +>this.x : any +>this : any +>x : any + +((a).x); +>((a).x) : any +>(a).x : any +>(a).x : any +>(a) : any +>a : any +>a : any +>x : any + +(a); +>(a) : any +>a : any +>a : any +>a : any + +(a[0]); +>(a[0]) : any +>a[0] : any +>a[0] : any +>a : any + +(a.b["0"]); +>(a.b["0"]) : any +>a.b["0"] : any +>a.b["0"] : any +>a.b : any +>a : any +>b : any + +(a()).x; +>(a()).x : any +>(a()) : any +>a() : any +>a() : any +>a : any +>x : any + +declare var A; +>A : any + +// should keep the parentheses in emit +(new A).foo; +>(new A).foo : any +>(new A) : any +>new A : any +>new A : any +>A : any +>foo : any + +(typeof A).x; +>(typeof A).x : any +>(typeof A) : any +>typeof A : any +>typeof A : string +>A : any +>x : any + +(-A).x; +>(-A).x : any +>(-A) : any +>-A : any +>-A : number +>A : any +>x : any + +new (A()); +>new (A()) : any +>(A()) : any +>A() : any +>A() : any +>A : any + +(()=> {})(); +>(()=> {})() : void +>(()=> {}) : () => void +>()=> {} : () => void +>Tany : Tany + +(function foo() { })(); +>(function foo() { })() : any +>(function foo() { }) : any +>function foo() { } : any +>function foo() { } : () => void +>foo : () => void + +(-A).x; +>(-A).x : any +>(-A) : any +>-A : any +>-A : number +>-A : any +>-A : number +>A : any +>x : any + +// nested cast, should keep one pair of parenthese +((-A)).x; +>((-A)).x : any +>((-A)) : any +>(-A) : any +>(-A) : number +>(-A) : any +>-A : any +>-A : number +>A : any +>x : any + +// nested parenthesized expression, should keep one pair of parenthese +((A)) +>((A)) : any +>(A) : any +>(A) : any +>A : any + + diff --git a/tests/baselines/reference/castNewObjectBug.types b/tests/baselines/reference/castNewObjectBug.types new file mode 100644 index 00000000000..c3a6cffb84f --- /dev/null +++ b/tests/baselines/reference/castNewObjectBug.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/castNewObjectBug.ts === +interface Foo { } +>Foo : Foo + +var xx = new Object(); +>xx : Foo +> new Object() : Foo +>Foo : Foo +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + diff --git a/tests/baselines/reference/castParentheses.types b/tests/baselines/reference/castParentheses.types new file mode 100644 index 00000000000..f65a1d8f748 --- /dev/null +++ b/tests/baselines/reference/castParentheses.types @@ -0,0 +1,68 @@ +=== tests/cases/compiler/castParentheses.ts === +class a { +>a : a + + static b: any; +>b : any +} + +var b = (a); +>b : any +>(a) : any +>a : any +>a : typeof a + +var b = (a).b; +>b : any +>(a).b : any +>(a) : any +>a : any +>a : typeof a +>b : any + +var b = (a.b).c; +>b : any +>(a.b).c : any +>(a.b) : any +>a.b : any +>a.b : any +>a : typeof a +>b : any +>c : any + +var b = (a.b()).c; +>b : any +>(a.b()).c : any +>(a.b()) : any +>a.b() : any +>a.b() : any +>a.b : any +>a : typeof a +>b : any +>c : any + +var b = (new a); +>b : any +>(new a) : any +>new a : any +>new a : a +>a : typeof a + +var b = (new a.b); +>b : any +>(new a.b) : any +>new a.b : any +>new a.b : any +>a.b : any +>a : typeof a +>b : any + +var b = (new a).b +>b : any +>(new a).b : any +>(new a) : any +>new a : any +>new a : a +>a : typeof a +>b : any + diff --git a/tests/baselines/reference/castTest.types b/tests/baselines/reference/castTest.types new file mode 100644 index 00000000000..501ff5a3cbe --- /dev/null +++ b/tests/baselines/reference/castTest.types @@ -0,0 +1,106 @@ +=== tests/cases/compiler/castTest.ts === + +var x : any = 0; +>x : any + +var z = x; +>z : number +> x : number +>x : any + +var y = x + z; +>y : any +>x + z : any +>x : any +>z : number + +var a = 0; +>a : any +>0 : any + +var b = true; +>b : boolean +>true : boolean + +var s = ""; +>s : string +>"" : string + +var ar = null; +>ar : any[] +>null : any[] + +var f = <(res : number) => void>null; +>f : (res: number) => void +><(res : number) => void>null : (res: number) => void +>res : number + +declare class Point +>Point : Point +{ + x: number; +>x : number + + y: number; +>y : number + + add(dx: number, dy: number): Point; +>add : (dx: number, dy: number) => Point +>dx : number +>dy : number +>Point : Point + + mult(p: Point): Point; +>mult : (p: Point) => Point +>p : Point +>Point : Point +>Point : Point + + constructor(x: number, y: number); +>x : number +>y : number +} + +var p_cast = ({ +>p_cast : Point +> ({ x: 0, y: 0, add: function(dx, dy) { return new Point(this.x + dx, this.y + dy); }, mult: function(p) { return p; }}) : Point +>Point : Point +>({ x: 0, y: 0, add: function(dx, dy) { return new Point(this.x + dx, this.y + dy); }, mult: function(p) { return p; }}) : { x: number; y: number; add: (dx: any, dy: any) => Point; mult: (p: any) => any; } +>{ x: 0, y: 0, add: function(dx, dy) { return new Point(this.x + dx, this.y + dy); }, mult: function(p) { return p; }} : { x: number; y: number; add: (dx: any, dy: any) => Point; mult: (p: any) => any; } + + x: 0, +>x : number + + y: 0, +>y : number + + add: function(dx, dy) { +>add : (dx: any, dy: any) => Point +>function(dx, dy) { return new Point(this.x + dx, this.y + dy); } : (dx: any, dy: any) => Point +>dx : any +>dy : any + + return new Point(this.x + dx, this.y + dy); +>new Point(this.x + dx, this.y + dy) : Point +>Point : typeof Point +>this.x + dx : any +>this.x : any +>this : any +>x : any +>dx : any +>this.y + dy : any +>this.y : any +>this : any +>y : any +>dy : any + + }, + mult: function(p) { return p; } +>mult : (p: any) => any +>function(p) { return p; } : (p: any) => any +>p : any +>p : any + +}) + + diff --git a/tests/baselines/reference/catch.types b/tests/baselines/reference/catch.types new file mode 100644 index 00000000000..bb0b2adbefe --- /dev/null +++ b/tests/baselines/reference/catch.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/catch.ts === +function f() { +>f : () => void + + try {} catch(e) { } +>e : any + + try {} catch(e) { } +>e : any +} + diff --git a/tests/baselines/reference/cf.types b/tests/baselines/reference/cf.types new file mode 100644 index 00000000000..62dcba0ba9a --- /dev/null +++ b/tests/baselines/reference/cf.types @@ -0,0 +1,138 @@ +=== tests/cases/compiler/cf.ts === +function f() { +>f : () => void + + var z; +>z : any + + var x=10; +>x : number + + var y=3; +>y : number + + L1: for (var i=0;i<19;i++) { +>i : number +>i<19 : boolean +>i : number +>i++ : number +>i : number + + if (y==7) { +>y==7 : boolean +>y : number + + continue L1; + x=11; +>x=11 : number +>x : number + } + if (y==3) { +>y==3 : boolean +>y : number + + y++; +>y++ : number +>y : number + } + else { + y--; +>y-- : number +>y : number + } + do { + y+=2; +>y+=2 : number +>y : number + + if (y==20) { +>y==20 : boolean +>y : number + + break; + x=12; +>x=12 : number +>x : number + } + } while (y<41); +>y<41 : boolean +>y : number + + y++; +>y++ : number +>y : number + } + while (y>2) { +>y>2 : boolean +>y : number + + y=y>>1; +>y=y>>1 : number +>y : number +>y>>1 : number +>y : number + } + L2: try { + L3: if (xxx : number +>y : number + + break L2; + x=13; +>x=13 : number +>x : number + } + else { + break L3; + x=14; +>x=14 : number +>x : number + } + } + catch (e) { +>e : any + + x++; +>x++ : number +>x : number + } + finally { + x+=3; +>x+=3 : number +>x : number + } + y++; +>y++ : number +>y : number + + for (var k=0;k<10;k++) { +>k : number +>k<10 : boolean +>k : number +>k++ : number +>k : number + + z; +>z : any + + break; + } + for (k=0;k<10;k++) { +>k=0 : number +>k : number +>k<10 : boolean +>k : number +>k++ : number +>k : number + + if (k==6) { +>k==6 : boolean +>k : number + + continue; + } + break; + } +} + diff --git a/tests/baselines/reference/chainedAssignment1.js b/tests/baselines/reference/chainedAssignment1.js index 1f1c5cb7621..ac637b7def2 100644 --- a/tests/baselines/reference/chainedAssignment1.js +++ b/tests/baselines/reference/chainedAssignment1.js @@ -43,5 +43,5 @@ var Z = (function () { var c1 = new X(3); var c2 = new Y(5); var c3 = new Z(); -c1 = c2 = c3; -c2 = c3; +c1 = c2 = c3; // a bug made this not report the same error as below +c2 = c3; // Error TS111: Cannot convert Z to Y diff --git a/tests/baselines/reference/chainedAssignment2.types b/tests/baselines/reference/chainedAssignment2.types new file mode 100644 index 00000000000..3ddd7412b9c --- /dev/null +++ b/tests/baselines/reference/chainedAssignment2.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/chainedAssignment2.ts === +var a: string; +>a : string + +var b: number; +>b : number + +var c: boolean; +>c : boolean + +var d: Date; +>d : Date +>Date : Date + +var e: RegExp; +>e : RegExp +>RegExp : RegExp + +a = b = c = d = e = null; +>a = b = c = d = e = null : null +>a : string +>b = c = d = e = null : null +>b : number +>c = d = e = null : null +>c : boolean +>d = e = null : null +>d : Date +>e = null : null +>e : RegExp + + diff --git a/tests/baselines/reference/chainedAssignment3.js b/tests/baselines/reference/chainedAssignment3.js index f2c1554be8a..11b9ceb3a07 100644 --- a/tests/baselines/reference/chainedAssignment3.js +++ b/tests/baselines/reference/chainedAssignment3.js @@ -47,5 +47,6 @@ a = b = null; a = b = new B(); b = a = new B(); a.id = b.value = null; +// error cases b = a = new A(); a = b = new A(); diff --git a/tests/baselines/reference/chainedAssignmentChecking.js b/tests/baselines/reference/chainedAssignmentChecking.js index 403b4868569..e9c66ab3681 100644 --- a/tests/baselines/reference/chainedAssignmentChecking.js +++ b/tests/baselines/reference/chainedAssignmentChecking.js @@ -43,4 +43,4 @@ var Z = (function () { var c1 = new X(3); var c2 = new Y(5); var c3 = new Z(); -c1 = c2 = c3; +c1 = c2 = c3; // Should be error diff --git a/tests/baselines/reference/chainedCallsWithTypeParameterConstrainedToOtherTypeParameter.js b/tests/baselines/reference/chainedCallsWithTypeParameterConstrainedToOtherTypeParameter.js index 92243b90d14..70456b9e9d1 100644 --- a/tests/baselines/reference/chainedCallsWithTypeParameterConstrainedToOtherTypeParameter.js +++ b/tests/baselines/reference/chainedCallsWithTypeParameterConstrainedToOtherTypeParameter.js @@ -54,4 +54,5 @@ var C = (function (_super) { } return C; })(B); +// Ok to go down the chain, but error to try to climb back up (new Chain(new A)).then(function (a) { return new B; }).then(function (b) { return new C; }).then(function (c) { return new B; }).then(function (b) { return new A; }); diff --git a/tests/baselines/reference/chainedCallsWithTypeParameterConstrainedToOtherTypeParameter2.js b/tests/baselines/reference/chainedCallsWithTypeParameterConstrainedToOtherTypeParameter2.js index 608e6f72c37..3b9b8b80ecf 100644 --- a/tests/baselines/reference/chainedCallsWithTypeParameterConstrainedToOtherTypeParameter2.js +++ b/tests/baselines/reference/chainedCallsWithTypeParameterConstrainedToOtherTypeParameter2.js @@ -49,8 +49,11 @@ var Chain = (function () { Chain.prototype.then = function (cb) { var t; var s; + // Ok to go down the chain, but error to climb up the chain (new Chain(t)).then(function (tt) { return s; }).then(function (ss) { return t; }); + // But error to try to climb up the chain (new Chain(s)).then(function (ss) { return t; }); + // Staying at T or S should be fine (new Chain(t)).then(function (tt) { return t; }).then(function (tt) { return t; }).then(function (tt) { return t; }); (new Chain(s)).then(function (ss) { return s; }).then(function (ss) { return s; }).then(function (ss) { return s; }); return null; @@ -65,7 +68,11 @@ var Chain2 = (function () { var i; var t; var s; + // Ok to go down the chain, check the constraint at the end. + // Should get an error that we are assigning a string to a number (new Chain2(i)).then(function (ii) { return t; }).then(function (tt) { return s; }).value.x = ""; + // Staying at T or S should keep the constraint. + // Get an error when we assign a string to a number in both cases (new Chain2(i)).then(function (ii) { return t; }).then(function (tt) { return t; }).then(function (tt) { return t; }).then(function (tt) { return t; }).value.x = ""; (new Chain2(i)).then(function (ii) { return s; }).then(function (ss) { return s; }).then(function (ss) { return s; }).then(function (ss) { return s; }).value.x = ""; return null; diff --git a/tests/baselines/reference/chainedImportAlias.js b/tests/baselines/reference/chainedImportAlias.js index cbc1e82b45a..6149105bce0 100644 --- a/tests/baselines/reference/chainedImportAlias.js +++ b/tests/baselines/reference/chainedImportAlias.js @@ -6,15 +6,19 @@ export module m { } //// [chainedImportAlias_file1.ts] -import x = require('chainedImportAlias_file1'); +import x = require('chainedImportAlias_file0'); import y = x; -declare var console: { - log(message?: any); -}; -console.log(y); +y.m.foo(); +//// [chainedImportAlias_file0.js] +(function (m) { + function foo() { + } + m.foo = foo; +})(exports.m || (exports.m = {})); +var m = exports.m; //// [chainedImportAlias_file1.js] -var x = require('chainedImportAlias_file1'); +var x = require('chainedImportAlias_file0'); var y = x; -console.log(y); +y.m.foo(); diff --git a/tests/baselines/reference/chainedImportAlias.types b/tests/baselines/reference/chainedImportAlias.types new file mode 100644 index 00000000000..1435776fff2 --- /dev/null +++ b/tests/baselines/reference/chainedImportAlias.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/chainedImportAlias_file1.ts === +import x = require('chainedImportAlias_file0'); +>x : typeof x + +import y = x; +>y : typeof x +>x : typeof x + +y.m.foo(); +>y.m.foo() : void +>y.m.foo : () => void +>y.m : typeof x.m +>y : typeof x +>m : typeof x.m +>foo : () => void + +=== tests/cases/compiler/chainedImportAlias_file0.ts === +export module m { +>m : typeof m + + export function foo() { } +>foo : () => void +} + diff --git a/tests/baselines/reference/chainedSpecializationToObjectTypeLiteral.js b/tests/baselines/reference/chainedSpecializationToObjectTypeLiteral.js index c4c2328178d..e6995a04aca 100644 --- a/tests/baselines/reference/chainedSpecializationToObjectTypeLiteral.js +++ b/tests/baselines/reference/chainedSpecializationToObjectTypeLiteral.js @@ -15,5 +15,5 @@ var s3 = s2.each(x => { x.key /* Type is K, should be number */ }); var s; var s2 = s.groupBy(function (s) { return s.length; }); var s3 = s2.each(function (x) { - x.key; + x.key; /* Type is K, should be number */ }); diff --git a/tests/baselines/reference/chainedSpecializationToObjectTypeLiteral.types b/tests/baselines/reference/chainedSpecializationToObjectTypeLiteral.types new file mode 100644 index 00000000000..b76b19a724d --- /dev/null +++ b/tests/baselines/reference/chainedSpecializationToObjectTypeLiteral.types @@ -0,0 +1,71 @@ +=== tests/cases/compiler/chainedSpecializationToObjectTypeLiteral.ts === +interface Sequence { +>Sequence : Sequence +>T : T + + each(iterator: (value: T) => void): void; +>each : (iterator: (value: T) => void) => void +>iterator : (value: T) => void +>value : T +>T : T + + map(iterator: (value: T) => U): Sequence; +>map : (iterator: (value: T) => U) => Sequence +>U : U +>iterator : (value: T) => U +>value : T +>T : T +>U : U +>Sequence : Sequence +>U : U + + filter(iterator: (value: T) => boolean): Sequence; +>filter : (iterator: (value: T) => boolean) => Sequence +>iterator : (value: T) => boolean +>value : T +>T : T +>Sequence : Sequence +>T : T + + groupBy(keySelector: (value: T) => K): Sequence<{ key: K; items: T[]; }>; +>groupBy : (keySelector: (value: T) => K) => Sequence<{ key: K; items: T[]; }> +>K : K +>keySelector : (value: T) => K +>value : T +>T : T +>K : K +>Sequence : Sequence +>key : K +>K : K +>items : T[] +>T : T +} + +var s: Sequence; +>s : Sequence +>Sequence : Sequence + +var s2 = s.groupBy(s => s.length); +>s2 : Sequence<{ key: number; items: string[]; }> +>s.groupBy(s => s.length) : Sequence<{ key: number; items: string[]; }> +>s.groupBy : (keySelector: (value: string) => K) => Sequence<{ key: K; items: string[]; }> +>s : Sequence +>groupBy : (keySelector: (value: string) => K) => Sequence<{ key: K; items: string[]; }> +>s => s.length : (s: string) => number +>s : string +>s.length : number +>s : string +>length : number + +var s3 = s2.each(x => { x.key /* Type is K, should be number */ }); +>s3 : void +>s2.each(x => { x.key /* Type is K, should be number */ }) : void +>s2.each : (iterator: (value: { key: number; items: string[]; }) => void) => void +>s2 : Sequence<{ key: number; items: string[]; }> +>each : (iterator: (value: { key: number; items: string[]; }) => void) => void +>x => { x.key /* Type is K, should be number */ } : (x: { key: number; items: string[]; }) => void +>x : { key: number; items: string[]; } +>x.key : number +>x : { key: number; items: string[]; } +>key : number + diff --git a/tests/baselines/reference/checkInterfaceBases.js b/tests/baselines/reference/checkInterfaceBases.js index 54718986340..a30f4938c9e 100644 --- a/tests/baselines/reference/checkInterfaceBases.js +++ b/tests/baselines/reference/checkInterfaceBases.js @@ -16,3 +16,4 @@ interface Third extends JQueryEventObjectTest, SecondEvent {} //// [app.js] +/// diff --git a/tests/baselines/reference/checkInterfaceBases.types b/tests/baselines/reference/checkInterfaceBases.types new file mode 100644 index 00000000000..3e9107bbd6e --- /dev/null +++ b/tests/baselines/reference/checkInterfaceBases.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/app.ts === +/// +interface SecondEvent { +>SecondEvent : SecondEvent + + data: any; +>data : any +} +interface Third extends JQueryEventObjectTest, SecondEvent {} +>Third : Third +>JQueryEventObjectTest : JQueryEventObjectTest +>SecondEvent : SecondEvent + +=== tests/cases/compiler/jquery.d.ts === +interface JQueryEventObjectTest { +>JQueryEventObjectTest : JQueryEventObjectTest + + data: any; +>data : any + + which: number; +>which : number + + metaKey: any; +>metaKey : any +} + diff --git a/tests/baselines/reference/circularImportAlias.js b/tests/baselines/reference/circularImportAlias.js index 27c6af65aed..b1d435cc8ce 100644 --- a/tests/baselines/reference/circularImportAlias.js +++ b/tests/baselines/reference/circularImportAlias.js @@ -20,6 +20,7 @@ var c = new B.a.C(); //// [circularImportAlias.js] +// expected no error var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/circularImportAlias.types b/tests/baselines/reference/circularImportAlias.types new file mode 100644 index 00000000000..ab8de414e30 --- /dev/null +++ b/tests/baselines/reference/circularImportAlias.types @@ -0,0 +1,47 @@ +=== tests/cases/conformance/internalModules/importDeclarations/circularImportAlias.ts === +// expected no error + +module B { +>B : typeof a.b + + export import a = A; +>a : typeof a +>A : typeof a + + export class D extends a.C { +>D : D +>a : unknown +>C : a.C + + id: number; +>id : number + } +} + +module A { +>A : typeof b.a + + export class C { name: string } +>C : C +>name : string + + export import b = B; +>b : typeof b +>B : typeof b +} + +var c: { name: string }; +>c : { name: string; } +>name : string + +var c = new B.a.C(); +>c : { name: string; } +>new B.a.C() : A.C +>B.a.C : typeof A.C +>B.a : typeof A +>B : typeof B +>a : typeof A +>C : typeof A.C + + + diff --git a/tests/baselines/reference/classAndVariableWithSameName.js b/tests/baselines/reference/classAndVariableWithSameName.js index 818123cf8f9..ab17905d5b2 100644 --- a/tests/baselines/reference/classAndVariableWithSameName.js +++ b/tests/baselines/reference/classAndVariableWithSameName.js @@ -16,7 +16,7 @@ var C = (function () { } return C; })(); -var C = ''; +var C = ''; // error var M; (function (M) { var D = (function () { @@ -24,5 +24,5 @@ var M; } return D; })(); - var D = 1; + var D = 1; // error })(M || (M = {})); diff --git a/tests/baselines/reference/classAppearsToHaveMembersOfObject.types b/tests/baselines/reference/classAppearsToHaveMembersOfObject.types new file mode 100644 index 00000000000..fe4079bbfcf --- /dev/null +++ b/tests/baselines/reference/classAppearsToHaveMembersOfObject.types @@ -0,0 +1,32 @@ +=== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classAppearsToHaveMembersOfObject.ts === +class C { foo: string; } +>C : C +>foo : string + +var c: C; +>c : C +>C : C + +var r = c.toString(); +>r : string +>c.toString() : string +>c.toString : () => string +>c : C +>toString : () => string + +var r2 = c.hasOwnProperty(''); +>r2 : boolean +>c.hasOwnProperty('') : boolean +>c.hasOwnProperty : (v: string) => boolean +>c : C +>hasOwnProperty : (v: string) => boolean + +var o: Object = c; +>o : Object +>Object : Object +>c : C + +var o2: {} = c; +>o2 : {} +>c : C + diff --git a/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types b/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types new file mode 100644 index 00000000000..b39d65c3d65 --- /dev/null +++ b/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/classDeclarationMergedInModuleWithContinuation.ts === +module M { +>M : typeof M + + export class N { } +>N : N + + export module N { +>N : typeof N + + export var v = 0; +>v : number + } +} + +module M { +>M : typeof M + + export class O extends M.N { +>O : O +>M : unknown +>N : N + } +} diff --git a/tests/baselines/reference/classExtendingClass.types b/tests/baselines/reference/classExtendingClass.types new file mode 100644 index 00000000000..7eaaaecf17f --- /dev/null +++ b/tests/baselines/reference/classExtendingClass.types @@ -0,0 +1,112 @@ +=== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingClass.ts === +class C { +>C : C + + foo: string; +>foo : string + + thing() { } +>thing : () => void + + static other() { } +>other : () => void +} + +class D extends C { +>D : D +>C : C + + bar: string; +>bar : string +} + +var d: D; +>d : D +>D : D + +var r = d.foo; +>r : string +>d.foo : string +>d : D +>foo : string + +var r2 = d.bar; +>r2 : string +>d.bar : string +>d : D +>bar : string + +var r3 = d.thing(); +>r3 : void +>d.thing() : void +>d.thing : () => void +>d : D +>thing : () => void + +var r4 = D.other(); +>r4 : void +>D.other() : void +>D.other : () => void +>D : typeof D +>other : () => void + +class C2 { +>C2 : C2 +>T : T + + foo: T; +>foo : T +>T : T + + thing(x: T) { } +>thing : (x: T) => void +>x : T +>T : T + + static other(x: T) { } +>other : (x: T) => void +>T : T +>x : T +>T : T +} + +class D2 extends C2 { +>D2 : D2 +>T : T +>C2 : C2 +>T : T + + bar: string; +>bar : string +} + +var d2: D2; +>d2 : D2 +>D2 : D2 + +var r5 = d2.foo; +>r5 : string +>d2.foo : string +>d2 : D2 +>foo : string + +var r6 = d2.bar; +>r6 : string +>d2.bar : string +>d2 : D2 +>bar : string + +var r7 = d2.thing(''); +>r7 : void +>d2.thing('') : void +>d2.thing : (x: string) => void +>d2 : D2 +>thing : (x: string) => void + +var r8 = D2.other(1); +>r8 : void +>D2.other(1) : void +>D2.other : (x: T) => void +>D2 : typeof D2 +>other : (x: T) => void + diff --git a/tests/baselines/reference/classExtendingQualifiedName2.types b/tests/baselines/reference/classExtendingQualifiedName2.types new file mode 100644 index 00000000000..7706f6bada9 --- /dev/null +++ b/tests/baselines/reference/classExtendingQualifiedName2.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/classExtendingQualifiedName2.ts === +module M { +>M : typeof M + + export class C { +>C : C + } + + class D extends M.C { +>D : D +>M : unknown +>C : C + } +} diff --git a/tests/baselines/reference/classExtendsItself.js b/tests/baselines/reference/classExtendsItself.js index 126d88acd9a..bb6b68f07d6 100644 --- a/tests/baselines/reference/classExtendsItself.js +++ b/tests/baselines/reference/classExtendsItself.js @@ -18,18 +18,18 @@ var C = (function (_super) { _super.apply(this, arguments); } return C; -})(C); +})(C); // error var D = (function (_super) { __extends(D, _super); function D() { _super.apply(this, arguments); } return D; -})(D); +})(D); // error var E = (function (_super) { __extends(E, _super); function E() { _super.apply(this, arguments); } return E; -})(E); +})(E); // error diff --git a/tests/baselines/reference/classExtendsItselfIndirectly.js b/tests/baselines/reference/classExtendsItselfIndirectly.js index 584acb8bac6..11b697cff6b 100644 --- a/tests/baselines/reference/classExtendsItselfIndirectly.js +++ b/tests/baselines/reference/classExtendsItselfIndirectly.js @@ -24,7 +24,7 @@ var C = (function (_super) { _super.apply(this, arguments); } return C; -})(E); +})(E); // error var D = (function (_super) { __extends(D, _super); function D() { @@ -45,7 +45,7 @@ var C2 = (function (_super) { _super.apply(this, arguments); } return C2; -})(E2); +})(E2); // error var D2 = (function (_super) { __extends(D2, _super); function D2() { diff --git a/tests/baselines/reference/classExtendsItselfIndirectly2.js b/tests/baselines/reference/classExtendsItselfIndirectly2.js index d8932270253..129b2f51b36 100644 --- a/tests/baselines/reference/classExtendsItselfIndirectly2.js +++ b/tests/baselines/reference/classExtendsItselfIndirectly2.js @@ -35,7 +35,7 @@ var C = (function (_super) { _super.apply(this, arguments); } return C; -})(N.E); +})(N.E); // error var M; (function (M) { var D = (function (_super) { @@ -66,7 +66,7 @@ var O; _super.apply(this, arguments); } return C2; - })(Q.E2); + })(Q.E2); // error var P; (function (P) { var D2 = (function (_super) { diff --git a/tests/baselines/reference/classExtendsItselfIndirectly3.js b/tests/baselines/reference/classExtendsItselfIndirectly3.js index 26c3a85ef51..679525a40a6 100644 --- a/tests/baselines/reference/classExtendsItselfIndirectly3.js +++ b/tests/baselines/reference/classExtendsItselfIndirectly3.js @@ -31,7 +31,7 @@ var C = (function (_super) { _super.apply(this, arguments); } return C; -})(E); +})(E); // error //// [classExtendsItselfIndirectly_file2.js] var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; @@ -73,7 +73,7 @@ var C2 = (function (_super) { _super.apply(this, arguments); } return C2; -})(E2); +})(E2); // error //// [classExtendsItselfIndirectly_file5.js] var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; diff --git a/tests/baselines/reference/classExtendsValidConstructorFunction.js b/tests/baselines/reference/classExtendsValidConstructorFunction.js index 7de208a2614..a0876e8f709 100644 --- a/tests/baselines/reference/classExtendsValidConstructorFunction.js +++ b/tests/baselines/reference/classExtendsValidConstructorFunction.js @@ -14,11 +14,11 @@ var __extends = this.__extends || function (d, b) { }; function foo() { } -var x = new foo(); +var x = new foo(); // can be used as a constructor function var C = (function (_super) { __extends(C, _super); function C() { _super.apply(this, arguments); } return C; -})(foo); +})(foo); // error, cannot extend it though diff --git a/tests/baselines/reference/classImplementingInterfaceIndexer.types b/tests/baselines/reference/classImplementingInterfaceIndexer.types new file mode 100644 index 00000000000..58e2eb29091 --- /dev/null +++ b/tests/baselines/reference/classImplementingInterfaceIndexer.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/classImplementingInterfaceIndexer.ts === +interface I { +>I : I + + [index: string]: { prop } +>index : string +>prop : any +} +class A implements I { +>A : A +>I : I + + [index: string]: { prop } +>index : string +>prop : any +} diff --git a/tests/baselines/reference/classImplementsClass1.types b/tests/baselines/reference/classImplementsClass1.types new file mode 100644 index 00000000000..c9485a6b904 --- /dev/null +++ b/tests/baselines/reference/classImplementsClass1.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/classImplementsClass1.ts === +class A { } +>A : A + +class C implements A { } +>C : C +>A : A + diff --git a/tests/baselines/reference/classImplementsClass2.js b/tests/baselines/reference/classImplementsClass2.js index 0b4bb102403..98554944bc9 100644 --- a/tests/baselines/reference/classImplementsClass2.js +++ b/tests/baselines/reference/classImplementsClass2.js @@ -32,7 +32,7 @@ var C = (function () { function C() { } return C; -})(); +})(); // error var C2 = (function (_super) { __extends(C2, _super); function C2() { diff --git a/tests/baselines/reference/classImplementsClass3.js b/tests/baselines/reference/classImplementsClass3.js index 682b90ecc5a..9dbfc4388e9 100644 --- a/tests/baselines/reference/classImplementsClass3.js +++ b/tests/baselines/reference/classImplementsClass3.js @@ -44,6 +44,7 @@ var C2 = (function (_super) { } return C2; })(A); +// no errors var c; var c2; c = c2; diff --git a/tests/baselines/reference/classImplementsClass3.types b/tests/baselines/reference/classImplementsClass3.types new file mode 100644 index 00000000000..182ac535966 --- /dev/null +++ b/tests/baselines/reference/classImplementsClass3.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/classImplementsClass3.ts === +class A { foo(): number { return 1; } } +>A : A +>foo : () => number + +class C implements A { +>C : C +>A : A + + foo() { +>foo : () => number + + return 1; + } +} + +class C2 extends A {} +>C2 : C2 +>A : A + +// no errors +var c: C; +>c : C +>C : C + +var c2: C2; +>c2 : C2 +>C2 : C2 + +c = c2; +>c = c2 : C2 +>c : C +>c2 : C2 + +c2 = c; +>c2 = c : C +>c2 : C2 +>c : C + diff --git a/tests/baselines/reference/classImplementsClass6.js b/tests/baselines/reference/classImplementsClass6.js index 2ed6ddc396e..386cd6685ae 100644 --- a/tests/baselines/reference/classImplementsClass6.js +++ b/tests/baselines/reference/classImplementsClass6.js @@ -58,5 +58,5 @@ var c; var c2; c = c2; c2 = c; -c.bar(); -c2.bar(); +c.bar(); // error +c2.bar(); // should error diff --git a/tests/baselines/reference/classImplementsImportedInterface.types b/tests/baselines/reference/classImplementsImportedInterface.types new file mode 100644 index 00000000000..74b0e81eb60 --- /dev/null +++ b/tests/baselines/reference/classImplementsImportedInterface.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/classImplementsImportedInterface.ts === +module M1 { +>M1 : unknown + + export interface I { +>I : I + + foo(); +>foo : () => any + } +} + +module M2 { +>M2 : typeof M2 + + import T = M1.I; +>T : unknown +>M1 : unknown +>I : T + + class C implements T { +>C : C +>T : T + + foo() {} +>foo : () => void + } +} diff --git a/tests/baselines/reference/classIndexer.types b/tests/baselines/reference/classIndexer.types new file mode 100644 index 00000000000..01eda961112 --- /dev/null +++ b/tests/baselines/reference/classIndexer.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/classIndexer.ts === +class C123 { +>C123 : C123 + + [s: string]: number; +>s : string + + constructor() { + } +} diff --git a/tests/baselines/reference/classMemberInitializerScoping.js b/tests/baselines/reference/classMemberInitializerScoping.js index 20ce9c80263..db8d6a1bede 100644 --- a/tests/baselines/reference/classMemberInitializerScoping.js +++ b/tests/baselines/reference/classMemberInitializerScoping.js @@ -25,11 +25,12 @@ var aaa = 1; var CCC = (function () { function CCC(aaa) { this.y = aaa; - this.y = ''; + this.y = ''; // was: error, cannot assign string to number } - CCC.staticY = aaa; + CCC.staticY = aaa; // This shouldnt be error return CCC; })(); +// above is equivalent to this: var aaaa = 1; var CCCC = (function () { function CCCC(aaaa) { diff --git a/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js b/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js index 9eb0eb83074..a431f6aceb8 100644 --- a/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping.js @@ -37,12 +37,12 @@ var Test = (function () { this.field = field; this.messageHandler = function () { var field = _this.field; - console.log(field); + console.log(field); // Using field here shouldnt be error }; } Test.staticMessageHandler = function () { var field = Test.field; - console.log(field); + console.log(field); // Using field here shouldnt be error }; return Test; })(); @@ -51,11 +51,13 @@ var Test1 = (function () { function Test1(field1) { this.field1 = field1; this.messageHandler = function () { - console.log(field1); + console.log(field1); // But this should be error as the field1 will resolve to var field1 + // but since this code would be generated inside constructor, in generated js + // it would resolve to private field1 and thats not what user intended here. }; } Test1.staticMessageHandler = function () { - console.log(field1); + console.log(field1); // This shouldnt be error as its a static property }; return Test1; })(); diff --git a/tests/baselines/reference/classMemberInitializerWithLamdaScoping2.js b/tests/baselines/reference/classMemberInitializerWithLamdaScoping2.js index fb299aea4c6..8509d60de7c 100644 --- a/tests/baselines/reference/classMemberInitializerWithLamdaScoping2.js +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping2.js @@ -24,7 +24,9 @@ var Test1 = (function () { function Test1(field1) { this.field1 = field1; this.messageHandler = function () { - console.log(field1); + console.log(field1); // But this should be error as the field1 will resolve to var field1 + // but since this code would be generated inside constructor, in generated js + // it would resolve to private field1 and thats not what user intended here. }; } return Test1; diff --git a/tests/baselines/reference/classMemberInitializerWithLamdaScoping5.js b/tests/baselines/reference/classMemberInitializerWithLamdaScoping5.js index 0dec98fb9b3..3e7649210ba 100644 --- a/tests/baselines/reference/classMemberInitializerWithLamdaScoping5.js +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping5.js @@ -15,7 +15,7 @@ class Greeter { var Greeter = (function () { function Greeter(message) { this.messageHandler = function (message) { - console.log(message); + console.log(message); // This shouldnt be error }; } return Greeter; diff --git a/tests/baselines/reference/classMemberInitializerWithLamdaScoping5.types b/tests/baselines/reference/classMemberInitializerWithLamdaScoping5.types new file mode 100644 index 00000000000..bff966e605f --- /dev/null +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping5.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/classMemberInitializerWithLamdaScoping5.ts === +declare var console: { +>console : { log(message?: any, ...optionalParams: any[]): void; } + + log(message?: any, ...optionalParams: any[]): void; +>log : (message?: any, ...optionalParams: any[]) => void +>message : any +>optionalParams : any[] + +}; +class Greeter { +>Greeter : Greeter + + constructor(message: string) { +>message : string + } + + messageHandler = (message: string) => { +>messageHandler : (message: string) => void +>(message: string) => { console.log(message); // This shouldnt be error } : (message: string) => void +>message : string + + console.log(message); // This shouldnt be error +>console.log(message) : void +>console.log : (message?: any, ...optionalParams: any[]) => void +>console : { log(message?: any, ...optionalParams: any[]): void; } +>log : (message?: any, ...optionalParams: any[]) => void +>message : string + } +} diff --git a/tests/baselines/reference/classMethodWithKeywordName1.types b/tests/baselines/reference/classMethodWithKeywordName1.types new file mode 100644 index 00000000000..8ad128bdb00 --- /dev/null +++ b/tests/baselines/reference/classMethodWithKeywordName1.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/classMethodWithKeywordName1.ts === +class C { +>C : C + + static try() {} +>try : () => void +} diff --git a/tests/baselines/reference/classOrder1.js b/tests/baselines/reference/classOrder1.js index 6748a45444d..68bf1cd2a45 100644 --- a/tests/baselines/reference/classOrder1.js +++ b/tests/baselines/reference/classOrder1.js @@ -16,6 +16,7 @@ var A = (function () { function A() { } A.prototype.foo = function () { + /*WScript.Echo("Here!");*/ }; return A; })(); diff --git a/tests/baselines/reference/classOrder1.types b/tests/baselines/reference/classOrder1.types new file mode 100644 index 00000000000..7019e53cbb7 --- /dev/null +++ b/tests/baselines/reference/classOrder1.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/classOrder1.ts === +class A { +>A : A + + public foo() { +>foo : () => void + + /*WScript.Echo("Here!");*/ + } +} + +var a = new A(); +>a : A +>new A() : A +>A : typeof A + +a.foo(); +>a.foo() : void +>a.foo : () => void +>a : A +>foo : () => void + + + diff --git a/tests/baselines/reference/classOrder2.types b/tests/baselines/reference/classOrder2.types new file mode 100644 index 00000000000..07bd6ba45a5 --- /dev/null +++ b/tests/baselines/reference/classOrder2.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/classOrder2.ts === + +class A extends B { +>A : A +>B : B + + foo() { this.bar(); } +>foo : () => void +>this.bar() : void +>this.bar : () => void +>this : A +>bar : () => void + +} + +class B { +>B : B + + bar() { } +>bar : () => void + +} + + +var a = new A(); +>a : A +>new A() : A +>A : typeof A + +a.foo(); +>a.foo() : void +>a.foo : () => void +>a : A +>foo : () => void + + diff --git a/tests/baselines/reference/classOrderBug.types b/tests/baselines/reference/classOrderBug.types new file mode 100644 index 00000000000..979b65b8008 --- /dev/null +++ b/tests/baselines/reference/classOrderBug.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/classOrderBug.ts === +class bar { +>bar : bar + + public baz: foo; +>baz : foo +>foo : foo + + constructor() { + + this.baz = new foo(); +>this.baz = new foo() : foo +>this.baz : foo +>this : bar +>baz : foo +>new foo() : foo +>foo : typeof foo + + } + +} + +class baz {} +>baz : baz + +class foo extends baz {} +>foo : foo +>baz : baz + + + diff --git a/tests/baselines/reference/classSideInheritance1.js b/tests/baselines/reference/classSideInheritance1.js index 7cb37e7d154..38b84b77bd3 100644 --- a/tests/baselines/reference/classSideInheritance1.js +++ b/tests/baselines/reference/classSideInheritance1.js @@ -42,7 +42,7 @@ var C2 = (function (_super) { })(A); var a; var c; -a.bar(); -c.bar(); -A.bar(); -C2.bar(); +a.bar(); // static off an instance - should be an error +c.bar(); // static off an instance - should be an error +A.bar(); // valid +C2.bar(); // valid diff --git a/tests/baselines/reference/classSideInheritance2.types b/tests/baselines/reference/classSideInheritance2.types new file mode 100644 index 00000000000..9c2d632ebbb --- /dev/null +++ b/tests/baselines/reference/classSideInheritance2.types @@ -0,0 +1,47 @@ +=== tests/cases/compiler/classSideInheritance2.ts === +interface IText { +>IText : IText + + foo: number; +>foo : number +} + +interface TextSpan {} +>TextSpan : TextSpan + +class SubText extends TextBase { +>SubText : SubText +>TextBase : TextBase + + constructor(text: IText, span: TextSpan) { +>text : IText +>IText : IText +>span : TextSpan +>TextSpan : TextSpan + + super(); +>super() : void +>super : typeof TextBase + } +} + +class TextBase implements IText { +>TextBase : TextBase +>IText : IText + + public foo: number; +>foo : number + + public subText(span: TextSpan): IText { +>subText : (span: TextSpan) => IText +>span : TextSpan +>TextSpan : TextSpan +>IText : IText + + return new SubText(this, span); +>new SubText(this, span) : SubText +>SubText : typeof SubText +>this : TextBase +>span : TextSpan + } +} diff --git a/tests/baselines/reference/classSideInheritance3.js b/tests/baselines/reference/classSideInheritance3.js index 0e226d9f417..9f90fad487b 100644 --- a/tests/baselines/reference/classSideInheritance3.js +++ b/tests/baselines/reference/classSideInheritance3.js @@ -46,6 +46,6 @@ var C = (function (_super) { } return C; })(A); -var r1 = B; -var r2 = B; -var r3 = C; +var r1 = B; // error +var r2 = B; // error +var r3 = C; // ok diff --git a/tests/baselines/reference/classWithBaseClassButNoConstructor.js b/tests/baselines/reference/classWithBaseClassButNoConstructor.js index 1f7009c5b03..2c881a29a7c 100644 --- a/tests/baselines/reference/classWithBaseClassButNoConstructor.js +++ b/tests/baselines/reference/classWithBaseClassButNoConstructor.js @@ -60,8 +60,8 @@ var C = (function (_super) { return C; })(Base); var r = C; -var c = new C(); -var c2 = new C(1); +var c = new C(); // error +var c2 = new C(1); // ok var Base2 = (function () { function Base2(x) { } @@ -75,8 +75,9 @@ var D = (function (_super) { return D; })(Base2); var r2 = D; -var d = new D(); -var d2 = new D(1); +var d = new D(); // error +var d2 = new D(1); // ok +// specialized base class var D2 = (function (_super) { __extends(D2, _super); function D2() { @@ -85,8 +86,8 @@ var D2 = (function (_super) { return D2; })(Base2); var r3 = D2; -var d3 = new D(); -var d4 = new D(1); +var d3 = new D(); // error +var d4 = new D(1); // ok var D3 = (function (_super) { __extends(D3, _super); function D3() { @@ -95,5 +96,5 @@ var D3 = (function (_super) { return D3; })(Base2); var r4 = D3; -var d5 = new D(); -var d6 = new D(1); +var d5 = new D(); // error +var d6 = new D(1); // ok diff --git a/tests/baselines/reference/classWithConstructors.js b/tests/baselines/reference/classWithConstructors.js index baa4cd7d26a..10afc3a9f1b 100644 --- a/tests/baselines/reference/classWithConstructors.js +++ b/tests/baselines/reference/classWithConstructors.js @@ -63,16 +63,16 @@ var NonGeneric; } return C; })(); - var c = new C(); - var c2 = new C(''); + var c = new C(); // error + var c2 = new C(''); // ok var C2 = (function () { function C2(x) { } return C2; })(); - var c3 = new C2(); - var c4 = new C2(''); - var c5 = new C2(1); + var c3 = new C2(); // error + var c4 = new C2(''); // ok + var c5 = new C2(1); // ok var D = (function (_super) { __extends(D, _super); function D() { @@ -80,9 +80,9 @@ var NonGeneric; } return D; })(C2); - var d = new D(); - var d2 = new D(1); - var d3 = new D(''); + var d = new D(); // error + var d2 = new D(1); // ok + var d3 = new D(''); // ok })(NonGeneric || (NonGeneric = {})); var Generics; (function (Generics) { @@ -91,16 +91,16 @@ var Generics; } return C; })(); - var c = new C(); - var c2 = new C(''); + var c = new C(); // error + var c2 = new C(''); // ok var C2 = (function () { function C2(x) { } return C2; })(); - var c3 = new C2(); - var c4 = new C2(''); - var c5 = new C2(1, 2); + var c3 = new C2(); // error + var c4 = new C2(''); // ok + var c5 = new C2(1, 2); // ok var D = (function (_super) { __extends(D, _super); function D() { @@ -108,7 +108,7 @@ var Generics; } return D; })(C2); - var d = new D(); - var d2 = new D(1); - var d3 = new D(''); + var d = new D(); // error + var d2 = new D(1); // ok + var d3 = new D(''); // ok })(Generics || (Generics = {})); diff --git a/tests/baselines/reference/classWithEmptyBody.types b/tests/baselines/reference/classWithEmptyBody.types new file mode 100644 index 00000000000..ccf3c8556e0 --- /dev/null +++ b/tests/baselines/reference/classWithEmptyBody.types @@ -0,0 +1,59 @@ +=== tests/cases/conformance/classes/classDeclarations/classBody/classWithEmptyBody.ts === +class C { +>C : C +} + +var c: C; +>c : C +>C : C + +var o: {} = c; +>o : {} +>c : C + +c = 1; +>c = 1 : number +>c : C + +c = { foo: '' } +>c = { foo: '' } : { foo: string; } +>c : C +>{ foo: '' } : { foo: string; } +>foo : string + +c = () => { } +>c = () => { } : () => void +>c : C +>() => { } : () => void + +class D { +>D : D + + constructor() { + return 1; + } +} + +var d: D; +>d : D +>D : D + +var o: {} = d; +>o : {} +>d : D + +d = 1; +>d = 1 : number +>d : D + +d = { foo: '' } +>d = { foo: '' } : { foo: string; } +>d : D +>{ foo: '' } : { foo: string; } +>foo : string + +d = () => { } +>d = () => { } : () => void +>d : D +>() => { } : () => void + diff --git a/tests/baselines/reference/classWithNoConstructorOrBaseClass.types b/tests/baselines/reference/classWithNoConstructorOrBaseClass.types new file mode 100644 index 00000000000..9df56f81bb1 --- /dev/null +++ b/tests/baselines/reference/classWithNoConstructorOrBaseClass.types @@ -0,0 +1,45 @@ +=== tests/cases/conformance/classes/members/constructorFunctionTypes/classWithNoConstructorOrBaseClass.ts === +class C { +>C : C + + x: string; +>x : string +} + +var c = new C(); +>c : C +>new C() : C +>C : typeof C + +var r = C; +>r : typeof C +>C : typeof C + +class D { +>D : D +>T : T +>U : U + + x: T; +>x : T +>T : T + + y: U; +>y : U +>U : U +} + +var d = new D(); +>d : D<{}, {}> +>new D() : D<{}, {}> +>D : typeof D + +var d2 = new D(); +>d2 : D +>new D() : D +>D : typeof D + +var r2 = D; +>r2 : typeof D +>D : typeof D + diff --git a/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface.js b/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface.js index 9c7474fbfb5..acb802d0f97 100644 --- a/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface.js +++ b/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface.js @@ -26,6 +26,7 @@ c = i; i = c; //// [classWithOnlyPublicMembersEquivalentToInterface.js] +// no errors expected var C = (function () { function C() { } diff --git a/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface.types b/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface.types new file mode 100644 index 00000000000..9f6d031bf20 --- /dev/null +++ b/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface.types @@ -0,0 +1,73 @@ +=== tests/cases/conformance/types/namedTypes/classWithOnlyPublicMembersEquivalentToInterface.ts === +// no errors expected + +class C { +>C : C + + public x: string; +>x : string + + public y(a: number): number { return null; } +>y : (a: number) => number +>a : number + + public get z() { return 1; } +>z : number + + public set z(v) { } +>z : number +>v : number + + [x: string]: Object; +>x : string +>Object : Object + + [x: number]: Object; +>x : number +>Object : Object + + 0: number; +} + +interface I { +>I : I + + x: string; +>x : string + + y(b: number): number; +>y : (b: number) => number +>b : number + + z: number; +>z : number + + [x: string]: Object; +>x : string +>Object : Object + + [x: number]: Object; +>x : number +>Object : Object + + 0: number; +} + +var c: C; +>c : C +>C : C + +var i: I; +>i : I +>I : I + +c = i; +>c = i : I +>c : C +>i : I + +i = c; +>i = c : C +>i : I +>c : C + diff --git a/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface2.js b/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface2.js index f41f084d5fb..1048c2e5124 100644 --- a/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface2.js +++ b/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface2.js @@ -28,6 +28,7 @@ c = i; i = c; //// [classWithOnlyPublicMembersEquivalentToInterface2.js] +// no errors expected var C = (function () { function C() { } diff --git a/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface2.types b/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface2.types new file mode 100644 index 00000000000..be504f895fd --- /dev/null +++ b/tests/baselines/reference/classWithOnlyPublicMembersEquivalentToInterface2.types @@ -0,0 +1,76 @@ +=== tests/cases/conformance/types/namedTypes/classWithOnlyPublicMembersEquivalentToInterface2.ts === +// no errors expected + +class C { +>C : C + + public x: string; +>x : string + + public y(a: number): number { return null; } +>y : (a: number) => number +>a : number + + public get z() { return 1; } +>z : number + + public set z(v) { } +>z : number +>v : number + + [x: string]: Object; +>x : string +>Object : Object + + [x: number]: Object; +>x : number +>Object : Object + + 0: number; + + public static foo: string; // doesn't effect equivalence +>foo : string +} + +interface I { +>I : I + + x: string; +>x : string + + y(b: number): number; +>y : (b: number) => number +>b : number + + z: number; +>z : number + + [x: string]: Object; +>x : string +>Object : Object + + [x: number]: Object; +>x : number +>Object : Object + + 0: number; +} + +var c: C; +>c : C +>C : C + +var i: I; +>i : I +>I : I + +c = i; +>c = i : I +>c : C +>i : I + +i = c; +>i = c : C +>i : I +>c : C + diff --git a/tests/baselines/reference/classWithPredefinedTypesAsNames.js b/tests/baselines/reference/classWithPredefinedTypesAsNames.js index 8de0af7c134..d7c458de41b 100644 --- a/tests/baselines/reference/classWithPredefinedTypesAsNames.js +++ b/tests/baselines/reference/classWithPredefinedTypesAsNames.js @@ -7,6 +7,7 @@ class boolean { } class string { } //// [classWithPredefinedTypesAsNames.js] +// classes cannot use predefined types as names var any = (function () { function any() { } diff --git a/tests/baselines/reference/classWithPrivateProperty.js b/tests/baselines/reference/classWithPrivateProperty.js index 534f4082b6d..224fc432b64 100644 --- a/tests/baselines/reference/classWithPrivateProperty.js +++ b/tests/baselines/reference/classWithPrivateProperty.js @@ -23,6 +23,7 @@ var r7: string = C.f(); var r8: string = C.g(); //// [classWithPrivateProperty.js] +// accessing any private outside the class is an error var C = (function () { function C() { this.a = ''; diff --git a/tests/baselines/reference/classWithPublicProperty.js b/tests/baselines/reference/classWithPublicProperty.js index 277314db652..97b3f46ab49 100644 --- a/tests/baselines/reference/classWithPublicProperty.js +++ b/tests/baselines/reference/classWithPublicProperty.js @@ -37,6 +37,7 @@ var C = (function () { C.g = function () { return ''; }; return C; })(); +// all of these are valid var c = new C(); var r1 = c.x; var r2 = c.a; diff --git a/tests/baselines/reference/classWithPublicProperty.types b/tests/baselines/reference/classWithPublicProperty.types new file mode 100644 index 00000000000..a5bdeb95f1a --- /dev/null +++ b/tests/baselines/reference/classWithPublicProperty.types @@ -0,0 +1,89 @@ +=== tests/cases/conformance/types/members/classWithPublicProperty.ts === +class C { +>C : C + + public x; +>x : any + + public a = ''; +>a : string + + public b: string = ''; +>b : string + + public c() { return '' } +>c : () => string + + public d = () => ''; +>d : () => string +>() => '' : () => string + + public static e; +>e : any + + public static f() { return '' } +>f : () => string + + public static g = () => ''; +>g : () => string +>() => '' : () => string +} + +// all of these are valid +var c = new C(); +>c : C +>new C() : C +>C : typeof C + +var r1: string = c.x; +>r1 : string +>c.x : any +>c : C +>x : any + +var r2: string = c.a; +>r2 : string +>c.a : string +>c : C +>a : string + +var r3: string = c.b; +>r3 : string +>c.b : string +>c : C +>b : string + +var r4: string = c.c(); +>r4 : string +>c.c() : string +>c.c : () => string +>c : C +>c : () => string + +var r5: string = c.d(); +>r5 : string +>c.d() : string +>c.d : () => string +>c : C +>d : () => string + +var r6: string = C.e; +>r6 : string +>C.e : any +>C : typeof C +>e : any + +var r7: string = C.f(); +>r7 : string +>C.f() : string +>C.f : () => string +>C : typeof C +>f : () => string + +var r8: string = C.g(); +>r8 : string +>C.g() : string +>C.g : () => string +>C : typeof C +>g : () => string + diff --git a/tests/baselines/reference/classWithoutExplicitConstructor.js b/tests/baselines/reference/classWithoutExplicitConstructor.js index b2574663fc2..fed448a2459 100644 --- a/tests/baselines/reference/classWithoutExplicitConstructor.js +++ b/tests/baselines/reference/classWithoutExplicitConstructor.js @@ -24,7 +24,7 @@ var C = (function () { return C; })(); var c = new C(); -var c2 = new C(null); +var c2 = new C(null); // error var D = (function () { function D() { this.x = 2; @@ -33,4 +33,4 @@ var D = (function () { return D; })(); var d = new D(); -var d2 = new D(null); +var d2 = new D(null); // error diff --git a/tests/baselines/reference/cloduleAcrossModuleDefinitions.js b/tests/baselines/reference/cloduleAcrossModuleDefinitions.js index 280e30c8c7d..9f2a55a9ea2 100644 --- a/tests/baselines/reference/cloduleAcrossModuleDefinitions.js +++ b/tests/baselines/reference/cloduleAcrossModuleDefinitions.js @@ -36,4 +36,4 @@ var A; })(A.B || (A.B = {})); var B = A.B; })(A || (A = {})); -var b; +var b; // ok diff --git a/tests/baselines/reference/cloduleAcrossModuleDefinitions.types b/tests/baselines/reference/cloduleAcrossModuleDefinitions.types new file mode 100644 index 00000000000..cda79f73734 --- /dev/null +++ b/tests/baselines/reference/cloduleAcrossModuleDefinitions.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/cloduleAcrossModuleDefinitions.ts === +module A { +>A : typeof A + + export class B { +>B : B + + foo() { } +>foo : () => void + + static bar() { } +>bar : () => void + } +} + +module A { +>A : typeof A + + export module B { +>B : typeof B + + export var x = 1; +>x : number + } +} + +var b: A.B; // ok +>b : A.B +>A : unknown +>B : A.B + diff --git a/tests/baselines/reference/cloduleAndTypeParameters.types b/tests/baselines/reference/cloduleAndTypeParameters.types new file mode 100644 index 00000000000..493aaa2d395 --- /dev/null +++ b/tests/baselines/reference/cloduleAndTypeParameters.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/cloduleAndTypeParameters.ts === +class Foo { +>Foo : Foo +>T : T +>Foo : Foo +>Bar : Foo.Bar + + constructor() { + } +} + +module Foo { +>Foo : typeof Foo + + export interface Bar { +>Bar : Bar + + bar(): void; +>bar : () => void + } + + export class Baz { +>Baz : Baz + } +} diff --git a/tests/baselines/reference/cloduleTest1.types b/tests/baselines/reference/cloduleTest1.types new file mode 100644 index 00000000000..a92355b483a --- /dev/null +++ b/tests/baselines/reference/cloduleTest1.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/cloduleTest1.ts === + declare function $(selector: string): $; +>$ : typeof $ +>selector : string +>$ : $ + + interface $ { +>$ : $ + + addClass(className: string): $; +>addClass : (className: string) => $ +>className : string +>$ : $ + } + module $ { +>$ : typeof $ + + export interface AjaxSettings { +>AjaxSettings : AjaxSettings + } + export function ajax(options: AjaxSettings) { } +>ajax : (options: AjaxSettings) => void +>options : AjaxSettings +>AjaxSettings : AjaxSettings + } + var it: $ = $('.foo').addClass('bar'); +>it : $ +>$ : $ +>$('.foo').addClass('bar') : $ +>$('.foo').addClass : (className: string) => $ +>$('.foo') : $ +>$ : typeof $ +>addClass : (className: string) => $ + diff --git a/tests/baselines/reference/cloduleTest2.js b/tests/baselines/reference/cloduleTest2.js index f2097ca9338..96221ed58a2 100644 --- a/tests/baselines/reference/cloduleTest2.js +++ b/tests/baselines/reference/cloduleTest2.js @@ -43,7 +43,7 @@ var T1; (function (m3d) { m3d.y = 2; })(m3d || (m3d = {})); - var r = new m3d(); + var r = new m3d(); // error })(T1 || (T1 = {})); var T2; (function (T2) { @@ -51,7 +51,7 @@ var T2; (function (m3d) { m3d.y = 2; })(m3d || (m3d = {})); - var r = new m3d(); + var r = new m3d(); // error })(T2 || (T2 = {})); var T3; (function (T3) { @@ -61,8 +61,8 @@ var T3; })(m3d || (m3d = {})); var r = new m3d(); r.foo(); - r.bar(); - r.y; + r.bar(); // error + r.y; // error })(T3 || (T3 = {})); var T4; (function (T4) { @@ -72,12 +72,12 @@ var T4; })(m3d || (m3d = {})); var r = new m3d(); r.foo(); - r.bar(); - r.y; + r.bar(); // error + r.y; // error })(T4 || (T4 = {})); var m3d; (function (m3d) { m3d.y = 2; })(m3d || (m3d = {})); -var r = new m3d(); -var r2 = new m4d(); +var r = new m3d(); // error +var r2 = new m4d(); // error diff --git a/tests/baselines/reference/cloduleWithRecursiveReference.types b/tests/baselines/reference/cloduleWithRecursiveReference.types new file mode 100644 index 00000000000..8a5df1c5a9f --- /dev/null +++ b/tests/baselines/reference/cloduleWithRecursiveReference.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/cloduleWithRecursiveReference.ts === +module M +>M : typeof M +{ + export class C { } +>C : C + + export module C { +>C : typeof M.C + + export var C = M.C +>C : typeof M.C +>M.C : typeof M.C +>M : typeof M +>C : typeof M.C + } +} diff --git a/tests/baselines/reference/collisionArgumentsArrowFunctions.js b/tests/baselines/reference/collisionArgumentsArrowFunctions.js index ba2777f47e2..0aa939e1a2d 100644 --- a/tests/baselines/reference/collisionArgumentsArrowFunctions.js +++ b/tests/baselines/reference/collisionArgumentsArrowFunctions.js @@ -22,25 +22,25 @@ var f1 = function (i) { for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error }; var f12 = function (arguments) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error }; var f1NoError = function (arguments) { - var arguments = 10; + var arguments = 10; // no error }; var f2 = function () { var restParameters = []; for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // No Error }; var f2NoError = function () { - var arguments = 10; + var arguments = 10; // no error }; diff --git a/tests/baselines/reference/collisionArgumentsClassConstructor.js b/tests/baselines/reference/collisionArgumentsClassConstructor.js index 7f381a09c1a..ca743777b39 100644 --- a/tests/baselines/reference/collisionArgumentsClassConstructor.js +++ b/tests/baselines/reference/collisionArgumentsClassConstructor.js @@ -87,13 +87,14 @@ declare class c6NoError { } //// [collisionArgumentsClassConstructor.js] +// Constructors var c1 = (function () { function c1(i) { var arguments = []; for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error } return c1; })(); @@ -103,13 +104,13 @@ var c12 = (function () { for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error } return c12; })(); var c1NoError = (function () { function c1NoError(arguments) { - var arguments = 10; + var arguments = 10; // no error } return c1NoError; })(); @@ -119,13 +120,13 @@ var c2 = (function () { for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error } return c2; })(); var c2NoError = (function () { function c2NoError() { - var arguments = 10; + var arguments = 10; // no error } return c2NoError; })(); @@ -136,14 +137,14 @@ var c3 = (function () { restParameters[_i - 1] = arguments[_i]; } this.arguments = arguments; - var arguments = 10; + var arguments = 10; // no error } return c3; })(); var c3NoError = (function () { function c3NoError(arguments) { this.arguments = arguments; - var arguments = 10; + var arguments = 10; // no error } return c3NoError; })(); @@ -153,7 +154,7 @@ var c5 = (function () { for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error } return c5; })(); @@ -163,13 +164,13 @@ var c52 = (function () { for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error } return c52; })(); var c5NoError = (function () { function c5NoError(arguments) { - var arguments; + var arguments; // no error } return c5NoError; })(); diff --git a/tests/baselines/reference/collisionArgumentsClassMethod.js b/tests/baselines/reference/collisionArgumentsClassMethod.js index 0ca983b6587..10c9b288544 100644 --- a/tests/baselines/reference/collisionArgumentsClassMethod.js +++ b/tests/baselines/reference/collisionArgumentsClassMethod.js @@ -57,34 +57,34 @@ var c1 = (function () { for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error }; c1.prototype.foo1 = function (arguments) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error }; c1.prototype.fooNoError = function (arguments) { - var arguments = 10; + var arguments = 10; // no error }; c1.prototype.f4 = function (i) { var arguments = []; for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error }; c1.prototype.f41 = function (arguments) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error }; c1.prototype.f4NoError = function (arguments) { - var arguments; + var arguments; // no error }; return c1; })(); @@ -96,10 +96,10 @@ var c3 = (function () { for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error }; c3.prototype.fooNoError = function () { - var arguments = 10; + var arguments = 10; // no error }; return c3; })(); diff --git a/tests/baselines/reference/collisionArgumentsFunction.js b/tests/baselines/reference/collisionArgumentsFunction.js index 400a3750141..9ce4a5ab0e2 100644 --- a/tests/baselines/reference/collisionArgumentsFunction.js +++ b/tests/baselines/reference/collisionArgumentsFunction.js @@ -45,47 +45,48 @@ declare function f6(arguments: number); // no codegen no error declare function f6(arguments: string); // no codegen no error //// [collisionArgumentsFunction.js] +// Functions function f1(arguments) { var restParameters = []; for (var _i = 1; _i < arguments.length; _i++) { restParameters[_i - 1] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error } function f12(i) { var arguments = []; for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error } function f1NoError(arguments) { - var arguments = 10; + var arguments = 10; // no error } function f3() { var restParameters = []; for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error } function f3NoError() { - var arguments = 10; + var arguments = 10; // no error } function f4(arguments) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // No error } function f42(i) { var arguments = []; for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // No error } function f4NoError(arguments) { - var arguments; + var arguments; // No error } diff --git a/tests/baselines/reference/collisionArgumentsFunctionExpressions.js b/tests/baselines/reference/collisionArgumentsFunctionExpressions.js index a57be35eab7..405ceb625c3 100644 --- a/tests/baselines/reference/collisionArgumentsFunctionExpressions.js +++ b/tests/baselines/reference/collisionArgumentsFunctionExpressions.js @@ -41,43 +41,43 @@ function foo() { for (var _i = 1; _i < arguments.length; _i++) { restParameters[_i - 1] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error } function f12(i) { var arguments = []; for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // no error } function f1NoError(arguments) { - var arguments = 10; + var arguments = 10; // no error } function f3() { var restParameters = []; for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var arguments = 10; + var arguments = 10; // no error } function f3NoError() { - var arguments = 10; + var arguments = 10; // no error } function f4(arguments) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // No error } function f42(i) { var arguments = []; for (var _i = 1; _i < arguments.length; _i++) { arguments[_i - 1] = arguments[_i]; } - var arguments; + var arguments; // No error } function f4NoError(arguments) { - var arguments; + var arguments; // No error } } diff --git a/tests/baselines/reference/collisionArgumentsInType.js b/tests/baselines/reference/collisionArgumentsInType.js index 3047fd05fd6..4db7c930775 100644 --- a/tests/baselines/reference/collisionArgumentsInType.js +++ b/tests/baselines/reference/collisionArgumentsInType.js @@ -15,7 +15,7 @@ var v21: { } //// [collisionArgumentsInType.js] -var v1; -var v12; +var v1; // no error - no code gen +var v12; // no error - no code gen var v2; var v21; diff --git a/tests/baselines/reference/collisionArgumentsInType.types b/tests/baselines/reference/collisionArgumentsInType.types new file mode 100644 index 00000000000..a8096e2e7f5 --- /dev/null +++ b/tests/baselines/reference/collisionArgumentsInType.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/collisionArgumentsInType.ts === +var v1: (i: number, ...arguments) => void; // no error - no code gen +>v1 : (i: number, ...arguments: any[]) => void +>i : number +>arguments : any[] + +var v12: (arguments: number, ...restParameters) => void; // no error - no code gen +>v12 : (arguments: number, ...restParameters: any[]) => void +>arguments : number +>restParameters : any[] + +var v2: { +>v2 : { (arguments: number, ...restParameters: any[]): any; new (arguments: number, ...restParameters: any[]): any; foo(arguments: number, ...restParameters: any[]): any; prop: (arguments: number, ...restParameters: any[]) => void; } + + (arguments: number, ...restParameters); // no error - no code gen +>arguments : number +>restParameters : any[] + + new (arguments: number, ...restParameters); // no error - no code gen +>arguments : number +>restParameters : any[] + + foo(arguments: number, ...restParameters); // no error - no code gen +>foo : (arguments: number, ...restParameters: any[]) => any +>arguments : number +>restParameters : any[] + + prop: (arguments: number, ...restParameters) => void; // no error - no code gen +>prop : (arguments: number, ...restParameters: any[]) => void +>arguments : number +>restParameters : any[] +} +var v21: { +>v21 : { (i: number, ...arguments: any[]): any; new (i: number, ...arguments: any[]): any; foo(i: number, ...arguments: any[]): any; prop: (i: number, ...arguments: any[]) => void; } + + (i: number, ...arguments); // no error - no code gen +>i : number +>arguments : any[] + + new (i: number, ...arguments); // no error - no code gen +>i : number +>arguments : any[] + + foo(i: number, ...arguments); // no error - no code gen +>foo : (i: number, ...arguments: any[]) => any +>i : number +>arguments : any[] + + prop: (i: number, ...arguments) => void; // no error - no code gen +>prop : (i: number, ...arguments: any[]) => void +>i : number +>arguments : any[] +} diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.types b/tests/baselines/reference/collisionArgumentsInterfaceMembers.types new file mode 100644 index 00000000000..6edb0a7ebed --- /dev/null +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/collisionArgumentsInterfaceMembers.ts === +// call +interface i1 { +>i1 : i1 + + (i: number, ...arguments); // no error - no code gen +>i : number +>arguments : any[] +} +interface i12 { +>i12 : i12 + + (arguments: number, ...rest); // no error - no code gen +>arguments : number +>rest : any[] +} +interface i1NoError { +>i1NoError : i1NoError + + (arguments: number); // no error +>arguments : number +} + +// new +interface i2 { +>i2 : i2 + + new (i: number, ...arguments); // no error - no code gen +>i : number +>arguments : any[] +} +interface i21 { +>i21 : i21 + + new (arguments: number, ...rest); // no error - no code gen +>arguments : number +>rest : any[] +} +interface i2NoError { +>i2NoError : i2NoError + + new (arguments: number); // no error +>arguments : number +} + +// method +interface i3 { +>i3 : i3 + + foo(i: number, ...arguments); // no error - no code gen +>foo : (i: number, ...arguments: any[]) => any +>i : number +>arguments : any[] + + foo1(arguments: number, ...rest); // no error - no code gen +>foo1 : (arguments: number, ...rest: any[]) => any +>arguments : number +>rest : any[] + + fooNoError(arguments: number); // no error +>fooNoError : (arguments: number) => any +>arguments : number +} diff --git a/tests/baselines/reference/collisionCodeGenEnumWithEnumMemberConflict.types b/tests/baselines/reference/collisionCodeGenEnumWithEnumMemberConflict.types new file mode 100644 index 00000000000..398179b5cdc --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenEnumWithEnumMemberConflict.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/collisionCodeGenEnumWithEnumMemberConflict.ts === +enum Color { +>Color : Color + + Color, +>Color : Color + + Thing = Color +>Thing : Color +>Color : Color +} diff --git a/tests/baselines/reference/collisionCodeGenModuleWithConstructorChildren.types b/tests/baselines/reference/collisionCodeGenModuleWithConstructorChildren.types new file mode 100644 index 00000000000..f63f7eeb4f2 --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithConstructorChildren.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithConstructorChildren.ts === +module M { +>M : typeof M + + export var x = 3; +>x : number + + class c { +>c : c + + constructor(M, p = x) { +>M : any +>p : number +>x : number + } + } +} + +module M { +>M : typeof M + + class d { +>d : d + + constructor(private M, p = x) { +>M : any +>p : number +>x : number + } + } +} + +module M { +>M : typeof M + + class d2 { +>d2 : d2 + + constructor() { + var M = 10; +>M : number + + var p = x; +>p : number +>x : number + } + } +} diff --git a/tests/baselines/reference/collisionCodeGenModuleWithEnumMemberConflict.types b/tests/baselines/reference/collisionCodeGenModuleWithEnumMemberConflict.types new file mode 100644 index 00000000000..527c8930fcb --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithEnumMemberConflict.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithEnumMemberConflict.ts === +module m1 { +>m1 : typeof m1 + + enum e { +>e : e + + m1, +>m1 : e + + m2 = m1 +>m2 : e +>m1 : e + } +} diff --git a/tests/baselines/reference/collisionCodeGenModuleWithFunctionChildren.types b/tests/baselines/reference/collisionCodeGenModuleWithFunctionChildren.types new file mode 100644 index 00000000000..07ef123f642 --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithFunctionChildren.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithFunctionChildren.ts === +module M { +>M : typeof M + + export var x = 3; +>x : number + + function fn(M, p = x) { } +>fn : (M: any, p?: number) => void +>M : any +>p : number +>x : number +} + +module M { +>M : typeof M + + function fn2() { +>fn2 : () => void + + var M; +>M : any + + var p = x; +>p : number +>x : number + } +} + +module M { +>M : typeof M + + function fn3() { +>fn3 : () => void + + function M() { +>M : () => void + + var p = x; +>p : number +>x : number + } + } +} diff --git a/tests/baselines/reference/collisionCodeGenModuleWithMemberClassConflict.types b/tests/baselines/reference/collisionCodeGenModuleWithMemberClassConflict.types new file mode 100644 index 00000000000..edbe25b7a7d --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithMemberClassConflict.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithMemberClassConflict.ts === +module m1 { +>m1 : typeof m1 + + export class m1 { +>m1 : m1 + } +} +var foo = new m1.m1(); +>foo : m1.m1 +>new m1.m1() : m1.m1 +>m1.m1 : typeof m1.m1 +>m1 : typeof m1 +>m1 : typeof m1.m1 + +module m2 { +>m2 : typeof m2 + + export class m2 { +>m2 : m2 + } + + export class _m2 { +>_m2 : _m2 + } +} +var foo = new m2.m2(); +>foo : m1.m1 +>new m2.m2() : m2.m2 +>m2.m2 : typeof m2.m2 +>m2 : typeof m2 +>m2 : typeof m2.m2 + +var foo = new m2._m2(); +>foo : m1.m1 +>new m2._m2() : m2._m2 +>m2._m2 : typeof m2._m2 +>m2 : typeof m2 +>_m2 : typeof m2._m2 + diff --git a/tests/baselines/reference/collisionCodeGenModuleWithMemberInterfaceConflict.types b/tests/baselines/reference/collisionCodeGenModuleWithMemberInterfaceConflict.types new file mode 100644 index 00000000000..e2f36aeaa8f --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithMemberInterfaceConflict.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithMemberInterfaceConflict.ts === +module m1 { +>m1 : typeof m1 + + export interface m1 { +>m1 : m1 + } + export class m2 implements m1 { +>m2 : m2 +>m1 : m1 + } +} +var foo = new m1.m2(); +>foo : m1.m2 +>new m1.m2() : m1.m2 +>m1.m2 : typeof m1.m2 +>m1 : typeof m1 +>m2 : typeof m1.m2 + diff --git a/tests/baselines/reference/collisionCodeGenModuleWithMemberVariable.types b/tests/baselines/reference/collisionCodeGenModuleWithMemberVariable.types new file mode 100644 index 00000000000..86f0767959d --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithMemberVariable.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithMemberVariable.ts === +module m1 { +>m1 : typeof m1 + + export var m1 = 10; +>m1 : number + + var b = m1; +>b : number +>m1 : number +} +var foo = m1.m1; +>foo : number +>m1.m1 : number +>m1 : typeof m1 +>m1 : number + diff --git a/tests/baselines/reference/collisionCodeGenModuleWithMethodChildren.types b/tests/baselines/reference/collisionCodeGenModuleWithMethodChildren.types new file mode 100644 index 00000000000..3632806e9b3 --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithMethodChildren.types @@ -0,0 +1,68 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithMethodChildren.ts === +module M { +>M : typeof M + + export var x = 3; +>x : number + + class c { +>c : c + + fn(M, p = x) { } +>fn : (M: any, p?: number) => void +>M : any +>p : number +>x : number + } +} + +module M { +>M : typeof M + + class d { +>d : d + + fn2() { +>fn2 : () => void + + var M; +>M : any + + var p = x; +>p : number +>x : number + } + } +} + +module M { +>M : typeof M + + class e { +>e : e + + fn3() { +>fn3 : () => void + + function M() { +>M : () => void + + var p = x; +>p : number +>x : number + } + } + } +} + +module M { // Shouldnt bn _M +>M : typeof M + + class f { +>f : f + + M() { +>M : () => void + } + } +} diff --git a/tests/baselines/reference/collisionCodeGenModuleWithModuleChildren.types b/tests/baselines/reference/collisionCodeGenModuleWithModuleChildren.types new file mode 100644 index 00000000000..7853bcbdb32 --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithModuleChildren.types @@ -0,0 +1,93 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithModuleChildren.ts === +module M { +>M : typeof M + + export var x = 3; +>x : number + + module m1 { +>m1 : typeof m1 + + var M = 10; +>M : number + + var p = x; +>p : number +>x : number + } +} + +module M { +>M : typeof M + + module m2 { +>m2 : typeof m2 + + class M { +>M : M + } + var p = x; +>p : number +>x : number + + var p2 = new M(); +>p2 : M +>new M() : M +>M : typeof M + } +} + +module M { +>M : typeof M + + module m3 { +>m3 : typeof m3 + + function M() { +>M : () => void + } + var p = x; +>p : number +>x : number + + var p2 = M(); +>p2 : void +>M() : void +>M : () => void + } +} + +module M { // shouldnt be _M +>M : typeof M + + module m3 { +>m3 : typeof m3 + + interface M { +>M : M + } + var p = x; +>p : number +>x : number + + var p2: M; +>p2 : M +>M : M + } +} + +module M { +>M : typeof M + + module m4 { +>m4 : typeof m4 + + module M { +>M : typeof M + + var p = x; +>p : number +>x : number + } + } +} diff --git a/tests/baselines/reference/collisionCodeGenModuleWithModuleReopening.types b/tests/baselines/reference/collisionCodeGenModuleWithModuleReopening.types new file mode 100644 index 00000000000..27520618366 --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithModuleReopening.types @@ -0,0 +1,93 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithModuleReopening.ts === +module m1 { +>m1 : typeof m1 + + export class m1 { +>m1 : m1 + } +} +var foo = new m1.m1(); +>foo : m1.m1 +>new m1.m1() : m1.m1 +>m1.m1 : typeof m1.m1 +>m1 : typeof m1 +>m1 : typeof m1.m1 + +module m1 { +>m1 : typeof m1 + + export class c1 { +>c1 : c1 + } + var b = new c1(); +>b : c1 +>new c1() : c1 +>c1 : typeof c1 + + var c = new m1(); +>c : m1 +>new m1() : m1 +>m1 : typeof m1 +} +var foo2 = new m1.c1(); +>foo2 : m1.c1 +>new m1.c1() : m1.c1 +>m1.c1 : typeof m1.c1 +>m1 : typeof m1 +>c1 : typeof m1.c1 + +module m2 { +>m2 : typeof m2 + + export class c1 { +>c1 : c1 + } + export var b10 = 10; +>b10 : number + + var x = new c1(); +>x : c1 +>new c1() : c1 +>c1 : typeof c1 +} +var foo3 = new m2.c1(); +>foo3 : m2.c1 +>new m2.c1() : m2.c1 +>m2.c1 : typeof m2.c1 +>m2 : typeof m2 +>c1 : typeof m2.c1 + +module m2 { +>m2 : typeof m2 + + export class m2 { +>m2 : m2 + } + var b = new m2(); +>b : m2 +>new m2() : m2 +>m2 : typeof m2 + + var d = b10; +>d : number +>b10 : number + + var c = new c1(); +>c : c1 +>new c1() : c1 +>c1 : typeof c1 +} +var foo3 = new m2.c1(); +>foo3 : m2.c1 +>new m2.c1() : m2.c1 +>m2.c1 : typeof m2.c1 +>m2 : typeof m2 +>c1 : typeof m2.c1 + +var foo2 = new m2.m2(); +>foo2 : m1.c1 +>new m2.m2() : m2.m2 +>m2.m2 : typeof m2.m2 +>m2 : typeof m2 +>m2 : typeof m2.m2 + diff --git a/tests/baselines/reference/collisionCodeGenModuleWithPrivateMember.types b/tests/baselines/reference/collisionCodeGenModuleWithPrivateMember.types new file mode 100644 index 00000000000..a4af255dcf3 --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithPrivateMember.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithPrivateMember.ts === +module m1 { +>m1 : typeof m1 + + class m1 { +>m1 : m1 + } + var x = new m1(); +>x : m1 +>new m1() : m1 +>m1 : typeof m1 + + export class c1 { +>c1 : c1 + } +} +var foo = new m1.c1(); +>foo : m1.c1 +>new m1.c1() : m1.c1 +>m1.c1 : typeof m1.c1 +>m1 : typeof m1 +>c1 : typeof m1.c1 + diff --git a/tests/baselines/reference/collisionCodeGenModuleWithUnicodeNames.types b/tests/baselines/reference/collisionCodeGenModuleWithUnicodeNames.types new file mode 100644 index 00000000000..5d7ca71b1be --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithUnicodeNames.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/collisionCodeGenModuleWithUnicodeNames.ts === +module 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 { +>才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 : typeof 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 + + export class 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 { +>才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 : 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 + } +} + +var x = new 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123(); +>x : 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 +>new 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123() : 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 +>才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 : typeof 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 +>才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 : typeof 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 +>才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 : typeof 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 + + + diff --git a/tests/baselines/reference/collisionExportsRequireAndAlias.errors.txt b/tests/baselines/reference/collisionExportsRequireAndAlias.errors.txt new file mode 100644 index 00000000000..2ed2ee5d10e --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAlias.errors.txt @@ -0,0 +1,20 @@ +==== tests/cases/compiler/collisionExportsRequireAndAlias_file2.ts (2 errors) ==== + import require = require('collisionExportsRequireAndAlias_file1'); // Error + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + import exports = require('collisionExportsRequireAndAlias_file3333'); // Error + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + export function foo() { + require.bar(); + } + export function foo2() { + exports.bar2(); + } +==== tests/cases/compiler/collisionExportsRequireAndAlias_file1.ts (0 errors) ==== + export function bar() { + } + +==== tests/cases/compiler/collisionExportsRequireAndAlias_file3333.ts (0 errors) ==== + export function bar2() { + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndAlias.js b/tests/baselines/reference/collisionExportsRequireAndAlias.js index 938bf77428d..2e4210f4910 100644 --- a/tests/baselines/reference/collisionExportsRequireAndAlias.js +++ b/tests/baselines/reference/collisionExportsRequireAndAlias.js @@ -1,22 +1,42 @@ -//// [collisionExportsRequireAndAlias.ts] -// TODO: re-enable, fails when run in the browser with full compiler suite, but not when run alone - -////@module: amd -//// @Filename: collisionExportsRequireAndAlias_file1.ts -//export function bar() { -//} - -//// @Filename: collisionExportsRequireAndAlias_file3333.ts -//export function bar2() { -//} -//// @Filename: collisionExportsRequireAndAlias_file2.ts -//import require = require('collisionExportsRequireAndAlias_file1'); // Error -//import exports = require('collisionExportsRequireAndAlias_file3333'); // Error -//export function foo() { -// require.bar(); -//} -//export function foo2() { -// exports.bar2(); -//} +//// [tests/cases/compiler/collisionExportsRequireAndAlias.ts] //// -//// [collisionExportsRequireAndAlias.js] +//// [collisionExportsRequireAndAlias_file1.ts] +export function bar() { +} + +//// [collisionExportsRequireAndAlias_file3333.ts] +export function bar2() { +} +//// [collisionExportsRequireAndAlias_file2.ts] +import require = require('collisionExportsRequireAndAlias_file1'); // Error +import exports = require('collisionExportsRequireAndAlias_file3333'); // Error +export function foo() { + require.bar(); +} +export function foo2() { + exports.bar2(); +} + +//// [collisionExportsRequireAndAlias_file1.js] +define(["require", "exports"], function (require, exports) { + function bar() { + } + exports.bar = bar; +}); +//// [collisionExportsRequireAndAlias_file3333.js] +define(["require", "exports"], function (require, exports) { + function bar2() { + } + exports.bar2 = bar2; +}); +//// [collisionExportsRequireAndAlias_file2.js] +define(["require", "exports", 'collisionExportsRequireAndAlias_file1', 'collisionExportsRequireAndAlias_file3333'], function (require, exports, require, exports) { + function foo() { + require.bar(); + } + exports.foo = foo; + function foo2() { + exports.bar2(); + } + exports.foo2 = foo2; +}); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientClass.js b/tests/baselines/reference/collisionExportsRequireAndAmbientClass.js new file mode 100644 index 00000000000..9f4106616a8 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientClass.js @@ -0,0 +1,50 @@ +//// [tests/cases/compiler/collisionExportsRequireAndAmbientClass.ts] //// + +//// [collisionExportsRequireAndAmbientClass_externalmodule.ts] +export declare class require { +} +export declare class exports { +} +declare module m1 { + class require { + } + class exports { + } +} +module m2 { + export declare class require { + } + export declare class exports { + } +} + +//// [collisionExportsRequireAndAmbientClass_globalFile.ts] +declare class require { +} +declare class exports { +} +declare module m3 { + class require { + } + class exports { + } +} +module m4 { + export declare class require { + } + export declare class exports { + } + var a = 10; +} + +//// [collisionExportsRequireAndAmbientClass_externalmodule.js] +define(["require", "exports"], function (require, exports) { + var m2; + (function (m2) { + })(m2 || (m2 = {})); +}); +//// [collisionExportsRequireAndAmbientClass_globalFile.js] +var m4; +(function (m4) { + var a = 10; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientClass.types b/tests/baselines/reference/collisionExportsRequireAndAmbientClass.types new file mode 100644 index 00000000000..8212c6ffc61 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientClass.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientClass_externalmodule.ts === +export declare class require { +>require : require +} +export declare class exports { +>exports : exports +} +declare module m1 { +>m1 : typeof m1 + + class require { +>require : require + } + class exports { +>exports : exports + } +} +module m2 { +>m2 : typeof m2 + + export declare class require { +>require : require + } + export declare class exports { +>exports : exports + } +} + +=== tests/cases/compiler/collisionExportsRequireAndAmbientClass_globalFile.ts === +declare class require { +>require : require +} +declare class exports { +>exports : exports +} +declare module m3 { +>m3 : typeof m3 + + class require { +>require : require + } + class exports { +>exports : exports + } +} +module m4 { +>m4 : typeof m4 + + export declare class require { +>require : require + } + export declare class exports { +>exports : exports + } + var a = 10; +>a : number +} diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.js b/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.js new file mode 100644 index 00000000000..829f93e4fa7 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.js @@ -0,0 +1,72 @@ +//// [tests/cases/compiler/collisionExportsRequireAndAmbientEnum.ts] //// + +//// [collisionExportsRequireAndAmbientEnum_externalmodule.ts] +export declare enum require { + _thisVal1, + _thisVal2, +} +export declare enum exports { + _thisVal1, + _thisVal2, +} +declare module m1 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m2 { + export declare enum require { + _thisVal1, + _thisVal2, + } + export declare enum exports { + _thisVal1, + _thisVal2, + } +} + +//// [collisionExportsRequireAndAmbientEnum_globalFile.ts] +declare enum require { + _thisVal1, + _thisVal2, +} +declare enum exports { + _thisVal1, + _thisVal2, +} +declare module m3 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m4 { + export declare enum require { + _thisVal1, + _thisVal2, + } + export declare enum exports { + _thisVal1, + _thisVal2, + } +} + +//// [collisionExportsRequireAndAmbientEnum_externalmodule.js] +define(["require", "exports"], function (require, exports) { + var m2; + (function (m2) { + })(m2 || (m2 = {})); +}); +//// [collisionExportsRequireAndAmbientEnum_globalFile.js] +var m4; +(function (m4) { +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.types b/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.types new file mode 100644 index 00000000000..3bc7a00063b --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.types @@ -0,0 +1,127 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientEnum_externalmodule.ts === +export declare enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require +} +export declare enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports +} +declare module m1 { +>m1 : typeof m1 + + enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require + } + enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports + } +} +module m2 { +>m2 : typeof m2 + + export declare enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require + } + export declare enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports + } +} + +=== tests/cases/compiler/collisionExportsRequireAndAmbientEnum_globalFile.ts === +declare enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require +} +declare enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports +} +declare module m3 { +>m3 : typeof m3 + + enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require + } + enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports + } +} +module m4 { +>m4 : typeof m4 + + export declare enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require + } + export declare enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports + } +} diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.js b/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.js new file mode 100644 index 00000000000..c1fb0ce163a --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.js @@ -0,0 +1,22 @@ +//// [collisionExportsRequireAndAmbientFunction.ts] +export declare function exports(): number; + +export declare function require(): string[]; + +declare module m1 { + function exports(): string; + function require(): number; +} +module m2 { + export declare function exports(): string; + export declare function require(): string[]; + var a = 10; +} + +//// [collisionExportsRequireAndAmbientFunction.js] +define(["require", "exports"], function (require, exports) { + var m2; + (function (m2) { + var a = 10; + })(m2 || (m2 = {})); +}); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.types b/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.types new file mode 100644 index 00000000000..024bdff8ea3 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientFunction.ts === +export declare function exports(): number; +>exports : () => number + +export declare function require(): string[]; +>require : () => string[] + +declare module m1 { +>m1 : typeof m1 + + function exports(): string; +>exports : () => string + + function require(): number; +>require : () => number +} +module m2 { +>m2 : typeof m2 + + export declare function exports(): string; +>exports : () => string + + export declare function require(): string[]; +>require : () => string[] + + var a = 10; +>a : number +} diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.js b/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.js new file mode 100644 index 00000000000..44294f51cb5 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.js @@ -0,0 +1,18 @@ +//// [collisionExportsRequireAndAmbientFunctionInGlobalFile.ts] +declare function exports(): number; +declare function require(): string; +declare module m3 { + function exports(): string[]; + function require(): number[]; +} +module m4 { + export declare function exports(): string; + export declare function require(): string; + var a = 10; +} + +//// [collisionExportsRequireAndAmbientFunctionInGlobalFile.js] +var m4; +(function (m4) { + var a = 10; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.types b/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.types new file mode 100644 index 00000000000..0ecde7f429f --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientFunctionInGlobalFile.ts === +declare function exports(): number; +>exports : () => number + +declare function require(): string; +>require : () => string + +declare module m3 { +>m3 : typeof m3 + + function exports(): string[]; +>exports : () => string[] + + function require(): number[]; +>require : () => number[] +} +module m4 { +>m4 : typeof m4 + + export declare function exports(): string; +>exports : () => string + + export declare function require(): string; +>require : () => string + + var a = 10; +>a : number +} diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientModule.js b/tests/baselines/reference/collisionExportsRequireAndAmbientModule.js new file mode 100644 index 00000000000..4979e9e50ca --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientModule.js @@ -0,0 +1,116 @@ +//// [tests/cases/compiler/collisionExportsRequireAndAmbientModule.ts] //// + +//// [collisionExportsRequireAndAmbientModule_externalmodule.ts] +export declare module require { + export interface I { + } + export class C { + } +} +export function foo(): require.I { + return null; +} +export declare module exports { + export interface I { + } + export class C { + } +} +export function foo2(): exports.I { + return null; +} +declare module m1 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m2 { + export declare module require { + export interface I { + } + export class C { + } + } + export declare module exports { + export interface I { + } + export class C { + } + } + var a = 10; +} + +//// [collisionExportsRequireAndAmbientModule_globalFile.ts] +declare module require { + export interface I { + } + export class C { + } +} +declare module exports { + export interface I { + } + export class C { + } +} +declare module m3 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m4 { + export declare module require { + export interface I { + } + export class C { + } + } + export declare module exports { + export interface I { + } + export class C { + } + } + + var a = 10; +} + + +//// [collisionExportsRequireAndAmbientModule_externalmodule.js] +define(["require", "exports"], function (require, exports) { + function foo() { + return null; + } + exports.foo = foo; + function foo2() { + return null; + } + exports.foo2 = foo2; + var m2; + (function (m2) { + var a = 10; + })(m2 || (m2 = {})); +}); +//// [collisionExportsRequireAndAmbientModule_globalFile.js] +var m4; +(function (m4) { + var a = 10; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientModule.types b/tests/baselines/reference/collisionExportsRequireAndAmbientModule.types new file mode 100644 index 00000000000..7e41093daaa --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientModule.types @@ -0,0 +1,159 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientModule_externalmodule.ts === +export declare module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } +} +export function foo(): require.I { +>foo : () => require.I +>require : unknown +>I : require.I + + return null; +} +export declare module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } +} +export function foo2(): exports.I { +>foo2 : () => exports.I +>exports : unknown +>I : exports.I + + return null; +} +declare module m1 { +>m1 : typeof m1 + + module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } + } + module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } + } +} +module m2 { +>m2 : typeof m2 + + export declare module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } + } + export declare module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } + } + var a = 10; +>a : number +} + +=== tests/cases/compiler/collisionExportsRequireAndAmbientModule_globalFile.ts === +declare module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } +} +declare module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } +} +declare module m3 { +>m3 : typeof m3 + + module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } + } + module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } + } +} +module m4 { +>m4 : typeof m4 + + export declare module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } + } + export declare module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } + } + + var a = 10; +>a : number +} + diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientVar.js b/tests/baselines/reference/collisionExportsRequireAndAmbientVar.js new file mode 100644 index 00000000000..7a552251b15 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientVar.js @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/collisionExportsRequireAndAmbientVar.ts] //// + +//// [collisionExportsRequireAndAmbientVar_externalmodule.ts] +export declare var exports: number; +export declare var require: string; +declare module m1 { + var exports: string; + var require: number; +} +module m2 { + export declare var exports: number; + export declare var require: string; + var a = 10; +} + +//// [collisionExportsRequireAndAmbientVar_globalFile.ts] +declare var exports: number; +declare var require: string; +declare module m3 { + var exports: string; + var require: number; +} +module m4 { + export declare var exports: string; + export declare var require: number; + var a = 10; +} + +//// [collisionExportsRequireAndAmbientVar_externalmodule.js] +define(["require", "exports"], function (require, exports) { + var m2; + (function (m2) { + var a = 10; + })(m2 || (m2 = {})); +}); +//// [collisionExportsRequireAndAmbientVar_globalFile.js] +var m4; +(function (m4) { + var a = 10; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientVar.types b/tests/baselines/reference/collisionExportsRequireAndAmbientVar.types new file mode 100644 index 00000000000..1419df3504b --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientVar.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientVar_externalmodule.ts === +export declare var exports: number; +>exports : number + +export declare var require: string; +>require : string + +declare module m1 { +>m1 : typeof m1 + + var exports: string; +>exports : string + + var require: number; +>require : number +} +module m2 { +>m2 : typeof m2 + + export declare var exports: number; +>exports : number + + export declare var require: string; +>require : string + + var a = 10; +>a : number +} + +=== tests/cases/compiler/collisionExportsRequireAndAmbientVar_globalFile.ts === +declare var exports: number; +>exports : number + +declare var require: string; +>require : string + +declare module m3 { +>m3 : typeof m3 + + var exports: string; +>exports : string + + var require: number; +>require : number +} +module m4 { +>m4 : typeof m4 + + export declare var exports: string; +>exports : string + + export declare var require: number; +>require : number + + var a = 10; +>a : number +} diff --git a/tests/baselines/reference/collisionExportsRequireAndClass.errors.txt b/tests/baselines/reference/collisionExportsRequireAndClass.errors.txt new file mode 100644 index 00000000000..8fea5b475f2 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndClass.errors.txt @@ -0,0 +1,39 @@ +==== tests/cases/compiler/collisionExportsRequireAndClass_externalmodule.ts (2 errors) ==== + export class require { + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + } + export class exports { + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + } + module m1 { + class require { + } + class exports { + } + } + module m2 { + export class require { + } + export class exports { + } + } + +==== tests/cases/compiler/collisionExportsRequireAndClass_globalFile.ts (0 errors) ==== + class require { + } + class exports { + } + module m3 { + class require { + } + class exports { + } + } + module m4 { + export class require { + } + export class exports { + } + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndClass.js b/tests/baselines/reference/collisionExportsRequireAndClass.js index 7ec2975f918..f337d9a0a35 100644 --- a/tests/baselines/reference/collisionExportsRequireAndClass.js +++ b/tests/baselines/reference/collisionExportsRequireAndClass.js @@ -1,11 +1,42 @@ -//// [collisionExportsRequireAndClass.ts] +//// [tests/cases/compiler/collisionExportsRequireAndClass.ts] //// + +//// [collisionExportsRequireAndClass_externalmodule.ts] export class require { } export class exports { } +module m1 { + class require { + } + class exports { + } +} +module m2 { + export class require { + } + export class exports { + } +} +//// [collisionExportsRequireAndClass_globalFile.ts] +class require { +} +class exports { +} +module m3 { + class require { + } + class exports { + } +} +module m4 { + export class require { + } + export class exports { + } +} -//// [collisionExportsRequireAndClass.js] +//// [collisionExportsRequireAndClass_externalmodule.js] define(["require", "exports"], function (require, exports) { var require = (function () { function require() { @@ -19,4 +50,71 @@ define(["require", "exports"], function (require, exports) { return exports; })(); exports.exports = exports; + var m1; + (function (m1) { + var require = (function () { + function require() { + } + return require; + })(); + var exports = (function () { + function exports() { + } + return exports; + })(); + })(m1 || (m1 = {})); + var m2; + (function (m2) { + var require = (function () { + function require() { + } + return require; + })(); + m2.require = require; + var exports = (function () { + function exports() { + } + return exports; + })(); + m2.exports = exports; + })(m2 || (m2 = {})); }); +//// [collisionExportsRequireAndClass_globalFile.js] +var require = (function () { + function require() { + } + return require; +})(); +var exports = (function () { + function exports() { + } + return exports; +})(); +var m3; +(function (m3) { + var require = (function () { + function require() { + } + return require; + })(); + var exports = (function () { + function exports() { + } + return exports; + })(); +})(m3 || (m3 = {})); +var m4; +(function (m4) { + var require = (function () { + function require() { + } + return require; + })(); + m4.require = require; + var exports = (function () { + function exports() { + } + return exports; + })(); + m4.exports = exports; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndEnum.errors.txt b/tests/baselines/reference/collisionExportsRequireAndEnum.errors.txt new file mode 100644 index 00000000000..782e4958363 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndEnum.errors.txt @@ -0,0 +1,63 @@ +==== tests/cases/compiler/collisionExportsRequireAndEnum_externalmodule.ts (2 errors) ==== + export enum require { // Error + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + _thisVal1, + _thisVal2, + } + export enum exports { // Error + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + _thisVal1, + _thisVal2, + } + module m1 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } + } + module m2 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } + } + +==== tests/cases/compiler/collisionExportsRequireAndEnum_globalFile.ts (0 errors) ==== + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } + module m3 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } + } + module m4 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndEnum.js b/tests/baselines/reference/collisionExportsRequireAndEnum.js index f495b534805..be63fa32851 100644 --- a/tests/baselines/reference/collisionExportsRequireAndEnum.js +++ b/tests/baselines/reference/collisionExportsRequireAndEnum.js @@ -1,4 +1,6 @@ -//// [collisionExportsRequireAndEnum.ts] +//// [tests/cases/compiler/collisionExportsRequireAndEnum.ts] //// + +//// [collisionExportsRequireAndEnum_externalmodule.ts] export enum require { // Error _thisVal1, _thisVal2, @@ -6,9 +8,59 @@ export enum require { // Error export enum exports { // Error _thisVal1, _thisVal2, +} +module m1 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m2 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } +} + +//// [collisionExportsRequireAndEnum_globalFile.ts] +enum require { + _thisVal1, + _thisVal2, +} +enum exports { + _thisVal1, + _thisVal2, +} +module m3 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m4 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } } -//// [collisionExportsRequireAndEnum.js] +//// [collisionExportsRequireAndEnum_externalmodule.js] define(["require", "exports"], function (require, exports) { (function (require) { require[require["_thisVal1"] = 0] = "_thisVal1"; @@ -20,4 +72,67 @@ define(["require", "exports"], function (require, exports) { exports[exports["_thisVal2"] = 1] = "_thisVal2"; })(exports.exports || (exports.exports = {})); var exports = exports.exports; + var m1; + (function (m1) { + var require; + (function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; + })(require || (require = {})); + var exports; + (function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; + })(exports || (exports = {})); + })(m1 || (m1 = {})); + var m2; + (function (m2) { + (function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; + })(m2.require || (m2.require = {})); + var require = m2.require; + (function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; + })(m2.exports || (m2.exports = {})); + var exports = m2.exports; + })(m2 || (m2 = {})); }); +//// [collisionExportsRequireAndEnum_globalFile.js] +var require; +(function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; +})(require || (require = {})); +var exports; +(function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; +})(exports || (exports = {})); +var m3; +(function (m3) { + var require; + (function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; + })(require || (require = {})); + var exports; + (function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; + })(exports || (exports = {})); +})(m3 || (m3 = {})); +var m4; +(function (m4) { + (function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; + })(m4.require || (m4.require = {})); + var require = m4.require; + (function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; + })(m4.exports || (m4.exports = {})); + var exports = m4.exports; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndFunction.errors.txt b/tests/baselines/reference/collisionExportsRequireAndFunction.errors.txt new file mode 100644 index 00000000000..49c6355c480 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndFunction.errors.txt @@ -0,0 +1,27 @@ +==== tests/cases/compiler/collisionExportsRequireAndFunction.ts (2 errors) ==== + export function exports() { + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + return 1; + } + export function require() { + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + return "require"; + } + module m1 { + function exports() { + return 1; + } + function require() { + return "require"; + } + } + module m2 { + export function exports() { + return 1; + } + export function require() { + return "require"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndFunction.js b/tests/baselines/reference/collisionExportsRequireAndFunction.js index a7d4ca2492e..e768609f3c6 100644 --- a/tests/baselines/reference/collisionExportsRequireAndFunction.js +++ b/tests/baselines/reference/collisionExportsRequireAndFunction.js @@ -5,7 +5,22 @@ export function exports() { export function require() { return "require"; } - +module m1 { + function exports() { + return 1; + } + function require() { + return "require"; + } +} +module m2 { + export function exports() { + return 1; + } + export function require() { + return "require"; + } +} //// [collisionExportsRequireAndFunction.js] define(["require", "exports"], function (require, exports) { @@ -17,4 +32,24 @@ define(["require", "exports"], function (require, exports) { return "require"; } exports.require = require; + var m1; + (function (m1) { + function exports() { + return 1; + } + function require() { + return "require"; + } + })(m1 || (m1 = {})); + var m2; + (function (m2) { + function exports() { + return 1; + } + m2.exports = exports; + function require() { + return "require"; + } + m2.require = require; + })(m2 || (m2 = {})); }); diff --git a/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.js b/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.js new file mode 100644 index 00000000000..1865d1aceff --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.js @@ -0,0 +1,51 @@ +//// [collisionExportsRequireAndFunctionInGlobalFile.ts] +function exports() { + return 1; +} +function require() { + return "require"; +} +module m3 { + function exports() { + return 1; + } + function require() { + return "require"; + } +} +module m4 { + export function exports() { + return 1; + } + export function require() { + return "require"; + } +} + +//// [collisionExportsRequireAndFunctionInGlobalFile.js] +function exports() { + return 1; +} +function require() { + return "require"; +} +var m3; +(function (m3) { + function exports() { + return 1; + } + function require() { + return "require"; + } +})(m3 || (m3 = {})); +var m4; +(function (m4) { + function exports() { + return 1; + } + m4.exports = exports; + function require() { + return "require"; + } + m4.require = require; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.types b/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.types new file mode 100644 index 00000000000..ba804feb91a --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/collisionExportsRequireAndFunctionInGlobalFile.ts === +function exports() { +>exports : () => number + + return 1; +} +function require() { +>require : () => string + + return "require"; +} +module m3 { +>m3 : typeof m3 + + function exports() { +>exports : () => number + + return 1; + } + function require() { +>require : () => string + + return "require"; + } +} +module m4 { +>m4 : typeof m4 + + export function exports() { +>exports : () => number + + return 1; + } + export function require() { +>require : () => string + + return "require"; + } +} diff --git a/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.errors.txt b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.errors.txt new file mode 100644 index 00000000000..9facc72da23 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.errors.txt @@ -0,0 +1,27 @@ +==== tests/cases/compiler/collisionExportsRequireAndInternalModuleAlias.ts (2 errors) ==== + export module m { + export class c { + } + } + import exports = m.c; + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + import require = m.c; + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + new exports(); + new require(); + + module m1 { + import exports = m.c; + import require = m.c; + new exports(); + new require(); + } + + module m2 { + export import exports = m.c; + export import require = m.c; + new exports(); + new require(); + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.js b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.js new file mode 100644 index 00000000000..a4c2a39c8f5 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.js @@ -0,0 +1,54 @@ +//// [collisionExportsRequireAndInternalModuleAlias.ts] +export module m { + export class c { + } +} +import exports = m.c; +import require = m.c; +new exports(); +new require(); + +module m1 { + import exports = m.c; + import require = m.c; + new exports(); + new require(); +} + +module m2 { + export import exports = m.c; + export import require = m.c; + new exports(); + new require(); +} + +//// [collisionExportsRequireAndInternalModuleAlias.js] +define(["require", "exports"], function (require, exports) { + (function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + })(exports.m || (exports.m = {})); + var m = exports.m; + var exports = m.c; + var require = m.c; + new exports(); + new require(); + var m1; + (function (m1) { + var exports = m.c; + var require = m.c; + new exports(); + new require(); + })(m1 || (m1 = {})); + var m2; + (function (m2) { + m2.exports = m.c; + m2.require = m.c; + new m2.exports(); + new m2.require(); + })(m2 || (m2 = {})); +}); diff --git a/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.js b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.js new file mode 100644 index 00000000000..c6a6e234ee9 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.js @@ -0,0 +1,52 @@ +//// [collisionExportsRequireAndInternalModuleAliasInGlobalFile.ts] +module mOfGloalFile { + export class c { + } +} +import exports = mOfGloalFile.c; +import require = mOfGloalFile.c; +new exports(); +new require(); + +module m1 { + import exports = mOfGloalFile.c; + import require = mOfGloalFile.c; + new exports(); + new require(); +} + +module m2 { + export import exports = mOfGloalFile.c; + export import require = mOfGloalFile.c; + new exports(); + new require(); +} + +//// [collisionExportsRequireAndInternalModuleAliasInGlobalFile.js] +var mOfGloalFile; +(function (mOfGloalFile) { + var c = (function () { + function c() { + } + return c; + })(); + mOfGloalFile.c = c; +})(mOfGloalFile || (mOfGloalFile = {})); +var exports = mOfGloalFile.c; +var require = mOfGloalFile.c; +new exports(); +new require(); +var m1; +(function (m1) { + var exports = mOfGloalFile.c; + var require = mOfGloalFile.c; + new exports(); + new require(); +})(m1 || (m1 = {})); +var m2; +(function (m2) { + m2.exports = mOfGloalFile.c; + m2.require = mOfGloalFile.c; + new m2.exports(); + new m2.require(); +})(m2 || (m2 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.types b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.types new file mode 100644 index 00000000000..11001fe115f --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.types @@ -0,0 +1,69 @@ +=== tests/cases/compiler/collisionExportsRequireAndInternalModuleAliasInGlobalFile.ts === +module mOfGloalFile { +>mOfGloalFile : typeof mOfGloalFile + + export class c { +>c : c + } +} +import exports = mOfGloalFile.c; +>exports : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + +import require = mOfGloalFile.c; +>require : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + +new exports(); +>new exports() : exports +>exports : typeof exports + +new require(); +>new require() : exports +>require : typeof exports + +module m1 { +>m1 : typeof m1 + + import exports = mOfGloalFile.c; +>exports : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + + import require = mOfGloalFile.c; +>require : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + + new exports(); +>new exports() : exports +>exports : typeof exports + + new require(); +>new require() : exports +>require : typeof exports +} + +module m2 { +>m2 : typeof m2 + + export import exports = mOfGloalFile.c; +>exports : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + + export import require = mOfGloalFile.c; +>require : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + + new exports(); +>new exports() : exports +>exports : typeof exports + + new require(); +>new require() : exports +>require : typeof exports +} diff --git a/tests/baselines/reference/collisionExportsRequireAndModule.errors.txt b/tests/baselines/reference/collisionExportsRequireAndModule.errors.txt new file mode 100644 index 00000000000..4f1f9c4cd4d --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndModule.errors.txt @@ -0,0 +1,94 @@ +==== tests/cases/compiler/collisionExportsRequireAndModule_externalmodule.ts (2 errors) ==== + export module require { + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + export interface I { + } + export class C { + } + } + export function foo(): require.I { + return null; + } + export module exports { + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + export interface I { + } + export class C { + } + } + export function foo2(): exports.I { + return null; + } + module m1 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } + } + module m2 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } + } + +==== tests/cases/compiler/collisionExportsRequireAndModule_globalFile.ts (0 errors) ==== + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } + module m3 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } + } + module m4 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndModule.js b/tests/baselines/reference/collisionExportsRequireAndModule.js index 88e53a922b0..76e170b18d1 100644 --- a/tests/baselines/reference/collisionExportsRequireAndModule.js +++ b/tests/baselines/reference/collisionExportsRequireAndModule.js @@ -1,4 +1,6 @@ -//// [collisionExportsRequireAndModule.ts] +//// [tests/cases/compiler/collisionExportsRequireAndModule.ts] //// + +//// [collisionExportsRequireAndModule_externalmodule.ts] export module require { export interface I { } @@ -16,9 +18,80 @@ export module exports { } export function foo2(): exports.I { return null; -} +} +module m1 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m2 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } +} -//// [collisionExportsRequireAndModule.js] +//// [collisionExportsRequireAndModule_globalFile.ts] +module require { + export interface I { + } + export class C { + } +} +module exports { + export interface I { + } + export class C { + } +} +module m3 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m4 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } +} + + +//// [collisionExportsRequireAndModule_externalmodule.js] define(["require", "exports"], function (require, exports) { (function (require) { var C = (function () { @@ -46,4 +119,107 @@ define(["require", "exports"], function (require, exports) { return null; } exports.foo2 = foo2; + var m1; + (function (m1) { + var require; + (function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; + })(require || (require = {})); + var exports; + (function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; + })(exports || (exports = {})); + })(m1 || (m1 = {})); + var m2; + (function (m2) { + (function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; + })(m2.require || (m2.require = {})); + var require = m2.require; + (function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; + })(m2.exports || (m2.exports = {})); + var exports = m2.exports; + })(m2 || (m2 = {})); }); +//// [collisionExportsRequireAndModule_globalFile.js] +var require; +(function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; +})(require || (require = {})); +var exports; +(function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; +})(exports || (exports = {})); +var m3; +(function (m3) { + var require; + (function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; + })(require || (require = {})); + var exports; + (function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; + })(exports || (exports = {})); +})(m3 || (m3 = {})); +var m4; +(function (m4) { + (function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; + })(m4.require || (m4.require = {})); + var require = m4.require; + (function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; + })(m4.exports || (m4.exports = {})); + var exports = m4.exports; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndUninstantiatedModule.types b/tests/baselines/reference/collisionExportsRequireAndUninstantiatedModule.types new file mode 100644 index 00000000000..59d90feda46 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndUninstantiatedModule.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/collisionExportsRequireAndUninstantiatedModule.ts === +export module require { // no error +>require : unknown + + export interface I { +>I : I + } +} +export function foo(): require.I { +>foo : () => require.I +>require : unknown +>I : require.I + + return null; +} +export module exports { // no error +>exports : unknown + + export interface I { +>I : I + } +} +export function foo2(): exports.I { +>foo2 : () => exports.I +>exports : unknown +>I : exports.I + + return null; +} diff --git a/tests/baselines/reference/collisionExportsRequireAndVar.errors.txt b/tests/baselines/reference/collisionExportsRequireAndVar.errors.txt new file mode 100644 index 00000000000..d5106a0fe50 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndVar.errors.txt @@ -0,0 +1,29 @@ +==== tests/cases/compiler/collisionExportsRequireAndVar_externalmodule.ts (2 errors) ==== + export function foo() { + } + var exports = 1; + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + var require = "require"; + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + module m1 { + var exports = 0; + var require = "require"; + } + module m2 { + export var exports = 0; + export var require = "require"; + } + +==== tests/cases/compiler/collisionExportsRequireAndVar_globalFile.ts (0 errors) ==== + var exports = 0; + var require = "require"; + module m3 { + var exports = 0; + var require = "require"; + } + module m4 { + export var exports = 0; + export var require = "require"; + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndVar.js b/tests/baselines/reference/collisionExportsRequireAndVar.js index a7604038563..07c8827603e 100644 --- a/tests/baselines/reference/collisionExportsRequireAndVar.js +++ b/tests/baselines/reference/collisionExportsRequireAndVar.js @@ -1,15 +1,59 @@ -//// [collisionExportsRequireAndVar.ts] +//// [tests/cases/compiler/collisionExportsRequireAndVar.ts] //// + +//// [collisionExportsRequireAndVar_externalmodule.ts] export function foo() { } var exports = 1; var require = "require"; +module m1 { + var exports = 0; + var require = "require"; +} +module m2 { + export var exports = 0; + export var require = "require"; +} +//// [collisionExportsRequireAndVar_globalFile.ts] +var exports = 0; +var require = "require"; +module m3 { + var exports = 0; + var require = "require"; +} +module m4 { + export var exports = 0; + export var require = "require"; +} -//// [collisionExportsRequireAndVar.js] +//// [collisionExportsRequireAndVar_externalmodule.js] define(["require", "exports"], function (require, exports) { function foo() { } exports.foo = foo; var exports = 1; var require = "require"; + var m1; + (function (m1) { + var exports = 0; + var require = "require"; + })(m1 || (m1 = {})); + var m2; + (function (m2) { + m2.exports = 0; + m2.require = "require"; + })(m2 || (m2 = {})); }); +//// [collisionExportsRequireAndVar_globalFile.js] +var exports = 0; +var require = "require"; +var m3; +(function (m3) { + var exports = 0; + var require = "require"; +})(m3 || (m3 = {})); +var m4; +(function (m4) { + m4.exports = 0; + m4.require = "require"; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionRestParameterArrowFunctions.js b/tests/baselines/reference/collisionRestParameterArrowFunctions.js index d23ef5c1418..cc8dc337b87 100644 --- a/tests/baselines/reference/collisionRestParameterArrowFunctions.js +++ b/tests/baselines/reference/collisionRestParameterArrowFunctions.js @@ -19,18 +19,18 @@ var f1 = function (_i) { for (var _i = 1; _i < arguments.length; _i++) { restParameters[_i - 1] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error }; var f1NoError = function (_i) { - var _i = 10; + var _i = 10; // no error }; var f2 = function () { var restParameters = []; for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var _i = 10; + var _i = 10; // No Error }; var f2NoError = function () { - var _i = 10; + var _i = 10; // no error }; diff --git a/tests/baselines/reference/collisionRestParameterClassConstructor.js b/tests/baselines/reference/collisionRestParameterClassConstructor.js index c77b95d5582..02c7ada9dff 100644 --- a/tests/baselines/reference/collisionRestParameterClassConstructor.js +++ b/tests/baselines/reference/collisionRestParameterClassConstructor.js @@ -67,19 +67,20 @@ declare class c6NoError { } //// [collisionRestParameterClassConstructor.js] +// Constructors var c1 = (function () { function c1(_i) { var restParameters = []; for (var _i = 1; _i < arguments.length; _i++) { restParameters[_i - 1] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error } return c1; })(); var c1NoError = (function () { function c1NoError(_i) { - var _i = 10; + var _i = 10; // no error } return c1NoError; })(); @@ -89,13 +90,13 @@ var c2 = (function () { for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error } return c2; })(); var c2NoError = (function () { function c2NoError() { - var _i = 10; + var _i = 10; // no error } return c2NoError; })(); @@ -106,14 +107,14 @@ var c3 = (function () { restParameters[_i - 1] = arguments[_i]; } this._i = _i; - var _i = 10; + var _i = 10; // no error } return c3; })(); var c3NoError = (function () { function c3NoError(_i) { this._i = _i; - var _i = 10; + var _i = 10; // no error } return c3NoError; })(); @@ -123,13 +124,13 @@ var c5 = (function () { for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var _i; + var _i; // no error } return c5; })(); var c5NoError = (function () { function c5NoError(_i) { - var _i; + var _i; // no error } return c5NoError; })(); diff --git a/tests/baselines/reference/collisionRestParameterClassMethod.js b/tests/baselines/reference/collisionRestParameterClassMethod.js index f5f4978472e..326ad0c424d 100644 --- a/tests/baselines/reference/collisionRestParameterClassMethod.js +++ b/tests/baselines/reference/collisionRestParameterClassMethod.js @@ -47,20 +47,20 @@ var c1 = (function () { for (var _i = 1; _i < arguments.length; _i++) { restParameters[_i - 1] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error }; c1.prototype.fooNoError = function (_i) { - var _i = 10; + var _i = 10; // no error }; c1.prototype.f4 = function (_i) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } - var _i; + var _i; // no error }; c1.prototype.f4NoError = function (_i) { - var _i; + var _i; // no error }; return c1; })(); @@ -72,10 +72,10 @@ var c3 = (function () { for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error }; c3.prototype.fooNoError = function () { - var _i = 10; + var _i = 10; // no error }; return c3; })(); diff --git a/tests/baselines/reference/collisionRestParameterFunction.js b/tests/baselines/reference/collisionRestParameterFunction.js index 7e575778f03..c81dbb0f8d3 100644 --- a/tests/baselines/reference/collisionRestParameterFunction.js +++ b/tests/baselines/reference/collisionRestParameterFunction.js @@ -34,25 +34,26 @@ declare function f6(_i: number); // no codegen no error declare function f6(_i: string); // no codegen no error //// [collisionRestParameterFunction.js] +// Functions function f1(_i) { var restParameters = []; for (var _i = 1; _i < arguments.length; _i++) { restParameters[_i - 1] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error } function f1NoError(_i) { - var _i = 10; + var _i = 10; // no error } function f3() { var restParameters = []; for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error } function f3NoError() { - var _i = 10; + var _i = 10; // no error } function f4(_i) { var rest = []; diff --git a/tests/baselines/reference/collisionRestParameterFunctionExpressions.js b/tests/baselines/reference/collisionRestParameterFunctionExpressions.js index fa50850ceef..4f1dea2b11e 100644 --- a/tests/baselines/reference/collisionRestParameterFunctionExpressions.js +++ b/tests/baselines/reference/collisionRestParameterFunctionExpressions.js @@ -31,20 +31,20 @@ function foo() { for (var _i = 1; _i < arguments.length; _i++) { restParameters[_i - 1] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error } function f1NoError(_i) { - var _i = 10; + var _i = 10; // no error } function f3() { var restParameters = []; for (var _i = 0; _i < arguments.length; _i++) { restParameters[_i - 0] = arguments[_i]; } - var _i = 10; + var _i = 10; // no error } function f3NoError() { - var _i = 10; + var _i = 10; // no error } function f4(_i) { var rest = []; diff --git a/tests/baselines/reference/collisionRestParameterInType.js b/tests/baselines/reference/collisionRestParameterInType.js index 3910cbc490d..9d1c7839451 100644 --- a/tests/baselines/reference/collisionRestParameterInType.js +++ b/tests/baselines/reference/collisionRestParameterInType.js @@ -8,5 +8,5 @@ var v2: { } //// [collisionRestParameterInType.js] -var v1; +var v1; // no error - no code gen var v2; diff --git a/tests/baselines/reference/collisionRestParameterInType.types b/tests/baselines/reference/collisionRestParameterInType.types new file mode 100644 index 00000000000..5987409407d --- /dev/null +++ b/tests/baselines/reference/collisionRestParameterInType.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/collisionRestParameterInType.ts === +var v1: (_i: number, ...restParameters) => void; // no error - no code gen +>v1 : (_i: number, ...restParameters: any[]) => void +>_i : number +>restParameters : any[] + +var v2: { +>v2 : { (_i: number, ...restParameters: any[]): any; new (_i: number, ...restParameters: any[]): any; foo(_i: number, ...restParameters: any[]): any; prop: (_i: number, ...restParameters: any[]) => void; } + + (_i: number, ...restParameters); // no error - no code gen +>_i : number +>restParameters : any[] + + new (_i: number, ...restParameters); // no error - no code gen +>_i : number +>restParameters : any[] + + foo(_i: number, ...restParameters); // no error - no code gen +>foo : (_i: number, ...restParameters: any[]) => any +>_i : number +>restParameters : any[] + + prop: (_i: number, ...restParameters) => void; // no error - no code gen +>prop : (_i: number, ...restParameters: any[]) => void +>_i : number +>restParameters : any[] +} diff --git a/tests/baselines/reference/collisionRestParameterInterfaceMembers.types b/tests/baselines/reference/collisionRestParameterInterfaceMembers.types new file mode 100644 index 00000000000..f060857f2d0 --- /dev/null +++ b/tests/baselines/reference/collisionRestParameterInterfaceMembers.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/collisionRestParameterInterfaceMembers.ts === +// call +interface i1 { +>i1 : i1 + + (_i: number, ...restParameters); // no error - no code gen +>_i : number +>restParameters : any[] +} +interface i1NoError { +>i1NoError : i1NoError + + (_i: number); // no error +>_i : number +} + +// new +interface i2 { +>i2 : i2 + + new (_i: number, ...restParameters); // no error - no code gen +>_i : number +>restParameters : any[] +} +interface i2NoError { +>i2NoError : i2NoError + + new (_i: number); // no error +>_i : number +} + +// method +interface i3 { +>i3 : i3 + + foo (_i: number, ...restParameters); // no error - no code gen +>foo : (_i: number, ...restParameters: any[]) => any +>_i : number +>restParameters : any[] + + fooNoError (_i: number); // no error +>fooNoError : (_i: number) => any +>_i : number +} diff --git a/tests/baselines/reference/collisionRestParameterUnderscoreIUsage.js b/tests/baselines/reference/collisionRestParameterUnderscoreIUsage.js index 3e3d86265da..b8d3aaec91c 100644 --- a/tests/baselines/reference/collisionRestParameterUnderscoreIUsage.js +++ b/tests/baselines/reference/collisionRestParameterUnderscoreIUsage.js @@ -16,7 +16,7 @@ var Foo = (function () { for (var _i = 0; _i < arguments.length; _i++) { args[_i - 0] = arguments[_i]; } - console.log(_i); + console.log(_i); // This should result in error } return Foo; })(); diff --git a/tests/baselines/reference/collisionSuperAndLocalVarInConstructor.js b/tests/baselines/reference/collisionSuperAndLocalVarInConstructor.js index 926b310a83d..2cd7549c78c 100644 --- a/tests/baselines/reference/collisionSuperAndLocalVarInConstructor.js +++ b/tests/baselines/reference/collisionSuperAndLocalVarInConstructor.js @@ -27,10 +27,10 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var _super = 10; +var _super = 10; // No Error var Foo = (function () { function Foo() { - var _super = 10; + var _super = 10; // No error } return Foo; })(); @@ -38,7 +38,7 @@ var b = (function (_super) { __extends(b, _super); function b() { _super.call(this); - var _super = 10; + var _super = 10; // Should be error } return b; })(Foo); @@ -47,7 +47,7 @@ var c = (function (_super) { function c() { _super.call(this); var x = function () { - var _super = 10; + var _super = 10; // Should be error }; } return c; diff --git a/tests/baselines/reference/collisionSuperAndLocalVarInMethod.js b/tests/baselines/reference/collisionSuperAndLocalVarInMethod.js index e99c9235cc6..e7b374e5a61 100644 --- a/tests/baselines/reference/collisionSuperAndLocalVarInMethod.js +++ b/tests/baselines/reference/collisionSuperAndLocalVarInMethod.js @@ -25,12 +25,12 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var _super = 10; +var _super = 10; // No Error var Foo = (function () { function Foo() { } Foo.prototype.x = function () { - var _super = 10; + var _super = 10; // No error }; return Foo; })(); @@ -40,7 +40,7 @@ var b = (function (_super) { _super.apply(this, arguments); } b.prototype.foo = function () { - var _super = 10; + var _super = 10; // Should be error }; return b; })(Foo); @@ -51,7 +51,7 @@ var c = (function (_super) { } c.prototype.foo = function () { var x = function () { - var _super = 10; + var _super = 10; // Should be error }; }; return c; diff --git a/tests/baselines/reference/collisionSuperAndLocalVarInProperty.js b/tests/baselines/reference/collisionSuperAndLocalVarInProperty.js index 7e3b8a5c5c3..55777f920a2 100644 --- a/tests/baselines/reference/collisionSuperAndLocalVarInProperty.js +++ b/tests/baselines/reference/collisionSuperAndLocalVarInProperty.js @@ -24,15 +24,15 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var _super = 10; +var _super = 10; // No Error var Foo = (function () { function Foo() { this.prop1 = { doStuff: function () { - var _super = 10; + var _super = 10; // No error } }; - this._super = 10; + this._super = 10; // No error } return Foo; })(); @@ -42,10 +42,10 @@ var b = (function (_super) { _super.apply(this, arguments); this.prop2 = { doStuff: function () { - var _super = 10; + var _super = 10; // Should be error } }; - this._super = 10; + this._super = 10; // No error } return b; })(Foo); diff --git a/tests/baselines/reference/collisionSuperAndNameResolution.js b/tests/baselines/reference/collisionSuperAndNameResolution.js index 26633a6006e..763e151247e 100644 --- a/tests/baselines/reference/collisionSuperAndNameResolution.js +++ b/tests/baselines/reference/collisionSuperAndNameResolution.js @@ -19,7 +19,7 @@ var __extends = this.__extends || function (d, b) { d.prototype = new __(); }; var console; -var _super = 10; +var _super = 10; // No error var base = (function () { function base() { } @@ -31,7 +31,7 @@ var Foo = (function (_super) { _super.apply(this, arguments); } Foo.prototype.x = function () { - console.log(_super); + console.log(_super); // Error as this doesnt not resolve to user defined _super }; return Foo; })(base); diff --git a/tests/baselines/reference/collisionThisExpressionAndAliasInGlobal.js b/tests/baselines/reference/collisionThisExpressionAndAliasInGlobal.js index 9ce9dd131a9..1f613798642 100644 --- a/tests/baselines/reference/collisionThisExpressionAndAliasInGlobal.js +++ b/tests/baselines/reference/collisionThisExpressionAndAliasInGlobal.js @@ -12,4 +12,4 @@ var a; a.b = 10; })(a || (a = {})); var f = function () { return _this; }; -var _this = a; +var _this = a; // Error diff --git a/tests/baselines/reference/collisionThisExpressionAndAmbientClassInGlobal.js b/tests/baselines/reference/collisionThisExpressionAndAmbientClassInGlobal.js index 10238a55f47..b99311b0c3e 100644 --- a/tests/baselines/reference/collisionThisExpressionAndAmbientClassInGlobal.js +++ b/tests/baselines/reference/collisionThisExpressionAndAmbientClassInGlobal.js @@ -7,4 +7,4 @@ var a = new _this(); // Error //// [collisionThisExpressionAndAmbientClassInGlobal.js] var _this = this; var f = function () { return _this; }; -var a = new _this(); +var a = new _this(); // Error diff --git a/tests/baselines/reference/collisionThisExpressionAndAmbientVarInGlobal.js b/tests/baselines/reference/collisionThisExpressionAndAmbientVarInGlobal.js index 1aff51e65e2..c6c54869056 100644 --- a/tests/baselines/reference/collisionThisExpressionAndAmbientVarInGlobal.js +++ b/tests/baselines/reference/collisionThisExpressionAndAmbientVarInGlobal.js @@ -6,4 +6,4 @@ _this = 10; // Error //// [collisionThisExpressionAndAmbientVarInGlobal.js] var _this = this; var f = function () { return _this; }; -_this = 10; +_this = 10; // Error diff --git a/tests/baselines/reference/collisionThisExpressionAndNameResolution.js b/tests/baselines/reference/collisionThisExpressionAndNameResolution.js index 969f3eff090..8b128d92946 100644 --- a/tests/baselines/reference/collisionThisExpressionAndNameResolution.js +++ b/tests/baselines/reference/collisionThisExpressionAndNameResolution.js @@ -18,11 +18,11 @@ var Foo = (function () { function Foo() { } Foo.prototype.x = function () { - var _this = 10; + var _this = 10; // Local var. No this capture in x(), so no conflict. function inner() { var _this = this; - console.log(_this); - return function (x) { return _this; }; + console.log(_this); // Error as this doesnt not resolve to user defined _this + return function (x) { return _this; }; // New scope. So should inject new _this capture into function inner } }; return Foo; diff --git a/tests/baselines/reference/collisionThisExpressionAndParameter.js b/tests/baselines/reference/collisionThisExpressionAndParameter.js index 7df383afcdf..7c11cab769f 100644 --- a/tests/baselines/reference/collisionThisExpressionAndParameter.js +++ b/tests/baselines/reference/collisionThisExpressionAndParameter.js @@ -98,26 +98,26 @@ var Foo = (function () { function Foo() { } Foo.prototype.x = function () { - var _this = 10; + var _this = 10; // Local var. No this capture in x(), so no conflict. function inner(_this) { var _this = this; - return function (x) { return _this; }; + return function (x) { return _this; }; // New scope. So should inject new _this capture into function inner } }; Foo.prototype.y = function () { var _this = this; var lamda = function (_this) { - return function (x) { return _this; }; + return function (x) { return _this; }; // New scope. So should inject new _this capture }; }; Foo.prototype.z = function (_this) { var _this = this; var lambda = function () { - return function (x) { return _this; }; + return function (x) { return _this; }; // New scope. So should inject new _this capture }; }; Foo.prototype.x1 = function () { - var _this = 10; + var _this = 10; // Local var. No this capture in x(), so no conflict. function inner(_this) { } }; @@ -160,7 +160,7 @@ var Foo3 = (function () { Foo3.prototype.z = function (_this) { var _this = this; var lambda = function () { - return function (x) { return _this; }; + return function (x) { return _this; }; // New scope. So should inject new _this capture }; }; return Foo3; diff --git a/tests/baselines/reference/collisionThisExpressionAndPropertyNameAsConstuctorParameter.js b/tests/baselines/reference/collisionThisExpressionAndPropertyNameAsConstuctorParameter.js index 566bb552a70..a77098739ec 100644 --- a/tests/baselines/reference/collisionThisExpressionAndPropertyNameAsConstuctorParameter.js +++ b/tests/baselines/reference/collisionThisExpressionAndPropertyNameAsConstuctorParameter.js @@ -40,7 +40,7 @@ var Foo2 = (function () { function Foo2(_this) { var _this = this; var lambda = function () { - return function (x) { return _this; }; + return function (x) { return _this; }; // New scope. So should inject new _this capture }; } return Foo2; @@ -50,7 +50,7 @@ var Foo3 = (function () { var _this = this; this._this = _this; var lambda = function () { - return function (x) { return _this; }; + return function (x) { return _this; }; // New scope. So should inject new _this capture }; } return Foo3; @@ -59,7 +59,7 @@ var Foo4 = (function () { function Foo4(_this) { var _this = this; var lambda = function () { - return function (x) { return _this; }; + return function (x) { return _this; }; // New scope. So should inject new _this capture }; } return Foo4; @@ -69,7 +69,7 @@ var Foo5 = (function () { var _this = this; this._this = _this; var lambda = function () { - return function (x) { return _this; }; + return function (x) { return _this; }; // New scope. So should inject new _this capture }; } return Foo5; diff --git a/tests/baselines/reference/commaOperator1.types b/tests/baselines/reference/commaOperator1.types new file mode 100644 index 00000000000..52a36e33024 --- /dev/null +++ b/tests/baselines/reference/commaOperator1.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/commaOperator1.ts === +var v1 = ((1, 2, 3), 4, 5, (6, 7)); +>v1 : number +>((1, 2, 3), 4, 5, (6, 7)) : number +>(1, 2, 3), 4, 5, (6, 7) : number +>(1, 2, 3), 4, 5 : number +>(1, 2, 3), 4 : number +>(1, 2, 3) : number +>1, 2, 3 : number +>1, 2 : number +>(6, 7) : number +>6, 7 : number + +function f1() { +>f1 : () => number + + var a = 1; +>a : number + + return a, v1, a; +>a, v1, a : number +>a, v1 : number +>a : number +>v1 : number +>a : number +} + diff --git a/tests/baselines/reference/commaOperatorInvalidAssignmentType.js b/tests/baselines/reference/commaOperatorInvalidAssignmentType.js index 37a72e824ec..0d6b9389cfc 100644 --- a/tests/baselines/reference/commaOperatorInvalidAssignmentType.js +++ b/tests/baselines/reference/commaOperatorInvalidAssignmentType.js @@ -25,6 +25,7 @@ var STRING; var resultIsBoolean; var resultIsNumber; var resultIsString; +//Expect errors when the results type is different form the second operand resultIsBoolean = (BOOLEAN, STRING); resultIsBoolean = (BOOLEAN, NUMBER); resultIsNumber = (NUMBER, BOOLEAN); diff --git a/tests/baselines/reference/commaOperatorOtherInvalidOperation.js b/tests/baselines/reference/commaOperatorOtherInvalidOperation.js index 061a18af273..d14dec67709 100644 --- a/tests/baselines/reference/commaOperatorOtherInvalidOperation.js +++ b/tests/baselines/reference/commaOperatorOtherInvalidOperation.js @@ -14,12 +14,15 @@ function foo1() { } //// [commaOperatorOtherInvalidOperation.js] +//Expect to have compiler errors +//Comma operator in fuction arguments and return function foo(x, y) { return x, y; } -var resultIsString = foo(1, "123"); +var resultIsString = foo(1, "123"); //error here +//TypeParameters function foo1() { var x; var y; - var result = (x, y); + var result = (x, y); //error here } diff --git a/tests/baselines/reference/commaOperatorOtherValidOperation.js b/tests/baselines/reference/commaOperatorOtherValidOperation.js index f99eb586be3..4d556472adc 100644 --- a/tests/baselines/reference/commaOperatorOtherValidOperation.js +++ b/tests/baselines/reference/commaOperatorOtherValidOperation.js @@ -24,10 +24,12 @@ function foo1() //// [commaOperatorOtherValidOperation.js] for (var i = 0, j = 10; i < j; i++, j--) { } +//Comma operator in fuction arguments and return function foo(x, y) { return x, y; } var resultIsString = foo(1, "123"); +//TypeParameters function foo1() { var x; var y; diff --git a/tests/baselines/reference/commaOperatorOtherValidOperation.types b/tests/baselines/reference/commaOperatorOtherValidOperation.types new file mode 100644 index 00000000000..e42991e7b5a --- /dev/null +++ b/tests/baselines/reference/commaOperatorOtherValidOperation.types @@ -0,0 +1,59 @@ +=== tests/cases/conformance/expressions/commaOperator/commaOperatorOtherValidOperation.ts === +//Comma operator in for loop +for (var i = 0, j = 10; i < j; i++, j--) +>i : number +>j : number +>i < j : boolean +>i : number +>j : number +>i++, j-- : number +>i++ : number +>i : number +>j-- : number +>j : number +{ +} + +//Comma operator in fuction arguments and return +function foo(x: number, y: string) +>foo : (x: number, y: string) => string +>x : number +>y : string +{ + return x, y; +>x, y : string +>x : number +>y : string +} +var resultIsString = foo(1, "123"); +>resultIsString : string +>foo(1, "123") : string +>foo : (x: number, y: string) => string + +//TypeParameters +function foo1() +>foo1 : () => void +>T1 : T1 +>T2 : T2 +{ + var x: T1; +>x : T1 +>T1 : T1 + + var y: T2; +>y : T2 +>T2 : T2 + + x, y; +>x, y : T2 +>x : T1 +>y : T2 + + var resultIsT1 = (y, x); +>resultIsT1 : T1 +>(y, x) : T1 +>y, x : T1 +>y : T2 +>x : T1 +} + diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandAnyType.js b/tests/baselines/reference/commaOperatorWithSecondOperandAnyType.js index 29c9b61e6b0..522bbbe4e19 100644 --- a/tests/baselines/reference/commaOperatorWithSecondOperandAnyType.js +++ b/tests/baselines/reference/commaOperatorWithSecondOperandAnyType.js @@ -43,16 +43,19 @@ var BOOLEAN; var NUMBER; var STRING; var OBJECT; +//The second operand type is any ANY, ANY; BOOLEAN, ANY; NUMBER, ANY; STRING, ANY; OBJECT, ANY; +//Return type is any var resultIsAny1 = (ANY, ANY); var resultIsAny2 = (BOOLEAN, ANY); var resultIsAny3 = (NUMBER, ANY); var resultIsAny4 = (STRING, ANY); var resultIsAny5 = (OBJECT, ANY); +//Literal and expression var x; 1, ANY; ++NUMBER, ANY; diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandAnyType.types b/tests/baselines/reference/commaOperatorWithSecondOperandAnyType.types new file mode 100644 index 00000000000..a63e20cf673 --- /dev/null +++ b/tests/baselines/reference/commaOperatorWithSecondOperandAnyType.types @@ -0,0 +1,164 @@ +=== tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandAnyType.ts === +var ANY: any; +>ANY : any + +var BOOLEAN: boolean; +>BOOLEAN : boolean + +var NUMBER: number; +>NUMBER : number + +var STRING: string; +>STRING : string + +var OBJECT: Object; +>OBJECT : Object +>Object : Object + +//The second operand type is any +ANY, ANY; +>ANY, ANY : any +>ANY : any +>ANY : any + +BOOLEAN, ANY; +>BOOLEAN, ANY : any +>BOOLEAN : boolean +>ANY : any + +NUMBER, ANY; +>NUMBER, ANY : any +>NUMBER : number +>ANY : any + +STRING, ANY; +>STRING, ANY : any +>STRING : string +>ANY : any + +OBJECT, ANY; +>OBJECT, ANY : any +>OBJECT : Object +>ANY : any + +//Return type is any +var resultIsAny1 = (ANY, ANY); +>resultIsAny1 : any +>(ANY, ANY) : any +>ANY, ANY : any +>ANY : any +>ANY : any + +var resultIsAny2 = (BOOLEAN, ANY); +>resultIsAny2 : any +>(BOOLEAN, ANY) : any +>BOOLEAN, ANY : any +>BOOLEAN : boolean +>ANY : any + +var resultIsAny3 = (NUMBER, ANY); +>resultIsAny3 : any +>(NUMBER, ANY) : any +>NUMBER, ANY : any +>NUMBER : number +>ANY : any + +var resultIsAny4 = (STRING, ANY); +>resultIsAny4 : any +>(STRING, ANY) : any +>STRING, ANY : any +>STRING : string +>ANY : any + +var resultIsAny5 = (OBJECT, ANY); +>resultIsAny5 : any +>(OBJECT, ANY) : any +>OBJECT, ANY : any +>OBJECT : Object +>ANY : any + +//Literal and expression +var x: any; +>x : any + +1, ANY; +>1, ANY : any +>ANY : any + +++NUMBER, ANY; +>++NUMBER, ANY : any +>++NUMBER : number +>NUMBER : number +>ANY : any + +"string", [null, 1]; +>"string", [null, 1] : number[] +>[null, 1] : number[] + +"string".charAt(0), [null, 1]; +>"string".charAt(0), [null, 1] : number[] +>"string".charAt(0) : string +>"string".charAt : (pos: number) => string +>charAt : (pos: number) => string +>[null, 1] : number[] + +true, x("any"); +>true, x("any") : any +>x("any") : any +>x : any + +!BOOLEAN, x.doSomeThing(); +>!BOOLEAN, x.doSomeThing() : any +>!BOOLEAN : boolean +>BOOLEAN : boolean +>x.doSomeThing() : any +>x.doSomeThing : any +>x : any +>doSomeThing : any + +var resultIsAny6 = (1, ANY); +>resultIsAny6 : any +>(1, ANY) : any +>1, ANY : any +>ANY : any + +var resultIsAny7 = (++NUMBER, ANY); +>resultIsAny7 : any +>(++NUMBER, ANY) : any +>++NUMBER, ANY : any +>++NUMBER : number +>NUMBER : number +>ANY : any + +var resultIsAny8 = ("string", null); +>resultIsAny8 : any +>("string", null) : null +>"string", null : null + +var resultIsAny9 = ("string".charAt(0), undefined); +>resultIsAny9 : any +>("string".charAt(0), undefined) : undefined +>"string".charAt(0), undefined : undefined +>"string".charAt(0) : string +>"string".charAt : (pos: number) => string +>charAt : (pos: number) => string +>undefined : undefined + +var resultIsAny10 = (true, x("any")); +>resultIsAny10 : any +>(true, x("any")) : any +>true, x("any") : any +>x("any") : any +>x : any + +var resultIsAny11 = (!BOOLEAN, x.doSomeThing()); +>resultIsAny11 : any +>(!BOOLEAN, x.doSomeThing()) : any +>!BOOLEAN, x.doSomeThing() : any +>!BOOLEAN : boolean +>BOOLEAN : boolean +>x.doSomeThing() : any +>x.doSomeThing : any +>x : any +>doSomeThing : any + diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.js b/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.js index a772c42b4b9..dfaba1a93ca 100644 --- a/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.js +++ b/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.js @@ -41,16 +41,19 @@ var BOOLEAN; var NUMBER; var STRING; var OBJECT; +//The second operand type is boolean ANY, BOOLEAN; BOOLEAN, BOOLEAN; NUMBER, BOOLEAN; STRING, BOOLEAN; OBJECT, BOOLEAN; +//Return type is boolean var resultIsBoolean1 = (ANY, BOOLEAN); var resultIsBoolean2 = (BOOLEAN, BOOLEAN); var resultIsBoolean3 = (NUMBER, BOOLEAN); var resultIsBoolean4 = (STRING, BOOLEAN); var resultIsBoolean5 = (OBJECT, BOOLEAN); +//Literal and expression null, BOOLEAN; ANY = undefined, BOOLEAN; 1, true; diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.types b/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.types new file mode 100644 index 00000000000..49a3fdc4cc5 --- /dev/null +++ b/tests/baselines/reference/commaOperatorWithSecondOperandBooleanType.types @@ -0,0 +1,158 @@ +=== tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandBooleanType.ts === +var ANY: any; +>ANY : any + +var BOOLEAN: boolean; +>BOOLEAN : boolean + +var NUMBER: number; +>NUMBER : number + +var STRING: string; +>STRING : string + +var OBJECT: Object; +>OBJECT : Object +>Object : Object + +//The second operand type is boolean +ANY, BOOLEAN; +>ANY, BOOLEAN : boolean +>ANY : any +>BOOLEAN : boolean + +BOOLEAN, BOOLEAN; +>BOOLEAN, BOOLEAN : boolean +>BOOLEAN : boolean +>BOOLEAN : boolean + +NUMBER, BOOLEAN; +>NUMBER, BOOLEAN : boolean +>NUMBER : number +>BOOLEAN : boolean + +STRING, BOOLEAN; +>STRING, BOOLEAN : boolean +>STRING : string +>BOOLEAN : boolean + +OBJECT, BOOLEAN; +>OBJECT, BOOLEAN : boolean +>OBJECT : Object +>BOOLEAN : boolean + +//Return type is boolean +var resultIsBoolean1 = (ANY, BOOLEAN); +>resultIsBoolean1 : boolean +>(ANY, BOOLEAN) : boolean +>ANY, BOOLEAN : boolean +>ANY : any +>BOOLEAN : boolean + +var resultIsBoolean2 = (BOOLEAN, BOOLEAN); +>resultIsBoolean2 : boolean +>(BOOLEAN, BOOLEAN) : boolean +>BOOLEAN, BOOLEAN : boolean +>BOOLEAN : boolean +>BOOLEAN : boolean + +var resultIsBoolean3 = (NUMBER, BOOLEAN); +>resultIsBoolean3 : boolean +>(NUMBER, BOOLEAN) : boolean +>NUMBER, BOOLEAN : boolean +>NUMBER : number +>BOOLEAN : boolean + +var resultIsBoolean4 = (STRING, BOOLEAN); +>resultIsBoolean4 : boolean +>(STRING, BOOLEAN) : boolean +>STRING, BOOLEAN : boolean +>STRING : string +>BOOLEAN : boolean + +var resultIsBoolean5 = (OBJECT, BOOLEAN); +>resultIsBoolean5 : boolean +>(OBJECT, BOOLEAN) : boolean +>OBJECT, BOOLEAN : boolean +>OBJECT : Object +>BOOLEAN : boolean + +//Literal and expression +null, BOOLEAN; +>null, BOOLEAN : boolean +>BOOLEAN : boolean + +ANY = undefined, BOOLEAN; +>ANY = undefined, BOOLEAN : boolean +>ANY = undefined : undefined +>ANY : any +>undefined : undefined +>BOOLEAN : boolean + +1, true; +>1, true : boolean + +++NUMBER, true; +>++NUMBER, true : boolean +>++NUMBER : number +>NUMBER : number + +[1, 2, 3], !BOOLEAN; +>[1, 2, 3], !BOOLEAN : boolean +>[1, 2, 3] : number[] +>!BOOLEAN : boolean +>BOOLEAN : boolean + +OBJECT = [1, 2, 3], BOOLEAN = false; +>OBJECT = [1, 2, 3], BOOLEAN = false : boolean +>OBJECT = [1, 2, 3] : number[] +>OBJECT : Object +>[1, 2, 3] : number[] +>BOOLEAN = false : boolean +>BOOLEAN : boolean + +var resultIsBoolean6 = (null, BOOLEAN); +>resultIsBoolean6 : boolean +>(null, BOOLEAN) : boolean +>null, BOOLEAN : boolean +>BOOLEAN : boolean + +var resultIsBoolean7 = (ANY = undefined, BOOLEAN); +>resultIsBoolean7 : boolean +>(ANY = undefined, BOOLEAN) : boolean +>ANY = undefined, BOOLEAN : boolean +>ANY = undefined : undefined +>ANY : any +>undefined : undefined +>BOOLEAN : boolean + +var resultIsBoolean8 = (1, true); +>resultIsBoolean8 : boolean +>(1, true) : boolean +>1, true : boolean + +var resultIsBoolean9 = (++NUMBER, true); +>resultIsBoolean9 : boolean +>(++NUMBER, true) : boolean +>++NUMBER, true : boolean +>++NUMBER : number +>NUMBER : number + +var resultIsBoolean10 = ([1, 2, 3], !BOOLEAN); +>resultIsBoolean10 : boolean +>([1, 2, 3], !BOOLEAN) : boolean +>[1, 2, 3], !BOOLEAN : boolean +>[1, 2, 3] : number[] +>!BOOLEAN : boolean +>BOOLEAN : boolean + +var resultIsBoolean11 = (OBJECT = [1, 2, 3], BOOLEAN = false); +>resultIsBoolean11 : boolean +>(OBJECT = [1, 2, 3], BOOLEAN = false) : boolean +>OBJECT = [1, 2, 3], BOOLEAN = false : boolean +>OBJECT = [1, 2, 3] : number[] +>OBJECT : Object +>[1, 2, 3] : number[] +>BOOLEAN = false : boolean +>BOOLEAN : boolean + diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.js b/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.js index b9d93041ff3..b5b8887e749 100644 --- a/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.js +++ b/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.js @@ -41,16 +41,19 @@ var BOOLEAN; var NUMBER; var STRING; var OBJECT; +//The second operand type is number ANY, NUMBER; BOOLEAN, NUMBER; NUMBER, NUMBER; STRING, NUMBER; OBJECT, NUMBER; +//Return type is number var resultIsNumber1 = (ANY, NUMBER); var resultIsNumber2 = (BOOLEAN, NUMBER); var resultIsNumber3 = (NUMBER, NUMBER); var resultIsNumber4 = (STRING, NUMBER); var resultIsNumber5 = (OBJECT, NUMBER); +//Literal and expression null, NUMBER; ANY = undefined, NUMBER; true, 1; diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.types b/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.types new file mode 100644 index 00000000000..a144466d4c8 --- /dev/null +++ b/tests/baselines/reference/commaOperatorWithSecondOperandNumberType.types @@ -0,0 +1,158 @@ +=== tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandNumberType.ts === +var ANY: any; +>ANY : any + +var BOOLEAN: boolean; +>BOOLEAN : boolean + +var NUMBER: number; +>NUMBER : number + +var STRING: string; +>STRING : string + +var OBJECT: Object; +>OBJECT : Object +>Object : Object + +//The second operand type is number +ANY, NUMBER; +>ANY, NUMBER : number +>ANY : any +>NUMBER : number + +BOOLEAN, NUMBER; +>BOOLEAN, NUMBER : number +>BOOLEAN : boolean +>NUMBER : number + +NUMBER, NUMBER; +>NUMBER, NUMBER : number +>NUMBER : number +>NUMBER : number + +STRING, NUMBER; +>STRING, NUMBER : number +>STRING : string +>NUMBER : number + +OBJECT, NUMBER; +>OBJECT, NUMBER : number +>OBJECT : Object +>NUMBER : number + +//Return type is number +var resultIsNumber1 = (ANY, NUMBER); +>resultIsNumber1 : number +>(ANY, NUMBER) : number +>ANY, NUMBER : number +>ANY : any +>NUMBER : number + +var resultIsNumber2 = (BOOLEAN, NUMBER); +>resultIsNumber2 : number +>(BOOLEAN, NUMBER) : number +>BOOLEAN, NUMBER : number +>BOOLEAN : boolean +>NUMBER : number + +var resultIsNumber3 = (NUMBER, NUMBER); +>resultIsNumber3 : number +>(NUMBER, NUMBER) : number +>NUMBER, NUMBER : number +>NUMBER : number +>NUMBER : number + +var resultIsNumber4 = (STRING, NUMBER); +>resultIsNumber4 : number +>(STRING, NUMBER) : number +>STRING, NUMBER : number +>STRING : string +>NUMBER : number + +var resultIsNumber5 = (OBJECT, NUMBER); +>resultIsNumber5 : number +>(OBJECT, NUMBER) : number +>OBJECT, NUMBER : number +>OBJECT : Object +>NUMBER : number + +//Literal and expression +null, NUMBER; +>null, NUMBER : number +>NUMBER : number + +ANY = undefined, NUMBER; +>ANY = undefined, NUMBER : number +>ANY = undefined : undefined +>ANY : any +>undefined : undefined +>NUMBER : number + +true, 1; +>true, 1 : number + +BOOLEAN = false, 1; +>BOOLEAN = false, 1 : number +>BOOLEAN = false : boolean +>BOOLEAN : boolean + +"", NUMBER = 1; +>"", NUMBER = 1 : number +>NUMBER = 1 : number +>NUMBER : number + +STRING.trim(), NUMBER = 1; +>STRING.trim(), NUMBER = 1 : number +>STRING.trim() : string +>STRING.trim : () => string +>STRING : string +>trim : () => string +>NUMBER = 1 : number +>NUMBER : number + +var resultIsNumber6 = (null, NUMBER); +>resultIsNumber6 : number +>(null, NUMBER) : number +>null, NUMBER : number +>NUMBER : number + +var resultIsNumber7 = (ANY = undefined, NUMBER); +>resultIsNumber7 : number +>(ANY = undefined, NUMBER) : number +>ANY = undefined, NUMBER : number +>ANY = undefined : undefined +>ANY : any +>undefined : undefined +>NUMBER : number + +var resultIsNumber8 = (true, 1); +>resultIsNumber8 : number +>(true, 1) : number +>true, 1 : number + +var resultIsNumber9 = (BOOLEAN = false, 1); +>resultIsNumber9 : number +>(BOOLEAN = false, 1) : number +>BOOLEAN = false, 1 : number +>BOOLEAN = false : boolean +>BOOLEAN : boolean + +var resultIsNumber10 = ("", NUMBER = 1); +>resultIsNumber10 : number +>("", NUMBER = 1) : number +>"", NUMBER = 1 : number +>NUMBER = 1 : number +>NUMBER : number + +var resultIsNumber11 = (STRING.trim(), NUMBER = 1); +>resultIsNumber11 : number +>(STRING.trim(), NUMBER = 1) : number +>STRING.trim(), NUMBER = 1 : number +>STRING.trim() : string +>STRING.trim : () => string +>STRING : string +>trim : () => string +>NUMBER = 1 : number +>NUMBER : number + diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandObjectType.js b/tests/baselines/reference/commaOperatorWithSecondOperandObjectType.js index e822744b584..90c16543ff2 100644 --- a/tests/baselines/reference/commaOperatorWithSecondOperandObjectType.js +++ b/tests/baselines/reference/commaOperatorWithSecondOperandObjectType.js @@ -50,16 +50,19 @@ var CLASS = (function () { } return CLASS; })(); +//The second operand type is Object ANY, OBJECT; BOOLEAN, OBJECT; NUMBER, OBJECT; STRING, OBJECT; OBJECT, OBJECT; +//Return type is Object var resultIsObject1 = (ANY, OBJECT); var resultIsObject2 = (BOOLEAN, OBJECT); var resultIsObject3 = (NUMBER, OBJECT); var resultIsObject4 = (STRING, OBJECT); var resultIsObject5 = (OBJECT, OBJECT); +//Literal and expression null, OBJECT; ANY = null, OBJECT; true, {}; diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandObjectType.types b/tests/baselines/reference/commaOperatorWithSecondOperandObjectType.types new file mode 100644 index 00000000000..ebd102c0fde --- /dev/null +++ b/tests/baselines/reference/commaOperatorWithSecondOperandObjectType.types @@ -0,0 +1,169 @@ +=== tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandObjectType.ts === +var ANY: any; +>ANY : any + +var BOOLEAN: boolean; +>BOOLEAN : boolean + +var NUMBER: number; +>NUMBER : number + +var STRING: string; +>STRING : string + +var OBJECT: Object; +>OBJECT : Object +>Object : Object + +class CLASS { +>CLASS : CLASS + + num: number; +>num : number +} + +//The second operand type is Object +ANY, OBJECT; +>ANY, OBJECT : Object +>ANY : any +>OBJECT : Object + +BOOLEAN, OBJECT; +>BOOLEAN, OBJECT : Object +>BOOLEAN : boolean +>OBJECT : Object + +NUMBER, OBJECT; +>NUMBER, OBJECT : Object +>NUMBER : number +>OBJECT : Object + +STRING, OBJECT; +>STRING, OBJECT : Object +>STRING : string +>OBJECT : Object + +OBJECT, OBJECT; +>OBJECT, OBJECT : Object +>OBJECT : Object +>OBJECT : Object + +//Return type is Object +var resultIsObject1 = (ANY, OBJECT); +>resultIsObject1 : Object +>(ANY, OBJECT) : Object +>ANY, OBJECT : Object +>ANY : any +>OBJECT : Object + +var resultIsObject2 = (BOOLEAN, OBJECT); +>resultIsObject2 : Object +>(BOOLEAN, OBJECT) : Object +>BOOLEAN, OBJECT : Object +>BOOLEAN : boolean +>OBJECT : Object + +var resultIsObject3 = (NUMBER, OBJECT); +>resultIsObject3 : Object +>(NUMBER, OBJECT) : Object +>NUMBER, OBJECT : Object +>NUMBER : number +>OBJECT : Object + +var resultIsObject4 = (STRING, OBJECT); +>resultIsObject4 : Object +>(STRING, OBJECT) : Object +>STRING, OBJECT : Object +>STRING : string +>OBJECT : Object + +var resultIsObject5 = (OBJECT, OBJECT); +>resultIsObject5 : Object +>(OBJECT, OBJECT) : Object +>OBJECT, OBJECT : Object +>OBJECT : Object +>OBJECT : Object + +//Literal and expression +null, OBJECT +>null, OBJECT : Object +>OBJECT : Object + +ANY = null, OBJECT +>ANY = null, OBJECT : Object +>ANY = null : null +>ANY : any +>OBJECT : Object + +true, {} +>true, {} : {} +>{} : {} + +!BOOLEAN, [] +>!BOOLEAN, [] : undefined[] +>!BOOLEAN : boolean +>BOOLEAN : boolean +>[] : undefined[] + +"string", new Date() +>"string", new Date() : Date +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +STRING.toLowerCase(), new CLASS() +>STRING.toLowerCase(), new CLASS() : CLASS +>STRING.toLowerCase() : string +>STRING.toLowerCase : () => string +>STRING : string +>toLowerCase : () => string +>new CLASS() : CLASS +>CLASS : typeof CLASS + +var resultIsObject6 = (null, OBJECT); +>resultIsObject6 : Object +>(null, OBJECT) : Object +>null, OBJECT : Object +>OBJECT : Object + +var resultIsObject7 = (ANY = null, OBJECT); +>resultIsObject7 : Object +>(ANY = null, OBJECT) : Object +>ANY = null, OBJECT : Object +>ANY = null : null +>ANY : any +>OBJECT : Object + +var resultIsObject8 = (true, {}); +>resultIsObject8 : {} +>(true, {}) : {} +>true, {} : {} +>{} : {} + +var resultIsObject9 = (!BOOLEAN, { a: 1, b: "s" }); +>resultIsObject9 : { a: number; b: string; } +>(!BOOLEAN, { a: 1, b: "s" }) : { a: number; b: string; } +>!BOOLEAN, { a: 1, b: "s" } : { a: number; b: string; } +>!BOOLEAN : boolean +>BOOLEAN : boolean +>{ a: 1, b: "s" } : { a: number; b: string; } +>a : number +>b : string + +var resultIsObject10 = ("string", new Date()); +>resultIsObject10 : Date +>("string", new Date()) : Date +>"string", new Date() : Date +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +var resultIsObject11 = (STRING.toLowerCase(), new CLASS()); +>resultIsObject11 : CLASS +>(STRING.toLowerCase(), new CLASS()) : CLASS +>STRING.toLowerCase(), new CLASS() : CLASS +>STRING.toLowerCase() : string +>STRING.toLowerCase : () => string +>STRING : string +>toLowerCase : () => string +>new CLASS() : CLASS +>CLASS : typeof CLASS + diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandStringType.js b/tests/baselines/reference/commaOperatorWithSecondOperandStringType.js index 78d2f882418..412e9e83121 100644 --- a/tests/baselines/reference/commaOperatorWithSecondOperandStringType.js +++ b/tests/baselines/reference/commaOperatorWithSecondOperandStringType.js @@ -44,16 +44,19 @@ var NUMBER; var STRING; var OBJECT; var resultIsString; +//The second operand is string ANY, STRING; BOOLEAN, STRING; NUMBER, STRING; STRING, STRING; OBJECT, STRING; +//Return type is string var resultIsString1 = (ANY, STRING); var resultIsString2 = (BOOLEAN, STRING); var resultIsString3 = (NUMBER, STRING); var resultIsString4 = (STRING, STRING); var resultIsString5 = (OBJECT, STRING); +//Literal and expression null, STRING; ANY = new Date(), STRING; true, ""; diff --git a/tests/baselines/reference/commaOperatorWithSecondOperandStringType.types b/tests/baselines/reference/commaOperatorWithSecondOperandStringType.types new file mode 100644 index 00000000000..2fd182114bb --- /dev/null +++ b/tests/baselines/reference/commaOperatorWithSecondOperandStringType.types @@ -0,0 +1,169 @@ +=== tests/cases/conformance/expressions/commaOperator/commaOperatorWithSecondOperandStringType.ts === +var ANY: any; +>ANY : any + +var BOOLEAN: boolean; +>BOOLEAN : boolean + +var NUMBER: number; +>NUMBER : number + +var STRING: string; +>STRING : string + +var OBJECT: Object; +>OBJECT : Object +>Object : Object + +var resultIsString: string; +>resultIsString : string + +//The second operand is string +ANY, STRING; +>ANY, STRING : string +>ANY : any +>STRING : string + +BOOLEAN, STRING; +>BOOLEAN, STRING : string +>BOOLEAN : boolean +>STRING : string + +NUMBER, STRING; +>NUMBER, STRING : string +>NUMBER : number +>STRING : string + +STRING, STRING; +>STRING, STRING : string +>STRING : string +>STRING : string + +OBJECT, STRING; +>OBJECT, STRING : string +>OBJECT : Object +>STRING : string + +//Return type is string +var resultIsString1 = (ANY, STRING); +>resultIsString1 : string +>(ANY, STRING) : string +>ANY, STRING : string +>ANY : any +>STRING : string + +var resultIsString2 = (BOOLEAN, STRING); +>resultIsString2 : string +>(BOOLEAN, STRING) : string +>BOOLEAN, STRING : string +>BOOLEAN : boolean +>STRING : string + +var resultIsString3 = (NUMBER, STRING); +>resultIsString3 : string +>(NUMBER, STRING) : string +>NUMBER, STRING : string +>NUMBER : number +>STRING : string + +var resultIsString4 = (STRING, STRING); +>resultIsString4 : string +>(STRING, STRING) : string +>STRING, STRING : string +>STRING : string +>STRING : string + +var resultIsString5 = (OBJECT, STRING); +>resultIsString5 : string +>(OBJECT, STRING) : string +>OBJECT, STRING : string +>OBJECT : Object +>STRING : string + +//Literal and expression +null, STRING; +>null, STRING : string +>STRING : string + +ANY = new Date(), STRING; +>ANY = new Date(), STRING : string +>ANY = new Date() : Date +>ANY : any +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>STRING : string + +true, ""; +>true, "" : string + +BOOLEAN == undefined, ""; +>BOOLEAN == undefined, "" : string +>BOOLEAN == undefined : boolean +>BOOLEAN : boolean +>undefined : undefined + +["a", "b"], NUMBER.toString(); +>["a", "b"], NUMBER.toString() : string +>["a", "b"] : string[] +>NUMBER.toString() : string +>NUMBER.toString : (radix?: number) => string +>NUMBER : number +>toString : (radix?: number) => string + +OBJECT = new Object, STRING + "string"; +>OBJECT = new Object, STRING + "string" : string +>OBJECT = new Object : Object +>OBJECT : Object +>new Object : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>STRING + "string" : string +>STRING : string + +var resultIsString6 = (null, STRING); +>resultIsString6 : string +>(null, STRING) : string +>null, STRING : string +>STRING : string + +var resultIsString7 = (ANY = new Date(), STRING); +>resultIsString7 : string +>(ANY = new Date(), STRING) : string +>ANY = new Date(), STRING : string +>ANY = new Date() : Date +>ANY : any +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>STRING : string + +var resultIsString8 = (true, ""); +>resultIsString8 : string +>(true, "") : string +>true, "" : string + +var resultIsString9 = (BOOLEAN == undefined, ""); +>resultIsString9 : string +>(BOOLEAN == undefined, "") : string +>BOOLEAN == undefined, "" : string +>BOOLEAN == undefined : boolean +>BOOLEAN : boolean +>undefined : undefined + +var resultIsString10 = (["a", "b"], NUMBER.toString()); +>resultIsString10 : string +>(["a", "b"], NUMBER.toString()) : string +>["a", "b"], NUMBER.toString() : string +>["a", "b"] : string[] +>NUMBER.toString() : string +>NUMBER.toString : (radix?: number) => string +>NUMBER : number +>toString : (radix?: number) => string + +var resultIsString11 = (new Object, STRING + "string"); +>resultIsString11 : string +>(new Object, STRING + "string") : string +>new Object, STRING + "string" : string +>new Object : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>STRING + "string" : string +>STRING : string + diff --git a/tests/baselines/reference/commaOperatorsMultipleOperators.js b/tests/baselines/reference/commaOperatorsMultipleOperators.js index 1f37bafbd49..15d93c1f18c 100644 --- a/tests/baselines/reference/commaOperatorsMultipleOperators.js +++ b/tests/baselines/reference/commaOperatorsMultipleOperators.js @@ -32,16 +32,19 @@ var BOOLEAN; var NUMBER; var STRING; var OBJECT; +//Expected: work well ANY, BOOLEAN, NUMBER; BOOLEAN, NUMBER, STRING; NUMBER, STRING, OBJECT; STRING, OBJECT, ANY; OBJECT, ANY, BOOLEAN; +//Results should have the same type as the third operand var resultIsAny1 = (STRING, OBJECT, ANY); var resultIsBoolean1 = (OBJECT, ANY, BOOLEAN); var resultIsNumber1 = (ANY, BOOLEAN, NUMBER); var resultIsString1 = (BOOLEAN, NUMBER, STRING); var resultIsObject1 = (NUMBER, STRING, OBJECT); +//Literal and expression null, true, 1; ++NUMBER, STRING.charAt(0), new Object(); var resultIsNumber2 = (null, true, 1); diff --git a/tests/baselines/reference/commaOperatorsMultipleOperators.types b/tests/baselines/reference/commaOperatorsMultipleOperators.types new file mode 100644 index 00000000000..9297ea1aa47 --- /dev/null +++ b/tests/baselines/reference/commaOperatorsMultipleOperators.types @@ -0,0 +1,136 @@ +=== tests/cases/conformance/expressions/commaOperator/commaOperatorsMultipleOperators.ts === +var ANY: any; +>ANY : any + +var BOOLEAN: boolean; +>BOOLEAN : boolean + +var NUMBER: number; +>NUMBER : number + +var STRING: string; +>STRING : string + +var OBJECT: Object; +>OBJECT : Object +>Object : Object + +//Expected: work well +ANY, BOOLEAN, NUMBER; +>ANY, BOOLEAN, NUMBER : number +>ANY, BOOLEAN : boolean +>ANY : any +>BOOLEAN : boolean +>NUMBER : number + +BOOLEAN, NUMBER, STRING; +>BOOLEAN, NUMBER, STRING : string +>BOOLEAN, NUMBER : number +>BOOLEAN : boolean +>NUMBER : number +>STRING : string + +NUMBER, STRING, OBJECT; +>NUMBER, STRING, OBJECT : Object +>NUMBER, STRING : string +>NUMBER : number +>STRING : string +>OBJECT : Object + +STRING, OBJECT, ANY; +>STRING, OBJECT, ANY : any +>STRING, OBJECT : Object +>STRING : string +>OBJECT : Object +>ANY : any + +OBJECT, ANY, BOOLEAN; +>OBJECT, ANY, BOOLEAN : boolean +>OBJECT, ANY : any +>OBJECT : Object +>ANY : any +>BOOLEAN : boolean + +//Results should have the same type as the third operand +var resultIsAny1 = (STRING, OBJECT, ANY); +>resultIsAny1 : any +>(STRING, OBJECT, ANY) : any +>STRING, OBJECT, ANY : any +>STRING, OBJECT : Object +>STRING : string +>OBJECT : Object +>ANY : any + +var resultIsBoolean1 = (OBJECT, ANY, BOOLEAN); +>resultIsBoolean1 : boolean +>(OBJECT, ANY, BOOLEAN) : boolean +>OBJECT, ANY, BOOLEAN : boolean +>OBJECT, ANY : any +>OBJECT : Object +>ANY : any +>BOOLEAN : boolean + +var resultIsNumber1 = (ANY, BOOLEAN, NUMBER); +>resultIsNumber1 : number +>(ANY, BOOLEAN, NUMBER) : number +>ANY, BOOLEAN, NUMBER : number +>ANY, BOOLEAN : boolean +>ANY : any +>BOOLEAN : boolean +>NUMBER : number + +var resultIsString1 = (BOOLEAN, NUMBER, STRING); +>resultIsString1 : string +>(BOOLEAN, NUMBER, STRING) : string +>BOOLEAN, NUMBER, STRING : string +>BOOLEAN, NUMBER : number +>BOOLEAN : boolean +>NUMBER : number +>STRING : string + +var resultIsObject1 = (NUMBER, STRING, OBJECT); +>resultIsObject1 : Object +>(NUMBER, STRING, OBJECT) : Object +>NUMBER, STRING, OBJECT : Object +>NUMBER, STRING : string +>NUMBER : number +>STRING : string +>OBJECT : Object + +//Literal and expression +null, true, 1; +>null, true, 1 : number +>null, true : boolean + +++NUMBER, STRING.charAt(0), new Object(); +>++NUMBER, STRING.charAt(0), new Object() : Object +>++NUMBER, STRING.charAt(0) : string +>++NUMBER : number +>NUMBER : number +>STRING.charAt(0) : string +>STRING.charAt : (pos: number) => string +>STRING : string +>charAt : (pos: number) => string +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + +var resultIsNumber2 = (null, true, 1); +>resultIsNumber2 : number +>(null, true, 1) : number +>null, true, 1 : number +>null, true : boolean + +var resultIsObject2 = (++NUMBER, STRING.charAt(0), new Object()); +>resultIsObject2 : Object +>(++NUMBER, STRING.charAt(0), new Object()) : Object +>++NUMBER, STRING.charAt(0), new Object() : Object +>++NUMBER, STRING.charAt(0) : string +>++NUMBER : number +>NUMBER : number +>STRING.charAt(0) : string +>STRING.charAt : (pos: number) => string +>STRING : string +>charAt : (pos: number) => string +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + diff --git a/tests/baselines/reference/commentBeforeStaticMethod1.js b/tests/baselines/reference/commentBeforeStaticMethod1.js index 4d9bfb0b094..5c45f6a8cba 100644 --- a/tests/baselines/reference/commentBeforeStaticMethod1.js +++ b/tests/baselines/reference/commentBeforeStaticMethod1.js @@ -12,6 +12,9 @@ class C { var C = (function () { function C() { } + /** + * Returns bar + */ C.foo = function () { return "bar"; }; diff --git a/tests/baselines/reference/commentBeforeStaticMethod1.types b/tests/baselines/reference/commentBeforeStaticMethod1.types new file mode 100644 index 00000000000..db674324306 --- /dev/null +++ b/tests/baselines/reference/commentBeforeStaticMethod1.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/commentBeforeStaticMethod1.ts === +class C { +>C : C + + /** + * Returns bar + */ + public static foo(): string { +>foo : () => string + + return "bar"; + } +} diff --git a/tests/baselines/reference/commentInEmptyParameterList1.types b/tests/baselines/reference/commentInEmptyParameterList1.types new file mode 100644 index 00000000000..dd708e8c9ac --- /dev/null +++ b/tests/baselines/reference/commentInEmptyParameterList1.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/commentInEmptyParameterList1.ts === +function foo(/** nothing */) { +>foo : () => void +} diff --git a/tests/baselines/reference/commentInMethodCall.js b/tests/baselines/reference/commentInMethodCall.js index 501139a2a72..0f304df0b35 100644 --- a/tests/baselines/reference/commentInMethodCall.js +++ b/tests/baselines/reference/commentInMethodCall.js @@ -6,6 +6,7 @@ s.map(// do something //// [commentInMethodCall.js] +//commment here var s; s.map(function () { }); diff --git a/tests/baselines/reference/commentInMethodCall.types b/tests/baselines/reference/commentInMethodCall.types new file mode 100644 index 00000000000..e9543a8c6f2 --- /dev/null +++ b/tests/baselines/reference/commentInMethodCall.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/commentInMethodCall.ts === +//commment here +var s: string[]; +>s : string[] + +s.map(// do something +>s.map(// do something function () { }) : void[] +>s.map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>s : string[] +>map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] + + function () { }); +>function () { } : () => void + diff --git a/tests/baselines/reference/commentOnAmbientClass1.js b/tests/baselines/reference/commentOnAmbientClass1.js index 38ce0d345be..beacc71335c 100644 --- a/tests/baselines/reference/commentOnAmbientClass1.js +++ b/tests/baselines/reference/commentOnAmbientClass1.js @@ -1,10 +1,20 @@ -//// [commentOnAmbientClass1.ts] +//// [tests/cases/compiler/commentOnAmbientClass1.ts] //// + +//// [a.ts] /*! Keep this pinned comment */ declare class C { } // Don't keep this comment. declare class D { +} + +//// [b.ts] +/// +declare class E extends C { } -//// [commentOnAmbientClass1.js] +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnAmbientClass1.types b/tests/baselines/reference/commentOnAmbientClass1.types new file mode 100644 index 00000000000..44c0334ef6c --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientClass1.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/b.ts === +/// +declare class E extends C { +>E : E +>C : C +} +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +declare class C { +>C : C +} + +// Don't keep this comment. +declare class D { +>D : D +} + diff --git a/tests/baselines/reference/commentOnAmbientEnum.js b/tests/baselines/reference/commentOnAmbientEnum.js new file mode 100644 index 00000000000..d602c68a0e5 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientEnum.js @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/commentOnAmbientEnum.ts] //// + +//// [a.ts] +/*! Keep this pinned comment */ +declare enum C { + a, + b, + c +} + +// Don't keep this comment. +declare enum D { +} + +//// [b.ts] +/// +declare enum E { +} + +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnAmbientEnum.types b/tests/baselines/reference/commentOnAmbientEnum.types new file mode 100644 index 00000000000..4a0193b7937 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientEnum.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/b.ts === +/// +declare enum E { +>E : E +} +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +declare enum C { +>C : C + + a, +>a : C + + b, +>b : C + + c +>c : C +} + +// Don't keep this comment. +declare enum D { +>D : D +} + diff --git a/tests/baselines/reference/commentOnAmbientModule.js b/tests/baselines/reference/commentOnAmbientModule.js new file mode 100644 index 00000000000..d5a536302b5 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientModule.js @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/commentOnAmbientModule.ts] //// + +//// [a.ts] +/*! Keep this pinned comment */ +declare module C { + function foo(); +} + +// Don't keep this comment. +declare module D { + class bar { } +} + +//// [b.ts] +/// +declare module E { + class foobar extends D.bar { + foo(); + } +} + +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnAmbientModule.types b/tests/baselines/reference/commentOnAmbientModule.types new file mode 100644 index 00000000000..bf57d9d11bd --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientModule.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/b.ts === +/// +declare module E { +>E : typeof E + + class foobar extends D.bar { +>foobar : foobar +>D : unknown +>bar : D.bar + + foo(); +>foo : () => any + } +} +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +declare module C { +>C : typeof C + + function foo(); +>foo : () => any +} + +// Don't keep this comment. +declare module D { +>D : typeof D + + class bar { } +>bar : bar +} + diff --git a/tests/baselines/reference/commentOnAmbientVariable1.js b/tests/baselines/reference/commentOnAmbientVariable1.js index 44e68ad338d..b76fd3345b5 100644 --- a/tests/baselines/reference/commentOnAmbientVariable1.js +++ b/tests/baselines/reference/commentOnAmbientVariable1.js @@ -6,3 +6,4 @@ declare var v: number; declare var y: number; //// [commentOnAmbientVariable1.js] +/*! Keep this pinned comment */ diff --git a/tests/baselines/reference/commentOnAmbientVariable1.types b/tests/baselines/reference/commentOnAmbientVariable1.types new file mode 100644 index 00000000000..feff50f4293 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientVariable1.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/commentOnAmbientVariable1.ts === +/*! Keep this pinned comment */ +declare var v: number; +>v : number + +// Don't keep this comment. +declare var y: number; +>y : number + diff --git a/tests/baselines/reference/commentOnAmbientVariable2.js b/tests/baselines/reference/commentOnAmbientVariable2.js index 091add41ae4..8aacecae0ef 100644 --- a/tests/baselines/reference/commentOnAmbientVariable2.js +++ b/tests/baselines/reference/commentOnAmbientVariable2.js @@ -11,4 +11,5 @@ x = 2; //// [commentOnAmbientVariable2_1.js] var y = 1; //// [commentOnAmbientVariable2_2.js] +/// x = 2; diff --git a/tests/baselines/reference/commentOnAmbientVariable2.types b/tests/baselines/reference/commentOnAmbientVariable2.types new file mode 100644 index 00000000000..68ca1459575 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientVariable2.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/commentOnAmbientVariable2_2.ts === +/// +declare var x: number; +>x : number + +x = 2; +>x = 2 : number +>x : number + +=== tests/cases/compiler/commentOnAmbientVariable2_1.ts === +var y = 1; +>y : number + diff --git a/tests/baselines/reference/commentOnAmbientfunction.js b/tests/baselines/reference/commentOnAmbientfunction.js new file mode 100644 index 00000000000..6290d407727 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientfunction.js @@ -0,0 +1,17 @@ +//// [tests/cases/compiler/commentOnAmbientfunction.ts] //// + +//// [a.ts] +/*! Keep this pinned comment */ +declare function foo(); + +// Don't keep this comment. +declare function bar(); + +//// [b.ts] +/// +declare function foobar(a: typeof foo): typeof bar; + +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnAmbientfunction.types b/tests/baselines/reference/commentOnAmbientfunction.types new file mode 100644 index 00000000000..f75f7b377fb --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientfunction.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/b.ts === +/// +declare function foobar(a: typeof foo): typeof bar; +>foobar : (a: () => any) => () => any +>a : () => any +>foo : () => any +>bar : () => any + +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +declare function foo(); +>foo : () => any + +// Don't keep this comment. +declare function bar(); +>bar : () => any + diff --git a/tests/baselines/reference/commentOnClassMethod1.js b/tests/baselines/reference/commentOnClassMethod1.js index 214d4f7f120..1f924ba233f 100644 --- a/tests/baselines/reference/commentOnClassMethod1.js +++ b/tests/baselines/reference/commentOnClassMethod1.js @@ -11,6 +11,9 @@ class WebControls { var WebControls = (function () { function WebControls() { } + /** + * Render a control + */ WebControls.prototype.createControl = function () { }; return WebControls; diff --git a/tests/baselines/reference/commentOnClassMethod1.types b/tests/baselines/reference/commentOnClassMethod1.types new file mode 100644 index 00000000000..1ad8182b9c9 --- /dev/null +++ b/tests/baselines/reference/commentOnClassMethod1.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/commentOnClassMethod1.ts === +class WebControls { +>WebControls : WebControls + + /** + * Render a control + */ + createControl(): any { +>createControl : () => any + } +} diff --git a/tests/baselines/reference/commentOnElidedModule1.js b/tests/baselines/reference/commentOnElidedModule1.js index c8458b7aaf6..8a7b8d91b4c 100644 --- a/tests/baselines/reference/commentOnElidedModule1.js +++ b/tests/baselines/reference/commentOnElidedModule1.js @@ -1,10 +1,20 @@ -//// [commentOnElidedModule1.ts] +//// [tests/cases/compiler/commentOnElidedModule1.ts] //// + +//// [a.ts] /*! Keep this pinned comment */ module ElidedModule { } // Don't keep this comment. module ElidedModule2 { +} + +//// [b.ts] +/// +module ElidedModule3 { } -//// [commentOnElidedModule1.js] +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnElidedModule1.types b/tests/baselines/reference/commentOnElidedModule1.types new file mode 100644 index 00000000000..785336dff3d --- /dev/null +++ b/tests/baselines/reference/commentOnElidedModule1.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/b.ts === +/// +module ElidedModule3 { +>ElidedModule3 : unknown +} +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +module ElidedModule { +>ElidedModule : unknown +} + +// Don't keep this comment. +module ElidedModule2 { +>ElidedModule2 : unknown +} + diff --git a/tests/baselines/reference/commentOnExpressionStatement1.js b/tests/baselines/reference/commentOnExpressionStatement1.js index 6daee86cc1b..713c079bcf2 100644 --- a/tests/baselines/reference/commentOnExpressionStatement1.js +++ b/tests/baselines/reference/commentOnExpressionStatement1.js @@ -3,4 +3,4 @@ 1 + 1; // Comment. //// [commentOnExpressionStatement1.js] -1 + 1; +1 + 1; // Comment. diff --git a/tests/baselines/reference/commentOnExpressionStatement1.types b/tests/baselines/reference/commentOnExpressionStatement1.types new file mode 100644 index 00000000000..c39689ed381 --- /dev/null +++ b/tests/baselines/reference/commentOnExpressionStatement1.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/commentOnExpressionStatement1.ts === + +1 + 1; // Comment. +>1 + 1 : number + diff --git a/tests/baselines/reference/commentOnIfStatement1.js b/tests/baselines/reference/commentOnIfStatement1.js index 4ac6b22d01f..521bc6ff1be 100644 --- a/tests/baselines/reference/commentOnIfStatement1.js +++ b/tests/baselines/reference/commentOnIfStatement1.js @@ -5,5 +5,6 @@ if (true) { } //// [commentOnIfStatement1.js] +// Test if (true) { } diff --git a/tests/baselines/reference/commentOnIfStatement1.types b/tests/baselines/reference/commentOnIfStatement1.types new file mode 100644 index 00000000000..03f357c8ccf --- /dev/null +++ b/tests/baselines/reference/commentOnIfStatement1.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/commentOnIfStatement1.ts === + +No type information for this code.// Test +No type information for this code.if (true) { +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/commentOnImportStatement1.js b/tests/baselines/reference/commentOnImportStatement1.js index 955369cd65e..4c13b0ed72c 100644 --- a/tests/baselines/reference/commentOnImportStatement1.js +++ b/tests/baselines/reference/commentOnImportStatement1.js @@ -5,5 +5,6 @@ import foo = require('./foo'); //// [commentOnImportStatement1.js] +/* Copyright */ define(["require", "exports"], function (require, exports) { }); diff --git a/tests/baselines/reference/commentOnImportStatement3.js b/tests/baselines/reference/commentOnImportStatement3.js index f5ec592d6b4..a230470dcb2 100644 --- a/tests/baselines/reference/commentOnImportStatement3.js +++ b/tests/baselines/reference/commentOnImportStatement3.js @@ -5,3 +5,4 @@ import foo = require('./foo'); //// [commentOnImportStatement3.js] +/* copyright */ diff --git a/tests/baselines/reference/commentOnInterface1.js b/tests/baselines/reference/commentOnInterface1.js index 2785341ed1a..bde6202f03f 100644 --- a/tests/baselines/reference/commentOnInterface1.js +++ b/tests/baselines/reference/commentOnInterface1.js @@ -1,10 +1,20 @@ -//// [commentOnInterface1.ts] +//// [tests/cases/compiler/commentOnInterface1.ts] //// + +//// [a.ts] /*! Keep this pinned comment */ interface I { } // Don't keep this comment. interface I2 { +} + +//// [b.ts] +/// +interface I3 { } -//// [commentOnInterface1.js] +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnInterface1.types b/tests/baselines/reference/commentOnInterface1.types new file mode 100644 index 00000000000..d03b1939026 --- /dev/null +++ b/tests/baselines/reference/commentOnInterface1.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/b.ts === +/// +interface I3 { +>I3 : I3 +} +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +interface I { +>I : I +} + +// Don't keep this comment. +interface I2 { +>I2 : I2 +} + diff --git a/tests/baselines/reference/commentOnParenthesizedExpressionOpenParen1.types b/tests/baselines/reference/commentOnParenthesizedExpressionOpenParen1.types new file mode 100644 index 00000000000..94a2930d314 --- /dev/null +++ b/tests/baselines/reference/commentOnParenthesizedExpressionOpenParen1.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/commentOnParenthesizedExpressionOpenParen1.ts === +var j; +>j : any + +var f: () => any; +>f : () => any + +( /* Preserve */ j = f()); +>( /* Preserve */ j = f()) : any +>( /* Preserve */ j = f()) : any +>j = f() : any +>j : any +>f() : any +>f : () => any + diff --git a/tests/baselines/reference/commentOnSignature1.js b/tests/baselines/reference/commentOnSignature1.js index fac146e4e6c..1b2327f9861 100644 --- a/tests/baselines/reference/commentOnSignature1.js +++ b/tests/baselines/reference/commentOnSignature1.js @@ -1,11 +1,51 @@ -//// [commentOnSignature1.ts] +//// [tests/cases/compiler/commentOnSignature1.ts] //// + +//// [a.ts] /*! Keep this pinned comment */ function foo(n: number): void; // Don't keep this comment. function foo(s: string): void; function foo(a: any): void { +} + +class c { + // dont keep this comment + constructor(a: string); + /*! keep this pinned comment */ + constructor(a: number); + constructor(a: any) { + } + + // dont keep this comment + foo(a: string); + /*! keep this pinned comment */ + foo(a: number); + foo(a: any) { + } +} + +//// [b.ts] +/// +function foo2(n: number): void; +// Don't keep this comment. +function foo2(s: string): void; +function foo2(a: any): void { } -//// [commentOnSignature1.js] +//// [a.js] +/*! Keep this pinned comment */ function foo(a) { } +var c = (function () { + /*! keep this pinned comment */ + function c(a) { + } + /*! keep this pinned comment */ + c.prototype.foo = function (a) { + }; + return c; +})(); +//// [b.js] +/// +function foo2(a) { +} diff --git a/tests/baselines/reference/commentOnSignature1.types b/tests/baselines/reference/commentOnSignature1.types new file mode 100644 index 00000000000..790aaaf7523 --- /dev/null +++ b/tests/baselines/reference/commentOnSignature1.types @@ -0,0 +1,62 @@ +=== tests/cases/compiler/b.ts === +/// +function foo2(n: number): void; +>foo2 : { (n: number): void; (s: string): void; } +>n : number + +// Don't keep this comment. +function foo2(s: string): void; +>foo2 : { (n: number): void; (s: string): void; } +>s : string + +function foo2(a: any): void { +>foo2 : { (n: number): void; (s: string): void; } +>a : any +} +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +function foo(n: number): void; +>foo : { (n: number): void; (s: string): void; } +>n : number + +// Don't keep this comment. +function foo(s: string): void; +>foo : { (n: number): void; (s: string): void; } +>s : string + +function foo(a: any): void { +>foo : { (n: number): void; (s: string): void; } +>a : any +} + +class c { +>c : c + + // dont keep this comment + constructor(a: string); +>a : string + + /*! keep this pinned comment */ + constructor(a: number); +>a : number + + constructor(a: any) { +>a : any + } + + // dont keep this comment + foo(a: string); +>foo : { (a: string): any; (a: number): any; } +>a : string + + /*! keep this pinned comment */ + foo(a: number); +>foo : { (a: string): any; (a: number): any; } +>a : number + + foo(a: any) { +>foo : { (a: string): any; (a: number): any; } +>a : any + } +} + diff --git a/tests/baselines/reference/commentOnSimpleArrowFunctionBody1.types b/tests/baselines/reference/commentOnSimpleArrowFunctionBody1.types new file mode 100644 index 00000000000..916a03eb65e --- /dev/null +++ b/tests/baselines/reference/commentOnSimpleArrowFunctionBody1.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/commentOnSimpleArrowFunctionBody1.ts === +function Foo(x: any) +>Foo : (x: any) => void +>x : any +{ +} + +Foo(() => +>Foo(() => // do something 127) : void +>Foo : (x: any) => void +>() => // do something 127 : () => number + + // do something + 127); + diff --git a/tests/baselines/reference/commentOnStaticMember1.js b/tests/baselines/reference/commentOnStaticMember1.js index 78e7ec905f2..b6b9628cad1 100644 --- a/tests/baselines/reference/commentOnStaticMember1.js +++ b/tests/baselines/reference/commentOnStaticMember1.js @@ -9,6 +9,7 @@ class Greeter { var Greeter = (function () { function Greeter() { } + //Hello World Greeter.foo = function () { }; return Greeter; diff --git a/tests/baselines/reference/commentOnStaticMember1.types b/tests/baselines/reference/commentOnStaticMember1.types new file mode 100644 index 00000000000..4b54b07570a --- /dev/null +++ b/tests/baselines/reference/commentOnStaticMember1.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/commentOnStaticMember1.ts === +class Greeter { +>Greeter : Greeter + + //Hello World + static foo(){ +>foo : () => void + } +} diff --git a/tests/baselines/reference/commentsAtEndOfFile1.types b/tests/baselines/reference/commentsAtEndOfFile1.types new file mode 100644 index 00000000000..c09a435f1a7 --- /dev/null +++ b/tests/baselines/reference/commentsAtEndOfFile1.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/commentsAtEndOfFile1.ts === +Input: +No type information for this code.; +No type information for this code.//Testing two +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/commentsBeforeFunctionExpression1.types b/tests/baselines/reference/commentsBeforeFunctionExpression1.types new file mode 100644 index 00000000000..4580ca9ceeb --- /dev/null +++ b/tests/baselines/reference/commentsBeforeFunctionExpression1.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/commentsBeforeFunctionExpression1.ts === +var v = { +>v : { f: (a: any) => number; } +>{ f: /**own f*/ (a) => 0} : { f: (a: any) => number; } + + f: /**own f*/ (a) => 0 +>f : (a: any) => number +>(a) => 0 : (a: any) => number +>a : any +} + diff --git a/tests/baselines/reference/commentsBeforeVariableStatement1.js b/tests/baselines/reference/commentsBeforeVariableStatement1.js index 598894dc936..21705826555 100644 --- a/tests/baselines/reference/commentsBeforeVariableStatement1.js +++ b/tests/baselines/reference/commentsBeforeVariableStatement1.js @@ -5,5 +5,6 @@ export var b: number; //// [commentsBeforeVariableStatement1.js] define(["require", "exports"], function (require, exports) { + /** b's comment*/ exports.b; }); diff --git a/tests/baselines/reference/commentsBeforeVariableStatement1.types b/tests/baselines/reference/commentsBeforeVariableStatement1.types new file mode 100644 index 00000000000..ec5a599e75c --- /dev/null +++ b/tests/baselines/reference/commentsBeforeVariableStatement1.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/commentsBeforeVariableStatement1.ts === +/** b's comment*/ +export var b: number; +>b : number + diff --git a/tests/baselines/reference/commentsClass.js b/tests/baselines/reference/commentsClass.js index 35677d5e919..b42235e9afe 100644 --- a/tests/baselines/reference/commentsClass.js +++ b/tests/baselines/reference/commentsClass.js @@ -2,21 +2,21 @@ /** This is class c2 without constuctor*/ class c2 { -} +} // trailing comment1 var i2 = new c2(); var i2_c = c2; class c3 { /** Constructor comment*/ constructor() { - } -} + } // trailing comment of constructor +} /* trailing comment 2 */ var i3 = new c3(); var i3_c = c3; /** Class comment*/ class c4 { /** Constructor comment*/ constructor() { - } + } /* trailing comment of constructor 2*/ } var i4 = new c4(); var i4_c = c4; @@ -63,30 +63,43 @@ class c8 { } var i8 = new c8(); var i8_c = c8; + +class c9 { + constructor() { + /// This is some detached comment + + // should emit this leading comment of } too + } +} //// [commentsClass.js] +/** This is class c2 without constuctor*/ var c2 = (function () { function c2() { } return c2; -})(); +})(); // trailing comment1 var i2 = new c2(); var i2_c = c2; var c3 = (function () { + /** Constructor comment*/ function c3() { - } + } // trailing comment of constructor return c3; -})(); +})(); /* trailing comment 2 */ var i3 = new c3(); var i3_c = c3; +/** Class comment*/ var c4 = (function () { + /** Constructor comment*/ function c4() { - } + } /* trailing comment of constructor 2*/ return c4; })(); var i4 = new c4(); var i4_c = c4; +/** Class with statics*/ var c5 = (function () { function c5() { } @@ -94,44 +107,66 @@ var c5 = (function () { })(); var i5 = new c5(); var i5_c = c5; +/// class with statics and constructor var c6 = (function () { + /// constructor comment function c6() { } return c6; })(); var i6 = new c6(); var i6_c = c6; +// class with statics and constructor var c7 = (function () { + // constructor comment function c7() { } return c7; })(); var i7 = new c7(); var i7_c = c7; +/** class with statics and constructor + */ var c8 = (function () { + /** constructor comment + */ function c8() { + /** constructor comment2 + */ } return c8; })(); var i8 = new c8(); var i8_c = c8; +var c9 = (function () { + function c9() { + /// This is some detached comment + // should emit this leading comment of } too + } + return c9; +})(); //// [commentsClass.d.ts] +/** This is class c2 without constuctor*/ declare class c2 { } declare var i2: c2; declare var i2_c: typeof c2; declare class c3 { + /** Constructor comment*/ constructor(); } declare var i3: c3; declare var i3_c: typeof c3; +/** Class comment*/ declare class c4 { + /** Constructor comment*/ constructor(); } declare var i4: c4; declare var i4_c: typeof c4; +/** Class with statics*/ declare class c5 { static s1: number; } @@ -149,9 +184,17 @@ declare class c7 { } declare var i7: c7; declare var i7_c: typeof c7; +/** class with statics and constructor + */ declare class c8 { + /** s1 comment */ static s1: number; + /** constructor comment + */ constructor(); } declare var i8: c8; declare var i8_c: typeof c8; +declare class c9 { + constructor(); +} diff --git a/tests/baselines/reference/commentsClass.types b/tests/baselines/reference/commentsClass.types new file mode 100644 index 00000000000..a4aca2ba15b --- /dev/null +++ b/tests/baselines/reference/commentsClass.types @@ -0,0 +1,142 @@ +=== tests/cases/compiler/commentsClass.ts === + +/** This is class c2 without constuctor*/ +class c2 { +>c2 : c2 + +} // trailing comment1 +var i2 = new c2(); +>i2 : c2 +>new c2() : c2 +>c2 : typeof c2 + +var i2_c = c2; +>i2_c : typeof c2 +>c2 : typeof c2 + +class c3 { +>c3 : c3 + + /** Constructor comment*/ + constructor() { + } // trailing comment of constructor +} /* trailing comment 2 */ +var i3 = new c3(); +>i3 : c3 +>new c3() : c3 +>c3 : typeof c3 + +var i3_c = c3; +>i3_c : typeof c3 +>c3 : typeof c3 + +/** Class comment*/ +class c4 { +>c4 : c4 + + /** Constructor comment*/ + constructor() { + } /* trailing comment of constructor 2*/ +} +var i4 = new c4(); +>i4 : c4 +>new c4() : c4 +>c4 : typeof c4 + +var i4_c = c4; +>i4_c : typeof c4 +>c4 : typeof c4 + +/** Class with statics*/ +class c5 { +>c5 : c5 + + static s1: number; +>s1 : number +} +var i5 = new c5(); +>i5 : c5 +>new c5() : c5 +>c5 : typeof c5 + +var i5_c = c5; +>i5_c : typeof c5 +>c5 : typeof c5 + +/// class with statics and constructor +class c6 { /// class with statics and constructor2 +>c6 : c6 + + /// s1 comment + static s1: number; /// s1 comment2 +>s1 : number + + /// constructor comment + constructor() { /// constructor comment2 + } +} +var i6 = new c6(); +>i6 : c6 +>new c6() : c6 +>c6 : typeof c6 + +var i6_c = c6; +>i6_c : typeof c6 +>c6 : typeof c6 + +// class with statics and constructor +class c7 { +>c7 : c7 + + // s1 comment + static s1: number; +>s1 : number + + // constructor comment + constructor() { + } +} +var i7 = new c7(); +>i7 : c7 +>new c7() : c7 +>c7 : typeof c7 + +var i7_c = c7; +>i7_c : typeof c7 +>c7 : typeof c7 + +/** class with statics and constructor + */ +class c8 { +>c8 : c8 + + /** s1 comment */ + static s1: number; /** s1 comment2 */ +>s1 : number + + /** constructor comment + */ + constructor() { + /** constructor comment2 + */ + } +} +var i8 = new c8(); +>i8 : c8 +>new c8() : c8 +>c8 : typeof c8 + +var i8_c = c8; +>i8_c : typeof c8 +>c8 : typeof c8 + +class c9 { +>c9 : c9 + + constructor() { + /// This is some detached comment + + // should emit this leading comment of } too + } +} + diff --git a/tests/baselines/reference/commentsClassMembers.js b/tests/baselines/reference/commentsClassMembers.js index 999ba787bd9..a0cf8f2b631 100644 --- a/tests/baselines/reference/commentsClassMembers.js +++ b/tests/baselines/reference/commentsClassMembers.js @@ -7,21 +7,21 @@ class c1 { /** sum with property*/ public p2(/** number to add*/b: number) { return this.p1 + b; - } + } /* trailing comment of method*/ /** getter property*/ public get p3() { return this.p2(this.p1); - } + }// trailing comment Getter /** setter property*/ public set p3(/** this is value*/value: number) { this.p1 = this.p2(value); - } + }// trailing comment Setter /** pp1 is property of c1*/ private pp1: number; /** sum with property*/ private pp2(/** number to add*/b: number) { return this.p1 + b; - } + } // trailing comment of method /** getter property*/ private get pp3() { return this.pp2(this.pp1); @@ -42,11 +42,11 @@ class c1 { /** static getter property*/ static get s3() { return c1.s2(c1.s1); - } + } /*trailing comment 1 getter*/ /** setter property*/ static set s3( /** this is value*/value: number) { c1.s1 = c1.s2(value); - } + }/*trailing comment 2 */ /*setter*/ public nc_p1: number; public nc_p2(b: number) { return this.nc_p1 + b; @@ -198,7 +198,7 @@ class cProperties { /** getter only property*/ public get p1() { return this.val; - } + } // trailing comment of only getter public get nc_p1() { return this.val; } @@ -208,7 +208,10 @@ class cProperties { } public set nc_p2(value: number) { this.val = value; - } + } /* trailing comment of setter only*/ + + public x = 10; /*trailing comment for property*/ + private y = 10; // trailing comment of // style } var cProperties_i = new cProperties(); cProperties_i.p2 = cProperties_i.p1; @@ -216,45 +219,58 @@ cProperties_i.nc_p2 = cProperties_i.nc_p1; //// [commentsClassMembers.js] +/** This is comment for c1*/ var c1 = (function () { + /** Constructor method*/ function c1() { } - c1.prototype.p2 = function (b) { + /** sum with property*/ + c1.prototype.p2 = function (/** number to add*/ b) { return this.p1 + b; - }; + }; /* trailing comment of method*/ Object.defineProperty(c1.prototype, "p3", { + /** getter property*/ get: function () { return this.p2(this.p1); - }, - set: function (value) { + } // trailing comment Getter + , + /** setter property*/ + set: function (/** this is value*/ value) { this.p1 = this.p2(value); - }, + } // trailing comment Setter + , enumerable: true, configurable: true }); - c1.prototype.pp2 = function (b) { + /** sum with property*/ + c1.prototype.pp2 = function (/** number to add*/ b) { return this.p1 + b; - }; + }; // trailing comment of method Object.defineProperty(c1.prototype, "pp3", { + /** getter property*/ get: function () { return this.pp2(this.pp1); }, - set: function (value) { + /** setter property*/ + set: function (/** this is value*/ value) { this.pp1 = this.pp2(value); }, enumerable: true, configurable: true }); - c1.s2 = function (b) { + /** static sum with property*/ + c1.s2 = function (/** number to add*/ b) { return c1.s1 + b; }; Object.defineProperty(c1, "s3", { + /** static getter property*/ get: function () { return c1.s2(c1.s1); - }, - set: function (value) { + } /*trailing comment 1 getter*/, + /** setter property*/ + set: function (/** this is value*/ value) { c1.s1 = c1.s2(value); - }, + } /*trailing comment 2 */ /*setter*/, enumerable: true, configurable: true }); @@ -297,79 +313,100 @@ var c1 = (function () { enumerable: true, configurable: true }); + // sum with property c1.prototype.a_p2 = function (b) { return this.a_p1 + b; }; Object.defineProperty(c1.prototype, "a_p3", { + // getter property get: function () { return this.a_p2(this.a_p1); }, + // setter property set: function (value) { this.a_p1 = this.a_p2(value); }, enumerable: true, configurable: true }); + // sum with property c1.prototype.a_pp2 = function (b) { return this.a_p1 + b; }; Object.defineProperty(c1.prototype, "a_pp3", { + // getter property get: function () { return this.a_pp2(this.a_pp1); }, + // setter property set: function (value) { this.a_pp1 = this.a_pp2(value); }, enumerable: true, configurable: true }); + // static sum with property c1.a_s2 = function (b) { return c1.a_s1 + b; }; Object.defineProperty(c1, "a_s3", { + // static getter property get: function () { return c1.s2(c1.s1); }, + // setter property set: function (value) { c1.a_s1 = c1.a_s2(value); }, enumerable: true, configurable: true }); + /** sum with property */ c1.prototype.b_p2 = function (b) { return this.b_p1 + b; }; Object.defineProperty(c1.prototype, "b_p3", { + /** getter property */ get: function () { return this.b_p2(this.b_p1); }, + /** setter property */ set: function (value) { this.b_p1 = this.b_p2(value); }, enumerable: true, configurable: true }); + /** sum with property */ c1.prototype.b_pp2 = function (b) { return this.b_p1 + b; }; Object.defineProperty(c1.prototype, "b_pp3", { + /** getter property */ get: function () { return this.b_pp2(this.b_pp1); }, + /** setter property */ set: function (value) { this.b_pp1 = this.b_pp2(value); }, enumerable: true, configurable: true }); + /** static sum with property */ c1.b_s2 = function (b) { return c1.b_s1 + b; }; Object.defineProperty(c1, "b_s3", { + /** static getter property + */ get: function () { return c1.s2(c1.s1); }, + /** setter property + */ set: function (value) { + /** setter */ c1.b_s1 = c1.b_s2(value); }, enumerable: true, @@ -401,11 +438,15 @@ c1.nc_s3 = i1_s_ncprop; var i1_c = c1; var cProperties = (function () { function cProperties() { + this.x = 10; /*trailing comment for property*/ + this.y = 10; // trailing comment of // style } Object.defineProperty(cProperties.prototype, "p1", { + /** getter only property*/ get: function () { return this.val; - }, + } // trailing comment of only getter + , enumerable: true, configurable: true }); @@ -417,6 +458,7 @@ var cProperties = (function () { configurable: true }); Object.defineProperty(cProperties.prototype, "p2", { + /**setter only property*/ set: function (value) { this.val = value; }, @@ -426,7 +468,7 @@ var cProperties = (function () { Object.defineProperty(cProperties.prototype, "nc_p2", { set: function (value) { this.val = value; - }, + } /* trailing comment of setter only*/, enumerable: true, configurable: true }); @@ -438,16 +480,30 @@ cProperties_i.nc_p2 = cProperties_i.nc_p1; //// [commentsClassMembers.d.ts] +/** This is comment for c1*/ declare class c1 { + /** p1 is property of c1*/ p1: number; - p2(b: number): number; + /** sum with property*/ + p2(/** number to add*/ b: number): number; + /** getter property*/ + /** setter property*/ p3: number; + /** pp1 is property of c1*/ private pp1; - private pp2(b); + /** sum with property*/ + private pp2(/** number to add*/ b); + /** getter property*/ + /** setter property*/ private pp3; + /** Constructor method*/ constructor(); + /** s1 is static property of c1*/ static s1: number; - static s2(b: number): number; + /** static sum with property*/ + static s2(/** number to add*/ b: number): number; + /** static getter property*/ + /** setter property*/ static s3: number; nc_p1: number; nc_p2(b: number): number; @@ -467,14 +523,28 @@ declare class c1 { static a_s1: number; static a_s2(b: number): number; static a_s3: number; + /** p1 is property of c1 */ b_p1: number; + /** sum with property */ b_p2(b: number): number; + /** getter property */ + /** setter property */ b_p3: number; + /** pp1 is property of c1 */ private b_pp1; + /** sum with property */ private b_pp2(b); + /** getter property */ + /** setter property */ private b_pp3; + /** s1 is static property of c1 */ static b_s1: number; + /** static sum with property */ static b_s2(b: number): number; + /** static getter property + */ + /** setter property + */ static b_s3: number; } declare var i1: c1; @@ -487,19 +557,131 @@ declare var i1_ncf: (b: number) => number; declare var i1_ncr: number; declare var i1_ncprop: number; declare var i1_s_p: number; -declare var i1_s_f: typeof c1.s2; +declare var i1_s_f: typeof s2; declare var i1_s_r: number; declare var i1_s_prop: number; declare var i1_s_nc_p: number; -declare var i1_s_ncf: typeof c1.nc_s2; +declare var i1_s_ncf: typeof nc_s2; declare var i1_s_ncr: number; declare var i1_s_ncprop: number; declare var i1_c: typeof c1; declare class cProperties { private val; + /** getter only property*/ p1: number; nc_p1: number; + /**setter only property*/ p2: number; nc_p2: number; + x: number; + private y; } declare var cProperties_i: cProperties; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/commentsClassMembers.d.ts (2 errors) ==== + /** This is comment for c1*/ + declare class c1 { + /** p1 is property of c1*/ + p1: number; + /** sum with property*/ + p2(/** number to add*/ b: number): number; + /** getter property*/ + /** setter property*/ + p3: number; + /** pp1 is property of c1*/ + private pp1; + /** sum with property*/ + private pp2(/** number to add*/ b); + /** getter property*/ + /** setter property*/ + private pp3; + /** Constructor method*/ + constructor(); + /** s1 is static property of c1*/ + static s1: number; + /** static sum with property*/ + static s2(/** number to add*/ b: number): number; + /** static getter property*/ + /** setter property*/ + static s3: number; + nc_p1: number; + nc_p2(b: number): number; + nc_p3: number; + private nc_pp1; + private nc_pp2(b); + private nc_pp3; + static nc_s1: number; + static nc_s2(b: number): number; + static nc_s3: number; + a_p1: number; + a_p2(b: number): number; + a_p3: number; + private a_pp1; + private a_pp2(b); + private a_pp3; + static a_s1: number; + static a_s2(b: number): number; + static a_s3: number; + /** p1 is property of c1 */ + b_p1: number; + /** sum with property */ + b_p2(b: number): number; + /** getter property */ + /** setter property */ + b_p3: number; + /** pp1 is property of c1 */ + private b_pp1; + /** sum with property */ + private b_pp2(b); + /** getter property */ + /** setter property */ + private b_pp3; + /** s1 is static property of c1 */ + static b_s1: number; + /** static sum with property */ + static b_s2(b: number): number; + /** static getter property + */ + /** setter property + */ + static b_s3: number; + } + declare var i1: c1; + declare var i1_p: number; + declare var i1_f: (b: number) => number; + declare var i1_r: number; + declare var i1_prop: number; + declare var i1_nc_p: number; + declare var i1_ncf: (b: number) => number; + declare var i1_ncr: number; + declare var i1_ncprop: number; + declare var i1_s_p: number; + declare var i1_s_f: typeof s2; + ~~ +!!! Cannot find name 's2'. + declare var i1_s_r: number; + declare var i1_s_prop: number; + declare var i1_s_nc_p: number; + declare var i1_s_ncf: typeof nc_s2; + ~~~~~ +!!! Cannot find name 'nc_s2'. + declare var i1_s_ncr: number; + declare var i1_s_ncprop: number; + declare var i1_c: typeof c1; + declare class cProperties { + private val; + /** getter only property*/ + p1: number; + nc_p1: number; + /**setter only property*/ + p2: number; + nc_p2: number; + x: number; + private y; + } + declare var cProperties_i: cProperties; + \ No newline at end of file diff --git a/tests/baselines/reference/commentsClassMembers.types b/tests/baselines/reference/commentsClassMembers.types new file mode 100644 index 00000000000..d71ccd2e1e8 --- /dev/null +++ b/tests/baselines/reference/commentsClassMembers.types @@ -0,0 +1,768 @@ +=== tests/cases/compiler/commentsClassMembers.ts === + +/** This is comment for c1*/ +class c1 { +>c1 : c1 + + /** p1 is property of c1*/ + public p1: number; +>p1 : number + + /** sum with property*/ + public p2(/** number to add*/b: number) { +>p2 : (b: number) => number +>b : number + + return this.p1 + b; +>this.p1 + b : number +>this.p1 : number +>this : c1 +>p1 : number +>b : number + + } /* trailing comment of method*/ + /** getter property*/ + public get p3() { +>p3 : number + + return this.p2(this.p1); +>this.p2(this.p1) : number +>this.p2 : (b: number) => number +>this : c1 +>p2 : (b: number) => number +>this.p1 : number +>this : c1 +>p1 : number + + }// trailing comment Getter + /** setter property*/ + public set p3(/** this is value*/value: number) { +>p3 : number +>value : number + + this.p1 = this.p2(value); +>this.p1 = this.p2(value) : number +>this.p1 : number +>this : c1 +>p1 : number +>this.p2(value) : number +>this.p2 : (b: number) => number +>this : c1 +>p2 : (b: number) => number +>value : number + + }// trailing comment Setter + /** pp1 is property of c1*/ + private pp1: number; +>pp1 : number + + /** sum with property*/ + private pp2(/** number to add*/b: number) { +>pp2 : (b: number) => number +>b : number + + return this.p1 + b; +>this.p1 + b : number +>this.p1 : number +>this : c1 +>p1 : number +>b : number + + } // trailing comment of method + /** getter property*/ + private get pp3() { +>pp3 : number + + return this.pp2(this.pp1); +>this.pp2(this.pp1) : number +>this.pp2 : (b: number) => number +>this : c1 +>pp2 : (b: number) => number +>this.pp1 : number +>this : c1 +>pp1 : number + } + /** setter property*/ + private set pp3( /** this is value*/value: number) { +>pp3 : number +>value : number + + this.pp1 = this.pp2(value); +>this.pp1 = this.pp2(value) : number +>this.pp1 : number +>this : c1 +>pp1 : number +>this.pp2(value) : number +>this.pp2 : (b: number) => number +>this : c1 +>pp2 : (b: number) => number +>value : number + } + /** Constructor method*/ + constructor() { + } + /** s1 is static property of c1*/ + static s1: number; +>s1 : number + + /** static sum with property*/ + static s2(/** number to add*/b: number) { +>s2 : (b: number) => number +>b : number + + return c1.s1 + b; +>c1.s1 + b : number +>c1.s1 : number +>c1 : typeof c1 +>s1 : number +>b : number + } + /** static getter property*/ + static get s3() { +>s3 : number + + return c1.s2(c1.s1); +>c1.s2(c1.s1) : number +>c1.s2 : (b: number) => number +>c1 : typeof c1 +>s2 : (b: number) => number +>c1.s1 : number +>c1 : typeof c1 +>s1 : number + + } /*trailing comment 1 getter*/ + /** setter property*/ + static set s3( /** this is value*/value: number) { +>s3 : number +>value : number + + c1.s1 = c1.s2(value); +>c1.s1 = c1.s2(value) : number +>c1.s1 : number +>c1 : typeof c1 +>s1 : number +>c1.s2(value) : number +>c1.s2 : (b: number) => number +>c1 : typeof c1 +>s2 : (b: number) => number +>value : number + + }/*trailing comment 2 */ /*setter*/ + public nc_p1: number; +>nc_p1 : number + + public nc_p2(b: number) { +>nc_p2 : (b: number) => number +>b : number + + return this.nc_p1 + b; +>this.nc_p1 + b : number +>this.nc_p1 : number +>this : c1 +>nc_p1 : number +>b : number + } + public get nc_p3() { +>nc_p3 : number + + return this.nc_p2(this.nc_p1); +>this.nc_p2(this.nc_p1) : number +>this.nc_p2 : (b: number) => number +>this : c1 +>nc_p2 : (b: number) => number +>this.nc_p1 : number +>this : c1 +>nc_p1 : number + } + public set nc_p3(value: number) { +>nc_p3 : number +>value : number + + this.nc_p1 = this.nc_p2(value); +>this.nc_p1 = this.nc_p2(value) : number +>this.nc_p1 : number +>this : c1 +>nc_p1 : number +>this.nc_p2(value) : number +>this.nc_p2 : (b: number) => number +>this : c1 +>nc_p2 : (b: number) => number +>value : number + } + private nc_pp1: number; +>nc_pp1 : number + + private nc_pp2(b: number) { +>nc_pp2 : (b: number) => number +>b : number + + return this.nc_pp1 + b; +>this.nc_pp1 + b : number +>this.nc_pp1 : number +>this : c1 +>nc_pp1 : number +>b : number + } + private get nc_pp3() { +>nc_pp3 : number + + return this.nc_pp2(this.nc_pp1); +>this.nc_pp2(this.nc_pp1) : number +>this.nc_pp2 : (b: number) => number +>this : c1 +>nc_pp2 : (b: number) => number +>this.nc_pp1 : number +>this : c1 +>nc_pp1 : number + } + private set nc_pp3(value: number) { +>nc_pp3 : number +>value : number + + this.nc_pp1 = this.nc_pp2(value); +>this.nc_pp1 = this.nc_pp2(value) : number +>this.nc_pp1 : number +>this : c1 +>nc_pp1 : number +>this.nc_pp2(value) : number +>this.nc_pp2 : (b: number) => number +>this : c1 +>nc_pp2 : (b: number) => number +>value : number + } + static nc_s1: number; +>nc_s1 : number + + static nc_s2(b: number) { +>nc_s2 : (b: number) => number +>b : number + + return c1.nc_s1 + b; +>c1.nc_s1 + b : number +>c1.nc_s1 : number +>c1 : typeof c1 +>nc_s1 : number +>b : number + } + static get nc_s3() { +>nc_s3 : number + + return c1.nc_s2(c1.nc_s1); +>c1.nc_s2(c1.nc_s1) : number +>c1.nc_s2 : (b: number) => number +>c1 : typeof c1 +>nc_s2 : (b: number) => number +>c1.nc_s1 : number +>c1 : typeof c1 +>nc_s1 : number + } + static set nc_s3(value: number) { +>nc_s3 : number +>value : number + + c1.nc_s1 = c1.nc_s2(value); +>c1.nc_s1 = c1.nc_s2(value) : number +>c1.nc_s1 : number +>c1 : typeof c1 +>nc_s1 : number +>c1.nc_s2(value) : number +>c1.nc_s2 : (b: number) => number +>c1 : typeof c1 +>nc_s2 : (b: number) => number +>value : number + } + + // p1 is property of c1 + public a_p1: number; +>a_p1 : number + + // sum with property + public a_p2(b: number) { +>a_p2 : (b: number) => number +>b : number + + return this.a_p1 + b; +>this.a_p1 + b : number +>this.a_p1 : number +>this : c1 +>a_p1 : number +>b : number + } + // getter property + public get a_p3() { +>a_p3 : number + + return this.a_p2(this.a_p1); +>this.a_p2(this.a_p1) : number +>this.a_p2 : (b: number) => number +>this : c1 +>a_p2 : (b: number) => number +>this.a_p1 : number +>this : c1 +>a_p1 : number + } + // setter property + public set a_p3(value: number) { +>a_p3 : number +>value : number + + this.a_p1 = this.a_p2(value); +>this.a_p1 = this.a_p2(value) : number +>this.a_p1 : number +>this : c1 +>a_p1 : number +>this.a_p2(value) : number +>this.a_p2 : (b: number) => number +>this : c1 +>a_p2 : (b: number) => number +>value : number + } + // pp1 is property of c1 + private a_pp1: number; +>a_pp1 : number + + // sum with property + private a_pp2(b: number) { +>a_pp2 : (b: number) => number +>b : number + + return this.a_p1 + b; +>this.a_p1 + b : number +>this.a_p1 : number +>this : c1 +>a_p1 : number +>b : number + } + // getter property + private get a_pp3() { +>a_pp3 : number + + return this.a_pp2(this.a_pp1); +>this.a_pp2(this.a_pp1) : number +>this.a_pp2 : (b: number) => number +>this : c1 +>a_pp2 : (b: number) => number +>this.a_pp1 : number +>this : c1 +>a_pp1 : number + } + // setter property + private set a_pp3(value: number) { +>a_pp3 : number +>value : number + + this.a_pp1 = this.a_pp2(value); +>this.a_pp1 = this.a_pp2(value) : number +>this.a_pp1 : number +>this : c1 +>a_pp1 : number +>this.a_pp2(value) : number +>this.a_pp2 : (b: number) => number +>this : c1 +>a_pp2 : (b: number) => number +>value : number + } + + // s1 is static property of c1 + static a_s1: number; +>a_s1 : number + + // static sum with property + static a_s2(b: number) { +>a_s2 : (b: number) => number +>b : number + + return c1.a_s1 + b; +>c1.a_s1 + b : number +>c1.a_s1 : number +>c1 : typeof c1 +>a_s1 : number +>b : number + } + // static getter property + static get a_s3() { +>a_s3 : number + + return c1.s2(c1.s1); +>c1.s2(c1.s1) : number +>c1.s2 : (b: number) => number +>c1 : typeof c1 +>s2 : (b: number) => number +>c1.s1 : number +>c1 : typeof c1 +>s1 : number + } + + // setter property + static set a_s3(value: number) { +>a_s3 : number +>value : number + + c1.a_s1 = c1.a_s2(value); +>c1.a_s1 = c1.a_s2(value) : number +>c1.a_s1 : number +>c1 : typeof c1 +>a_s1 : number +>c1.a_s2(value) : number +>c1.a_s2 : (b: number) => number +>c1 : typeof c1 +>a_s2 : (b: number) => number +>value : number + } + + /** p1 is property of c1 */ + public b_p1: number; +>b_p1 : number + + /** sum with property */ + public b_p2(b: number) { +>b_p2 : (b: number) => number +>b : number + + return this.b_p1 + b; +>this.b_p1 + b : number +>this.b_p1 : number +>this : c1 +>b_p1 : number +>b : number + } + /** getter property */ + public get b_p3() { +>b_p3 : number + + return this.b_p2(this.b_p1); +>this.b_p2(this.b_p1) : number +>this.b_p2 : (b: number) => number +>this : c1 +>b_p2 : (b: number) => number +>this.b_p1 : number +>this : c1 +>b_p1 : number + } + /** setter property */ + public set b_p3(value: number) { +>b_p3 : number +>value : number + + this.b_p1 = this.b_p2(value); +>this.b_p1 = this.b_p2(value) : number +>this.b_p1 : number +>this : c1 +>b_p1 : number +>this.b_p2(value) : number +>this.b_p2 : (b: number) => number +>this : c1 +>b_p2 : (b: number) => number +>value : number + } + /** pp1 is property of c1 */ + private b_pp1: number; +>b_pp1 : number + + /** sum with property */ + private b_pp2(b: number) { +>b_pp2 : (b: number) => number +>b : number + + return this.b_p1 + b; +>this.b_p1 + b : number +>this.b_p1 : number +>this : c1 +>b_p1 : number +>b : number + } + /** getter property */ + private get b_pp3() { +>b_pp3 : number + + return this.b_pp2(this.b_pp1); +>this.b_pp2(this.b_pp1) : number +>this.b_pp2 : (b: number) => number +>this : c1 +>b_pp2 : (b: number) => number +>this.b_pp1 : number +>this : c1 +>b_pp1 : number + } + /** setter property */ + private set b_pp3(value: number) { +>b_pp3 : number +>value : number + + this.b_pp1 = this.b_pp2(value); +>this.b_pp1 = this.b_pp2(value) : number +>this.b_pp1 : number +>this : c1 +>b_pp1 : number +>this.b_pp2(value) : number +>this.b_pp2 : (b: number) => number +>this : c1 +>b_pp2 : (b: number) => number +>value : number + } + + /** s1 is static property of c1 */ + static b_s1: number; +>b_s1 : number + + /** static sum with property */ + static b_s2(b: number) { +>b_s2 : (b: number) => number +>b : number + + return c1.b_s1 + b; +>c1.b_s1 + b : number +>c1.b_s1 : number +>c1 : typeof c1 +>b_s1 : number +>b : number + } + /** static getter property + */ + static get b_s3() { +>b_s3 : number + + return c1.s2(c1.s1); +>c1.s2(c1.s1) : number +>c1.s2 : (b: number) => number +>c1 : typeof c1 +>s2 : (b: number) => number +>c1.s1 : number +>c1 : typeof c1 +>s1 : number + } + + /** setter property + */ + static set b_s3(value: number) { +>b_s3 : number +>value : number + + /** setter */ + c1.b_s1 = c1.b_s2(value); +>c1.b_s1 = c1.b_s2(value) : number +>c1.b_s1 : number +>c1 : typeof c1 +>b_s1 : number +>c1.b_s2(value) : number +>c1.b_s2 : (b: number) => number +>c1 : typeof c1 +>b_s2 : (b: number) => number +>value : number + } +} +var i1 = new c1(); +>i1 : c1 +>new c1() : c1 +>c1 : typeof c1 + +var i1_p = i1.p1; +>i1_p : number +>i1.p1 : number +>i1 : c1 +>p1 : number + +var i1_f = i1.p2; +>i1_f : (b: number) => number +>i1.p2 : (b: number) => number +>i1 : c1 +>p2 : (b: number) => number + +var i1_r = i1.p2(20); +>i1_r : number +>i1.p2(20) : number +>i1.p2 : (b: number) => number +>i1 : c1 +>p2 : (b: number) => number + +var i1_prop = i1.p3; +>i1_prop : number +>i1.p3 : number +>i1 : c1 +>p3 : number + +i1.p3 = i1_prop; +>i1.p3 = i1_prop : number +>i1.p3 : number +>i1 : c1 +>p3 : number +>i1_prop : number + +var i1_nc_p = i1.nc_p1; +>i1_nc_p : number +>i1.nc_p1 : number +>i1 : c1 +>nc_p1 : number + +var i1_ncf = i1.nc_p2; +>i1_ncf : (b: number) => number +>i1.nc_p2 : (b: number) => number +>i1 : c1 +>nc_p2 : (b: number) => number + +var i1_ncr = i1.nc_p2(20); +>i1_ncr : number +>i1.nc_p2(20) : number +>i1.nc_p2 : (b: number) => number +>i1 : c1 +>nc_p2 : (b: number) => number + +var i1_ncprop = i1.nc_p3; +>i1_ncprop : number +>i1.nc_p3 : number +>i1 : c1 +>nc_p3 : number + +i1.nc_p3 = i1_ncprop; +>i1.nc_p3 = i1_ncprop : number +>i1.nc_p3 : number +>i1 : c1 +>nc_p3 : number +>i1_ncprop : number + +var i1_s_p = c1.s1; +>i1_s_p : number +>c1.s1 : number +>c1 : typeof c1 +>s1 : number + +var i1_s_f = c1.s2; +>i1_s_f : (b: number) => number +>c1.s2 : (b: number) => number +>c1 : typeof c1 +>s2 : (b: number) => number + +var i1_s_r = c1.s2(20); +>i1_s_r : number +>c1.s2(20) : number +>c1.s2 : (b: number) => number +>c1 : typeof c1 +>s2 : (b: number) => number + +var i1_s_prop = c1.s3; +>i1_s_prop : number +>c1.s3 : number +>c1 : typeof c1 +>s3 : number + +c1.s3 = i1_s_prop; +>c1.s3 = i1_s_prop : number +>c1.s3 : number +>c1 : typeof c1 +>s3 : number +>i1_s_prop : number + +var i1_s_nc_p = c1.nc_s1; +>i1_s_nc_p : number +>c1.nc_s1 : number +>c1 : typeof c1 +>nc_s1 : number + +var i1_s_ncf = c1.nc_s2; +>i1_s_ncf : (b: number) => number +>c1.nc_s2 : (b: number) => number +>c1 : typeof c1 +>nc_s2 : (b: number) => number + +var i1_s_ncr = c1.nc_s2(20); +>i1_s_ncr : number +>c1.nc_s2(20) : number +>c1.nc_s2 : (b: number) => number +>c1 : typeof c1 +>nc_s2 : (b: number) => number + +var i1_s_ncprop = c1.nc_s3; +>i1_s_ncprop : number +>c1.nc_s3 : number +>c1 : typeof c1 +>nc_s3 : number + +c1.nc_s3 = i1_s_ncprop; +>c1.nc_s3 = i1_s_ncprop : number +>c1.nc_s3 : number +>c1 : typeof c1 +>nc_s3 : number +>i1_s_ncprop : number + +var i1_c = c1; +>i1_c : typeof c1 +>c1 : typeof c1 + +class cProperties { +>cProperties : cProperties + + private val: number; +>val : number + + /** getter only property*/ + public get p1() { +>p1 : number + + return this.val; +>this.val : number +>this : cProperties +>val : number + + } // trailing comment of only getter + public get nc_p1() { +>nc_p1 : number + + return this.val; +>this.val : number +>this : cProperties +>val : number + } + /**setter only property*/ + public set p2(value: number) { +>p2 : number +>value : number + + this.val = value; +>this.val = value : number +>this.val : number +>this : cProperties +>val : number +>value : number + } + public set nc_p2(value: number) { +>nc_p2 : number +>value : number + + this.val = value; +>this.val = value : number +>this.val : number +>this : cProperties +>val : number +>value : number + + } /* trailing comment of setter only*/ + + public x = 10; /*trailing comment for property*/ +>x : number + + private y = 10; // trailing comment of // style +>y : number +} +var cProperties_i = new cProperties(); +>cProperties_i : cProperties +>new cProperties() : cProperties +>cProperties : typeof cProperties + +cProperties_i.p2 = cProperties_i.p1; +>cProperties_i.p2 = cProperties_i.p1 : number +>cProperties_i.p2 : number +>cProperties_i : cProperties +>p2 : number +>cProperties_i.p1 : number +>cProperties_i : cProperties +>p1 : number + +cProperties_i.nc_p2 = cProperties_i.nc_p1; +>cProperties_i.nc_p2 = cProperties_i.nc_p1 : number +>cProperties_i.nc_p2 : number +>cProperties_i : cProperties +>nc_p2 : number +>cProperties_i.nc_p1 : number +>cProperties_i : cProperties +>nc_p1 : number + diff --git a/tests/baselines/reference/commentsCommentParsing.js b/tests/baselines/reference/commentsCommentParsing.js index 092cb6d5f32..2f2746145e5 100644 --- a/tests/baselines/reference/commentsCommentParsing.js +++ b/tests/baselines/reference/commentsCommentParsing.js @@ -155,67 +155,135 @@ class NoQuickInfoClass { } //// [commentsCommentParsing.js] +/// This is simple /// comments function simple() { } simple(); +/// multiLine /// Comments +/// This is example of multiline /// comments +/// Another multiLine function multiLine() { } multiLine(); +/** this is eg of single line jsdoc style comment */ function jsDocSingleLine() { } jsDocSingleLine(); +/** this is multiple line jsdoc stule comment +*New line1 +*New Line2*/ function jsDocMultiLine() { } jsDocMultiLine(); +/** this is multiple line jsdoc stule comment +*New line1 +*New Line2*/ +/** Shoul mege this line as well +* and this too*/ /** Another this one too*/ function jsDocMultiLineMerge() { } jsDocMultiLineMerge(); +/// Triple slash comment +/** jsdoc comment */ function jsDocMixedComments1() { } jsDocMixedComments1(); +/// Triple slash comment +/** jsdoc comment */ /*** another jsDocComment*/ function jsDocMixedComments2() { } jsDocMixedComments2(); +/** jsdoc comment */ /*** another jsDocComment*/ +/// Triple slash comment function jsDocMixedComments3() { } jsDocMixedComments3(); +/** jsdoc comment */ /*** another jsDocComment*/ +/// Triple slash comment +/// Triple slash comment 2 function jsDocMixedComments4() { } jsDocMixedComments4(); +/// Triple slash comment 1 +/** jsdoc comment */ /*** another jsDocComment*/ +/// Triple slash comment +/// Triple slash comment 2 function jsDocMixedComments5() { } jsDocMixedComments5(); +/*** another jsDocComment*/ +/// Triple slash comment 1 +/// Triple slash comment +/// Triple slash comment 2 +/** jsdoc comment */ function jsDocMixedComments6() { } jsDocMixedComments6(); +// This shoulnot be help comment function noHelpComment1() { } noHelpComment1(); +/* This shoulnot be help comment */ function noHelpComment2() { } noHelpComment2(); function noHelpComment3() { } noHelpComment3(); +/** Adds two integers and returns the result + * @param {number} a first number + * @param b second number + */ function sum(a, b) { return a + b; } sum(10, 20); +/** This is multiplication function*/ +/** @param */ +/** @param a first number*/ +/** @param b */ +/** @param c { + @param d @anotherTag*/ +/** @param e LastParam @anotherTag*/ function multiply(a, b, c, d, e) { } +/**@param opt optional parameter*/ function f1(aOrb, opt) { return aOrb; } +/** This is subtract function +@param { a +*@param { number | } b this is about b +@param { { () => string; } } c this is optional param c +@param { { () => string; } d this is optional param d +@param { { () => string; } } e this is optional param e +@param { { { () => string; } } f this is optional param f +*/ function subtract(a, b, c, d, e, f) { } +/** this is square function +@paramTag { number } a this is input number of paramTag +@param { number } a this is input number +@returnType { number } it is return type +*/ function square(a) { return a * a; } +/** this is divide function +@param { number} a this is a +@paramTag { number } g this is optional param g +@param { number} b this is b +*/ function divide(a, b) { } -function jsDocParamTest(a, b, c, d) { +/** this is jsdoc style function with param tag as well as inline parameter help +*@param a it is first parameter +*@param c it is third parameter +*/ +function jsDocParamTest(/** this is inline comment for a */ a, /** this is inline comment for b*/ b, c, d) { return a + b + c + d; } +/**/ var NoQuickInfoClass = (function () { function NoQuickInfoClass() { } @@ -226,25 +294,77 @@ var NoQuickInfoClass = (function () { //// [commentsCommentParsing.d.ts] declare function simple(): void; declare function multiLine(): void; +/** this is eg of single line jsdoc style comment */ declare function jsDocSingleLine(): void; +/** this is multiple line jsdoc stule comment +*New line1 +*New Line2*/ declare function jsDocMultiLine(): void; +/** this is multiple line jsdoc stule comment +*New line1 +*New Line2*/ +/** Shoul mege this line as well +* and this too*/ /** Another this one too*/ declare function jsDocMultiLineMerge(): void; +/** jsdoc comment */ declare function jsDocMixedComments1(): void; +/** jsdoc comment */ /*** another jsDocComment*/ declare function jsDocMixedComments2(): void; +/** jsdoc comment */ /*** another jsDocComment*/ declare function jsDocMixedComments3(): void; +/** jsdoc comment */ /*** another jsDocComment*/ declare function jsDocMixedComments4(): void; +/** jsdoc comment */ /*** another jsDocComment*/ declare function jsDocMixedComments5(): void; +/*** another jsDocComment*/ +/** jsdoc comment */ declare function jsDocMixedComments6(): void; declare function noHelpComment1(): void; declare function noHelpComment2(): void; declare function noHelpComment3(): void; +/** Adds two integers and returns the result + * @param {number} a first number + * @param b second number + */ declare function sum(a: number, b: number): number; +/** This is multiplication function*/ +/** @param */ +/** @param a first number*/ +/** @param b */ +/** @param c { + @param d @anotherTag*/ +/** @param e LastParam @anotherTag*/ declare function multiply(a: number, b: number, c?: number, d?: any, e?: any): void; +/** fn f1 with number +* @param { string} b about b +*/ declare function f1(a: number): any; declare function f1(b: string): any; +/** This is subtract function +@param { a +*@param { number | } b this is about b +@param { { () => string; } } c this is optional param c +@param { { () => string; } d this is optional param d +@param { { () => string; } } e this is optional param e +@param { { { () => string; } } f this is optional param f +*/ declare function subtract(a: number, b: number, c?: () => string, d?: () => string, e?: () => string, f?: () => string): void; +/** this is square function +@paramTag { number } a this is input number of paramTag +@param { number } a this is input number +@returnType { number } it is return type +*/ declare function square(a: number): number; +/** this is divide function +@param { number} a this is a +@paramTag { number } g this is optional param g +@param { number} b this is b +*/ declare function divide(a: number, b: number): void; -declare function jsDocParamTest(a: number, b: number, c: number, d: number): number; +/** this is jsdoc style function with param tag as well as inline parameter help +*@param a it is first parameter +*@param c it is third parameter +*/ +declare function jsDocParamTest(/** this is inline comment for a */ a: number, /** this is inline comment for b*/ b: number, c: number, d: number): number; declare class NoQuickInfoClass { } diff --git a/tests/baselines/reference/commentsCommentParsing.types b/tests/baselines/reference/commentsCommentParsing.types new file mode 100644 index 00000000000..a9194f9a63a --- /dev/null +++ b/tests/baselines/reference/commentsCommentParsing.types @@ -0,0 +1,255 @@ +=== tests/cases/compiler/commentsCommentParsing.ts === + +/// This is simple /// comments +function simple() { +>simple : () => void +} + +simple(); +>simple() : void +>simple : () => void + +/// multiLine /// Comments +/// This is example of multiline /// comments +/// Another multiLine +function multiLine() { +>multiLine : () => void +} +multiLine(); +>multiLine() : void +>multiLine : () => void + +/** this is eg of single line jsdoc style comment */ +function jsDocSingleLine() { +>jsDocSingleLine : () => void +} +jsDocSingleLine(); +>jsDocSingleLine() : void +>jsDocSingleLine : () => void + + +/** this is multiple line jsdoc stule comment +*New line1 +*New Line2*/ +function jsDocMultiLine() { +>jsDocMultiLine : () => void +} +jsDocMultiLine(); +>jsDocMultiLine() : void +>jsDocMultiLine : () => void + +/** this is multiple line jsdoc stule comment +*New line1 +*New Line2*/ +/** Shoul mege this line as well +* and this too*/ /** Another this one too*/ +function jsDocMultiLineMerge() { +>jsDocMultiLineMerge : () => void +} +jsDocMultiLineMerge(); +>jsDocMultiLineMerge() : void +>jsDocMultiLineMerge : () => void + + +/// Triple slash comment +/** jsdoc comment */ +function jsDocMixedComments1() { +>jsDocMixedComments1 : () => void +} +jsDocMixedComments1(); +>jsDocMixedComments1() : void +>jsDocMixedComments1 : () => void + +/// Triple slash comment +/** jsdoc comment */ /*** another jsDocComment*/ +function jsDocMixedComments2() { +>jsDocMixedComments2 : () => void +} +jsDocMixedComments2(); +>jsDocMixedComments2() : void +>jsDocMixedComments2 : () => void + +/** jsdoc comment */ /*** another jsDocComment*/ +/// Triple slash comment +function jsDocMixedComments3() { +>jsDocMixedComments3 : () => void +} +jsDocMixedComments3(); +>jsDocMixedComments3() : void +>jsDocMixedComments3 : () => void + +/** jsdoc comment */ /*** another jsDocComment*/ +/// Triple slash comment +/// Triple slash comment 2 +function jsDocMixedComments4() { +>jsDocMixedComments4 : () => void +} +jsDocMixedComments4(); +>jsDocMixedComments4() : void +>jsDocMixedComments4 : () => void + +/// Triple slash comment 1 +/** jsdoc comment */ /*** another jsDocComment*/ +/// Triple slash comment +/// Triple slash comment 2 +function jsDocMixedComments5() { +>jsDocMixedComments5 : () => void +} +jsDocMixedComments5(); +>jsDocMixedComments5() : void +>jsDocMixedComments5 : () => void + +/*** another jsDocComment*/ +/// Triple slash comment 1 +/// Triple slash comment +/// Triple slash comment 2 +/** jsdoc comment */ +function jsDocMixedComments6() { +>jsDocMixedComments6 : () => void +} +jsDocMixedComments6(); +>jsDocMixedComments6() : void +>jsDocMixedComments6 : () => void + +// This shoulnot be help comment +function noHelpComment1() { +>noHelpComment1 : () => void +} +noHelpComment1(); +>noHelpComment1() : void +>noHelpComment1 : () => void + +/* This shoulnot be help comment */ +function noHelpComment2() { +>noHelpComment2 : () => void +} +noHelpComment2(); +>noHelpComment2() : void +>noHelpComment2 : () => void + +function noHelpComment3() { +>noHelpComment3 : () => void +} +noHelpComment3(); +>noHelpComment3() : void +>noHelpComment3 : () => void + +/** Adds two integers and returns the result + * @param {number} a first number + * @param b second number + */ +function sum(a: number, b: number) { +>sum : (a: number, b: number) => number +>a : number +>b : number + + return a + b; +>a + b : number +>a : number +>b : number +} +sum(10, 20); +>sum(10, 20) : number +>sum : (a: number, b: number) => number + +/** This is multiplication function*/ +/** @param */ +/** @param a first number*/ +/** @param b */ +/** @param c { + @param d @anotherTag*/ +/** @param e LastParam @anotherTag*/ +function multiply(a: number, b: number, c?: number, d?, e?) { +>multiply : (a: number, b: number, c?: number, d?: any, e?: any) => void +>a : number +>b : number +>c : number +>d : any +>e : any +} +/** fn f1 with number +* @param { string} b about b +*/ +function f1(a: number); +>f1 : { (a: number): any; (b: string): any; } +>a : number + +function f1(b: string); +>f1 : { (a: number): any; (b: string): any; } +>b : string + +/**@param opt optional parameter*/ +function f1(aOrb, opt?) { +>f1 : { (a: number): any; (b: string): any; } +>aOrb : any +>opt : any + + return aOrb; +>aOrb : any +} +/** This is subtract function +@param { a +*@param { number | } b this is about b +@param { { () => string; } } c this is optional param c +@param { { () => string; } d this is optional param d +@param { { () => string; } } e this is optional param e +@param { { { () => string; } } f this is optional param f +*/ +function subtract(a: number, b: number, c?: () => string, d?: () => string, e?: () => string, f?: () => string) { +>subtract : (a: number, b: number, c?: () => string, d?: () => string, e?: () => string, f?: () => string) => void +>a : number +>b : number +>c : () => string +>d : () => string +>e : () => string +>f : () => string +} +/** this is square function +@paramTag { number } a this is input number of paramTag +@param { number } a this is input number +@returnType { number } it is return type +*/ +function square(a: number) { +>square : (a: number) => number +>a : number + + return a * a; +>a * a : number +>a : number +>a : number +} +/** this is divide function +@param { number} a this is a +@paramTag { number } g this is optional param g +@param { number} b this is b +*/ +function divide(a: number, b: number) { +>divide : (a: number, b: number) => void +>a : number +>b : number +} +/** this is jsdoc style function with param tag as well as inline parameter help +*@param a it is first parameter +*@param c it is third parameter +*/ +function jsDocParamTest(/** this is inline comment for a */a: number, /** this is inline comment for b*/ b: number, c: number, d: number) { +>jsDocParamTest : (a: number, b: number, c: number, d: number) => number +>a : number +>b : number +>c : number +>d : number + + return a + b + c + d; +>a + b + c + d : number +>a + b + c : number +>a + b : number +>a : number +>b : number +>c : number +>d : number +} + +/**/ +class NoQuickInfoClass { +>NoQuickInfoClass : NoQuickInfoClass +} diff --git a/tests/baselines/reference/commentsDottedModuleName.js b/tests/baselines/reference/commentsDottedModuleName.js index 13946b3fe26..7044a244279 100644 --- a/tests/baselines/reference/commentsDottedModuleName.js +++ b/tests/baselines/reference/commentsDottedModuleName.js @@ -9,8 +9,10 @@ export module outerModule.InnerModule { //// [commentsDottedModuleName.js] define(["require", "exports"], function (require, exports) { + /** this is multi declare module*/ (function (outerModule) { (function (InnerModule) { + /// class b comment var b = (function () { function b() { } @@ -25,6 +27,7 @@ define(["require", "exports"], function (require, exports) { //// [commentsDottedModuleName.d.ts] +/** this is multi declare module*/ export declare module outerModule.InnerModule { class b { } diff --git a/tests/baselines/reference/commentsDottedModuleName.types b/tests/baselines/reference/commentsDottedModuleName.types new file mode 100644 index 00000000000..53195bfccfa --- /dev/null +++ b/tests/baselines/reference/commentsDottedModuleName.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/commentsDottedModuleName.ts === + +/** this is multi declare module*/ +export module outerModule.InnerModule { +>outerModule : typeof outerModule +>InnerModule : typeof InnerModule + + /// class b comment + export class b { +>b : b + } +} diff --git a/tests/baselines/reference/commentsEnums.js b/tests/baselines/reference/commentsEnums.js index 59da3de0141..c8bba8a4f77 100644 --- a/tests/baselines/reference/commentsEnums.js +++ b/tests/baselines/reference/commentsEnums.js @@ -6,25 +6,31 @@ enum Colors { Cornflower /* blue */, /** Fancy name for 'pink'*/ FancyPink -} +} // trailing comment var x = Colors.Cornflower; x = Colors.FancyPink; //// [commentsEnums.js] +/** Enum of colors*/ var Colors; (function (Colors) { - Colors[Colors["Cornflower"] = 0] = "Cornflower"; + /** Fancy name for 'blue'*/ + Colors[Colors["Cornflower"] = 0] = "Cornflower"; /* blue */ + /** Fancy name for 'pink'*/ Colors[Colors["FancyPink"] = 1] = "FancyPink"; -})(Colors || (Colors = {})); +})(Colors || (Colors = {})); // trailing comment var x = 0 /* Cornflower */; x = 1 /* FancyPink */; //// [commentsEnums.d.ts] +/** Enum of colors*/ declare enum Colors { + /** Fancy name for 'blue'*/ Cornflower = 0, + /** Fancy name for 'pink'*/ FancyPink = 1, } declare var x: Colors; diff --git a/tests/baselines/reference/commentsEnums.types b/tests/baselines/reference/commentsEnums.types new file mode 100644 index 00000000000..64404bff2e5 --- /dev/null +++ b/tests/baselines/reference/commentsEnums.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/commentsEnums.ts === + +/** Enum of colors*/ +enum Colors { +>Colors : Colors + + /** Fancy name for 'blue'*/ + Cornflower /* blue */, +>Cornflower : Colors + + /** Fancy name for 'pink'*/ + FancyPink +>FancyPink : Colors + +} // trailing comment +var x = Colors.Cornflower; +>x : Colors +>Colors.Cornflower : Colors +>Colors : typeof Colors +>Cornflower : Colors + +x = Colors.FancyPink; +>x = Colors.FancyPink : Colors +>x : Colors +>Colors.FancyPink : Colors +>Colors : typeof Colors +>FancyPink : Colors + + diff --git a/tests/baselines/reference/commentsExternalModules.js b/tests/baselines/reference/commentsExternalModules.js index d50ce4b3d6c..d4a0094e049 100644 --- a/tests/baselines/reference/commentsExternalModules.js +++ b/tests/baselines/reference/commentsExternalModules.js @@ -54,7 +54,7 @@ var myvar2 = new m4.m2.c(); //// [commentsExternalModules_1.ts] /**This is on import declaration*/ -import extMod = require("commentsExternalModules_0"); +import extMod = require("commentsExternalModules_0"); // trailing comment1 extMod.m1.fooExport(); var newVar = new extMod.m1.m2.c(); extMod.m4.fooExport(); @@ -63,12 +63,17 @@ var newVar2 = new extMod.m4.m2.c(); //// [commentsExternalModules_0.js] define(["require", "exports"], function (require, exports) { + /** Module comment*/ (function (m1) { + /** b's comment*/ m1.b; + /** foo's comment*/ function foo() { return m1.b; } + /** m2 comments*/ (function (m2) { + /** class comment;*/ var c = (function () { function c() { } @@ -76,9 +81,11 @@ define(["require", "exports"], function (require, exports) { })(); m2.c = c; ; + /** i*/ m2.i = new c(); })(m1.m2 || (m1.m2 = {})); var m2 = m1.m2; + /** exported function*/ function fooExport() { return foo(); } @@ -87,12 +94,19 @@ define(["require", "exports"], function (require, exports) { var m1 = exports.m1; m1.fooExport(); var myvar = new m1.m2.c(); + /** Module comment */ (function (m4) { + /** b's comment */ m4.b; + /** foo's comment + */ function foo() { return m4.b; } + /** m2 comments + */ (function (m2) { + /** class comment; */ var c = (function () { function c() { } @@ -100,9 +114,11 @@ define(["require", "exports"], function (require, exports) { })(); m2.c = c; ; + /** i */ m2.i = new c(); })(m4.m2 || (m4.m2 = {})); var m2 = m4.m2; + /** exported function */ function fooExport() { return foo(); } @@ -122,22 +138,35 @@ define(["require", "exports", "commentsExternalModules_0"], function (require, e //// [commentsExternalModules_0.d.ts] +/** Module comment*/ export declare module m1 { + /** b's comment*/ var b: number; + /** m2 comments*/ module m2 { + /** class comment;*/ class c { } + /** i*/ var i: c; } + /** exported function*/ function fooExport(): number; } +/** Module comment */ export declare module m4 { + /** b's comment */ var b: number; + /** m2 comments + */ module m2 { + /** class comment; */ class c { } + /** i */ var i: c; } + /** exported function */ function fooExport(): number; } //// [commentsExternalModules_1.d.ts] diff --git a/tests/baselines/reference/commentsExternalModules.types b/tests/baselines/reference/commentsExternalModules.types new file mode 100644 index 00000000000..56b6b338f4d --- /dev/null +++ b/tests/baselines/reference/commentsExternalModules.types @@ -0,0 +1,155 @@ +=== tests/cases/compiler/commentsExternalModules_1.ts === +/**This is on import declaration*/ +import extMod = require("commentsExternalModules_0"); // trailing comment1 +>extMod : typeof extMod + +extMod.m1.fooExport(); +>extMod.m1.fooExport() : number +>extMod.m1.fooExport : () => number +>extMod.m1 : typeof extMod.m1 +>extMod : typeof extMod +>m1 : typeof extMod.m1 +>fooExport : () => number + +var newVar = new extMod.m1.m2.c(); +>newVar : extMod.m1.m2.c +>new extMod.m1.m2.c() : extMod.m1.m2.c +>extMod.m1.m2.c : typeof extMod.m1.m2.c +>extMod.m1.m2 : typeof extMod.m1.m2 +>extMod.m1 : typeof extMod.m1 +>extMod : typeof extMod +>m1 : typeof extMod.m1 +>m2 : typeof extMod.m1.m2 +>c : typeof extMod.m1.m2.c + +extMod.m4.fooExport(); +>extMod.m4.fooExport() : number +>extMod.m4.fooExport : () => number +>extMod.m4 : typeof extMod.m4 +>extMod : typeof extMod +>m4 : typeof extMod.m4 +>fooExport : () => number + +var newVar2 = new extMod.m4.m2.c(); +>newVar2 : extMod.m4.m2.c +>new extMod.m4.m2.c() : extMod.m4.m2.c +>extMod.m4.m2.c : typeof extMod.m4.m2.c +>extMod.m4.m2 : typeof extMod.m4.m2 +>extMod.m4 : typeof extMod.m4 +>extMod : typeof extMod +>m4 : typeof extMod.m4 +>m2 : typeof extMod.m4.m2 +>c : typeof extMod.m4.m2.c + +=== tests/cases/compiler/commentsExternalModules_0.ts === + +/** Module comment*/ +export module m1 { +>m1 : typeof m1 + + /** b's comment*/ + export var b: number; +>b : number + + /** foo's comment*/ + function foo() { +>foo : () => number + + return b; +>b : number + } + /** m2 comments*/ + export module m2 { +>m2 : typeof m2 + + /** class comment;*/ + export class c { +>c : c + + }; + /** i*/ + export var i = new c(); +>i : c +>new c() : c +>c : typeof c + } + /** exported function*/ + export function fooExport() { +>fooExport : () => number + + return foo(); +>foo() : number +>foo : () => number + } +} +m1.fooExport(); +>m1.fooExport() : number +>m1.fooExport : () => number +>m1 : typeof m1 +>fooExport : () => number + +var myvar = new m1.m2.c(); +>myvar : m1.m2.c +>new m1.m2.c() : m1.m2.c +>m1.m2.c : typeof m1.m2.c +>m1.m2 : typeof m1.m2 +>m1 : typeof m1 +>m2 : typeof m1.m2 +>c : typeof m1.m2.c + +/** Module comment */ +export module m4 { +>m4 : typeof m4 + + /** b's comment */ + export var b: number; +>b : number + + /** foo's comment + */ + function foo() { +>foo : () => number + + return b; +>b : number + } + /** m2 comments + */ + export module m2 { +>m2 : typeof m2 + + /** class comment; */ + export class c { +>c : c + + }; + /** i */ + export var i = new c(); +>i : c +>new c() : c +>c : typeof c + } + /** exported function */ + export function fooExport() { +>fooExport : () => number + + return foo(); +>foo() : number +>foo : () => number + } +} +m4.fooExport(); +>m4.fooExport() : number +>m4.fooExport : () => number +>m4 : typeof m4 +>fooExport : () => number + +var myvar2 = new m4.m2.c(); +>myvar2 : m4.m2.c +>new m4.m2.c() : m4.m2.c +>m4.m2.c : typeof m4.m2.c +>m4.m2 : typeof m4.m2 +>m4 : typeof m4 +>m2 : typeof m4.m2 +>c : typeof m4.m2.c + diff --git a/tests/baselines/reference/commentsExternalModules2.js b/tests/baselines/reference/commentsExternalModules2.js new file mode 100644 index 00000000000..ab2db534e14 --- /dev/null +++ b/tests/baselines/reference/commentsExternalModules2.js @@ -0,0 +1,176 @@ +//// [tests/cases/compiler/commentsExternalModules2.ts] //// + +//// [commentsExternalModules2_0.ts] + +/** Module comment*/ +export module m1 { + /** b's comment*/ + export var b: number; + /** foo's comment*/ + function foo() { + return b; + } + /** m2 comments*/ + export module m2 { + /** class comment;*/ + export class c { + }; + /** i*/ + export var i = new c(); + } + /** exported function*/ + export function fooExport() { + return foo(); + } +} +m1.fooExport(); +var myvar = new m1.m2.c(); + +/** Module comment */ +export module m4 { + /** b's comment */ + export var b: number; + /** foo's comment + */ + function foo() { + return b; + } + /** m2 comments + */ + export module m2 { + /** class comment; */ + export class c { + }; + /** i */ + export var i = new c(); + } + /** exported function */ + export function fooExport() { + return foo(); + } +} +m4.fooExport(); +var myvar2 = new m4.m2.c(); + +//// [commentsExternalModules_1.ts] +/**This is on import declaration*/ +import extMod = require("commentsExternalModules2_0"); // trailing comment 1 +extMod.m1.fooExport(); +export var newVar = new extMod.m1.m2.c(); +extMod.m4.fooExport(); +export var newVar2 = new extMod.m4.m2.c(); + + +//// [commentsExternalModules2_0.js] +define(["require", "exports"], function (require, exports) { + /** Module comment*/ + (function (m1) { + /** b's comment*/ + m1.b; + /** foo's comment*/ + function foo() { + return m1.b; + } + /** m2 comments*/ + (function (m2) { + /** class comment;*/ + var c = (function () { + function c() { + } + return c; + })(); + m2.c = c; + ; + /** i*/ + m2.i = new c(); + })(m1.m2 || (m1.m2 = {})); + var m2 = m1.m2; + /** exported function*/ + function fooExport() { + return foo(); + } + m1.fooExport = fooExport; + })(exports.m1 || (exports.m1 = {})); + var m1 = exports.m1; + m1.fooExport(); + var myvar = new m1.m2.c(); + /** Module comment */ + (function (m4) { + /** b's comment */ + m4.b; + /** foo's comment + */ + function foo() { + return m4.b; + } + /** m2 comments + */ + (function (m2) { + /** class comment; */ + var c = (function () { + function c() { + } + return c; + })(); + m2.c = c; + ; + /** i */ + m2.i = new c(); + })(m4.m2 || (m4.m2 = {})); + var m2 = m4.m2; + /** exported function */ + function fooExport() { + return foo(); + } + m4.fooExport = fooExport; + })(exports.m4 || (exports.m4 = {})); + var m4 = exports.m4; + m4.fooExport(); + var myvar2 = new m4.m2.c(); +}); +//// [commentsExternalModules_1.js] +define(["require", "exports", "commentsExternalModules2_0"], function (require, exports, extMod) { + extMod.m1.fooExport(); + exports.newVar = new extMod.m1.m2.c(); + extMod.m4.fooExport(); + exports.newVar2 = new extMod.m4.m2.c(); +}); + + +//// [commentsExternalModules2_0.d.ts] +/** Module comment*/ +export declare module m1 { + /** b's comment*/ + var b: number; + /** m2 comments*/ + module m2 { + /** class comment;*/ + class c { + } + /** i*/ + var i: c; + } + /** exported function*/ + function fooExport(): number; +} +/** Module comment */ +export declare module m4 { + /** b's comment */ + var b: number; + /** m2 comments + */ + module m2 { + /** class comment; */ + class c { + } + /** i */ + var i: c; + } + /** exported function */ + function fooExport(): number; +} +//// [commentsExternalModules_1.d.ts] +/**This is on import declaration*/ +import extMod = require("commentsExternalModules2_0"); +export declare var newVar: extMod.m1.m2.c; +export declare var newVar2: extMod.m4.m2.c; diff --git a/tests/baselines/reference/commentsExternalModules2.types b/tests/baselines/reference/commentsExternalModules2.types new file mode 100644 index 00000000000..556b5d11d35 --- /dev/null +++ b/tests/baselines/reference/commentsExternalModules2.types @@ -0,0 +1,155 @@ +=== tests/cases/compiler/commentsExternalModules_1.ts === +/**This is on import declaration*/ +import extMod = require("commentsExternalModules2_0"); // trailing comment 1 +>extMod : typeof extMod + +extMod.m1.fooExport(); +>extMod.m1.fooExport() : number +>extMod.m1.fooExport : () => number +>extMod.m1 : typeof extMod.m1 +>extMod : typeof extMod +>m1 : typeof extMod.m1 +>fooExport : () => number + +export var newVar = new extMod.m1.m2.c(); +>newVar : extMod.m1.m2.c +>new extMod.m1.m2.c() : extMod.m1.m2.c +>extMod.m1.m2.c : typeof extMod.m1.m2.c +>extMod.m1.m2 : typeof extMod.m1.m2 +>extMod.m1 : typeof extMod.m1 +>extMod : typeof extMod +>m1 : typeof extMod.m1 +>m2 : typeof extMod.m1.m2 +>c : typeof extMod.m1.m2.c + +extMod.m4.fooExport(); +>extMod.m4.fooExport() : number +>extMod.m4.fooExport : () => number +>extMod.m4 : typeof extMod.m4 +>extMod : typeof extMod +>m4 : typeof extMod.m4 +>fooExport : () => number + +export var newVar2 = new extMod.m4.m2.c(); +>newVar2 : extMod.m4.m2.c +>new extMod.m4.m2.c() : extMod.m4.m2.c +>extMod.m4.m2.c : typeof extMod.m4.m2.c +>extMod.m4.m2 : typeof extMod.m4.m2 +>extMod.m4 : typeof extMod.m4 +>extMod : typeof extMod +>m4 : typeof extMod.m4 +>m2 : typeof extMod.m4.m2 +>c : typeof extMod.m4.m2.c + +=== tests/cases/compiler/commentsExternalModules2_0.ts === + +/** Module comment*/ +export module m1 { +>m1 : typeof m1 + + /** b's comment*/ + export var b: number; +>b : number + + /** foo's comment*/ + function foo() { +>foo : () => number + + return b; +>b : number + } + /** m2 comments*/ + export module m2 { +>m2 : typeof m2 + + /** class comment;*/ + export class c { +>c : c + + }; + /** i*/ + export var i = new c(); +>i : c +>new c() : c +>c : typeof c + } + /** exported function*/ + export function fooExport() { +>fooExport : () => number + + return foo(); +>foo() : number +>foo : () => number + } +} +m1.fooExport(); +>m1.fooExport() : number +>m1.fooExport : () => number +>m1 : typeof m1 +>fooExport : () => number + +var myvar = new m1.m2.c(); +>myvar : m1.m2.c +>new m1.m2.c() : m1.m2.c +>m1.m2.c : typeof m1.m2.c +>m1.m2 : typeof m1.m2 +>m1 : typeof m1 +>m2 : typeof m1.m2 +>c : typeof m1.m2.c + +/** Module comment */ +export module m4 { +>m4 : typeof m4 + + /** b's comment */ + export var b: number; +>b : number + + /** foo's comment + */ + function foo() { +>foo : () => number + + return b; +>b : number + } + /** m2 comments + */ + export module m2 { +>m2 : typeof m2 + + /** class comment; */ + export class c { +>c : c + + }; + /** i */ + export var i = new c(); +>i : c +>new c() : c +>c : typeof c + } + /** exported function */ + export function fooExport() { +>fooExport : () => number + + return foo(); +>foo() : number +>foo : () => number + } +} +m4.fooExport(); +>m4.fooExport() : number +>m4.fooExport : () => number +>m4 : typeof m4 +>fooExport : () => number + +var myvar2 = new m4.m2.c(); +>myvar2 : m4.m2.c +>new m4.m2.c() : m4.m2.c +>m4.m2.c : typeof m4.m2.c +>m4.m2 : typeof m4.m2 +>m4 : typeof m4 +>m2 : typeof m4.m2 +>c : typeof m4.m2.c + diff --git a/tests/baselines/reference/commentsExternalModules3.js b/tests/baselines/reference/commentsExternalModules3.js new file mode 100644 index 00000000000..afade653a6f --- /dev/null +++ b/tests/baselines/reference/commentsExternalModules3.js @@ -0,0 +1,174 @@ +//// [tests/cases/compiler/commentsExternalModules3.ts] //// + +//// [commentsExternalModules2_0.ts] + +/** Module comment*/ +export module m1 { + /** b's comment*/ + export var b: number; + /** foo's comment*/ + function foo() { + return b; + } + /** m2 comments*/ + export module m2 { + /** class comment;*/ + export class c { + }; + /** i*/ + export var i = new c(); + } + /** exported function*/ + export function fooExport() { + return foo(); + } +} +m1.fooExport(); +var myvar = new m1.m2.c(); + +/** Module comment */ +export module m4 { + /** b's comment */ + export var b: number; + /** foo's comment + */ + function foo() { + return b; + } + /** m2 comments + */ + export module m2 { + /** class comment; */ + export class c { + }; + /** i */ + export var i = new c(); + } + /** exported function */ + export function fooExport() { + return foo(); + } +} +m4.fooExport(); +var myvar2 = new m4.m2.c(); + +//// [commentsExternalModules_1.ts] +/**This is on import declaration*/ +import extMod = require("commentsExternalModules2_0"); // trailing comment 1 +extMod.m1.fooExport(); +export var newVar = new extMod.m1.m2.c(); +extMod.m4.fooExport(); +export var newVar2 = new extMod.m4.m2.c(); + + +//// [commentsExternalModules2_0.js] +/** Module comment*/ +(function (m1) { + /** b's comment*/ + m1.b; + /** foo's comment*/ + function foo() { + return m1.b; + } + /** m2 comments*/ + (function (m2) { + /** class comment;*/ + var c = (function () { + function c() { + } + return c; + })(); + m2.c = c; + ; + /** i*/ + m2.i = new c(); + })(m1.m2 || (m1.m2 = {})); + var m2 = m1.m2; + /** exported function*/ + function fooExport() { + return foo(); + } + m1.fooExport = fooExport; +})(exports.m1 || (exports.m1 = {})); +var m1 = exports.m1; +m1.fooExport(); +var myvar = new m1.m2.c(); +/** Module comment */ +(function (m4) { + /** b's comment */ + m4.b; + /** foo's comment + */ + function foo() { + return m4.b; + } + /** m2 comments + */ + (function (m2) { + /** class comment; */ + var c = (function () { + function c() { + } + return c; + })(); + m2.c = c; + ; + /** i */ + m2.i = new c(); + })(m4.m2 || (m4.m2 = {})); + var m2 = m4.m2; + /** exported function */ + function fooExport() { + return foo(); + } + m4.fooExport = fooExport; +})(exports.m4 || (exports.m4 = {})); +var m4 = exports.m4; +m4.fooExport(); +var myvar2 = new m4.m2.c(); +//// [commentsExternalModules_1.js] +/**This is on import declaration*/ +var extMod = require("commentsExternalModules2_0"); // trailing comment 1 +extMod.m1.fooExport(); +exports.newVar = new extMod.m1.m2.c(); +extMod.m4.fooExport(); +exports.newVar2 = new extMod.m4.m2.c(); + + +//// [commentsExternalModules2_0.d.ts] +/** Module comment*/ +export declare module m1 { + /** b's comment*/ + var b: number; + /** m2 comments*/ + module m2 { + /** class comment;*/ + class c { + } + /** i*/ + var i: c; + } + /** exported function*/ + function fooExport(): number; +} +/** Module comment */ +export declare module m4 { + /** b's comment */ + var b: number; + /** m2 comments + */ + module m2 { + /** class comment; */ + class c { + } + /** i */ + var i: c; + } + /** exported function */ + function fooExport(): number; +} +//// [commentsExternalModules_1.d.ts] +/**This is on import declaration*/ +import extMod = require("commentsExternalModules2_0"); +export declare var newVar: extMod.m1.m2.c; +export declare var newVar2: extMod.m4.m2.c; diff --git a/tests/baselines/reference/commentsExternalModules3.types b/tests/baselines/reference/commentsExternalModules3.types new file mode 100644 index 00000000000..556b5d11d35 --- /dev/null +++ b/tests/baselines/reference/commentsExternalModules3.types @@ -0,0 +1,155 @@ +=== tests/cases/compiler/commentsExternalModules_1.ts === +/**This is on import declaration*/ +import extMod = require("commentsExternalModules2_0"); // trailing comment 1 +>extMod : typeof extMod + +extMod.m1.fooExport(); +>extMod.m1.fooExport() : number +>extMod.m1.fooExport : () => number +>extMod.m1 : typeof extMod.m1 +>extMod : typeof extMod +>m1 : typeof extMod.m1 +>fooExport : () => number + +export var newVar = new extMod.m1.m2.c(); +>newVar : extMod.m1.m2.c +>new extMod.m1.m2.c() : extMod.m1.m2.c +>extMod.m1.m2.c : typeof extMod.m1.m2.c +>extMod.m1.m2 : typeof extMod.m1.m2 +>extMod.m1 : typeof extMod.m1 +>extMod : typeof extMod +>m1 : typeof extMod.m1 +>m2 : typeof extMod.m1.m2 +>c : typeof extMod.m1.m2.c + +extMod.m4.fooExport(); +>extMod.m4.fooExport() : number +>extMod.m4.fooExport : () => number +>extMod.m4 : typeof extMod.m4 +>extMod : typeof extMod +>m4 : typeof extMod.m4 +>fooExport : () => number + +export var newVar2 = new extMod.m4.m2.c(); +>newVar2 : extMod.m4.m2.c +>new extMod.m4.m2.c() : extMod.m4.m2.c +>extMod.m4.m2.c : typeof extMod.m4.m2.c +>extMod.m4.m2 : typeof extMod.m4.m2 +>extMod.m4 : typeof extMod.m4 +>extMod : typeof extMod +>m4 : typeof extMod.m4 +>m2 : typeof extMod.m4.m2 +>c : typeof extMod.m4.m2.c + +=== tests/cases/compiler/commentsExternalModules2_0.ts === + +/** Module comment*/ +export module m1 { +>m1 : typeof m1 + + /** b's comment*/ + export var b: number; +>b : number + + /** foo's comment*/ + function foo() { +>foo : () => number + + return b; +>b : number + } + /** m2 comments*/ + export module m2 { +>m2 : typeof m2 + + /** class comment;*/ + export class c { +>c : c + + }; + /** i*/ + export var i = new c(); +>i : c +>new c() : c +>c : typeof c + } + /** exported function*/ + export function fooExport() { +>fooExport : () => number + + return foo(); +>foo() : number +>foo : () => number + } +} +m1.fooExport(); +>m1.fooExport() : number +>m1.fooExport : () => number +>m1 : typeof m1 +>fooExport : () => number + +var myvar = new m1.m2.c(); +>myvar : m1.m2.c +>new m1.m2.c() : m1.m2.c +>m1.m2.c : typeof m1.m2.c +>m1.m2 : typeof m1.m2 +>m1 : typeof m1 +>m2 : typeof m1.m2 +>c : typeof m1.m2.c + +/** Module comment */ +export module m4 { +>m4 : typeof m4 + + /** b's comment */ + export var b: number; +>b : number + + /** foo's comment + */ + function foo() { +>foo : () => number + + return b; +>b : number + } + /** m2 comments + */ + export module m2 { +>m2 : typeof m2 + + /** class comment; */ + export class c { +>c : c + + }; + /** i */ + export var i = new c(); +>i : c +>new c() : c +>c : typeof c + } + /** exported function */ + export function fooExport() { +>fooExport : () => number + + return foo(); +>foo() : number +>foo : () => number + } +} +m4.fooExport(); +>m4.fooExport() : number +>m4.fooExport : () => number +>m4 : typeof m4 +>fooExport : () => number + +var myvar2 = new m4.m2.c(); +>myvar2 : m4.m2.c +>new m4.m2.c() : m4.m2.c +>m4.m2.c : typeof m4.m2.c +>m4.m2 : typeof m4.m2 +>m4 : typeof m4 +>m2 : typeof m4.m2 +>c : typeof m4.m2.c + diff --git a/tests/baselines/reference/commentsFormatting.js b/tests/baselines/reference/commentsFormatting.js new file mode 100644 index 00000000000..6dc68b06b9f --- /dev/null +++ b/tests/baselines/reference/commentsFormatting.js @@ -0,0 +1,273 @@ +//// [commentsFormatting.ts] + +module m { + /** this is first line - aligned to class declaration +* this is 4 spaces left aligned + * this is 3 spaces left aligned + * this is 2 spaces left aligned + * this is 1 spaces left aligned + * this is at same level as first line + * this is 1 spaces right aligned + * this is 2 spaces right aligned + * this is 3 spaces right aligned + * this is 4 spaces right aligned + * this is 5 spaces right aligned + * this is 6 spaces right aligned + * this is 7 spaces right aligned + * this is 8 spaces right aligned */ + export class c { + } + + /** this is first line - 4 spaces right aligned to class but in js file should be aligned to class declaration +* this is 8 spaces left aligned + * this is 7 spaces left aligned + * this is 6 spaces left aligned + * this is 5 spaces left aligned + * this is 4 spaces left aligned + * this is 3 spaces left aligned + * this is 2 spaces left aligned + * this is 1 spaces left aligned + * this is at same level as first line + * this is 1 spaces right aligned + * this is 2 spaces right aligned + * this is 3 spaces right aligned + * this is 4 spaces right aligned + * this is 5 spaces right aligned + * this is 6 spaces right aligned + * this is 7 spaces right aligned + * this is 8 spaces right aligned */ + export class c2 { + } + + /** this is comment with new lines in between + +this is 4 spaces left aligned but above line is empty + + this is 3 spaces left aligned but above line is empty + + this is 2 spaces left aligned but above line is empty + + this is 1 spaces left aligned but above line is empty + + this is at same level as first line but above line is empty + + this is 1 spaces right aligned but above line is empty + + this is 2 spaces right aligned but above line is empty + + this is 3 spaces right aligned but above line is empty + + this is 4 spaces right aligned but above line is empty + + + Above 2 lines are empty + + + + above 3 lines are empty*/ + export class c3 { + } + + /** this is first line - aligned to class declaration + * this is 0 space + tab + * this is 1 space + tab + * this is 2 spaces + tab + * this is 3 spaces + tab + * this is 4 spaces + tab + * this is 5 spaces + tab + * this is 6 spaces + tab + * this is 7 spaces + tab + * this is 8 spaces + tab + * this is 9 spaces + tab + * this is 10 spaces + tab + * this is 11 spaces + tab + * this is 12 spaces + tab */ + export class c4 { + } +} + +//// [commentsFormatting.js] +var m; +(function (m) { + /** this is first line - aligned to class declaration +* this is 4 spaces left aligned + * this is 3 spaces left aligned + * this is 2 spaces left aligned + * this is 1 spaces left aligned + * this is at same level as first line + * this is 1 spaces right aligned + * this is 2 spaces right aligned + * this is 3 spaces right aligned + * this is 4 spaces right aligned + * this is 5 spaces right aligned + * this is 6 spaces right aligned + * this is 7 spaces right aligned + * this is 8 spaces right aligned */ + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + /** this is first line - 4 spaces right aligned to class but in js file should be aligned to class declaration +* this is 8 spaces left aligned +* this is 7 spaces left aligned +* this is 6 spaces left aligned +* this is 5 spaces left aligned +* this is 4 spaces left aligned + * this is 3 spaces left aligned + * this is 2 spaces left aligned + * this is 1 spaces left aligned + * this is at same level as first line + * this is 1 spaces right aligned + * this is 2 spaces right aligned + * this is 3 spaces right aligned + * this is 4 spaces right aligned + * this is 5 spaces right aligned + * this is 6 spaces right aligned + * this is 7 spaces right aligned + * this is 8 spaces right aligned */ + var c2 = (function () { + function c2() { + } + return c2; + })(); + m.c2 = c2; + /** this is comment with new lines in between + +this is 4 spaces left aligned but above line is empty + + this is 3 spaces left aligned but above line is empty + + this is 2 spaces left aligned but above line is empty + + this is 1 spaces left aligned but above line is empty + + this is at same level as first line but above line is empty + + this is 1 spaces right aligned but above line is empty + + this is 2 spaces right aligned but above line is empty + + this is 3 spaces right aligned but above line is empty + + this is 4 spaces right aligned but above line is empty + + + Above 2 lines are empty + + + + above 3 lines are empty*/ + var c3 = (function () { + function c3() { + } + return c3; + })(); + m.c3 = c3; + /** this is first line - aligned to class declaration + * this is 0 space + tab + * this is 1 space + tab + * this is 2 spaces + tab + * this is 3 spaces + tab + * this is 4 spaces + tab + * this is 5 spaces + tab + * this is 6 spaces + tab + * this is 7 spaces + tab + * this is 8 spaces + tab + * this is 9 spaces + tab + * this is 10 spaces + tab + * this is 11 spaces + tab + * this is 12 spaces + tab */ + var c4 = (function () { + function c4() { + } + return c4; + })(); + m.c4 = c4; +})(m || (m = {})); + + +//// [commentsFormatting.d.ts] +declare module m { + /** this is first line - aligned to class declaration +* this is 4 spaces left aligned + * this is 3 spaces left aligned + * this is 2 spaces left aligned + * this is 1 spaces left aligned + * this is at same level as first line + * this is 1 spaces right aligned + * this is 2 spaces right aligned + * this is 3 spaces right aligned + * this is 4 spaces right aligned + * this is 5 spaces right aligned + * this is 6 spaces right aligned + * this is 7 spaces right aligned + * this is 8 spaces right aligned */ + class c { + } + /** this is first line - 4 spaces right aligned to class but in js file should be aligned to class declaration +* this is 8 spaces left aligned +* this is 7 spaces left aligned +* this is 6 spaces left aligned +* this is 5 spaces left aligned +* this is 4 spaces left aligned + * this is 3 spaces left aligned + * this is 2 spaces left aligned + * this is 1 spaces left aligned + * this is at same level as first line + * this is 1 spaces right aligned + * this is 2 spaces right aligned + * this is 3 spaces right aligned + * this is 4 spaces right aligned + * this is 5 spaces right aligned + * this is 6 spaces right aligned + * this is 7 spaces right aligned + * this is 8 spaces right aligned */ + class c2 { + } + /** this is comment with new lines in between + +this is 4 spaces left aligned but above line is empty + + this is 3 spaces left aligned but above line is empty + + this is 2 spaces left aligned but above line is empty + + this is 1 spaces left aligned but above line is empty + + this is at same level as first line but above line is empty + + this is 1 spaces right aligned but above line is empty + + this is 2 spaces right aligned but above line is empty + + this is 3 spaces right aligned but above line is empty + + this is 4 spaces right aligned but above line is empty + + + Above 2 lines are empty + + + + above 3 lines are empty*/ + class c3 { + } + /** this is first line - aligned to class declaration + * this is 0 space + tab + * this is 1 space + tab + * this is 2 spaces + tab + * this is 3 spaces + tab + * this is 4 spaces + tab + * this is 5 spaces + tab + * this is 6 spaces + tab + * this is 7 spaces + tab + * this is 8 spaces + tab + * this is 9 spaces + tab + * this is 10 spaces + tab + * this is 11 spaces + tab + * this is 12 spaces + tab */ + class c4 { + } +} diff --git a/tests/baselines/reference/commentsFormatting.types b/tests/baselines/reference/commentsFormatting.types new file mode 100644 index 00000000000..2de53654f9e --- /dev/null +++ b/tests/baselines/reference/commentsFormatting.types @@ -0,0 +1,93 @@ +=== tests/cases/compiler/commentsFormatting.ts === + +module m { +>m : typeof m + + /** this is first line - aligned to class declaration +* this is 4 spaces left aligned + * this is 3 spaces left aligned + * this is 2 spaces left aligned + * this is 1 spaces left aligned + * this is at same level as first line + * this is 1 spaces right aligned + * this is 2 spaces right aligned + * this is 3 spaces right aligned + * this is 4 spaces right aligned + * this is 5 spaces right aligned + * this is 6 spaces right aligned + * this is 7 spaces right aligned + * this is 8 spaces right aligned */ + export class c { +>c : c + } + + /** this is first line - 4 spaces right aligned to class but in js file should be aligned to class declaration +* this is 8 spaces left aligned + * this is 7 spaces left aligned + * this is 6 spaces left aligned + * this is 5 spaces left aligned + * this is 4 spaces left aligned + * this is 3 spaces left aligned + * this is 2 spaces left aligned + * this is 1 spaces left aligned + * this is at same level as first line + * this is 1 spaces right aligned + * this is 2 spaces right aligned + * this is 3 spaces right aligned + * this is 4 spaces right aligned + * this is 5 spaces right aligned + * this is 6 spaces right aligned + * this is 7 spaces right aligned + * this is 8 spaces right aligned */ + export class c2 { +>c2 : c2 + } + + /** this is comment with new lines in between + +this is 4 spaces left aligned but above line is empty + + this is 3 spaces left aligned but above line is empty + + this is 2 spaces left aligned but above line is empty + + this is 1 spaces left aligned but above line is empty + + this is at same level as first line but above line is empty + + this is 1 spaces right aligned but above line is empty + + this is 2 spaces right aligned but above line is empty + + this is 3 spaces right aligned but above line is empty + + this is 4 spaces right aligned but above line is empty + + + Above 2 lines are empty + + + + above 3 lines are empty*/ + export class c3 { +>c3 : c3 + } + + /** this is first line - aligned to class declaration + * this is 0 space + tab + * this is 1 space + tab + * this is 2 spaces + tab + * this is 3 spaces + tab + * this is 4 spaces + tab + * this is 5 spaces + tab + * this is 6 spaces + tab + * this is 7 spaces + tab + * this is 8 spaces + tab + * this is 9 spaces + tab + * this is 10 spaces + tab + * this is 11 spaces + tab + * this is 12 spaces + tab */ + export class c4 { +>c4 : c4 + } +} diff --git a/tests/baselines/reference/commentsFunction.js b/tests/baselines/reference/commentsFunction.js index 70ac9bc76d3..0ffb2714108 100644 --- a/tests/baselines/reference/commentsFunction.js +++ b/tests/baselines/reference/commentsFunction.js @@ -2,14 +2,14 @@ /** This comment should appear for foo*/ function foo() { -} +} /* trailing comment of function */ foo(); /** This is comment for function signature*/ function fooWithParameters(/** this is comment about a*/a: string, /** this is comment for b*/ b: number) { var d = a; -} +} // trailing comment of function fooWithParameters("a", 10); /** fooFunc * comment @@ -22,28 +22,100 @@ var fooFunc = function FooFunctionValue(/** fooFunctionValue param */ b: string) var lambdaFoo = /** this is lambda comment*/ (/**param a*/a: number, /**param b*/b: number) => a + b; var lambddaNoVarComment = /** this is lambda multiplication*/ (/**param a*/a: number, /**param b*/b: number) => a * b; lambdaFoo(10, 20); -lambddaNoVarComment(10, 20); +lambddaNoVarComment(10, 20); + +function blah(a: string /* multiline trailing comment +multiline */) { +} + +function blah2(a: string /* single line multiple trailing comments */ /* second */) { +} + +function blah3(a: string // trailing commen single line + ) { +} + +lambdaFoo = (a, b) => a * b; // This is trailing comment + +/*leading comment*/() => 0; // Needs to be wrapped in parens to be a valid expression (not declaration) +/*leading comment*/(() => 0); //trailing comment + +function blah4(/*1*/a: string/*2*/,/*3*/b: string/*4*/) { +} + +function foo1() { + + // should emit this +} + +function foo2() { + /// This is some detached comment + + // should emit this leading comment of } too +} + //// [commentsFunction.js] +/** This comment should appear for foo*/ function foo() { -} +} /* trailing comment of function */ foo(); -function fooWithParameters(a, b) { +/** This is comment for function signature*/ +function fooWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; -} +} // trailing comment of function fooWithParameters("a", 10); -var fooFunc = function FooFunctionValue(b) { +/** fooFunc + * comment + */ +var fooFunc = function FooFunctionValue(/** fooFunctionValue param */ b) { return b; }; -var lambdaFoo = function (a, b) { return a + b; }; -var lambddaNoVarComment = function (a, b) { return a * b; }; +/// lamdaFoo var comment +var lambdaFoo = function (/**param a*/ a, /**param b*/ b) { return a + b; }; +var lambddaNoVarComment = function (/**param a*/ a, /**param b*/ b) { return a * b; }; lambdaFoo(10, 20); lambddaNoVarComment(10, 20); +function blah(a /* multiline trailing comment + multiline */) { +} +function blah2(a /* single line multiple trailing comments */ /* second */) { +} +function blah3(a // trailing commen single line + ) { +} +lambdaFoo = function (a, b) { return a * b; }; // This is trailing comment +/*leading comment*/ (function () { return 0; }); // Needs to be wrapped in parens to be a valid expression (not declaration) +/*leading comment*/ (function () { return 0; }); //trailing comment +function blah4(/*1*/ a /*2*/, /*3*/ b /*4*/) { +} +function foo1() { + // should emit this +} +function foo2() { + /// This is some detached comment + // should emit this leading comment of } too +} //// [commentsFunction.d.ts] +/** This comment should appear for foo*/ declare function foo(): void; -declare function fooWithParameters(a: string, b: number): void; +/** This is comment for function signature*/ +declare function fooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; +/** fooFunc + * comment + */ declare var fooFunc: (b: string) => string; declare var lambdaFoo: (a: number, b: number) => number; declare var lambddaNoVarComment: (a: number, b: number) => number; +declare function blah(a: string): void; +declare function blah2(a: string): void; +declare function blah3(a: string): void; +declare function blah4(a: string, b: string): void; +declare function foo1(): void; +declare function foo2(): void; diff --git a/tests/baselines/reference/commentsFunction.types b/tests/baselines/reference/commentsFunction.types new file mode 100644 index 00000000000..6d37e1732e0 --- /dev/null +++ b/tests/baselines/reference/commentsFunction.types @@ -0,0 +1,125 @@ +=== tests/cases/compiler/commentsFunction.ts === + +/** This comment should appear for foo*/ +function foo() { +>foo : () => void + +} /* trailing comment of function */ +foo(); +>foo() : void +>foo : () => void + +/** This is comment for function signature*/ +function fooWithParameters(/** this is comment about a*/a: string, +>fooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + +} // trailing comment of function +fooWithParameters("a", 10); +>fooWithParameters("a", 10) : void +>fooWithParameters : (a: string, b: number) => void + +/** fooFunc + * comment + */ +var fooFunc = function FooFunctionValue(/** fooFunctionValue param */ b: string) { +>fooFunc : (b: string) => string +>function FooFunctionValue(/** fooFunctionValue param */ b: string) { return b;} : (b: string) => string +>FooFunctionValue : (b: string) => string +>b : string + + return b; +>b : string +} + +/// lamdaFoo var comment +var lambdaFoo = /** this is lambda comment*/ (/**param a*/a: number, /**param b*/b: number) => a + b; +>lambdaFoo : (a: number, b: number) => number +>(/**param a*/a: number, /**param b*/b: number) => a + b : (a: number, b: number) => number +>a : number +>b : number +>a + b : number +>a : number +>b : number + +var lambddaNoVarComment = /** this is lambda multiplication*/ (/**param a*/a: number, /**param b*/b: number) => a * b; +>lambddaNoVarComment : (a: number, b: number) => number +>(/**param a*/a: number, /**param b*/b: number) => a * b : (a: number, b: number) => number +>a : number +>b : number +>a * b : number +>a : number +>b : number + +lambdaFoo(10, 20); +>lambdaFoo(10, 20) : number +>lambdaFoo : (a: number, b: number) => number + +lambddaNoVarComment(10, 20); +>lambddaNoVarComment(10, 20) : number +>lambddaNoVarComment : (a: number, b: number) => number + +function blah(a: string /* multiline trailing comment +>blah : (a: string) => void +>a : string + +multiline */) { +} + +function blah2(a: string /* single line multiple trailing comments */ /* second */) { +>blah2 : (a: string) => void +>a : string +} + +function blah3(a: string // trailing commen single line +>blah3 : (a: string) => void +>a : string + + ) { +} + +lambdaFoo = (a, b) => a * b; // This is trailing comment +>lambdaFoo = (a, b) => a * b : (a: number, b: number) => number +>lambdaFoo : (a: number, b: number) => number +>(a, b) => a * b : (a: number, b: number) => number +>a : number +>b : number +>a * b : number +>a : number +>b : number + +/*leading comment*/() => 0; // Needs to be wrapped in parens to be a valid expression (not declaration) +>() => 0 : () => number + +/*leading comment*/(() => 0); //trailing comment +>(() => 0) : () => number +>() => 0 : () => number + +function blah4(/*1*/a: string/*2*/,/*3*/b: string/*4*/) { +>blah4 : (a: string, b: string) => void +>a : string +>b : string +} + +function foo1() { +>foo1 : () => void + + // should emit this +} + +function foo2() { +>foo2 : () => void + + /// This is some detached comment + + // should emit this leading comment of } too +} + diff --git a/tests/baselines/reference/commentsInheritance.js b/tests/baselines/reference/commentsInheritance.js index edcd80ab347..06cd5840d68 100644 --- a/tests/baselines/reference/commentsInheritance.js +++ b/tests/baselines/reference/commentsInheritance.js @@ -161,26 +161,33 @@ var __extends = this.__extends || function (d, b) { var c1 = (function () { function c1() { } + // i1_f1 c1.prototype.i1_f1 = function () { }; c1.prototype.i1_nc_f1 = function () { }; + /** c1_f1*/ c1.prototype.f1 = function () { }; + /** c1_nc_f1*/ c1.prototype.nc_f1 = function () { }; return c1; })(); var i1_i; var c1_i = new c1(); +// assign to interface i1_i = c1_i; var c2 = (function () { + /** c2 constructor*/ function c2(a) { this.c2_p1 = a; } + /** c2 c2_f1*/ c2.prototype.c2_f1 = function () { }; Object.defineProperty(c2.prototype, "c2_prop", { + /** c2 c2_prop*/ get: function () { return 10; }, @@ -196,9 +203,11 @@ var c2 = (function () { enumerable: true, configurable: true }); + /** c2 f1*/ c2.prototype.f1 = function () { }; Object.defineProperty(c2.prototype, "prop", { + /** c2 prop*/ get: function () { return 10; }, @@ -221,9 +230,11 @@ var c3 = (function (_super) { function c3() { _super.call(this, 10); } + /** c3 f1*/ c3.prototype.f1 = function () { }; Object.defineProperty(c3.prototype, "prop", { + /** c3 prop*/ get: function () { return 10; }, @@ -243,6 +254,7 @@ var c3 = (function (_super) { })(c2); var c2_i = new c2(10); var c3_i = new c3(); +// assign c2_i = c3_i; var c4 = (function (_super) { __extends(c4, _super); @@ -254,13 +266,18 @@ var c4 = (function (_super) { var c4_i = new c4(10); var i2_i; var i3_i; +// assign to interface i2_i = i3_i; //// [commentsInheritance.d.ts] +/** i1 is interface with properties*/ interface i1 { + /** i1_p1*/ i1_p1: number; + /** i1_f1*/ i1_f1(): void; + /** i1_l1*/ i1_l1: () => void; i1_nc_p1: number; i1_nc_f1(): void; @@ -279,34 +296,50 @@ declare class c1 implements i1 { i1_nc_p1: number; i1_nc_f1(): void; i1_nc_l1: () => void; + /** c1_p1*/ p1: number; + /** c1_f1*/ f1(): void; + /** c1_l1*/ l1: () => void; + /** c1_nc_p1*/ nc_p1: number; + /** c1_nc_f1*/ nc_f1(): void; + /** c1_nc_l1*/ nc_l1: () => void; } declare var i1_i: i1; declare var c1_i: c1; declare class c2 { + /** c2 c2_p1*/ c2_p1: number; + /** c2 c2_f1*/ c2_f1(): void; + /** c2 c2_prop*/ c2_prop: number; c2_nc_p1: number; c2_nc_f1(): void; c2_nc_prop: number; + /** c2 p1*/ p1: number; + /** c2 f1*/ f1(): void; + /** c2 prop*/ prop: number; nc_p1: number; nc_f1(): void; nc_prop: number; + /** c2 constructor*/ constructor(a: number); } declare class c3 extends c2 { constructor(); + /** c3 p1*/ p1: number; + /** c3 f1*/ f1(): void; + /** c3 prop*/ prop: number; nc_p1: number; nc_f1(): void; @@ -318,22 +351,33 @@ declare class c4 extends c2 { } declare var c4_i: c4; interface i2 { + /** i2_p1*/ i2_p1: number; + /** i2_f1*/ i2_f1(): void; + /** i2_l1*/ i2_l1: () => void; i2_nc_p1: number; i2_nc_f1(): void; i2_nc_l1: () => void; + /** i2 p1*/ p1: number; + /** i2 f1*/ f1(): void; + /** i2 l1*/ l1: () => void; nc_p1: number; nc_f1(): void; nc_l1: () => void; } interface i3 extends i2 { + /** i3 p1 */ p1: number; + /** + * i3 f1 + */ f1(): void; + /** i3 l1*/ l1: () => void; nc_p1: number; nc_f1(): void; diff --git a/tests/baselines/reference/commentsInheritance.types b/tests/baselines/reference/commentsInheritance.types new file mode 100644 index 00000000000..b4db5767107 --- /dev/null +++ b/tests/baselines/reference/commentsInheritance.types @@ -0,0 +1,320 @@ +=== tests/cases/compiler/commentsInheritance.ts === + +/** i1 is interface with properties*/ +interface i1 { +>i1 : i1 + + /** i1_p1*/ + i1_p1: number; +>i1_p1 : number + + /** i1_f1*/ + i1_f1(): void; +>i1_f1 : () => void + + /** i1_l1*/ + i1_l1: () => void; +>i1_l1 : () => void + + // il_nc_p1 + i1_nc_p1: number; +>i1_nc_p1 : number + + i1_nc_f1(): void; +>i1_nc_f1 : () => void + + i1_nc_l1: () => void; +>i1_nc_l1 : () => void + + p1: number; +>p1 : number + + f1(): void; +>f1 : () => void + + l1: () => void; +>l1 : () => void + + nc_p1: number; +>nc_p1 : number + + nc_f1(): void; +>nc_f1 : () => void + + nc_l1: () => void; +>nc_l1 : () => void +} +class c1 implements i1 { +>c1 : c1 +>i1 : i1 + + public i1_p1: number; +>i1_p1 : number + + // i1_f1 + public i1_f1() { +>i1_f1 : () => void + } + public i1_l1: () => void; +>i1_l1 : () => void + + public i1_nc_p1: number; +>i1_nc_p1 : number + + public i1_nc_f1() { +>i1_nc_f1 : () => void + } + public i1_nc_l1: () => void; +>i1_nc_l1 : () => void + + /** c1_p1*/ + public p1: number; +>p1 : number + + /** c1_f1*/ + public f1() { +>f1 : () => void + } + /** c1_l1*/ + public l1: () => void; +>l1 : () => void + + /** c1_nc_p1*/ + public nc_p1: number; +>nc_p1 : number + + /** c1_nc_f1*/ + public nc_f1() { +>nc_f1 : () => void + } + /** c1_nc_l1*/ + public nc_l1: () => void; +>nc_l1 : () => void +} +var i1_i: i1; +>i1_i : i1 +>i1 : i1 + +var c1_i = new c1(); +>c1_i : c1 +>new c1() : c1 +>c1 : typeof c1 + +// assign to interface +i1_i = c1_i; +>i1_i = c1_i : c1 +>i1_i : i1 +>c1_i : c1 + +class c2 { +>c2 : c2 + + /** c2 c2_p1*/ + public c2_p1: number; +>c2_p1 : number + + /** c2 c2_f1*/ + public c2_f1() { +>c2_f1 : () => void + } + /** c2 c2_prop*/ + public get c2_prop() { +>c2_prop : number + + return 10; + } + public c2_nc_p1: number; +>c2_nc_p1 : number + + public c2_nc_f1() { +>c2_nc_f1 : () => void + } + public get c2_nc_prop() { +>c2_nc_prop : number + + return 10; + } + /** c2 p1*/ + public p1: number; +>p1 : number + + /** c2 f1*/ + public f1() { +>f1 : () => void + } + /** c2 prop*/ + public get prop() { +>prop : number + + return 10; + } + public nc_p1: number; +>nc_p1 : number + + public nc_f1() { +>nc_f1 : () => void + } + public get nc_prop() { +>nc_prop : number + + return 10; + } + /** c2 constructor*/ + constructor(a: number) { +>a : number + + this.c2_p1 = a; +>this.c2_p1 = a : number +>this.c2_p1 : number +>this : c2 +>c2_p1 : number +>a : number + } +} +class c3 extends c2 { +>c3 : c3 +>c2 : c2 + + constructor() { + super(10); +>super(10) : void +>super : typeof c2 + } + /** c3 p1*/ + public p1: number; +>p1 : number + + /** c3 f1*/ + public f1() { +>f1 : () => void + } + /** c3 prop*/ + public get prop() { +>prop : number + + return 10; + } + public nc_p1: number; +>nc_p1 : number + + public nc_f1() { +>nc_f1 : () => void + } + public get nc_prop() { +>nc_prop : number + + return 10; + } +} +var c2_i = new c2(10); +>c2_i : c2 +>new c2(10) : c2 +>c2 : typeof c2 + +var c3_i = new c3(); +>c3_i : c3 +>new c3() : c3 +>c3 : typeof c3 + +// assign +c2_i = c3_i; +>c2_i = c3_i : c3 +>c2_i : c2 +>c3_i : c3 + +class c4 extends c2 { +>c4 : c4 +>c2 : c2 +} +var c4_i = new c4(10); +>c4_i : c4 +>new c4(10) : c4 +>c4 : typeof c4 + +interface i2 { +>i2 : i2 + + /** i2_p1*/ + i2_p1: number; +>i2_p1 : number + + /** i2_f1*/ + i2_f1(): void; +>i2_f1 : () => void + + /** i2_l1*/ + i2_l1: () => void; +>i2_l1 : () => void + + // i2_nc_p1 + i2_nc_p1: number; +>i2_nc_p1 : number + + i2_nc_f1(): void; +>i2_nc_f1 : () => void + + i2_nc_l1: () => void; +>i2_nc_l1 : () => void + + /** i2 p1*/ + p1: number; +>p1 : number + + /** i2 f1*/ + f1(): void; +>f1 : () => void + + /** i2 l1*/ + l1: () => void; +>l1 : () => void + + nc_p1: number; +>nc_p1 : number + + nc_f1(): void; +>nc_f1 : () => void + + nc_l1: () => void; +>nc_l1 : () => void +} +interface i3 extends i2 { +>i3 : i3 +>i2 : i2 + + /** i3 p1 */ + p1: number; +>p1 : number + + /** + * i3 f1 + */ + f1(): void; +>f1 : () => void + + /** i3 l1*/ + l1: () => void; +>l1 : () => void + + nc_p1: number; +>nc_p1 : number + + nc_f1(): void; +>nc_f1 : () => void + + nc_l1: () => void; +>nc_l1 : () => void +} +var i2_i: i2; +>i2_i : i2 +>i2 : i2 + +var i3_i: i3; +>i3_i : i3 +>i3 : i3 + +// assign to interface +i2_i = i3_i; +>i2_i = i3_i : i3 +>i2_i : i2 +>i3_i : i3 + diff --git a/tests/baselines/reference/commentsInterface.js b/tests/baselines/reference/commentsInterface.js index 38853dc460c..1951137b048 100644 --- a/tests/baselines/reference/commentsInterface.js +++ b/tests/baselines/reference/commentsInterface.js @@ -89,8 +89,9 @@ var i2_i_nc_fnfoo = i2_i.nc_fnfoo; var i2_i_nc_fnfoo_r = i2_i.nc_fnfoo(10); var i3_i; i3_i = { - f: function (a) { return "Hello" + a; }, + f: function (/**i3_i a*/ a) { return "Hello" + a; }, l: this.f, + /** own x*/ x: this.f(10), nc_x: this.l(this.x), nc_f: this.f, @@ -103,22 +104,30 @@ i3_i.nc_l(10); //// [commentsInterface.d.ts] +/** this is interface 1*/ interface i1 { } declare var i1_i: i1; interface nc_i1 { } declare var nc_i1_i: nc_i1; +/** this is interface 2 with memebers*/ interface i2 { + /** this is x*/ x: number; + /** this is foo*/ foo: (b: number) => string; - [i: string]: any; - new (i: i1): any; + /** this is indexer*/ + [/**string param*/ i: string]: any; + /**new method*/ + new (/** param*/ i: i1): any; nc_x: number; nc_foo: (b: number) => string; [i: number]: number; - (a: number, b: number): number; - fnfoo(b: number): string; + /** this is call signature*/ + (/**paramhelp a*/ a: number, /**paramhelp b*/ b: number): number; + /** this is fnfoo*/ + fnfoo(/**param help*/ b: number): string; nc_fnfoo(b: number): string; nc_y: number; } @@ -138,8 +147,11 @@ declare var i2_i_fnfoo_r: string; declare var i2_i_nc_fnfoo: (b: number) => string; declare var i2_i_nc_fnfoo_r: string; interface i3 { + /** Comment i3 x*/ x: number; - f(a: number): string; + /** Function i3 f*/ + f(/**number parameter*/ a: number): string; + /** i3 l*/ l: (b: number) => string; nc_x: number; nc_f(a: number): string; diff --git a/tests/baselines/reference/commentsInterface.types b/tests/baselines/reference/commentsInterface.types new file mode 100644 index 00000000000..68d552882e2 --- /dev/null +++ b/tests/baselines/reference/commentsInterface.types @@ -0,0 +1,260 @@ +=== tests/cases/compiler/commentsInterface.ts === +/** this is interface 1*/ +interface i1 { +>i1 : i1 +} +var i1_i: i1; +>i1_i : i1 +>i1 : i1 + +interface nc_i1 { +>nc_i1 : nc_i1 +} +var nc_i1_i: nc_i1; +>nc_i1_i : nc_i1 +>nc_i1 : nc_i1 + +/** this is interface 2 with memebers*/ +interface i2 { +>i2 : i2 + + /** this is x*/ + x: number; +>x : number + + /** this is foo*/ + foo: (/**param help*/b: number) => string; +>foo : (b: number) => string +>b : number + + /** this is indexer*/ + [/**string param*/i: string]: any; +>i : string + + /**new method*/ + new (/** param*/i: i1); +>i : i1 +>i1 : i1 + + nc_x: number; +>nc_x : number + + nc_foo: (b: number) => string; +>nc_foo : (b: number) => string +>b : number + + [i: number]: number; +>i : number + + /** this is call signature*/ + (/**paramhelp a*/a: number,/**paramhelp b*/ b: number) : number; +>a : number +>b : number + + /** this is fnfoo*/ + fnfoo(/**param help*/b: number): string; +>fnfoo : (b: number) => string +>b : number + + nc_fnfoo(b: number): string; +>nc_fnfoo : (b: number) => string +>b : number + + // nc_y + nc_y: number; +>nc_y : number +} +var i2_i: i2; +>i2_i : i2 +>i2 : i2 + +var i2_i_x = i2_i.x; +>i2_i_x : number +>i2_i.x : number +>i2_i : i2 +>x : number + +var i2_i_foo = i2_i.foo; +>i2_i_foo : (b: number) => string +>i2_i.foo : (b: number) => string +>i2_i : i2 +>foo : (b: number) => string + +var i2_i_foo_r = i2_i.foo(30); +>i2_i_foo_r : string +>i2_i.foo(30) : string +>i2_i.foo : (b: number) => string +>i2_i : i2 +>foo : (b: number) => string + +var i2_i_i2_si = i2_i["hello"]; +>i2_i_i2_si : any +>i2_i["hello"] : any +>i2_i : i2 + +var i2_i_i2_ii = i2_i[30]; +>i2_i_i2_ii : number +>i2_i[30] : number +>i2_i : i2 + +var i2_i_n = new i2_i(i1_i); +>i2_i_n : any +>new i2_i(i1_i) : any +>i2_i : i2 +>i1_i : i1 + +var i2_i_nc_x = i2_i.nc_x; +>i2_i_nc_x : number +>i2_i.nc_x : number +>i2_i : i2 +>nc_x : number + +var i2_i_nc_foo = i2_i.nc_foo; +>i2_i_nc_foo : (b: number) => string +>i2_i.nc_foo : (b: number) => string +>i2_i : i2 +>nc_foo : (b: number) => string + +var i2_i_nc_foo_r = i2_i.nc_foo(30); +>i2_i_nc_foo_r : string +>i2_i.nc_foo(30) : string +>i2_i.nc_foo : (b: number) => string +>i2_i : i2 +>nc_foo : (b: number) => string + +var i2_i_r = i2_i(10, 20); +>i2_i_r : number +>i2_i(10, 20) : number +>i2_i : i2 + +var i2_i_fnfoo = i2_i.fnfoo; +>i2_i_fnfoo : (b: number) => string +>i2_i.fnfoo : (b: number) => string +>i2_i : i2 +>fnfoo : (b: number) => string + +var i2_i_fnfoo_r = i2_i.fnfoo(10); +>i2_i_fnfoo_r : string +>i2_i.fnfoo(10) : string +>i2_i.fnfoo : (b: number) => string +>i2_i : i2 +>fnfoo : (b: number) => string + +var i2_i_nc_fnfoo = i2_i.nc_fnfoo; +>i2_i_nc_fnfoo : (b: number) => string +>i2_i.nc_fnfoo : (b: number) => string +>i2_i : i2 +>nc_fnfoo : (b: number) => string + +var i2_i_nc_fnfoo_r = i2_i.nc_fnfoo(10); +>i2_i_nc_fnfoo_r : string +>i2_i.nc_fnfoo(10) : string +>i2_i.nc_fnfoo : (b: number) => string +>i2_i : i2 +>nc_fnfoo : (b: number) => string + +interface i3 { +>i3 : i3 + + /** Comment i3 x*/ + x: number; +>x : number + + /** Function i3 f*/ + f(/**number parameter*/a: number): string; +>f : (a: number) => string +>a : number + + /** i3 l*/ + l: (/**comment i3 l b*/b: number) => string; +>l : (b: number) => string +>b : number + + nc_x: number; +>nc_x : number + + nc_f(a: number): string; +>nc_f : (a: number) => string +>a : number + + nc_l: (b: number) => string; +>nc_l : (b: number) => string +>b : number +} +var i3_i: i3; +>i3_i : i3 +>i3 : i3 + +i3_i = { +>i3_i = { f: /**own f*/ (/**i3_i a*/a: number) => "Hello" + a, l: this.f, /** own x*/ x: this.f(10), nc_x: this.l(this.x), nc_f: this.f, nc_l: this.l} : { f: (a: number) => string; l: any; x: any; nc_x: any; nc_f: any; nc_l: any; } +>i3_i : i3 +>{ f: /**own f*/ (/**i3_i a*/a: number) => "Hello" + a, l: this.f, /** own x*/ x: this.f(10), nc_x: this.l(this.x), nc_f: this.f, nc_l: this.l} : { f: (a: number) => string; l: any; x: any; nc_x: any; nc_f: any; nc_l: any; } + + f: /**own f*/ (/**i3_i a*/a: number) => "Hello" + a, +>f : (a: number) => string +>(/**i3_i a*/a: number) => "Hello" + a : (a: number) => string +>a : number +>"Hello" + a : string +>a : number + + l: this.f, +>l : any +>this.f : any +>this : any +>f : any + + /** own x*/ + x: this.f(10), +>x : any +>this.f(10) : any +>this.f : any +>this : any +>f : any + + nc_x: this.l(this.x), +>nc_x : any +>this.l(this.x) : any +>this.l : any +>this : any +>l : any +>this.x : any +>this : any +>x : any + + nc_f: this.f, +>nc_f : any +>this.f : any +>this : any +>f : any + + nc_l: this.l +>nc_l : any +>this.l : any +>this : any +>l : any + +}; +i3_i.f(10); +>i3_i.f(10) : string +>i3_i.f : (a: number) => string +>i3_i : i3 +>f : (a: number) => string + +i3_i.l(10); +>i3_i.l(10) : string +>i3_i.l : (b: number) => string +>i3_i : i3 +>l : (b: number) => string + +i3_i.nc_f(10); +>i3_i.nc_f(10) : string +>i3_i.nc_f : (a: number) => string +>i3_i : i3 +>nc_f : (a: number) => string + +i3_i.nc_l(10); +>i3_i.nc_l(10) : string +>i3_i.nc_l : (b: number) => string +>i3_i : i3 +>nc_l : (b: number) => string + diff --git a/tests/baselines/reference/commentsModules.js b/tests/baselines/reference/commentsModules.js index d59e2d1f235..f964c45f843 100644 --- a/tests/baselines/reference/commentsModules.js +++ b/tests/baselines/reference/commentsModules.js @@ -35,7 +35,7 @@ module m1 { */ function foo4Export() { } -} +} // trailing comment module m1.fooExport(); var myvar = new m1.m2.c(); /** module comment of m2.m3*/ @@ -43,14 +43,14 @@ module m2.m3 { /** Exported class comment*/ export class c { } -} +} /* trailing dotted module comment*/ new m2.m3.c(); /** module comment of m3.m4.m5*/ module m3.m4.m5 { /** Exported class comment*/ export class c { } -} +} // trailing dotted module 2 new m3.m4.m5.c(); /** module comment of m4.m5.m6*/ module m4.m5.m6 { @@ -58,7 +58,7 @@ module m4.m5.m6 { /** Exported class comment*/ export class c { } - } + } /* trailing inner module */ /* multiple comments*/ } new m4.m5.m6.m7.c(); /** module comment of m5.m6.m7*/ @@ -98,13 +98,18 @@ module m7.m8 { new m7.m8.m9.c(); //// [commentsModules.js] +/** Module comment*/ var m1; (function (m1) { + /** b's comment*/ m1.b; + /** foo's comment*/ function foo() { return m1.b; } + /** m2 comments*/ (function (m2) { + /** class comment;*/ var c = (function () { function c() { } @@ -112,27 +117,38 @@ var m1; })(); m2.c = c; ; + /** i*/ m2.i = new c(); })(m1.m2 || (m1.m2 = {})); var m2 = m1.m2; + /** exported function*/ function fooExport() { return foo(); } m1.fooExport = fooExport; - function foo2Export(a) { + // shouldn't appear + function foo2Export(/**hm*/ a) { } m1.foo2Export = foo2Export; + /** foo3Export + * comment + */ function foo3Export() { } m1.foo3Export = foo3Export; + /** foo4Export + * comment + */ function foo4Export() { } -})(m1 || (m1 = {})); +})(m1 || (m1 = {})); // trailing comment module m1.fooExport(); var myvar = new m1.m2.c(); +/** module comment of m2.m3*/ var m2; (function (m2) { (function (m3) { + /** Exported class comment*/ var c = (function () { function c() { } @@ -141,12 +157,14 @@ var m2; m3.c = c; })(m2.m3 || (m2.m3 = {})); var m3 = m2.m3; -})(m2 || (m2 = {})); +})(m2 || (m2 = {})); /* trailing dotted module comment*/ new m2.m3.c(); +/** module comment of m3.m4.m5*/ var m3; (function (m3) { (function (m4) { (function (m5) { + /** Exported class comment*/ var c = (function () { function c() { } @@ -157,13 +175,15 @@ var m3; var m5 = m4.m5; })(m3.m4 || (m3.m4 = {})); var m4 = m3.m4; -})(m3 || (m3 = {})); +})(m3 || (m3 = {})); // trailing dotted module 2 new m3.m4.m5.c(); +/** module comment of m4.m5.m6*/ var m4; (function (m4) { (function (m5) { (function (m6) { (function (m7) { + /** Exported class comment*/ var c = (function () { function c() { } @@ -171,18 +191,21 @@ var m4; })(); m7.c = c; })(m6.m7 || (m6.m7 = {})); - var m7 = m6.m7; + var m7 = m6.m7; /* trailing inner module */ /* multiple comments*/ })(m5.m6 || (m5.m6 = {})); var m6 = m5.m6; })(m4.m5 || (m4.m5 = {})); var m5 = m4.m5; })(m4 || (m4 = {})); new m4.m5.m6.m7.c(); +/** module comment of m5.m6.m7*/ var m5; (function (m5) { (function (m6) { (function (m7) { + /** module m8 comment*/ (function (m8) { + /** Exported class comment*/ var c = (function () { function c() { } @@ -201,6 +224,7 @@ var m6; (function (m6) { (function (m7) { (function (m8) { + /** Exported class comment*/ var c = (function () { function c() { } @@ -216,18 +240,22 @@ new m6.m7.m8.c(); var m7; (function (m7) { (function (m8) { + /** module m9 comment*/ (function (m9) { + /** Exported class comment*/ var c = (function () { function c() { } return c; })(); m9.c = c; + /** class d */ var d = (function () { function d() { } return d; })(); + // class e var e = (function () { function e() { } @@ -243,46 +271,67 @@ new m7.m8.m9.c(); //// [commentsModules.d.ts] +/** Module comment*/ declare module m1 { + /** b's comment*/ var b: number; + /** m2 comments*/ module m2 { + /** class comment;*/ class c { } + /** i*/ var i: c; } + /** exported function*/ function fooExport(): number; - function foo2Export(a: string): void; + function foo2Export(/**hm*/ a: string): void; + /** foo3Export + * comment + */ function foo3Export(): void; } declare var myvar: m1.m2.c; +/** module comment of m2.m3*/ declare module m2.m3 { + /** Exported class comment*/ class c { } } +/** module comment of m3.m4.m5*/ declare module m3.m4.m5 { + /** Exported class comment*/ class c { } } +/** module comment of m4.m5.m6*/ declare module m4.m5.m6 { module m7 { + /** Exported class comment*/ class c { } } } +/** module comment of m5.m6.m7*/ declare module m5.m6.m7 { + /** module m8 comment*/ module m8 { + /** Exported class comment*/ class c { } } } declare module m6.m7 { module m8 { + /** Exported class comment*/ class c { } } } declare module m7.m8 { + /** module m9 comment*/ module m9 { + /** Exported class comment*/ class c { } class e { diff --git a/tests/baselines/reference/commentsModules.types b/tests/baselines/reference/commentsModules.types new file mode 100644 index 00000000000..1027f1ce308 --- /dev/null +++ b/tests/baselines/reference/commentsModules.types @@ -0,0 +1,226 @@ +=== tests/cases/compiler/commentsModules.ts === +/** Module comment*/ +module m1 { +>m1 : typeof m1 + + /** b's comment*/ + export var b: number; +>b : number + + /** foo's comment*/ + function foo() { +>foo : () => number + + return b; +>b : number + } + /** m2 comments*/ + export module m2 { +>m2 : typeof m2 + + /** class comment;*/ + export class c { +>c : c + + }; + /** i*/ + export var i = new c(); +>i : c +>new c() : c +>c : typeof c + } + /** exported function*/ + export function fooExport() { +>fooExport : () => number + + return foo(); +>foo() : number +>foo : () => number + } + + // shouldn't appear + export function foo2Export(/**hm*/ a: string) { +>foo2Export : (a: string) => void +>a : string + } + + /** foo3Export + * comment + */ + export function foo3Export() { +>foo3Export : () => void + } + + /** foo4Export + * comment + */ + function foo4Export() { +>foo4Export : () => void + } +} // trailing comment module +m1.fooExport(); +>m1.fooExport() : number +>m1.fooExport : () => number +>m1 : typeof m1 +>fooExport : () => number + +var myvar = new m1.m2.c(); +>myvar : m1.m2.c +>new m1.m2.c() : m1.m2.c +>m1.m2.c : typeof m1.m2.c +>m1.m2 : typeof m1.m2 +>m1 : typeof m1 +>m2 : typeof m1.m2 +>c : typeof m1.m2.c + +/** module comment of m2.m3*/ +module m2.m3 { +>m2 : typeof m2 +>m3 : typeof m3 + + /** Exported class comment*/ + export class c { +>c : c + } +} /* trailing dotted module comment*/ +new m2.m3.c(); +>new m2.m3.c() : m2.m3.c +>m2.m3.c : typeof m2.m3.c +>m2.m3 : typeof m2.m3 +>m2 : typeof m2 +>m3 : typeof m2.m3 +>c : typeof m2.m3.c + +/** module comment of m3.m4.m5*/ +module m3.m4.m5 { +>m3 : typeof m3 +>m4 : typeof m4 +>m5 : typeof m5 + + /** Exported class comment*/ + export class c { +>c : c + } +} // trailing dotted module 2 +new m3.m4.m5.c(); +>new m3.m4.m5.c() : m3.m4.m5.c +>m3.m4.m5.c : typeof m3.m4.m5.c +>m3.m4.m5 : typeof m3.m4.m5 +>m3.m4 : typeof m3.m4 +>m3 : typeof m3 +>m4 : typeof m3.m4 +>m5 : typeof m3.m4.m5 +>c : typeof m3.m4.m5.c + +/** module comment of m4.m5.m6*/ +module m4.m5.m6 { +>m4 : typeof m4 +>m5 : typeof m5 +>m6 : typeof m6 + + export module m7 { +>m7 : typeof m7 + + /** Exported class comment*/ + export class c { +>c : c + } + } /* trailing inner module */ /* multiple comments*/ +} +new m4.m5.m6.m7.c(); +>new m4.m5.m6.m7.c() : m4.m5.m6.m7.c +>m4.m5.m6.m7.c : typeof m4.m5.m6.m7.c +>m4.m5.m6.m7 : typeof m4.m5.m6.m7 +>m4.m5.m6 : typeof m4.m5.m6 +>m4.m5 : typeof m4.m5 +>m4 : typeof m4 +>m5 : typeof m4.m5 +>m6 : typeof m4.m5.m6 +>m7 : typeof m4.m5.m6.m7 +>c : typeof m4.m5.m6.m7.c + +/** module comment of m5.m6.m7*/ +module m5.m6.m7 { +>m5 : typeof m5 +>m6 : typeof m6 +>m7 : typeof m7 + + /** module m8 comment*/ + export module m8 { +>m8 : typeof m8 + + /** Exported class comment*/ + export class c { +>c : c + } + } +} +new m5.m6.m7.m8.c(); +>new m5.m6.m7.m8.c() : m5.m6.m7.m8.c +>m5.m6.m7.m8.c : typeof m5.m6.m7.m8.c +>m5.m6.m7.m8 : typeof m5.m6.m7.m8 +>m5.m6.m7 : typeof m5.m6.m7 +>m5.m6 : typeof m5.m6 +>m5 : typeof m5 +>m6 : typeof m5.m6 +>m7 : typeof m5.m6.m7 +>m8 : typeof m5.m6.m7.m8 +>c : typeof m5.m6.m7.m8.c + +module m6.m7 { +>m6 : typeof m6 +>m7 : typeof m7 + + export module m8 { +>m8 : typeof m8 + + /** Exported class comment*/ + export class c { +>c : c + } + } +} +new m6.m7.m8.c(); +>new m6.m7.m8.c() : m6.m7.m8.c +>m6.m7.m8.c : typeof m6.m7.m8.c +>m6.m7.m8 : typeof m6.m7.m8 +>m6.m7 : typeof m6.m7 +>m6 : typeof m6 +>m7 : typeof m6.m7 +>m8 : typeof m6.m7.m8 +>c : typeof m6.m7.m8.c + +module m7.m8 { +>m7 : typeof m7 +>m8 : typeof m8 + + /** module m9 comment*/ + export module m9 { +>m9 : typeof m9 + + /** Exported class comment*/ + export class c { +>c : c + } + + /** class d */ + class d { +>d : d + } + + // class e + export class e { +>e : e + } + } +} +new m7.m8.m9.c(); +>new m7.m8.m9.c() : m7.m8.m9.c +>m7.m8.m9.c : typeof m7.m8.m9.c +>m7.m8.m9 : typeof m7.m8.m9 +>m7.m8 : typeof m7.m8 +>m7 : typeof m7 +>m8 : typeof m7.m8 +>m9 : typeof m7.m8.m9 +>c : typeof m7.m8.m9.c + diff --git a/tests/baselines/reference/commentsMultiModuleMultiFile.js b/tests/baselines/reference/commentsMultiModuleMultiFile.js index 008c7d3d53f..2c0cf2b837e 100644 --- a/tests/baselines/reference/commentsMultiModuleMultiFile.js +++ b/tests/baselines/reference/commentsMultiModuleMultiFile.js @@ -38,7 +38,9 @@ new multiM.d(); //// [commentsMultiModuleMultiFile_0.js] define(["require", "exports"], function (require, exports) { + /** this is multi declare module*/ (function (multiM) { + /// class b comment var b = (function () { function b() { } @@ -47,13 +49,16 @@ define(["require", "exports"], function (require, exports) { multiM.b = b; })(exports.multiM || (exports.multiM = {})); var multiM = exports.multiM; + /** thi is multi module 2*/ (function (multiM) { + /** class c comment*/ var c = (function () { function c() { } return c; })(); multiM.c = c; + // class e comment var e = (function () { function e() { } @@ -67,13 +72,16 @@ define(["require", "exports"], function (require, exports) { }); //// [commentsMultiModuleMultiFile_1.js] define(["require", "exports"], function (require, exports) { + /** this is multi module 3 comment*/ (function (multiM) { + /** class d comment*/ var d = (function () { function d() { } return d; })(); multiM.d = d; + /// class f comment var f = (function () { function f() { } @@ -87,18 +95,23 @@ define(["require", "exports"], function (require, exports) { //// [commentsMultiModuleMultiFile_0.d.ts] +/** this is multi declare module*/ export declare module multiM { class b { } } +/** thi is multi module 2*/ export declare module multiM { + /** class c comment*/ class c { } class e { } } //// [commentsMultiModuleMultiFile_1.d.ts] +/** this is multi module 3 comment*/ export declare module multiM { + /** class d comment*/ class d { } class f { diff --git a/tests/baselines/reference/commentsMultiModuleMultiFile.types b/tests/baselines/reference/commentsMultiModuleMultiFile.types new file mode 100644 index 00000000000..c0f3fb1b875 --- /dev/null +++ b/tests/baselines/reference/commentsMultiModuleMultiFile.types @@ -0,0 +1,62 @@ +=== tests/cases/compiler/commentsMultiModuleMultiFile_1.ts === +import m = require('commentsMultiModuleMultiFile_0'); +>m : typeof m + +/** this is multi module 3 comment*/ +export module multiM { +>multiM : typeof multiM + + /** class d comment*/ + export class d { +>d : d + } + + /// class f comment + export class f { +>f : f + } +} +new multiM.d(); +>new multiM.d() : multiM.d +>multiM.d : typeof multiM.d +>multiM : typeof multiM +>d : typeof multiM.d + +=== tests/cases/compiler/commentsMultiModuleMultiFile_0.ts === + +/** this is multi declare module*/ +export module multiM { +>multiM : typeof multiM + + /// class b comment + export class b { +>b : b + } +} +/** thi is multi module 2*/ +export module multiM { +>multiM : typeof multiM + + /** class c comment*/ + export class c { +>c : c + } + + // class e comment + export class e { +>e : e + } +} + +new multiM.b(); +>new multiM.b() : multiM.b +>multiM.b : typeof multiM.b +>multiM : typeof multiM +>b : typeof multiM.b + +new multiM.c(); +>new multiM.c() : multiM.c +>multiM.c : typeof multiM.c +>multiM : typeof multiM +>c : typeof multiM.c + diff --git a/tests/baselines/reference/commentsMultiModuleSingleFile.js b/tests/baselines/reference/commentsMultiModuleSingleFile.js index 3f5cf7cfd4e..133cc579889 100644 --- a/tests/baselines/reference/commentsMultiModuleSingleFile.js +++ b/tests/baselines/reference/commentsMultiModuleSingleFile.js @@ -25,14 +25,17 @@ new multiM.b(); new multiM.c(); //// [commentsMultiModuleSingleFile.js] +/** this is multi declare module*/ var multiM; (function (multiM) { + /** class b*/ var b = (function () { function b() { } return b; })(); multiM.b = b; + // class d var d = (function () { function d() { } @@ -40,14 +43,17 @@ var multiM; })(); multiM.d = d; })(multiM || (multiM = {})); +/// this is multi module 2 var multiM; (function (multiM) { + /** class c comment*/ var c = (function () { function c() { } return c; })(); multiM.c = c; + /// class e var e = (function () { function e() { } @@ -60,13 +66,16 @@ new multiM.c(); //// [commentsMultiModuleSingleFile.d.ts] +/** this is multi declare module*/ declare module multiM { + /** class b*/ class b { } class d { } } declare module multiM { + /** class c comment*/ class c { } class e { diff --git a/tests/baselines/reference/commentsMultiModuleSingleFile.types b/tests/baselines/reference/commentsMultiModuleSingleFile.types new file mode 100644 index 00000000000..29c18639c21 --- /dev/null +++ b/tests/baselines/reference/commentsMultiModuleSingleFile.types @@ -0,0 +1,43 @@ +=== tests/cases/compiler/commentsMultiModuleSingleFile.ts === + +/** this is multi declare module*/ +module multiM { +>multiM : typeof multiM + + /** class b*/ + export class b { +>b : b + } + + // class d + export class d { +>d : d + } +} + +/// this is multi module 2 +module multiM { +>multiM : typeof multiM + + /** class c comment*/ + export class c { +>c : c + } + + /// class e + export class e { +>e : e + } +} +new multiM.b(); +>new multiM.b() : multiM.b +>multiM.b : typeof multiM.b +>multiM : typeof multiM +>b : typeof multiM.b + +new multiM.c(); +>new multiM.c() : multiM.c +>multiM.c : typeof multiM.c +>multiM : typeof multiM +>c : typeof multiM.c + diff --git a/tests/baselines/reference/commentsOnObjectLiteral2.errors.txt b/tests/baselines/reference/commentsOnObjectLiteral2.errors.txt index 37c312a18e0..aa338e31db4 100644 --- a/tests/baselines/reference/commentsOnObjectLiteral2.errors.txt +++ b/tests/baselines/reference/commentsOnObjectLiteral2.errors.txt @@ -10,6 +10,6 @@ */ initialize: function(name) { this.name = name; - }, + } /* trailing comment 1*/, } ); \ No newline at end of file diff --git a/tests/baselines/reference/commentsOnObjectLiteral2.js b/tests/baselines/reference/commentsOnObjectLiteral2.js index cc64db96c01..9243e489741 100644 --- a/tests/baselines/reference/commentsOnObjectLiteral2.js +++ b/tests/baselines/reference/commentsOnObjectLiteral2.js @@ -8,13 +8,18 @@ var Person = makeClass( */ initialize: function(name) { this.name = name; - }, + } /* trailing comment 1*/, } ); //// [commentsOnObjectLiteral2.js] var Person = makeClass({ + /** + This is just another way to define a constructor. + @constructs + @param {string} name The name of the person. + */ initialize: function (name) { this.name = name; - } + } /* trailing comment 1*/ }); diff --git a/tests/baselines/reference/commentsOnObjectLiteral3.errors.txt b/tests/baselines/reference/commentsOnObjectLiteral3.errors.txt deleted file mode 100644 index d9a276615f4..00000000000 --- a/tests/baselines/reference/commentsOnObjectLiteral3.errors.txt +++ /dev/null @@ -1,24 +0,0 @@ -==== tests/cases/compiler/commentsOnObjectLiteral3.ts (2 errors) ==== - - var v = { - //property - prop: 1, - //property - func: function () { - }, - //PropertyName + CallSignature - func1() { }, - //getter - get a() { - ~ -!!! Accessors are only available when targeting ECMAScript 5 and higher. - return this.prop; - }, - //setter - set a(value) { - ~ -!!! Accessors are only available when targeting ECMAScript 5 and higher. - this.prop = value; - } - }; - \ No newline at end of file diff --git a/tests/baselines/reference/commentsOnObjectLiteral3.js b/tests/baselines/reference/commentsOnObjectLiteral3.js new file mode 100644 index 00000000000..5d57b76991e --- /dev/null +++ b/tests/baselines/reference/commentsOnObjectLiteral3.js @@ -0,0 +1,40 @@ +//// [commentsOnObjectLiteral3.ts] + +var v = { + //property + prop: 1 /* multiple trailing comments */ /*trailing comments*/, + //property + func: function () { + }, + //PropertyName + CallSignature + func1() { }, + //getter + get a() { + return this.prop; + } /*trailing 1*/, + //setter + set a(value) { + this.prop = value; + } // trailing 2 +}; + + +//// [commentsOnObjectLiteral3.js] +var v = { + //property + prop: 1 /* multiple trailing comments */ /*trailing comments*/, + //property + func: function () { + }, + //PropertyName + CallSignature + func1: function () { + }, + //getter + get a() { + return this.prop; + } /*trailing 1*/, + //setter + set a(value) { + this.prop = value; + } // trailing 2 +}; diff --git a/tests/baselines/reference/commentsOnObjectLiteral3.types b/tests/baselines/reference/commentsOnObjectLiteral3.types new file mode 100644 index 00000000000..e7770c7e273 --- /dev/null +++ b/tests/baselines/reference/commentsOnObjectLiteral3.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/commentsOnObjectLiteral3.ts === + +var v = { +>v : { prop: number; func: () => void; func1: () => void; a: any; } +>{ //property prop: 1 /* multiple trailing comments */ /*trailing comments*/, //property func: function () { }, //PropertyName + CallSignature func1() { }, //getter get a() { return this.prop; } /*trailing 1*/, //setter set a(value) { this.prop = value; } // trailing 2} : { prop: number; func: () => void; func1: () => void; a: any; } + + //property + prop: 1 /* multiple trailing comments */ /*trailing comments*/, +>prop : number + + //property + func: function () { +>func : () => void +>function () { } : () => void + + }, + //PropertyName + CallSignature + func1() { }, +>func1 : () => void +>func1() { } : () => void + + //getter + get a() { +>a : any + + return this.prop; +>this.prop : any +>this : any +>prop : any + + } /*trailing 1*/, + //setter + set a(value) { +>a : any +>value : any + + this.prop = value; +>this.prop = value : any +>this.prop : any +>this : any +>prop : any +>value : any + + } // trailing 2 +}; + diff --git a/tests/baselines/reference/commentsOnObjectLiteral4.errors.txt b/tests/baselines/reference/commentsOnObjectLiteral4.errors.txt deleted file mode 100644 index 91cf41d82a3..00000000000 --- a/tests/baselines/reference/commentsOnObjectLiteral4.errors.txt +++ /dev/null @@ -1,12 +0,0 @@ -==== tests/cases/compiler/commentsOnObjectLiteral4.ts (1 errors) ==== - - var v = { - /** - * @type {number} - */ - get bar(): number { - ~~~ -!!! Accessors are only available when targeting ECMAScript 5 and higher. - return this._bar; - } - } \ No newline at end of file diff --git a/tests/baselines/reference/commentsOnObjectLiteral4.js b/tests/baselines/reference/commentsOnObjectLiteral4.js new file mode 100644 index 00000000000..3b7efefdff4 --- /dev/null +++ b/tests/baselines/reference/commentsOnObjectLiteral4.js @@ -0,0 +1,20 @@ +//// [commentsOnObjectLiteral4.ts] + +var v = { + /** + * @type {number} + */ + get bar(): number { + return this._bar; + } +} + +//// [commentsOnObjectLiteral4.js] +var v = { + /** + * @type {number} + */ + get bar() { + return this._bar; + } +}; diff --git a/tests/baselines/reference/commentsOnObjectLiteral4.types b/tests/baselines/reference/commentsOnObjectLiteral4.types new file mode 100644 index 00000000000..364df6e5ea1 --- /dev/null +++ b/tests/baselines/reference/commentsOnObjectLiteral4.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/commentsOnObjectLiteral4.ts === + +var v = { +>v : { bar: number; } +>{ /** * @type {number} */ get bar(): number { return this._bar; }} : { bar: number; } + + /** + * @type {number} + */ + get bar(): number { +>bar : number + + return this._bar; +>this._bar : any +>this : any +>_bar : any + } +} diff --git a/tests/baselines/reference/commentsOnReturnStatement1.js b/tests/baselines/reference/commentsOnReturnStatement1.js index a29cab364c4..c2fcb14690d 100644 --- a/tests/baselines/reference/commentsOnReturnStatement1.js +++ b/tests/baselines/reference/commentsOnReturnStatement1.js @@ -14,7 +14,9 @@ var DebugClass = (function () { function DebugClass() { } DebugClass.debugFunc = function () { + // Start Debugger Test Code var i = 0; + // End Debugger Test Code return true; }; return DebugClass; diff --git a/tests/baselines/reference/commentsOnReturnStatement1.types b/tests/baselines/reference/commentsOnReturnStatement1.types new file mode 100644 index 00000000000..0d447b6536f --- /dev/null +++ b/tests/baselines/reference/commentsOnReturnStatement1.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/commentsOnReturnStatement1.ts === +class DebugClass { +>DebugClass : DebugClass + + public static debugFunc() { +>debugFunc : () => boolean + + // Start Debugger Test Code + var i = 0; +>i : number + + // End Debugger Test Code + return true; + } +} diff --git a/tests/baselines/reference/commentsOnStaticMembers.js b/tests/baselines/reference/commentsOnStaticMembers.js index c7cd12d8522..867c4128940 100644 --- a/tests/baselines/reference/commentsOnStaticMembers.js +++ b/tests/baselines/reference/commentsOnStaticMembers.js @@ -24,7 +24,13 @@ class test { var test = (function () { function test() { } + /** + * p1 comment appears in output + */ test.p1 = ""; + /** + * p3 comment appears in output + */ test.p3 = ""; return test; })(); diff --git a/tests/baselines/reference/commentsOnStaticMembers.types b/tests/baselines/reference/commentsOnStaticMembers.types new file mode 100644 index 00000000000..5c201c7709a --- /dev/null +++ b/tests/baselines/reference/commentsOnStaticMembers.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/commentsOnStaticMembers.ts === + +class test { +>test : test + + /** + * p1 comment appears in output + */ + public static p1: string = ""; +>p1 : string + + /** + * p2 comment does not appear in output + */ + public static p2: string; +>p2 : string + + /** + * p3 comment appears in output + */ + private static p3: string = ""; +>p3 : string + + /** + * p4 comment does not appear in output + */ + private static p4: string; +>p4 : string +} diff --git a/tests/baselines/reference/commentsOverloads.js b/tests/baselines/reference/commentsOverloads.js index 17d106c770b..d55993572c0 100644 --- a/tests/baselines/reference/commentsOverloads.js +++ b/tests/baselines/reference/commentsOverloads.js @@ -180,6 +180,7 @@ function f1(aOrb) { } f1("hello"); f1(10); +/** this is f2 var comment*/ function f2(aOrb) { return 10; } @@ -213,6 +214,7 @@ var c = (function () { c.prototype.prop4 = function (aorb) { return 10; }; + /** Prop5 implementaion*/ c.prototype.prop5 = function (aorb) { return 10; }; @@ -234,11 +236,13 @@ var c3 = (function () { return c3; })(); var c4 = (function () { + /** c4 3 */ function c4(aorb) { } return c4; })(); var c5 = (function () { + /** c5 implementation*/ function c5(aorb) { } return c5; @@ -257,42 +261,60 @@ var c5_i_2 = new c5("hello"); //// [commentsOverloads.d.ts] -declare function f1(a: number): number; +/** this is signature 1*/ +declare function f1(/**param a*/ a: number): number; declare function f1(b: string): number; declare function f2(a: number): number; +/** this is signature 2*/ declare function f2(b: string): number; declare function f3(a: number): number; declare function f3(b: string): number; -declare function f4(a: number): number; +/** this is signature 4 - with number parameter*/ +declare function f4(/**param a*/ a: number): number; +/** this is signature 4 - with string parameter*/ declare function f4(b: string): number; interface i1 { - (a: number): number; + /**this signature 1*/ + (/**param a*/ a: number): number; + /**this is signature 2*/ (b: string): number; + /** foo 1*/ foo(a: number): number; + /** foo 2*/ foo(b: string): number; foo(arr: number[]): number; + /** foo 4 */ foo(arr: string[]): number; foo2(a: number): number; + /** foo2 2*/ foo2(b: string): number; foo3(a: number): number; foo3(b: string): number; + /** foo4 1*/ foo4(a: number): number; foo4(b: string): number; + /** foo4 any */ foo4(c: any): any; new (a: string): any; + /** new 1*/ new (b: number): any; } declare var i1_i: i1; interface i2 { new (a: string): any; + /** new 2*/ new (b: number): any; (a: number): number; + /**this is signature 2*/ (b: string): number; } declare var i2_i: i2; interface i3 { + /** new 1*/ new (a: string): any; + /** new 2*/ new (b: number): any; + /**this is signature 1*/ (a: number): number; (b: string): number; } @@ -306,13 +328,19 @@ interface i4 { declare class c { prop1(a: number): number; prop1(b: string): number; + /** prop2 1*/ prop2(a: number): number; prop2(b: string): number; prop3(a: number): number; + /** prop3 2*/ prop3(b: string): number; + /** prop4 1*/ prop4(a: number): number; + /** prop4 2*/ prop4(b: string): number; + /** prop5 1*/ prop5(a: number): number; + /** prop5 2*/ prop5(b: string): number; } declare class c1 { @@ -320,19 +348,25 @@ declare class c1 { constructor(b: string); } declare class c2 { + /** c2 1*/ constructor(a: number); constructor(b: string); } declare class c3 { constructor(a: number); + /** c3 2*/ constructor(b: string); } declare class c4 { + /** c4 1*/ constructor(a: number); + /** c4 2*/ constructor(b: string); } declare class c5 { + /** c5 1*/ constructor(a: number); + /** c5 2*/ constructor(b: string); } declare var c_i: c; diff --git a/tests/baselines/reference/commentsOverloads.types b/tests/baselines/reference/commentsOverloads.types new file mode 100644 index 00000000000..9984c1b5b26 --- /dev/null +++ b/tests/baselines/reference/commentsOverloads.types @@ -0,0 +1,436 @@ +=== tests/cases/compiler/commentsOverloads.ts === +/** this is signature 1*/ +function f1(/**param a*/a: number): number; +>f1 : { (a: number): number; (b: string): number; } +>a : number + +function f1(b: string): number; +>f1 : { (a: number): number; (b: string): number; } +>b : string + +function f1(aOrb: any) { +>f1 : { (a: number): number; (b: string): number; } +>aOrb : any + + return 10; +} +f1("hello"); +>f1("hello") : number +>f1 : { (a: number): number; (b: string): number; } + +f1(10); +>f1(10) : number +>f1 : { (a: number): number; (b: string): number; } + +function f2(a: number): number; +>f2 : { (a: number): number; (b: string): number; } +>a : number + +/** this is signature 2*/ +function f2(b: string): number; +>f2 : { (a: number): number; (b: string): number; } +>b : string + +/** this is f2 var comment*/ +function f2(aOrb: any) { +>f2 : { (a: number): number; (b: string): number; } +>aOrb : any + + return 10; +} +f2("hello"); +>f2("hello") : number +>f2 : { (a: number): number; (b: string): number; } + +f2(10); +>f2(10) : number +>f2 : { (a: number): number; (b: string): number; } + +function f3(a: number): number; +>f3 : { (a: number): number; (b: string): number; } +>a : number + +function f3(b: string): number; +>f3 : { (a: number): number; (b: string): number; } +>b : string + +function f3(aOrb: any) { +>f3 : { (a: number): number; (b: string): number; } +>aOrb : any + + return 10; +} +f3("hello"); +>f3("hello") : number +>f3 : { (a: number): number; (b: string): number; } + +f3(10); +>f3(10) : number +>f3 : { (a: number): number; (b: string): number; } + +/** this is signature 4 - with number parameter*/ +function f4(/**param a*/a: number): number; +>f4 : { (a: number): number; (b: string): number; } +>a : number + +/** this is signature 4 - with string parameter*/ +function f4(b: string): number; +>f4 : { (a: number): number; (b: string): number; } +>b : string + +function f4(aOrb: any) { +>f4 : { (a: number): number; (b: string): number; } +>aOrb : any + + return 10; +} +f4("hello"); +>f4("hello") : number +>f4 : { (a: number): number; (b: string): number; } + +f4(10); +>f4(10) : number +>f4 : { (a: number): number; (b: string): number; } + +interface i1 { +>i1 : i1 + + /**this signature 1*/ + (/**param a*/ a: number): number; +>a : number + + /**this is signature 2*/ + (b: string): number; +>b : string + + /** foo 1*/ + foo(a: number): number; +>foo : { (a: number): number; (b: string): number; (arr: number[]): number; (arr: string[]): number; } +>a : number + + /** foo 2*/ + foo(b: string): number; +>foo : { (a: number): number; (b: string): number; (arr: number[]): number; (arr: string[]): number; } +>b : string + + // foo 3 + foo(arr: number[]): number; +>foo : { (a: number): number; (b: string): number; (arr: number[]): number; (arr: string[]): number; } +>arr : number[] + + /** foo 4 */ + foo(arr: string[]): number; +>foo : { (a: number): number; (b: string): number; (arr: number[]): number; (arr: string[]): number; } +>arr : string[] + + foo2(a: number): number; +>foo2 : { (a: number): number; (b: string): number; } +>a : number + + /** foo2 2*/ + foo2(b: string): number; +>foo2 : { (a: number): number; (b: string): number; } +>b : string + + foo3(a: number): number; +>foo3 : { (a: number): number; (b: string): number; } +>a : number + + foo3(b: string): number; +>foo3 : { (a: number): number; (b: string): number; } +>b : string + + /** foo4 1*/ + foo4(a: number): number; +>foo4 : { (a: number): number; (b: string): number; (c: any): any; } +>a : number + + foo4(b: string): number; +>foo4 : { (a: number): number; (b: string): number; (c: any): any; } +>b : string + + /** foo4 any */ + foo4(c: any): any; +>foo4 : { (a: number): number; (b: string): number; (c: any): any; } +>c : any + + /// new 1 + new (a: string); +>a : string + + /** new 1*/ + new (b: number); +>b : number +} +var i1_i: i1; +>i1_i : i1 +>i1 : i1 + +interface i2 { +>i2 : i2 + + new (a: string); +>a : string + + /** new 2*/ + new (b: number); +>b : number + + (a: number): number; +>a : number + + /**this is signature 2*/ + (b: string): number; +>b : string +} +var i2_i: i2; +>i2_i : i2 +>i2 : i2 + +interface i3 { +>i3 : i3 + + /** new 1*/ + new (a: string); +>a : string + + /** new 2*/ + new (b: number); +>b : number + + /**this is signature 1*/ + (a: number): number; +>a : number + + (b: string): number; +>b : string +} +var i3_i: i3; +>i3_i : i3 +>i3 : i3 + +interface i4 { +>i4 : i4 + + new (a: string); +>a : string + + new (b: number); +>b : number + + (a: number): number; +>a : number + + (b: string): number; +>b : string +} +class c { +>c : c + + public prop1(a: number): number; +>prop1 : { (a: number): number; (b: string): number; } +>a : number + + public prop1(b: string): number; +>prop1 : { (a: number): number; (b: string): number; } +>b : string + + public prop1(aorb: any) { +>prop1 : { (a: number): number; (b: string): number; } +>aorb : any + + return 10; + } + /** prop2 1*/ + public prop2(a: number): number; +>prop2 : { (a: number): number; (b: string): number; } +>a : number + + public prop2(b: string): number; +>prop2 : { (a: number): number; (b: string): number; } +>b : string + + public prop2(aorb: any) { +>prop2 : { (a: number): number; (b: string): number; } +>aorb : any + + return 10; + } + public prop3(a: number): number; +>prop3 : { (a: number): number; (b: string): number; } +>a : number + + /** prop3 2*/ + public prop3(b: string): number; +>prop3 : { (a: number): number; (b: string): number; } +>b : string + + public prop3(aorb: any) { +>prop3 : { (a: number): number; (b: string): number; } +>aorb : any + + return 10; + } + /** prop4 1*/ + public prop4(a: number): number; +>prop4 : { (a: number): number; (b: string): number; } +>a : number + + /** prop4 2*/ + public prop4(b: string): number; +>prop4 : { (a: number): number; (b: string): number; } +>b : string + + public prop4(aorb: any) { +>prop4 : { (a: number): number; (b: string): number; } +>aorb : any + + return 10; + } + /** prop5 1*/ + public prop5(a: number): number; +>prop5 : { (a: number): number; (b: string): number; } +>a : number + + /** prop5 2*/ + public prop5(b: string): number; +>prop5 : { (a: number): number; (b: string): number; } +>b : string + + /** Prop5 implementaion*/ + public prop5(aorb: any) { +>prop5 : { (a: number): number; (b: string): number; } +>aorb : any + + return 10; + } +} +class c1 { +>c1 : c1 + + constructor(a: number); +>a : number + + constructor(b: string); +>b : string + + constructor(aorb: any) { +>aorb : any + } +} +class c2 { +>c2 : c2 + + /** c2 1*/ + constructor(a: number); +>a : number + + // c2 2 + constructor(b: string); +>b : string + + constructor(aorb: any) { +>aorb : any + } +} +class c3 { +>c3 : c3 + + constructor(a: number); +>a : number + + /** c3 2*/ + constructor(b: string); +>b : string + + constructor(aorb: any) { +>aorb : any + } +} +class c4 { +>c4 : c4 + + /** c4 1*/ + constructor(a: number); +>a : number + + /** c4 2*/ + constructor(b: string); +>b : string + + /** c4 3 */ + constructor(aorb: any) { +>aorb : any + } +} +class c5 { +>c5 : c5 + + /** c5 1*/ + constructor(a: number); +>a : number + + /** c5 2*/ + constructor(b: string); +>b : string + + /** c5 implementation*/ + constructor(aorb: any) { +>aorb : any + } +} +var c_i = new c(); +>c_i : c +>new c() : c +>c : typeof c + +var c1_i_1 = new c1(10); +>c1_i_1 : c1 +>new c1(10) : c1 +>c1 : typeof c1 + +var c1_i_2 = new c1("hello"); +>c1_i_2 : c1 +>new c1("hello") : c1 +>c1 : typeof c1 + +var c2_i_1 = new c2(10); +>c2_i_1 : c2 +>new c2(10) : c2 +>c2 : typeof c2 + +var c2_i_2 = new c2("hello"); +>c2_i_2 : c2 +>new c2("hello") : c2 +>c2 : typeof c2 + +var c3_i_1 = new c3(10); +>c3_i_1 : c3 +>new c3(10) : c3 +>c3 : typeof c3 + +var c3_i_2 = new c3("hello"); +>c3_i_2 : c3 +>new c3("hello") : c3 +>c3 : typeof c3 + +var c4_i_1 = new c4(10); +>c4_i_1 : c4 +>new c4(10) : c4 +>c4 : typeof c4 + +var c4_i_2 = new c4("hello"); +>c4_i_2 : c4 +>new c4("hello") : c4 +>c4 : typeof c4 + +var c5_i_1 = new c5(10); +>c5_i_1 : c5 +>new c5(10) : c5 +>c5 : typeof c5 + +var c5_i_2 = new c5("hello"); +>c5_i_2 : c5 +>new c5("hello") : c5 +>c5 : typeof c5 + diff --git a/tests/baselines/reference/commentsPropertySignature1.js b/tests/baselines/reference/commentsPropertySignature1.js index f216ac9ba94..db3186d8624 100644 --- a/tests/baselines/reference/commentsPropertySignature1.js +++ b/tests/baselines/reference/commentsPropertySignature1.js @@ -7,5 +7,6 @@ var a = { //// [commentsPropertySignature1.js] var a = { + /** own x*/ x: 0 }; diff --git a/tests/baselines/reference/commentsPropertySignature1.types b/tests/baselines/reference/commentsPropertySignature1.types new file mode 100644 index 00000000000..857b0c98ee5 --- /dev/null +++ b/tests/baselines/reference/commentsPropertySignature1.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/commentsPropertySignature1.ts === +var a = { +>a : { x: number; } +>{ /** own x*/ x: 0} : { x: number; } + + /** own x*/ + x: 0 +>x : number + +}; + diff --git a/tests/baselines/reference/commentsTypeParameters.js b/tests/baselines/reference/commentsTypeParameters.js new file mode 100644 index 00000000000..768c238522a --- /dev/null +++ b/tests/baselines/reference/commentsTypeParameters.js @@ -0,0 +1,44 @@ +//// [commentsTypeParameters.ts] +class C { + method(a: U) { + } + static staticmethod(a: U) { + } + + private privatemethod(a: U) { + } + private static privatestaticmethod(a: U) { + } +} + +function compare(a: T, b: T) { + return a === b; +} + +//// [commentsTypeParameters.js] +var C = (function () { + function C() { + } + C.prototype.method = function (a) { + }; + C.staticmethod = function (a) { + }; + C.prototype.privatemethod = function (a) { + }; + C.privatestaticmethod = function (a) { + }; + return C; +})(); +function compare(a, b) { + return a === b; +} + + +//// [commentsTypeParameters.d.ts] +declare class C { + method(a: U): void; + static staticmethod(a: U): void; + private privatemethod(a); + private static privatestaticmethod(a); +} +declare function compare(a: T, b: T): boolean; diff --git a/tests/baselines/reference/commentsTypeParameters.types b/tests/baselines/reference/commentsTypeParameters.types new file mode 100644 index 00000000000..573dabed7da --- /dev/null +++ b/tests/baselines/reference/commentsTypeParameters.types @@ -0,0 +1,47 @@ +=== tests/cases/compiler/commentsTypeParameters.ts === +class C { +>C : C +>T : T + + method(a: U) { +>method : (a: U) => void +>U : U +>T : T +>a : U +>U : U + } + static staticmethod(a: U) { +>staticmethod : (a: U) => void +>U : U +>a : U +>U : U + } + + private privatemethod(a: U) { +>privatemethod : (a: U) => void +>U : U +>T : T +>a : U +>U : U + } + private static privatestaticmethod(a: U) { +>privatestaticmethod : (a: U) => void +>U : U +>a : U +>U : U + } +} + +function compare(a: T, b: T) { +>compare : (a: T, b: T) => boolean +>T : T +>a : T +>T : T +>b : T +>T : T + + return a === b; +>a === b : boolean +>a : T +>b : T +} diff --git a/tests/baselines/reference/commentsVarDecl.js b/tests/baselines/reference/commentsVarDecl.js index f6974c1e0e1..5105e03879d 100644 --- a/tests/baselines/reference/commentsVarDecl.js +++ b/tests/baselines/reference/commentsVarDecl.js @@ -1,7 +1,7 @@ //// [commentsVarDecl.ts] /** Variable comments*/ -var myVariable = 10; +var myVariable = 10; // This trailing Comment1 /** This is another variable comment*/ var anotherVariable = 30; @@ -11,13 +11,13 @@ var aVar = ""; /** this is multiline comment * All these variables are of number type */ -var anotherAnotherVariable = 70; +var anotherAnotherVariable = 70; /* these are multiple trailing comments */ /* multiple trailing comments */ /** Triple slash multiline comment*/ /** another line in the comment*/ /** comment line 2*/ -var x = 70; - +var x = 70; /* multiline trailing comment +this is multiline trailing comment */ /** Triple slash comment on the assignement shouldnt be in .d.ts file*/ x = myVariable; @@ -44,15 +44,30 @@ var n4: (x: number) => string; n4 = z2; //// [commentsVarDecl.js] -var myVariable = 10; +/** Variable comments*/ +var myVariable = 10; // This trailing Comment1 +/** This is another variable comment*/ var anotherVariable = 30; +// shouldn't appear var aVar = ""; -var anotherAnotherVariable = 70; -var x = 70; +/** this is multiline comment + * All these variables are of number type */ +var anotherAnotherVariable = 70; /* these are multiple trailing comments */ /* multiple trailing comments */ +/** Triple slash multiline comment*/ +/** another line in the comment*/ +/** comment line 2*/ +var x = 70; /* multiline trailing comment +this is multiline trailing comment */ +/** Triple slash comment on the assignement shouldnt be in .d.ts file*/ x = myVariable; +/** triple slash comment1*/ +/** jsdocstyle comment - only this comment should be in .d.ts file*/ var n = 30; +/** var deckaration with comment on type as well*/ var y = 20; +/// var deckaration with comment on type as well var yy = 20; +/** comment2 */ var z = function (x, y) { return x + y; }; var z2; var x2 = z2; @@ -61,14 +76,25 @@ n4 = z2; //// [commentsVarDecl.d.ts] +/** Variable comments*/ declare var myVariable: number; +/** This is another variable comment*/ declare var anotherVariable: number; declare var aVar: string; +/** this is multiline comment + * All these variables are of number type */ declare var anotherAnotherVariable: number; +/** Triple slash multiline comment*/ +/** another line in the comment*/ +/** comment line 2*/ declare var x: number; +/** triple slash comment1*/ +/** jsdocstyle comment - only this comment should be in .d.ts file*/ declare var n: number; +/** var deckaration with comment on type as well*/ declare var y: number; declare var yy: number; +/** comment2 */ declare var z: (x: number, y: number) => number; declare var z2: (x: number) => string; declare var x2: (x: number) => string; diff --git a/tests/baselines/reference/commentsVarDecl.types b/tests/baselines/reference/commentsVarDecl.types new file mode 100644 index 00000000000..50db8984b1b --- /dev/null +++ b/tests/baselines/reference/commentsVarDecl.types @@ -0,0 +1,75 @@ +=== tests/cases/compiler/commentsVarDecl.ts === + +/** Variable comments*/ +var myVariable = 10; // This trailing Comment1 +>myVariable : number + +/** This is another variable comment*/ +var anotherVariable = 30; +>anotherVariable : number + +// shouldn't appear +var aVar = ""; +>aVar : string + +/** this is multiline comment + * All these variables are of number type */ +var anotherAnotherVariable = 70; /* these are multiple trailing comments */ /* multiple trailing comments */ +>anotherAnotherVariable : number + +/** Triple slash multiline comment*/ +/** another line in the comment*/ +/** comment line 2*/ +var x = 70; /* multiline trailing comment +>x : number + +this is multiline trailing comment */ +/** Triple slash comment on the assignement shouldnt be in .d.ts file*/ +x = myVariable; +>x = myVariable : number +>x : number +>myVariable : number + +/** triple slash comment1*/ +/** jsdocstyle comment - only this comment should be in .d.ts file*/ +var n = 30; +>n : number + +/** var deckaration with comment on type as well*/ +var y = /** value comment */ 20; +>y : number + +/// var deckaration with comment on type as well +var yy = +>yy : number + + /// value comment + 20; + +/** comment2 */ +var z = /** lambda comment */ (x: number, y: number) => x + y; +>z : (x: number, y: number) => number +>(x: number, y: number) => x + y : (x: number, y: number) => number +>x : number +>y : number +>x + y : number +>x : number +>y : number + +var z2: /** type comment*/ (x: number) => string; +>z2 : (x: number) => string +>x : number + +var x2 = z2; +>x2 : (x: number) => string +>z2 : (x: number) => string + +var n4: (x: number) => string; +>n4 : (x: number) => string +>x : number + +n4 = z2; +>n4 = z2 : (x: number) => string +>n4 : (x: number) => string +>z2 : (x: number) => string + diff --git a/tests/baselines/reference/commentsVariableStatement1.js b/tests/baselines/reference/commentsVariableStatement1.js index e1aaf952812..bc60253e24c 100644 --- a/tests/baselines/reference/commentsVariableStatement1.js +++ b/tests/baselines/reference/commentsVariableStatement1.js @@ -4,8 +4,10 @@ var v = 1; //// [commentsVariableStatement1.js] +/** Comment */ var v = 1; //// [commentsVariableStatement1.d.ts] +/** Comment */ declare var v: number; diff --git a/tests/baselines/reference/commentsVariableStatement1.types b/tests/baselines/reference/commentsVariableStatement1.types new file mode 100644 index 00000000000..7717be4a2a1 --- /dev/null +++ b/tests/baselines/reference/commentsVariableStatement1.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/commentsVariableStatement1.ts === + +/** Comment */ +var v = 1; +>v : number + diff --git a/tests/baselines/reference/commentsdoNotEmitComments.types b/tests/baselines/reference/commentsdoNotEmitComments.types new file mode 100644 index 00000000000..c42d3d2c17c --- /dev/null +++ b/tests/baselines/reference/commentsdoNotEmitComments.types @@ -0,0 +1,153 @@ +=== tests/cases/compiler/commentsdoNotEmitComments.ts === + +/** Variable comments*/ +var myVariable = 10; +>myVariable : number + +/** function comments*/ +function foo(/** parameter comment*/p: number) { +>foo : (p: number) => void +>p : number +} + +/** variable with function type comment*/ +var fooVar: () => void; +>fooVar : () => void + +foo(50); +>foo(50) : void +>foo : (p: number) => void + +fooVar(); +>fooVar() : void +>fooVar : () => void + +/**class comment*/ +class c { +>c : c + + /** constructor comment*/ + constructor() { + } + + /** property comment */ + public b = 10; +>b : number + + /** function comment */ + public myFoo() { +>myFoo : () => number + + return this.b; +>this.b : number +>this : c +>b : number + } + + /** getter comment*/ + public get prop1() { +>prop1 : number + + return this.b; +>this.b : number +>this : c +>b : number + } + + /** setter comment*/ + public set prop1(val: number) { +>prop1 : number +>val : number + + this.b = val; +>this.b = val : number +>this.b : number +>this : c +>b : number +>val : number + } + + /** overload signature1*/ + public foo1(a: number): string; +>foo1 : { (a: number): string; (b: string): string; } +>a : number + + /** Overload signature 2*/ + public foo1(b: string): string; +>foo1 : { (a: number): string; (b: string): string; } +>b : string + + /** overload implementation signature*/ + public foo1(aOrb) { +>foo1 : { (a: number): string; (b: string): string; } +>aOrb : any + + return aOrb.toString(); +>aOrb.toString() : any +>aOrb.toString : any +>aOrb : any +>toString : any + } +} + +/**instance comment*/ +var i = new c(); +>i : c +>new c() : c +>c : typeof c + +/** interface comments*/ +interface i1 { +>i1 : i1 + + /** caller comments*/ + (a: number): number; +>a : number + + /** new comments*/ + new (b: string); +>b : string + + /**indexer property*/ + [a: number]: string; +>a : number + + /** function property;*/ + myFoo(/*param prop*/a: number): string; +>myFoo : (a: number) => string +>a : number + + /** prop*/ + prop: string; +>prop : string +} + +/**interface instance comments*/ +var i1_i: i1; +>i1_i : i1 +>i1 : i1 + +/** this is module comment*/ +module m1 { +>m1 : typeof m1 + + /** class b */ + export class b { +>b : b + + constructor(public x: number) { +>x : number + + } + } + + /// module m2 + export module m2 { +>m2 : unknown + } +} + +/// this is x +declare var x; +>x : any + diff --git a/tests/baselines/reference/commentsemitComments.js b/tests/baselines/reference/commentsemitComments.js index e7a0d82db00..173d9e8fd47 100644 --- a/tests/baselines/reference/commentsemitComments.js +++ b/tests/baselines/reference/commentsemitComments.js @@ -89,38 +89,52 @@ declare var x; //// [commentsemitComments.js] +/** Variable comments*/ var myVariable = 10; -function foo(p) { +/** function comments*/ +function foo(/** parameter comment*/ p) { } +/** variable with function type comment*/ var fooVar; foo(50); fooVar(); +/**class comment*/ var c = (function () { + /** constructor comment*/ function c() { + /** property comment */ this.b = 10; } + /** function comment */ c.prototype.myFoo = function () { return this.b; }; Object.defineProperty(c.prototype, "prop1", { + /** getter comment*/ get: function () { return this.b; }, + /** setter comment*/ set: function (val) { this.b = val; }, enumerable: true, configurable: true }); + /** overload implementation signature*/ c.prototype.foo1 = function (aOrb) { return aOrb.toString(); }; return c; })(); +/**instance comment*/ var i = new c(); +/**interface instance comments*/ var i1_i; +/** this is module comment*/ var m1; (function (m1) { + /** class b */ var b = (function () { function b(x) { this.x = x; @@ -132,27 +146,48 @@ var m1; //// [commentsemitComments.d.ts] +/** Variable comments*/ declare var myVariable: number; -declare function foo(p: number): void; +/** function comments*/ +declare function foo(/** parameter comment*/ p: number): void; +/** variable with function type comment*/ declare var fooVar: () => void; +/**class comment*/ declare class c { + /** constructor comment*/ constructor(); + /** property comment */ b: number; + /** function comment */ myFoo(): number; + /** getter comment*/ + /** setter comment*/ prop1: number; + /** overload signature1*/ foo1(a: number): string; + /** Overload signature 2*/ foo1(b: string): string; } +/**instance comment*/ declare var i: c; +/** interface comments*/ interface i1 { + /** caller comments*/ (a: number): number; + /** new comments*/ new (b: string): any; + /**indexer property*/ [a: number]: string; + /** function property;*/ myFoo(a: number): string; + /** prop*/ prop: string; } +/**interface instance comments*/ declare var i1_i: i1; +/** this is module comment*/ declare module m1 { + /** class b */ class b { x: number; constructor(x: number); diff --git a/tests/baselines/reference/commentsemitComments.types b/tests/baselines/reference/commentsemitComments.types new file mode 100644 index 00000000000..b87ef5ad6fd --- /dev/null +++ b/tests/baselines/reference/commentsemitComments.types @@ -0,0 +1,153 @@ +=== tests/cases/compiler/commentsemitComments.ts === + +/** Variable comments*/ +var myVariable = 10; +>myVariable : number + +/** function comments*/ +function foo(/** parameter comment*/p: number) { +>foo : (p: number) => void +>p : number +} + +/** variable with function type comment*/ +var fooVar: () => void; +>fooVar : () => void + +foo(50); +>foo(50) : void +>foo : (p: number) => void + +fooVar(); +>fooVar() : void +>fooVar : () => void + +/**class comment*/ +class c { +>c : c + + /** constructor comment*/ + constructor() { + } + + /** property comment */ + public b = 10; +>b : number + + /** function comment */ + public myFoo() { +>myFoo : () => number + + return this.b; +>this.b : number +>this : c +>b : number + } + + /** getter comment*/ + public get prop1() { +>prop1 : number + + return this.b; +>this.b : number +>this : c +>b : number + } + + /** setter comment*/ + public set prop1(val: number) { +>prop1 : number +>val : number + + this.b = val; +>this.b = val : number +>this.b : number +>this : c +>b : number +>val : number + } + + /** overload signature1*/ + public foo1(a: number): string; +>foo1 : { (a: number): string; (b: string): string; } +>a : number + + /** Overload signature 2*/ + public foo1(b: string): string; +>foo1 : { (a: number): string; (b: string): string; } +>b : string + + /** overload implementation signature*/ + public foo1(aOrb) { +>foo1 : { (a: number): string; (b: string): string; } +>aOrb : any + + return aOrb.toString(); +>aOrb.toString() : any +>aOrb.toString : any +>aOrb : any +>toString : any + } +} + +/**instance comment*/ +var i = new c(); +>i : c +>new c() : c +>c : typeof c + +/** interface comments*/ +interface i1 { +>i1 : i1 + + /** caller comments*/ + (a: number): number; +>a : number + + /** new comments*/ + new (b: string); +>b : string + + /**indexer property*/ + [a: number]: string; +>a : number + + /** function property;*/ + myFoo(/*param prop*/a: number): string; +>myFoo : (a: number) => string +>a : number + + /** prop*/ + prop: string; +>prop : string +} + +/**interface instance comments*/ +var i1_i: i1; +>i1_i : i1 +>i1 : i1 + +/** this is module comment*/ +module m1 { +>m1 : typeof m1 + + /** class b */ + export class b { +>b : b + + constructor(public x: number) { +>x : number + + } + } + + /// module m2 + export module m2 { +>m2 : unknown + } +} + +/// this is x +declare var x; +>x : any + diff --git a/tests/baselines/reference/commonJSImportAsPrimaryExpression.types b/tests/baselines/reference/commonJSImportAsPrimaryExpression.types new file mode 100644 index 00000000000..0d2e96afaa2 --- /dev/null +++ b/tests/baselines/reference/commonJSImportAsPrimaryExpression.types @@ -0,0 +1,25 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +if(foo.C1.s1){ +>foo.C1.s1 : boolean +>foo.C1 : typeof foo.C1 +>foo : typeof foo +>C1 : typeof foo.C1 +>s1 : boolean + + // Should cause runtime import +} + +=== tests/cases/conformance/externalModules/foo_0.ts === +export class C1 { +>C1 : C1 + + m1 = 42; +>m1 : number + + static s1 = true; +>s1 : boolean +} + diff --git a/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.types b/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.types new file mode 100644 index 00000000000..bde0cb02b1e --- /dev/null +++ b/tests/baselines/reference/commonJSImportNotAsPrimaryExpression.types @@ -0,0 +1,82 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +// None of the below should cause a runtime dependency on foo_0 +import f = foo.M1; +>f : unknown +>foo : typeof foo +>M1 : unknown + +var i: f.I2; +>i : f.I2 +>f : unknown +>I2 : f.I2 + +var x: foo.C1 = <{m1: number}>{}; +>x : foo.C1 +>foo : unknown +>C1 : foo.C1 +><{m1: number}>{} : { m1: number; } +>m1 : number +>{} : {} + +var y: typeof foo.C1.s1 = false; +>y : boolean +>foo : typeof foo +>C1 : typeof foo.C1 +>s1 : boolean + +var z: foo.M1.I2; +>z : f.I2 +>foo : unknown +>M1 : unknown +>I2 : f.I2 + +var e: number = 0; +>e : number +>0 : foo.E1 +>foo : unknown +>E1 : foo.E1 + +=== tests/cases/conformance/externalModules/foo_0.ts === +export class C1 { +>C1 : C1 + + m1 = 42; +>m1 : number + + static s1 = true; +>s1 : boolean +} + +export interface I1 { +>I1 : I1 + + name: string; +>name : string + + age: number; +>age : number +} + +export module M1 { +>M1 : unknown + + export interface I2 { +>I2 : I2 + + foo: string; +>foo : string + } +} + +export enum E1 { +>E1 : E1 + + A,B,C +>A : E1 +>B : E1 +>C : E1 +} + diff --git a/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.js b/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.js index a0009c55463..4bdb1e38ba7 100644 --- a/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.js +++ b/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.js @@ -253,6 +253,7 @@ var b5; var b6; var base1; var base2; +// operator < var r1a1 = a1 < b1; var r1a2 = base1 < base2; var r1a3 = a2 < b2; @@ -267,6 +268,7 @@ var r1b4 = b3 < a3; var r1b5 = b4 < a4; var r1b6 = b5 < a5; var r1b7 = b6 < a6; +// operator > var r2a1 = a1 > b1; var r2a2 = base1 > base2; var r2a3 = a2 > b2; @@ -281,6 +283,7 @@ var r2b4 = b3 > a3; var r2b5 = b4 > a4; var r2b6 = b5 > a5; var r2b7 = b6 > a6; +// operator <= var r3a1 = a1 <= b1; var r3a2 = base1 <= base2; var r3a3 = a2 <= b2; @@ -295,6 +298,7 @@ var r3b4 = b3 <= a3; var r3b5 = b4 <= a4; var r3b6 = b5 <= a5; var r3b7 = b6 <= a6; +// operator >= var r4a1 = a1 >= b1; var r4a2 = base1 >= base2; var r4a3 = a2 >= b2; @@ -309,6 +313,7 @@ var r4b4 = b3 >= a3; var r4b5 = b4 >= a4; var r4b6 = b5 >= a5; var r4b7 = b6 >= a6; +// operator == var r5a1 = a1 == b1; var r5a2 = base1 == base2; var r5a3 = a2 == b2; @@ -323,6 +328,7 @@ var r5b4 = b3 == a3; var r5b5 = b4 == a4; var r5b6 = b5 == a5; var r5b7 = b6 == a6; +// operator != var r6a1 = a1 != b1; var r6a2 = base1 != base2; var r6a3 = a2 != b2; @@ -337,6 +343,7 @@ var r6b4 = b3 != a3; var r6b5 = b4 != a4; var r6b6 = b5 != a5; var r6b7 = b6 != a6; +// operator === var r7a1 = a1 === b1; var r7a2 = base1 === base2; var r7a3 = a2 === b2; @@ -351,6 +358,7 @@ var r7b4 = b3 === a3; var r7b5 = b4 === a4; var r7b6 = b5 === a5; var r7b7 = b6 === a6; +// operator !== var r8a1 = a1 !== b1; var r8a2 = base1 !== base2; var r8a3 = a2 !== b2; diff --git a/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types b/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types new file mode 100644 index 00000000000..02316f94e54 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types @@ -0,0 +1,847 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIdenticalObjects.ts === +class A1 { +>A1 : A1 + + public a: string; +>a : string + + public b: number; +>b : number + + public c: boolean; +>c : boolean + + public d: any; +>d : any + + public e: Object; +>e : Object +>Object : Object + + public fn(a: string): string { +>fn : (a: string) => string +>a : string + + return null; + } +} +class B1 { +>B1 : B1 + + public a: string; +>a : string + + public b: number; +>b : number + + public c: boolean; +>c : boolean + + public d: any; +>d : any + + public e: Object; +>e : Object +>Object : Object + + public fn(b: string): string { +>fn : (b: string) => string +>b : string + + return null; + } +} + +class Base { +>Base : Base + + private a: string; +>a : string + + private fn(b: string): string { +>fn : (b: string) => string +>b : string + + return null; + } +} +class A2 extends Base { } +>A2 : A2 +>Base : Base + +class B2 extends Base { } +>B2 : B2 +>Base : Base + +interface A3 { f(a: number): string; } +>A3 : A3 +>f : (a: number) => string +>a : number + +interface B3 { f(a: number): string; } +>B3 : B3 +>f : (a: number) => string +>a : number + +interface A4 { new (a: string): A1; } +>A4 : A4 +>a : string +>A1 : A1 + +interface B4 { new (a: string): B1; } +>B4 : B4 +>a : string +>B1 : B1 + +interface A5 { [x: number]: number; } +>A5 : A5 +>x : number + +interface B5 { [x: number]: number; } +>B5 : B5 +>x : number + +interface A6 { [x: string]: string; } +>A6 : A6 +>x : string + +interface B6 { [x: string]: string; } +>B6 : B6 +>x : string + +var a1: A1; +>a1 : A1 +>A1 : A1 + +var a2: A2; +>a2 : A2 +>A2 : A2 + +var a3: A3; +>a3 : A3 +>A3 : A3 + +var a4: A4; +>a4 : A4 +>A4 : A4 + +var a5: A5; +>a5 : A5 +>A5 : A5 + +var a6: A6; +>a6 : A6 +>A6 : A6 + +var b1: B1; +>b1 : B1 +>B1 : B1 + +var b2: B2; +>b2 : B2 +>B2 : B2 + +var b3: B3; +>b3 : B3 +>B3 : B3 + +var b4: B4; +>b4 : B4 +>B4 : B4 + +var b5: B5; +>b5 : B5 +>B5 : B5 + +var b6: B6; +>b6 : B6 +>B6 : B6 + +var base1: Base; +>base1 : Base +>Base : Base + +var base2: Base; +>base2 : Base +>Base : Base + +// operator < +var r1a1 = a1 < b1; +>r1a1 : boolean +>a1 < b1 : boolean +>a1 : A1 +>b1 : B1 + +var r1a2 = base1 < base2; +>r1a2 : boolean +>base1 < base2 : boolean +>base1 : Base +>base2 : Base + +var r1a3 = a2 < b2; +>r1a3 : boolean +>a2 < b2 : boolean +>a2 : A2 +>b2 : B2 + +var r1a4 = a3 < b3; +>r1a4 : boolean +>a3 < b3 : boolean +>a3 : A3 +>b3 : B3 + +var r1a5 = a4 < b4; +>r1a5 : boolean +>a4 < b4 : boolean +>a4 : A4 +>b4 : B4 + +var r1a6 = a5 < b5; +>r1a6 : boolean +>a5 < b5 : boolean +>a5 : A5 +>b5 : B5 + +var r1a7 = a6 < b6; +>r1a7 : boolean +>a6 < b6 : boolean +>a6 : A6 +>b6 : B6 + +var r1b1 = b1 < a1; +>r1b1 : boolean +>b1 < a1 : boolean +>b1 : B1 +>a1 : A1 + +var r1b2 = base2 < base1; +>r1b2 : boolean +>base2 < base1 : boolean +>base2 : Base +>base1 : Base + +var r1b3 = b2 < a2; +>r1b3 : boolean +>b2 < a2 : boolean +>b2 : B2 +>a2 : A2 + +var r1b4 = b3 < a3; +>r1b4 : boolean +>b3 < a3 : boolean +>b3 : B3 +>a3 : A3 + +var r1b5 = b4 < a4; +>r1b5 : boolean +>b4 < a4 : boolean +>b4 : B4 +>a4 : A4 + +var r1b6 = b5 < a5; +>r1b6 : boolean +>b5 < a5 : boolean +>b5 : B5 +>a5 : A5 + +var r1b7 = b6 < a6; +>r1b7 : boolean +>b6 < a6 : boolean +>b6 : B6 +>a6 : A6 + +// operator > +var r2a1 = a1 > b1; +>r2a1 : boolean +>a1 > b1 : boolean +>a1 : A1 +>b1 : B1 + +var r2a2 = base1 > base2; +>r2a2 : boolean +>base1 > base2 : boolean +>base1 : Base +>base2 : Base + +var r2a3 = a2 > b2; +>r2a3 : boolean +>a2 > b2 : boolean +>a2 : A2 +>b2 : B2 + +var r2a4 = a3 > b3; +>r2a4 : boolean +>a3 > b3 : boolean +>a3 : A3 +>b3 : B3 + +var r2a5 = a4 > b4; +>r2a5 : boolean +>a4 > b4 : boolean +>a4 : A4 +>b4 : B4 + +var r2a6 = a5 > b5; +>r2a6 : boolean +>a5 > b5 : boolean +>a5 : A5 +>b5 : B5 + +var r2a7 = a6 > b6; +>r2a7 : boolean +>a6 > b6 : boolean +>a6 : A6 +>b6 : B6 + +var r2b1 = b1 > a1; +>r2b1 : boolean +>b1 > a1 : boolean +>b1 : B1 +>a1 : A1 + +var r2b2 = base2 > base1; +>r2b2 : boolean +>base2 > base1 : boolean +>base2 : Base +>base1 : Base + +var r2b3 = b2 > a2; +>r2b3 : boolean +>b2 > a2 : boolean +>b2 : B2 +>a2 : A2 + +var r2b4 = b3 > a3; +>r2b4 : boolean +>b3 > a3 : boolean +>b3 : B3 +>a3 : A3 + +var r2b5 = b4 > a4; +>r2b5 : boolean +>b4 > a4 : boolean +>b4 : B4 +>a4 : A4 + +var r2b6 = b5 > a5; +>r2b6 : boolean +>b5 > a5 : boolean +>b5 : B5 +>a5 : A5 + +var r2b7 = b6 > a6; +>r2b7 : boolean +>b6 > a6 : boolean +>b6 : B6 +>a6 : A6 + +// operator <= +var r3a1 = a1 <= b1; +>r3a1 : boolean +>a1 <= b1 : boolean +>a1 : A1 +>b1 : B1 + +var r3a2 = base1 <= base2; +>r3a2 : boolean +>base1 <= base2 : boolean +>base1 : Base +>base2 : Base + +var r3a3 = a2 <= b2; +>r3a3 : boolean +>a2 <= b2 : boolean +>a2 : A2 +>b2 : B2 + +var r3a4 = a3 <= b3; +>r3a4 : boolean +>a3 <= b3 : boolean +>a3 : A3 +>b3 : B3 + +var r3a5 = a4 <= b4; +>r3a5 : boolean +>a4 <= b4 : boolean +>a4 : A4 +>b4 : B4 + +var r3a6 = a5 <= b5; +>r3a6 : boolean +>a5 <= b5 : boolean +>a5 : A5 +>b5 : B5 + +var r3a7 = a6 <= b6; +>r3a7 : boolean +>a6 <= b6 : boolean +>a6 : A6 +>b6 : B6 + +var r3b1 = b1 <= a1; +>r3b1 : boolean +>b1 <= a1 : boolean +>b1 : B1 +>a1 : A1 + +var r3b2 = base2 <= base1; +>r3b2 : boolean +>base2 <= base1 : boolean +>base2 : Base +>base1 : Base + +var r3b3 = b2 <= a2; +>r3b3 : boolean +>b2 <= a2 : boolean +>b2 : B2 +>a2 : A2 + +var r3b4 = b3 <= a3; +>r3b4 : boolean +>b3 <= a3 : boolean +>b3 : B3 +>a3 : A3 + +var r3b5 = b4 <= a4; +>r3b5 : boolean +>b4 <= a4 : boolean +>b4 : B4 +>a4 : A4 + +var r3b6 = b5 <= a5; +>r3b6 : boolean +>b5 <= a5 : boolean +>b5 : B5 +>a5 : A5 + +var r3b7 = b6 <= a6; +>r3b7 : boolean +>b6 <= a6 : boolean +>b6 : B6 +>a6 : A6 + +// operator >= +var r4a1 = a1 >= b1; +>r4a1 : boolean +>a1 >= b1 : boolean +>a1 : A1 +>b1 : B1 + +var r4a2 = base1 >= base2; +>r4a2 : boolean +>base1 >= base2 : boolean +>base1 : Base +>base2 : Base + +var r4a3 = a2 >= b2; +>r4a3 : boolean +>a2 >= b2 : boolean +>a2 : A2 +>b2 : B2 + +var r4a4 = a3 >= b3; +>r4a4 : boolean +>a3 >= b3 : boolean +>a3 : A3 +>b3 : B3 + +var r4a5 = a4 >= b4; +>r4a5 : boolean +>a4 >= b4 : boolean +>a4 : A4 +>b4 : B4 + +var r4a6 = a5 >= b5; +>r4a6 : boolean +>a5 >= b5 : boolean +>a5 : A5 +>b5 : B5 + +var r4a7 = a6 >= b6; +>r4a7 : boolean +>a6 >= b6 : boolean +>a6 : A6 +>b6 : B6 + +var r4b1 = b1 >= a1; +>r4b1 : boolean +>b1 >= a1 : boolean +>b1 : B1 +>a1 : A1 + +var r4b2 = base2 >= base1; +>r4b2 : boolean +>base2 >= base1 : boolean +>base2 : Base +>base1 : Base + +var r4b3 = b2 >= a2; +>r4b3 : boolean +>b2 >= a2 : boolean +>b2 : B2 +>a2 : A2 + +var r4b4 = b3 >= a3; +>r4b4 : boolean +>b3 >= a3 : boolean +>b3 : B3 +>a3 : A3 + +var r4b5 = b4 >= a4; +>r4b5 : boolean +>b4 >= a4 : boolean +>b4 : B4 +>a4 : A4 + +var r4b6 = b5 >= a5; +>r4b6 : boolean +>b5 >= a5 : boolean +>b5 : B5 +>a5 : A5 + +var r4b7 = b6 >= a6; +>r4b7 : boolean +>b6 >= a6 : boolean +>b6 : B6 +>a6 : A6 + +// operator == +var r5a1 = a1 == b1; +>r5a1 : boolean +>a1 == b1 : boolean +>a1 : A1 +>b1 : B1 + +var r5a2 = base1 == base2; +>r5a2 : boolean +>base1 == base2 : boolean +>base1 : Base +>base2 : Base + +var r5a3 = a2 == b2; +>r5a3 : boolean +>a2 == b2 : boolean +>a2 : A2 +>b2 : B2 + +var r5a4 = a3 == b3; +>r5a4 : boolean +>a3 == b3 : boolean +>a3 : A3 +>b3 : B3 + +var r5a5 = a4 == b4; +>r5a5 : boolean +>a4 == b4 : boolean +>a4 : A4 +>b4 : B4 + +var r5a6 = a5 == b5; +>r5a6 : boolean +>a5 == b5 : boolean +>a5 : A5 +>b5 : B5 + +var r5a7 = a6 == b6; +>r5a7 : boolean +>a6 == b6 : boolean +>a6 : A6 +>b6 : B6 + +var r5b1 = b1 == a1; +>r5b1 : boolean +>b1 == a1 : boolean +>b1 : B1 +>a1 : A1 + +var r5b2 = base2 == base1; +>r5b2 : boolean +>base2 == base1 : boolean +>base2 : Base +>base1 : Base + +var r5b3 = b2 == a2; +>r5b3 : boolean +>b2 == a2 : boolean +>b2 : B2 +>a2 : A2 + +var r5b4 = b3 == a3; +>r5b4 : boolean +>b3 == a3 : boolean +>b3 : B3 +>a3 : A3 + +var r5b5 = b4 == a4; +>r5b5 : boolean +>b4 == a4 : boolean +>b4 : B4 +>a4 : A4 + +var r5b6 = b5 == a5; +>r5b6 : boolean +>b5 == a5 : boolean +>b5 : B5 +>a5 : A5 + +var r5b7 = b6 == a6; +>r5b7 : boolean +>b6 == a6 : boolean +>b6 : B6 +>a6 : A6 + +// operator != +var r6a1 = a1 != b1; +>r6a1 : boolean +>a1 != b1 : boolean +>a1 : A1 +>b1 : B1 + +var r6a2 = base1 != base2; +>r6a2 : boolean +>base1 != base2 : boolean +>base1 : Base +>base2 : Base + +var r6a3 = a2 != b2; +>r6a3 : boolean +>a2 != b2 : boolean +>a2 : A2 +>b2 : B2 + +var r6a4 = a3 != b3; +>r6a4 : boolean +>a3 != b3 : boolean +>a3 : A3 +>b3 : B3 + +var r6a5 = a4 != b4; +>r6a5 : boolean +>a4 != b4 : boolean +>a4 : A4 +>b4 : B4 + +var r6a6 = a5 != b5; +>r6a6 : boolean +>a5 != b5 : boolean +>a5 : A5 +>b5 : B5 + +var r6a7 = a6 != b6; +>r6a7 : boolean +>a6 != b6 : boolean +>a6 : A6 +>b6 : B6 + +var r6b1 = b1 != a1; +>r6b1 : boolean +>b1 != a1 : boolean +>b1 : B1 +>a1 : A1 + +var r6b2 = base2 != base1; +>r6b2 : boolean +>base2 != base1 : boolean +>base2 : Base +>base1 : Base + +var r6b3 = b2 != a2; +>r6b3 : boolean +>b2 != a2 : boolean +>b2 : B2 +>a2 : A2 + +var r6b4 = b3 != a3; +>r6b4 : boolean +>b3 != a3 : boolean +>b3 : B3 +>a3 : A3 + +var r6b5 = b4 != a4; +>r6b5 : boolean +>b4 != a4 : boolean +>b4 : B4 +>a4 : A4 + +var r6b6 = b5 != a5; +>r6b6 : boolean +>b5 != a5 : boolean +>b5 : B5 +>a5 : A5 + +var r6b7 = b6 != a6; +>r6b7 : boolean +>b6 != a6 : boolean +>b6 : B6 +>a6 : A6 + +// operator === +var r7a1 = a1 === b1; +>r7a1 : boolean +>a1 === b1 : boolean +>a1 : A1 +>b1 : B1 + +var r7a2 = base1 === base2; +>r7a2 : boolean +>base1 === base2 : boolean +>base1 : Base +>base2 : Base + +var r7a3 = a2 === b2; +>r7a3 : boolean +>a2 === b2 : boolean +>a2 : A2 +>b2 : B2 + +var r7a4 = a3 === b3; +>r7a4 : boolean +>a3 === b3 : boolean +>a3 : A3 +>b3 : B3 + +var r7a5 = a4 === b4; +>r7a5 : boolean +>a4 === b4 : boolean +>a4 : A4 +>b4 : B4 + +var r7a6 = a5 === b5; +>r7a6 : boolean +>a5 === b5 : boolean +>a5 : A5 +>b5 : B5 + +var r7a7 = a6 === b6; +>r7a7 : boolean +>a6 === b6 : boolean +>a6 : A6 +>b6 : B6 + +var r7b1 = b1 === a1; +>r7b1 : boolean +>b1 === a1 : boolean +>b1 : B1 +>a1 : A1 + +var r7b2 = base2 === base1; +>r7b2 : boolean +>base2 === base1 : boolean +>base2 : Base +>base1 : Base + +var r7b3 = b2 === a2; +>r7b3 : boolean +>b2 === a2 : boolean +>b2 : B2 +>a2 : A2 + +var r7b4 = b3 === a3; +>r7b4 : boolean +>b3 === a3 : boolean +>b3 : B3 +>a3 : A3 + +var r7b5 = b4 === a4; +>r7b5 : boolean +>b4 === a4 : boolean +>b4 : B4 +>a4 : A4 + +var r7b6 = b5 === a5; +>r7b6 : boolean +>b5 === a5 : boolean +>b5 : B5 +>a5 : A5 + +var r7b7 = b6 === a6; +>r7b7 : boolean +>b6 === a6 : boolean +>b6 : B6 +>a6 : A6 + +// operator !== +var r8a1 = a1 !== b1; +>r8a1 : boolean +>a1 !== b1 : boolean +>a1 : A1 +>b1 : B1 + +var r8a2 = base1 !== base2; +>r8a2 : boolean +>base1 !== base2 : boolean +>base1 : Base +>base2 : Base + +var r8a3 = a2 !== b2; +>r8a3 : boolean +>a2 !== b2 : boolean +>a2 : A2 +>b2 : B2 + +var r8a4 = a3 !== b3; +>r8a4 : boolean +>a3 !== b3 : boolean +>a3 : A3 +>b3 : B3 + +var r8a5 = a4 !== b4; +>r8a5 : boolean +>a4 !== b4 : boolean +>a4 : A4 +>b4 : B4 + +var r8a6 = a5 !== b5; +>r8a6 : boolean +>a5 !== b5 : boolean +>a5 : A5 +>b5 : B5 + +var r8a7 = a6 !== b6; +>r8a7 : boolean +>a6 !== b6 : boolean +>a6 : A6 +>b6 : B6 + +var r8b1 = b1 !== a1; +>r8b1 : boolean +>b1 !== a1 : boolean +>b1 : B1 +>a1 : A1 + +var r8b2 = base2 !== base1; +>r8b2 : boolean +>base2 !== base1 : boolean +>base2 : Base +>base1 : Base + +var r8b3 = b2 !== a2; +>r8b3 : boolean +>b2 !== a2 : boolean +>b2 : B2 +>a2 : A2 + +var r8b4 = b3 !== a3; +>r8b4 : boolean +>b3 !== a3 : boolean +>b3 : B3 +>a3 : A3 + +var r8b5 = b4 !== a4; +>r8b5 : boolean +>b4 !== a4 : boolean +>b4 : B4 +>a4 : A4 + +var r8b6 = b5 !== a5; +>r8b6 : boolean +>b5 !== a5 : boolean +>b5 : B5 +>a5 : A5 + +var r8b7 = b6 !== a6; +>r8b7 : boolean +>b6 !== a6 : boolean +>b6 : B6 +>a6 : A6 + diff --git a/tests/baselines/reference/comparisonOperatorWithIdenticalPrimitiveType.js b/tests/baselines/reference/comparisonOperatorWithIdenticalPrimitiveType.js index c5d64ff5f55..ad547ea769b 100644 --- a/tests/baselines/reference/comparisonOperatorWithIdenticalPrimitiveType.js +++ b/tests/baselines/reference/comparisonOperatorWithIdenticalPrimitiveType.js @@ -91,6 +91,7 @@ var b; var c; var d; var e; +// operator < var ra1 = a < a; var ra2 = b < b; var ra3 = c < c; @@ -98,6 +99,7 @@ var ra4 = d < d; var ra5 = e < e; var ra6 = null < null; var ra7 = undefined < undefined; +// operator > var rb1 = a > a; var rb2 = b > b; var rb3 = c > c; @@ -105,6 +107,7 @@ var rb4 = d > d; var rb5 = e > e; var rb6 = null > null; var rb7 = undefined > undefined; +// operator <= var rc1 = a <= a; var rc2 = b <= b; var rc3 = c <= c; @@ -112,6 +115,7 @@ var rc4 = d <= d; var rc5 = e <= e; var rc6 = null <= null; var rc7 = undefined <= undefined; +// operator >= var rd1 = a >= a; var rd2 = b >= b; var rd3 = c >= c; @@ -119,6 +123,7 @@ var rd4 = d >= d; var rd5 = e >= e; var rd6 = null >= null; var rd7 = undefined >= undefined; +// operator == var re1 = a == a; var re2 = b == b; var re3 = c == c; @@ -126,6 +131,7 @@ var re4 = d == d; var re5 = e == e; var re6 = null == null; var re7 = undefined == undefined; +// operator != var rf1 = a != a; var rf2 = b != b; var rf3 = c != c; @@ -133,6 +139,7 @@ var rf4 = d != d; var rf5 = e != e; var rf6 = null != null; var rf7 = undefined != undefined; +// operator === var rg1 = a === a; var rg2 = b === b; var rg3 = c === c; @@ -140,6 +147,7 @@ var rg4 = d === d; var rg5 = e === e; var rg6 = null === null; var rg7 = undefined === undefined; +// operator !== var rh1 = a !== a; var rh2 = b !== b; var rh3 = c !== c; diff --git a/tests/baselines/reference/comparisonOperatorWithIdenticalPrimitiveType.types b/tests/baselines/reference/comparisonOperatorWithIdenticalPrimitiveType.types new file mode 100644 index 00000000000..8c823072ac3 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithIdenticalPrimitiveType.types @@ -0,0 +1,351 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIdenticalPrimitiveType.ts === +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a: number; +>a : number + +var b: boolean; +>b : boolean + +var c: string; +>c : string + +var d: void; +>d : void + +var e: E; +>e : E +>E : E + +// operator < +var ra1 = a < a; +>ra1 : boolean +>a < a : boolean +>a : number +>a : number + +var ra2 = b < b; +>ra2 : boolean +>b < b : boolean +>b : boolean +>b : boolean + +var ra3 = c < c; +>ra3 : boolean +>c < c : boolean +>c : string +>c : string + +var ra4 = d < d; +>ra4 : boolean +>d < d : boolean +>d : void +>d : void + +var ra5 = e < e; +>ra5 : boolean +>e < e : boolean +>e : E +>e : E + +var ra6 = null < null; +>ra6 : boolean +>null < null : boolean + +var ra7 = undefined < undefined; +>ra7 : boolean +>undefined < undefined : boolean +>undefined : undefined +>undefined : undefined + +// operator > +var rb1 = a > a; +>rb1 : boolean +>a > a : boolean +>a : number +>a : number + +var rb2 = b > b; +>rb2 : boolean +>b > b : boolean +>b : boolean +>b : boolean + +var rb3 = c > c; +>rb3 : boolean +>c > c : boolean +>c : string +>c : string + +var rb4 = d > d; +>rb4 : boolean +>d > d : boolean +>d : void +>d : void + +var rb5 = e > e; +>rb5 : boolean +>e > e : boolean +>e : E +>e : E + +var rb6 = null > null; +>rb6 : boolean +>null > null : boolean + +var rb7 = undefined > undefined; +>rb7 : boolean +>undefined > undefined : boolean +>undefined : undefined +>undefined : undefined + +// operator <= +var rc1 = a <= a; +>rc1 : boolean +>a <= a : boolean +>a : number +>a : number + +var rc2 = b <= b; +>rc2 : boolean +>b <= b : boolean +>b : boolean +>b : boolean + +var rc3 = c <= c; +>rc3 : boolean +>c <= c : boolean +>c : string +>c : string + +var rc4 = d <= d; +>rc4 : boolean +>d <= d : boolean +>d : void +>d : void + +var rc5 = e <= e; +>rc5 : boolean +>e <= e : boolean +>e : E +>e : E + +var rc6 = null <= null; +>rc6 : boolean +>null <= null : boolean + +var rc7 = undefined <= undefined; +>rc7 : boolean +>undefined <= undefined : boolean +>undefined : undefined +>undefined : undefined + +// operator >= +var rd1 = a >= a; +>rd1 : boolean +>a >= a : boolean +>a : number +>a : number + +var rd2 = b >= b; +>rd2 : boolean +>b >= b : boolean +>b : boolean +>b : boolean + +var rd3 = c >= c; +>rd3 : boolean +>c >= c : boolean +>c : string +>c : string + +var rd4 = d >= d; +>rd4 : boolean +>d >= d : boolean +>d : void +>d : void + +var rd5 = e >= e; +>rd5 : boolean +>e >= e : boolean +>e : E +>e : E + +var rd6 = null >= null; +>rd6 : boolean +>null >= null : boolean + +var rd7 = undefined >= undefined; +>rd7 : boolean +>undefined >= undefined : boolean +>undefined : undefined +>undefined : undefined + +// operator == +var re1 = a == a; +>re1 : boolean +>a == a : boolean +>a : number +>a : number + +var re2 = b == b; +>re2 : boolean +>b == b : boolean +>b : boolean +>b : boolean + +var re3 = c == c; +>re3 : boolean +>c == c : boolean +>c : string +>c : string + +var re4 = d == d; +>re4 : boolean +>d == d : boolean +>d : void +>d : void + +var re5 = e == e; +>re5 : boolean +>e == e : boolean +>e : E +>e : E + +var re6 = null == null; +>re6 : boolean +>null == null : boolean + +var re7 = undefined == undefined; +>re7 : boolean +>undefined == undefined : boolean +>undefined : undefined +>undefined : undefined + +// operator != +var rf1 = a != a; +>rf1 : boolean +>a != a : boolean +>a : number +>a : number + +var rf2 = b != b; +>rf2 : boolean +>b != b : boolean +>b : boolean +>b : boolean + +var rf3 = c != c; +>rf3 : boolean +>c != c : boolean +>c : string +>c : string + +var rf4 = d != d; +>rf4 : boolean +>d != d : boolean +>d : void +>d : void + +var rf5 = e != e; +>rf5 : boolean +>e != e : boolean +>e : E +>e : E + +var rf6 = null != null; +>rf6 : boolean +>null != null : boolean + +var rf7 = undefined != undefined; +>rf7 : boolean +>undefined != undefined : boolean +>undefined : undefined +>undefined : undefined + +// operator === +var rg1 = a === a; +>rg1 : boolean +>a === a : boolean +>a : number +>a : number + +var rg2 = b === b; +>rg2 : boolean +>b === b : boolean +>b : boolean +>b : boolean + +var rg3 = c === c; +>rg3 : boolean +>c === c : boolean +>c : string +>c : string + +var rg4 = d === d; +>rg4 : boolean +>d === d : boolean +>d : void +>d : void + +var rg5 = e === e; +>rg5 : boolean +>e === e : boolean +>e : E +>e : E + +var rg6 = null === null; +>rg6 : boolean +>null === null : boolean + +var rg7 = undefined === undefined; +>rg7 : boolean +>undefined === undefined : boolean +>undefined : undefined +>undefined : undefined + +// operator !== +var rh1 = a !== a; +>rh1 : boolean +>a !== a : boolean +>a : number +>a : number + +var rh2 = b !== b; +>rh2 : boolean +>b !== b : boolean +>b : boolean +>b : boolean + +var rh3 = c !== c; +>rh3 : boolean +>c !== c : boolean +>c : string +>c : string + +var rh4 = d !== d; +>rh4 : boolean +>d !== d : boolean +>d : void +>d : void + +var rh5 = e !== e; +>rh5 : boolean +>e !== e : boolean +>e : E +>e : E + +var rh6 = null !== null; +>rh6 : boolean +>null !== null : boolean + +var rh7 = undefined !== undefined; +>rh7 : boolean +>undefined !== undefined : boolean +>undefined : undefined +>undefined : undefined + diff --git a/tests/baselines/reference/comparisonOperatorWithIdenticalTypeParameter.types b/tests/baselines/reference/comparisonOperatorWithIdenticalTypeParameter.types new file mode 100644 index 00000000000..b545fdc9f1a --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithIdenticalTypeParameter.types @@ -0,0 +1,55 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithIdenticalTypeParameter.ts === +function foo(t: T) { +>foo : (t: T) => void +>T : T +>t : T +>T : T + + var r1 = t < t; +>r1 : boolean +>t < t : boolean +>t : T +>t : T + + var r2 = t > t; +>r2 : boolean +>t > t : boolean +>t : T +>t : T + + var r3 = t <= t; +>r3 : boolean +>t <= t : boolean +>t : T +>t : T + + var r4 = t >= t; +>r4 : boolean +>t >= t : boolean +>t : T +>t : T + + var r5 = t == t; +>r5 : boolean +>t == t : boolean +>t : T +>t : T + + var r6 = t != t; +>r6 : boolean +>t != t : boolean +>t : T +>t : T + + var r7 = t === t; +>r7 : boolean +>t === t : boolean +>t : T +>t : T + + var r8 = t !== t; +>r8 : boolean +>t !== t : boolean +>t : T +>t : T +} diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnCallSignature.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnCallSignature.js index 3258d2a25c8..10250785642 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnCallSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnCallSignature.js @@ -206,6 +206,7 @@ var a6; var b6; var a7; var b7; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; @@ -220,6 +221,7 @@ var r1b4 = b4 < a4; var r1b5 = b5 < a5; var r1b6 = b6 < a6; var r1b7 = b7 < a7; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; @@ -234,6 +236,7 @@ var r2b4 = b4 > a4; var r2b5 = b5 > a5; var r2b6 = b6 > a6; var r2b7 = b7 > a7; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; @@ -248,6 +251,7 @@ var r3b4 = b4 <= a4; var r3b5 = b5 <= a5; var r3b6 = b6 <= a6; var r3b7 = b7 <= a7; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; @@ -262,6 +266,7 @@ var r4b4 = b4 >= a4; var r4b5 = b5 >= a5; var r4b6 = b6 >= a6; var r4b7 = b7 >= a7; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; @@ -276,6 +281,7 @@ var r5b4 = b4 == a4; var r5b5 = b5 == a5; var r5b6 = b6 == a6; var r5b7 = b7 == a7; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; @@ -290,6 +296,7 @@ var r6b4 = b4 != a4; var r6b5 = b5 != a5; var r6b6 = b6 != a6; var r6b7 = b7 != a7; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; @@ -304,6 +311,7 @@ var r7b4 = b4 === a4; var r7b5 = b5 === a5; var r7b6 = b6 === a6; var r7b7 = b7 === a7; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnConstructorSignature.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnConstructorSignature.js index fc5ea7b40b9..6235eb4b4d9 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnConstructorSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnConstructorSignature.js @@ -206,6 +206,7 @@ var a6; var b6; var a7; var b7; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; @@ -220,6 +221,7 @@ var r1b4 = b4 < a4; var r1b5 = b5 < a5; var r1b6 = b6 < a6; var r1b7 = b7 < a7; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; @@ -234,6 +236,7 @@ var r2b4 = b4 > a4; var r2b5 = b5 > a5; var r2b6 = b6 > a6; var r2b7 = b7 > a7; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; @@ -248,6 +251,7 @@ var r3b4 = b4 <= a4; var r3b5 = b5 <= a5; var r3b6 = b6 <= a6; var r3b7 = b7 <= a7; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; @@ -262,6 +266,7 @@ var r4b4 = b4 >= a4; var r4b5 = b5 >= a5; var r4b6 = b6 >= a6; var r4b7 = b7 >= a7; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; @@ -276,6 +281,7 @@ var r5b4 = b4 == a4; var r5b5 = b5 == a5; var r5b6 = b6 == a6; var r5b7 = b7 == a7; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; @@ -290,6 +296,7 @@ var r6b4 = b4 != a4; var r6b5 = b5 != a5; var r6b6 = b6 != a6; var r6b7 = b7 != a7; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; @@ -304,6 +311,7 @@ var r7b4 = b4 === a4; var r7b5 = b5 === a5; var r7b6 = b6 === a6; var r7b7 = b7 === a7; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.js index d5ace469bd2..43ae21c3b03 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.js @@ -143,6 +143,7 @@ var a3; var b3; var a4; var b4; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; @@ -151,6 +152,7 @@ var r1b1 = b1 < a1; var r1b2 = b2 < a2; var r1b3 = b3 < a3; var r1b4 = b4 < a4; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; @@ -159,6 +161,7 @@ var r2b1 = b1 > a1; var r2b2 = b2 > a2; var r2b3 = b3 > a3; var r2b4 = b4 > a4; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; @@ -167,6 +170,7 @@ var r3b1 = b1 <= a1; var r3b2 = b2 <= a2; var r3b3 = b3 <= a3; var r3b4 = b4 <= a4; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; @@ -175,6 +179,7 @@ var r4b1 = b1 >= a1; var r4b2 = b2 >= a2; var r4b3 = b3 >= a3; var r4b4 = b4 >= a4; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; @@ -183,6 +188,7 @@ var r5b1 = b1 == a1; var r5b2 = b2 == a2; var r5b3 = b3 == a3; var r5b4 = b4 == a4; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; @@ -191,6 +197,7 @@ var r6b1 = b1 != a1; var r6b2 = b2 != a2; var r6b3 = b3 != a3; var r6b4 = b4 != a4; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; @@ -199,6 +206,7 @@ var r7b1 = b1 === a1; var r7b2 = b2 === a2; var r7b3 = b3 === a3; var r7b4 = b4 === a4; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedCallSignature.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedCallSignature.js index 8ba98b249d0..83adba638a6 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedCallSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedCallSignature.js @@ -185,6 +185,7 @@ var a5; var b5; var a6; var b6; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; @@ -197,6 +198,7 @@ var r1b3 = b3 < a3; var r1b4 = b4 < a4; var r1b5 = b5 < a5; var r1b6 = b6 < a6; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; @@ -209,6 +211,7 @@ var r2b3 = b3 > a3; var r2b4 = b4 > a4; var r2b5 = b5 > a5; var r2b6 = b6 > a6; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; @@ -221,6 +224,7 @@ var r3b3 = b3 <= a3; var r3b4 = b4 <= a4; var r3b5 = b5 <= a5; var r3b6 = b6 <= a6; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; @@ -233,6 +237,7 @@ var r4b3 = b3 >= a3; var r4b4 = b4 >= a4; var r4b5 = b5 >= a5; var r4b6 = b6 >= a6; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; @@ -245,6 +250,7 @@ var r5b3 = b3 == a3; var r5b4 = b4 == a4; var r5b5 = b5 == a5; var r5b6 = b6 == a6; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; @@ -257,6 +263,7 @@ var r6b3 = b3 != a3; var r6b4 = b4 != a4; var r6b5 = b5 != a5; var r6b6 = b6 != a6; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; @@ -269,6 +276,7 @@ var r7b3 = b3 === a3; var r7b4 = b4 === a4; var r7b5 = b5 === a5; var r7b6 = b6 === a6; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedConstructorSignature.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedConstructorSignature.js index 6abddb35323..a5a52dccf83 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedConstructorSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnInstantiatedConstructorSignature.js @@ -185,6 +185,7 @@ var a5; var b5; var a6; var b6; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; @@ -197,6 +198,7 @@ var r1b3 = b3 < a3; var r1b4 = b4 < a4; var r1b5 = b5 < a5; var r1b6 = b6 < a6; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; @@ -209,6 +211,7 @@ var r2b3 = b3 > a3; var r2b4 = b4 > a4; var r2b5 = b5 > a5; var r2b6 = b6 > a6; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; @@ -221,6 +224,7 @@ var r3b3 = b3 <= a3; var r3b4 = b4 <= a4; var r3b5 = b5 <= a5; var r3b6 = b6 <= a6; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; @@ -233,6 +237,7 @@ var r4b3 = b3 >= a3; var r4b4 = b4 >= a4; var r4b5 = b5 >= a5; var r4b6 = b6 >= a6; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; @@ -245,6 +250,7 @@ var r5b3 = b3 == a3; var r5b4 = b4 == a4; var r5b5 = b5 == a5; var r5b6 = b6 == a6; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; @@ -257,6 +263,7 @@ var r6b3 = b3 != a3; var r6b4 = b4 != a4; var r6b5 = b5 != a5; var r6b6 = b6 != a6; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; @@ -269,6 +276,7 @@ var r7b3 = b3 === a3; var r7b4 = b4 === a4; var r7b5 = b5 === a5; var r7b6 = b6 === a6; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnOptionalProperty.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnOptionalProperty.js index 2c48a4fe733..ae11af97afc 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnOptionalProperty.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnOptionalProperty.js @@ -45,19 +45,27 @@ var rh2 = b !== a; //// [comparisonOperatorWithNoRelationshipObjectsOnOptionalProperty.js] var a; var b; +// operator < var ra1 = a < b; var ra2 = b < a; +// operator > var rb1 = a > b; var rb2 = b > a; +// operator <= var rc1 = a <= b; var rc2 = b <= a; +// operator >= var rd1 = a >= b; var rd2 = b >= a; +// operator == var re1 = a == b; var re2 = b == a; +// operator != var rf1 = a != b; var rf2 = b != a; +// operator === var rg1 = a === b; var rg2 = b === a; +// operator !== var rh1 = a !== b; var rh2 = b !== a; diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnProperty.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnProperty.js index 1eb7ac188d1..d6308211191 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnProperty.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnProperty.js @@ -101,34 +101,42 @@ var a1; var b1; var a2; var b2; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1b1 = b1 < a1; var r1b2 = b2 < a2; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2b1 = b1 > a1; var r2b2 = b2 > a2; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3b1 = b1 <= a1; var r3b2 = b2 <= a2; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4b1 = b1 >= a1; var r4b2 = b2 >= a2; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5b1 = b1 == a1; var r5b2 = b2 == a2; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6b1 = b1 != a1; var r6b2 = b2 != a2; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7b1 = b1 === a1; var r7b2 = b2 === a2; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8b1 = b1 !== a1; diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipPrimitiveType.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipPrimitiveType.js index 2220793ed2c..3872e950f40 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipPrimitiveType.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipPrimitiveType.js @@ -227,10 +227,11 @@ var b; var c; var d; var e; +// operator < var r1a1 = a < b; var r1a1 = a < c; var r1a1 = a < d; -var r1a1 = a < e; +var r1a1 = a < e; // no error, expected var r1b1 = b < a; var r1b1 = b < c; var r1b1 = b < d; @@ -243,14 +244,15 @@ var r1d1 = d < a; var r1d1 = d < b; var r1d1 = d < c; var r1d1 = d < e; -var r1e1 = e < a; +var r1e1 = e < a; // no error, expected var r1e1 = e < b; var r1e1 = e < c; var r1e1 = e < d; +// operator > var r2a1 = a > b; var r2a1 = a > c; var r2a1 = a > d; -var r2a1 = a > e; +var r2a1 = a > e; // no error, expected var r2b1 = b > a; var r2b1 = b > c; var r2b1 = b > d; @@ -263,14 +265,15 @@ var r2d1 = d > a; var r2d1 = d > b; var r2d1 = d > c; var r2d1 = d > e; -var r2e1 = e > a; +var r2e1 = e > a; // no error, expected var r2e1 = e > b; var r2e1 = e > c; var r2e1 = e > d; +// operator <= var r3a1 = a <= b; var r3a1 = a <= c; var r3a1 = a <= d; -var r3a1 = a <= e; +var r3a1 = a <= e; // no error, expected var r3b1 = b <= a; var r3b1 = b <= c; var r3b1 = b <= d; @@ -283,14 +286,15 @@ var r3d1 = d <= a; var r3d1 = d <= b; var r3d1 = d <= c; var r3d1 = d <= e; -var r3e1 = e <= a; +var r3e1 = e <= a; // no error, expected var r3e1 = e <= b; var r3e1 = e <= c; var r3e1 = e <= d; +// operator >= var r4a1 = a >= b; var r4a1 = a >= c; var r4a1 = a >= d; -var r4a1 = a >= e; +var r4a1 = a >= e; // no error, expected var r4b1 = b >= a; var r4b1 = b >= c; var r4b1 = b >= d; @@ -303,14 +307,15 @@ var r4d1 = d >= a; var r4d1 = d >= b; var r4d1 = d >= c; var r4d1 = d >= e; -var r4e1 = e >= a; +var r4e1 = e >= a; // no error, expected var r4e1 = e >= b; var r4e1 = e >= c; var r4e1 = e >= d; +// operator == var r5a1 = a == b; var r5a1 = a == c; var r5a1 = a == d; -var r5a1 = a == e; +var r5a1 = a == e; // no error, expected var r5b1 = b == a; var r5b1 = b == c; var r5b1 = b == d; @@ -323,14 +328,15 @@ var r5d1 = d == a; var r5d1 = d == b; var r5d1 = d == c; var r5d1 = d == e; -var r5e1 = e == a; +var r5e1 = e == a; // no error, expected var r5e1 = e == b; var r5e1 = e == c; var r5e1 = e == d; +// operator != var r6a1 = a != b; var r6a1 = a != c; var r6a1 = a != d; -var r6a1 = a != e; +var r6a1 = a != e; // no error, expected var r6b1 = b != a; var r6b1 = b != c; var r6b1 = b != d; @@ -343,14 +349,15 @@ var r6d1 = d != a; var r6d1 = d != b; var r6d1 = d != c; var r6d1 = d != e; -var r6e1 = e != a; +var r6e1 = e != a; // no error, expected var r6e1 = e != b; var r6e1 = e != c; var r6e1 = e != d; +// operator === var r7a1 = a === b; var r7a1 = a === c; var r7a1 = a === d; -var r7a1 = a === e; +var r7a1 = a === e; // no error, expected var r7b1 = b === a; var r7b1 = b === c; var r7b1 = b === d; @@ -363,14 +370,15 @@ var r7d1 = d === a; var r7d1 = d === b; var r7d1 = d === c; var r7d1 = d === e; -var r7e1 = e === a; +var r7e1 = e === a; // no error, expected var r7e1 = e === b; var r7e1 = e === c; var r7e1 = e === d; +// operator !== var r8a1 = a !== b; var r8a1 = a !== c; var r8a1 = a !== d; -var r8a1 = a !== e; +var r8a1 = a !== e; // no error, expected var r8b1 = b !== a; var r8b1 = b !== c; var r8b1 = b !== d; @@ -383,7 +391,7 @@ var r8d1 = d !== a; var r8d1 = d !== b; var r8d1 = d !== c; var r8d1 = d !== e; -var r8e1 = e !== a; +var r8e1 = e !== a; // no error, expected var r8e1 = e !== b; var r8e1 = e !== c; var r8e1 = e !== d; diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipTypeParameter.js b/tests/baselines/reference/comparisonOperatorWithNoRelationshipTypeParameter.js index 316bb0e4971..7042a841502 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipTypeParameter.js +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipTypeParameter.js @@ -179,6 +179,7 @@ function foo(t, u) { var r6 = t != u; var r7 = t === u; var r8 = t !== u; + // operator < var r1a1 = t < a; var r1a2 = t < b; var r1a3 = t < c; @@ -193,6 +194,7 @@ function foo(t, u) { var r1b5 = e < t; var r1b6 = f < t; var r1b7 = g < t; + // operator > var r2a1 = t < a; var r2a2 = t < b; var r2a3 = t < c; @@ -207,6 +209,7 @@ function foo(t, u) { var r2b5 = e < t; var r2b6 = f < t; var r2b7 = g < t; + // operator <= var r3a1 = t < a; var r3a2 = t < b; var r3a3 = t < c; @@ -221,6 +224,7 @@ function foo(t, u) { var r3b5 = e < t; var r3b6 = f < t; var r3b7 = g < t; + // operator >= var r4a1 = t < a; var r4a2 = t < b; var r4a3 = t < c; @@ -235,6 +239,7 @@ function foo(t, u) { var r4b5 = e < t; var r4b6 = f < t; var r4b7 = g < t; + // operator == var r5a1 = t < a; var r5a2 = t < b; var r5a3 = t < c; @@ -249,6 +254,7 @@ function foo(t, u) { var r5b5 = e < t; var r5b6 = f < t; var r5b7 = g < t; + // operator != var r6a1 = t < a; var r6a2 = t < b; var r6a3 = t < c; @@ -263,6 +269,7 @@ function foo(t, u) { var r6b5 = e < t; var r6b6 = f < t; var r6b7 = g < t; + // operator === var r7a1 = t < a; var r7a2 = t < b; var r7a3 = t < c; @@ -277,6 +284,7 @@ function foo(t, u) { var r7b5 = e < t; var r7b6 = f < t; var r7b7 = g < t; + // operator !== var r8a1 = t < a; var r8a2 = t < b; var r8a3 = t < c; diff --git a/tests/baselines/reference/comparisonOperatorWithOneOperandIsAny.js b/tests/baselines/reference/comparisonOperatorWithOneOperandIsAny.js index 24fc1b16b8a..9a52b04b548 100644 --- a/tests/baselines/reference/comparisonOperatorWithOneOperandIsAny.js +++ b/tests/baselines/reference/comparisonOperatorWithOneOperandIsAny.js @@ -200,6 +200,7 @@ var d; var e; var f; var g; +// operator < var r1a1 = x < a; var r1a2 = x < b; var r1a3 = x < c; @@ -214,6 +215,7 @@ var r1b4 = d < x; var r1b5 = e < x; var r1b6 = f < x; var r1b7 = g < x; +// operator > var r2a1 = x > a; var r2a2 = x > b; var r2a3 = x > c; @@ -228,6 +230,7 @@ var r2b4 = d > x; var r2b5 = e > x; var r2b6 = f > x; var r2b7 = g > x; +// operator <= var r3a1 = x <= a; var r3a2 = x <= b; var r3a3 = x <= c; @@ -242,6 +245,7 @@ var r3b4 = d <= x; var r3b5 = e <= x; var r3b6 = f <= x; var r3b7 = g <= x; +// operator >= var r4a1 = x >= a; var r4a2 = x >= b; var r4a3 = x >= c; @@ -256,6 +260,7 @@ var r4b4 = d >= x; var r4b5 = e >= x; var r4b6 = f >= x; var r4b7 = g >= x; +// operator == var r5a1 = x == a; var r5a2 = x == b; var r5a3 = x == c; @@ -270,6 +275,7 @@ var r5b4 = d == x; var r5b5 = e == x; var r5b6 = f == x; var r5b7 = g == x; +// operator != var r6a1 = x != a; var r6a2 = x != b; var r6a3 = x != c; @@ -284,6 +290,7 @@ var r6b4 = d != x; var r6b5 = e != x; var r6b6 = f != x; var r6b7 = g != x; +// operator === var r7a1 = x === a; var r7a2 = x === b; var r7a3 = x === c; @@ -298,6 +305,7 @@ var r7b4 = d === x; var r7b5 = e === x; var r7b6 = f === x; var r7b7 = g === x; +// operator !== var r8a1 = x !== a; var r8a2 = x !== b; var r8a3 = x !== c; diff --git a/tests/baselines/reference/comparisonOperatorWithOneOperandIsAny.types b/tests/baselines/reference/comparisonOperatorWithOneOperandIsAny.types new file mode 100644 index 00000000000..e132f03cfa3 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithOneOperandIsAny.types @@ -0,0 +1,815 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithOneOperandIsAny.ts === +var x: any; +>x : any + +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +function foo(t: T) { +>foo : (t: T) => void +>T : T +>t : T +>T : T + + var foo_r1 = t < x; +>foo_r1 : boolean +>t < x : boolean +>t : T +>x : any + + var foo_r2 = t > x; +>foo_r2 : boolean +>t > x : boolean +>t : T +>x : any + + var foo_r3 = t <= x; +>foo_r3 : boolean +>t <= x : boolean +>t : T +>x : any + + var foo_r4 = t >= x; +>foo_r4 : boolean +>t >= x : boolean +>t : T +>x : any + + var foo_r5 = t == x; +>foo_r5 : boolean +>t == x : boolean +>t : T +>x : any + + var foo_r6 = t != x; +>foo_r6 : boolean +>t != x : boolean +>t : T +>x : any + + var foo_r7 = t === x; +>foo_r7 : boolean +>t === x : boolean +>t : T +>x : any + + var foo_r8 = t !== x; +>foo_r8 : boolean +>t !== x : boolean +>t : T +>x : any + + var foo_r1 = x < t; +>foo_r1 : boolean +>x < t : boolean +>x : any +>t : T + + var foo_r2 = x > t; +>foo_r2 : boolean +>x > t : boolean +>x : any +>t : T + + var foo_r3 = x <= t; +>foo_r3 : boolean +>x <= t : boolean +>x : any +>t : T + + var foo_r4 = x >= t; +>foo_r4 : boolean +>x >= t : boolean +>x : any +>t : T + + var foo_r5 = x == t; +>foo_r5 : boolean +>x == t : boolean +>x : any +>t : T + + var foo_r6 = x != t; +>foo_r6 : boolean +>x != t : boolean +>x : any +>t : T + + var foo_r7 = x === t; +>foo_r7 : boolean +>x === t : boolean +>x : any +>t : T + + var foo_r8 = x !== t; +>foo_r8 : boolean +>x !== t : boolean +>x : any +>t : T +} + +var a: boolean; +>a : boolean + +var b: number; +>b : number + +var c: string; +>c : string + +var d: void; +>d : void + +var e: E; +>e : E +>E : E + +var f: {}; +>f : {} + +var g: string[]; +>g : string[] + +// operator < +var r1a1 = x < a; +>r1a1 : boolean +>x < a : boolean +>x : any +>a : boolean + +var r1a2 = x < b; +>r1a2 : boolean +>x < b : boolean +>x : any +>b : number + +var r1a3 = x < c; +>r1a3 : boolean +>x < c : boolean +>x : any +>c : string + +var r1a4 = x < d; +>r1a4 : boolean +>x < d : boolean +>x : any +>d : void + +var r1a5 = x < e; +>r1a5 : boolean +>x < e : boolean +>x : any +>e : E + +var r1a6 = x < f; +>r1a6 : boolean +>x < f : boolean +>x : any +>f : {} + +var r1a7 = x < g; +>r1a7 : boolean +>x < g : boolean +>x : any +>g : string[] + +var r1b1 = a < x; +>r1b1 : boolean +>a < x : boolean +>a : boolean +>x : any + +var r1b2 = b < x; +>r1b2 : boolean +>b < x : boolean +>b : number +>x : any + +var r1b3 = c < x; +>r1b3 : boolean +>c < x : boolean +>c : string +>x : any + +var r1b4 = d < x; +>r1b4 : boolean +>d < x : boolean +>d : void +>x : any + +var r1b5 = e < x; +>r1b5 : boolean +>e < x : boolean +>e : E +>x : any + +var r1b6 = f < x; +>r1b6 : boolean +>f < x : boolean +>f : {} +>x : any + +var r1b7 = g < x; +>r1b7 : boolean +>g < x : boolean +>g : string[] +>x : any + +// operator > +var r2a1 = x > a; +>r2a1 : boolean +>x > a : boolean +>x : any +>a : boolean + +var r2a2 = x > b; +>r2a2 : boolean +>x > b : boolean +>x : any +>b : number + +var r2a3 = x > c; +>r2a3 : boolean +>x > c : boolean +>x : any +>c : string + +var r2a4 = x > d; +>r2a4 : boolean +>x > d : boolean +>x : any +>d : void + +var r2a5 = x > e; +>r2a5 : boolean +>x > e : boolean +>x : any +>e : E + +var r2a6 = x > f; +>r2a6 : boolean +>x > f : boolean +>x : any +>f : {} + +var r2a7 = x > g; +>r2a7 : boolean +>x > g : boolean +>x : any +>g : string[] + +var r2b1 = a > x; +>r2b1 : boolean +>a > x : boolean +>a : boolean +>x : any + +var r2b2 = b > x; +>r2b2 : boolean +>b > x : boolean +>b : number +>x : any + +var r2b3 = c > x; +>r2b3 : boolean +>c > x : boolean +>c : string +>x : any + +var r2b4 = d > x; +>r2b4 : boolean +>d > x : boolean +>d : void +>x : any + +var r2b5 = e > x; +>r2b5 : boolean +>e > x : boolean +>e : E +>x : any + +var r2b6 = f > x; +>r2b6 : boolean +>f > x : boolean +>f : {} +>x : any + +var r2b7 = g > x; +>r2b7 : boolean +>g > x : boolean +>g : string[] +>x : any + +// operator <= +var r3a1 = x <= a; +>r3a1 : boolean +>x <= a : boolean +>x : any +>a : boolean + +var r3a2 = x <= b; +>r3a2 : boolean +>x <= b : boolean +>x : any +>b : number + +var r3a3 = x <= c; +>r3a3 : boolean +>x <= c : boolean +>x : any +>c : string + +var r3a4 = x <= d; +>r3a4 : boolean +>x <= d : boolean +>x : any +>d : void + +var r3a5 = x <= e; +>r3a5 : boolean +>x <= e : boolean +>x : any +>e : E + +var r3a6 = x <= f; +>r3a6 : boolean +>x <= f : boolean +>x : any +>f : {} + +var r3a7 = x <= g; +>r3a7 : boolean +>x <= g : boolean +>x : any +>g : string[] + +var r3b1 = a <= x; +>r3b1 : boolean +>a <= x : boolean +>a : boolean +>x : any + +var r3b2 = b <= x; +>r3b2 : boolean +>b <= x : boolean +>b : number +>x : any + +var r3b3 = c <= x; +>r3b3 : boolean +>c <= x : boolean +>c : string +>x : any + +var r3b4 = d <= x; +>r3b4 : boolean +>d <= x : boolean +>d : void +>x : any + +var r3b5 = e <= x; +>r3b5 : boolean +>e <= x : boolean +>e : E +>x : any + +var r3b6 = f <= x; +>r3b6 : boolean +>f <= x : boolean +>f : {} +>x : any + +var r3b7 = g <= x; +>r3b7 : boolean +>g <= x : boolean +>g : string[] +>x : any + +// operator >= +var r4a1 = x >= a; +>r4a1 : boolean +>x >= a : boolean +>x : any +>a : boolean + +var r4a2 = x >= b; +>r4a2 : boolean +>x >= b : boolean +>x : any +>b : number + +var r4a3 = x >= c; +>r4a3 : boolean +>x >= c : boolean +>x : any +>c : string + +var r4a4 = x >= d; +>r4a4 : boolean +>x >= d : boolean +>x : any +>d : void + +var r4a5 = x >= e; +>r4a5 : boolean +>x >= e : boolean +>x : any +>e : E + +var r4a6 = x >= f; +>r4a6 : boolean +>x >= f : boolean +>x : any +>f : {} + +var r4a7 = x >= g; +>r4a7 : boolean +>x >= g : boolean +>x : any +>g : string[] + +var r4b1 = a >= x; +>r4b1 : boolean +>a >= x : boolean +>a : boolean +>x : any + +var r4b2 = b >= x; +>r4b2 : boolean +>b >= x : boolean +>b : number +>x : any + +var r4b3 = c >= x; +>r4b3 : boolean +>c >= x : boolean +>c : string +>x : any + +var r4b4 = d >= x; +>r4b4 : boolean +>d >= x : boolean +>d : void +>x : any + +var r4b5 = e >= x; +>r4b5 : boolean +>e >= x : boolean +>e : E +>x : any + +var r4b6 = f >= x; +>r4b6 : boolean +>f >= x : boolean +>f : {} +>x : any + +var r4b7 = g >= x; +>r4b7 : boolean +>g >= x : boolean +>g : string[] +>x : any + +// operator == +var r5a1 = x == a; +>r5a1 : boolean +>x == a : boolean +>x : any +>a : boolean + +var r5a2 = x == b; +>r5a2 : boolean +>x == b : boolean +>x : any +>b : number + +var r5a3 = x == c; +>r5a3 : boolean +>x == c : boolean +>x : any +>c : string + +var r5a4 = x == d; +>r5a4 : boolean +>x == d : boolean +>x : any +>d : void + +var r5a5 = x == e; +>r5a5 : boolean +>x == e : boolean +>x : any +>e : E + +var r5a6 = x == f; +>r5a6 : boolean +>x == f : boolean +>x : any +>f : {} + +var r5a7 = x == g; +>r5a7 : boolean +>x == g : boolean +>x : any +>g : string[] + +var r5b1 = a == x; +>r5b1 : boolean +>a == x : boolean +>a : boolean +>x : any + +var r5b2 = b == x; +>r5b2 : boolean +>b == x : boolean +>b : number +>x : any + +var r5b3 = c == x; +>r5b3 : boolean +>c == x : boolean +>c : string +>x : any + +var r5b4 = d == x; +>r5b4 : boolean +>d == x : boolean +>d : void +>x : any + +var r5b5 = e == x; +>r5b5 : boolean +>e == x : boolean +>e : E +>x : any + +var r5b6 = f == x; +>r5b6 : boolean +>f == x : boolean +>f : {} +>x : any + +var r5b7 = g == x; +>r5b7 : boolean +>g == x : boolean +>g : string[] +>x : any + +// operator != +var r6a1 = x != a; +>r6a1 : boolean +>x != a : boolean +>x : any +>a : boolean + +var r6a2 = x != b; +>r6a2 : boolean +>x != b : boolean +>x : any +>b : number + +var r6a3 = x != c; +>r6a3 : boolean +>x != c : boolean +>x : any +>c : string + +var r6a4 = x != d; +>r6a4 : boolean +>x != d : boolean +>x : any +>d : void + +var r6a5 = x != e; +>r6a5 : boolean +>x != e : boolean +>x : any +>e : E + +var r6a6 = x != f; +>r6a6 : boolean +>x != f : boolean +>x : any +>f : {} + +var r6a7 = x != g; +>r6a7 : boolean +>x != g : boolean +>x : any +>g : string[] + +var r6b1 = a != x; +>r6b1 : boolean +>a != x : boolean +>a : boolean +>x : any + +var r6b2 = b != x; +>r6b2 : boolean +>b != x : boolean +>b : number +>x : any + +var r6b3 = c != x; +>r6b3 : boolean +>c != x : boolean +>c : string +>x : any + +var r6b4 = d != x; +>r6b4 : boolean +>d != x : boolean +>d : void +>x : any + +var r6b5 = e != x; +>r6b5 : boolean +>e != x : boolean +>e : E +>x : any + +var r6b6 = f != x; +>r6b6 : boolean +>f != x : boolean +>f : {} +>x : any + +var r6b7 = g != x; +>r6b7 : boolean +>g != x : boolean +>g : string[] +>x : any + +// operator === +var r7a1 = x === a; +>r7a1 : boolean +>x === a : boolean +>x : any +>a : boolean + +var r7a2 = x === b; +>r7a2 : boolean +>x === b : boolean +>x : any +>b : number + +var r7a3 = x === c; +>r7a3 : boolean +>x === c : boolean +>x : any +>c : string + +var r7a4 = x === d; +>r7a4 : boolean +>x === d : boolean +>x : any +>d : void + +var r7a5 = x === e; +>r7a5 : boolean +>x === e : boolean +>x : any +>e : E + +var r7a6 = x === f; +>r7a6 : boolean +>x === f : boolean +>x : any +>f : {} + +var r7a7 = x === g; +>r7a7 : boolean +>x === g : boolean +>x : any +>g : string[] + +var r7b1 = a === x; +>r7b1 : boolean +>a === x : boolean +>a : boolean +>x : any + +var r7b2 = b === x; +>r7b2 : boolean +>b === x : boolean +>b : number +>x : any + +var r7b3 = c === x; +>r7b3 : boolean +>c === x : boolean +>c : string +>x : any + +var r7b4 = d === x; +>r7b4 : boolean +>d === x : boolean +>d : void +>x : any + +var r7b5 = e === x; +>r7b5 : boolean +>e === x : boolean +>e : E +>x : any + +var r7b6 = f === x; +>r7b6 : boolean +>f === x : boolean +>f : {} +>x : any + +var r7b7 = g === x; +>r7b7 : boolean +>g === x : boolean +>g : string[] +>x : any + +// operator !== +var r8a1 = x !== a; +>r8a1 : boolean +>x !== a : boolean +>x : any +>a : boolean + +var r8a2 = x !== b; +>r8a2 : boolean +>x !== b : boolean +>x : any +>b : number + +var r8a3 = x !== c; +>r8a3 : boolean +>x !== c : boolean +>x : any +>c : string + +var r8a4 = x !== d; +>r8a4 : boolean +>x !== d : boolean +>x : any +>d : void + +var r8a5 = x !== e; +>r8a5 : boolean +>x !== e : boolean +>x : any +>e : E + +var r8a6 = x !== f; +>r8a6 : boolean +>x !== f : boolean +>x : any +>f : {} + +var r8a7 = x !== g; +>r8a7 : boolean +>x !== g : boolean +>x : any +>g : string[] + +var r8b1 = a !== x; +>r8b1 : boolean +>a !== x : boolean +>a : boolean +>x : any + +var r8b2 = b !== x; +>r8b2 : boolean +>b !== x : boolean +>b : number +>x : any + +var r8b3 = c !== x; +>r8b3 : boolean +>c !== x : boolean +>c : string +>x : any + +var r8b4 = d !== x; +>r8b4 : boolean +>d !== x : boolean +>d : void +>x : any + +var r8b5 = e !== x; +>r8b5 : boolean +>e !== x : boolean +>e : E +>x : any + +var r8b6 = f !== x; +>r8b6 : boolean +>f !== x : boolean +>f : {} +>x : any + +var r8b7 = g !== x; +>r8b7 : boolean +>g !== x : boolean +>g : string[] +>x : any + diff --git a/tests/baselines/reference/comparisonOperatorWithOneOperandIsNull.js b/tests/baselines/reference/comparisonOperatorWithOneOperandIsNull.js index 88d2ef48b1d..32ec46fe52c 100644 --- a/tests/baselines/reference/comparisonOperatorWithOneOperandIsNull.js +++ b/tests/baselines/reference/comparisonOperatorWithOneOperandIsNull.js @@ -197,6 +197,7 @@ var d; var e; var f; var g; +// operator < var r1a1 = null < a; var r1a2 = null < b; var r1a3 = null < c; @@ -211,6 +212,7 @@ var r1b4 = d < null; var r1b5 = e < null; var r1b6 = f < null; var r1b7 = g < null; +// operator > var r2a1 = null > a; var r2a2 = null > b; var r2a3 = null > c; @@ -225,6 +227,7 @@ var r2b4 = d > null; var r2b5 = e > null; var r2b6 = f > null; var r2b7 = g > null; +// operator <= var r3a1 = null <= a; var r3a2 = null <= b; var r3a3 = null <= c; @@ -239,6 +242,7 @@ var r3b4 = d <= null; var r3b5 = e <= null; var r3b6 = f <= null; var r3b7 = g <= null; +// operator >= var r4a1 = null >= a; var r4a2 = null >= b; var r4a3 = null >= c; @@ -253,6 +257,7 @@ var r4b4 = d >= null; var r4b5 = e >= null; var r4b6 = f >= null; var r4b7 = g >= null; +// operator == var r5a1 = null == a; var r5a2 = null == b; var r5a3 = null == c; @@ -267,6 +272,7 @@ var r5b4 = d == null; var r5b5 = e == null; var r5b6 = f == null; var r5b7 = g == null; +// operator != var r6a1 = null != a; var r6a2 = null != b; var r6a3 = null != c; @@ -281,6 +287,7 @@ var r6b4 = d != null; var r6b5 = e != null; var r6b6 = f != null; var r6b7 = g != null; +// operator === var r7a1 = null === a; var r7a2 = null === b; var r7a3 = null === c; @@ -295,6 +302,7 @@ var r7b4 = d === null; var r7b5 = e === null; var r7b6 = f === null; var r7b7 = g === null; +// operator !== var r8a1 = null !== a; var r8a2 = null !== b; var r8a3 = null !== c; diff --git a/tests/baselines/reference/comparisonOperatorWithOneOperandIsNull.types b/tests/baselines/reference/comparisonOperatorWithOneOperandIsNull.types new file mode 100644 index 00000000000..d1b30eb7f6a --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithOneOperandIsNull.types @@ -0,0 +1,684 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithOneOperandIsNull.ts === +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +function foo(t: T) { +>foo : (t: T) => void +>T : T +>t : T +>T : T + + var foo_r1 = t < null; +>foo_r1 : boolean +>t < null : boolean +>t : T + + var foo_r2 = t > null; +>foo_r2 : boolean +>t > null : boolean +>t : T + + var foo_r3 = t <= null; +>foo_r3 : boolean +>t <= null : boolean +>t : T + + var foo_r4 = t >= null; +>foo_r4 : boolean +>t >= null : boolean +>t : T + + var foo_r5 = t == null; +>foo_r5 : boolean +>t == null : boolean +>t : T + + var foo_r6 = t != null; +>foo_r6 : boolean +>t != null : boolean +>t : T + + var foo_r7 = t === null; +>foo_r7 : boolean +>t === null : boolean +>t : T + + var foo_r8 = t !== null; +>foo_r8 : boolean +>t !== null : boolean +>t : T + + var foo_r1 = null < t; +>foo_r1 : boolean +>null < t : boolean +>t : T + + var foo_r2 = null > t; +>foo_r2 : boolean +>null > t : boolean +>t : T + + var foo_r3 = null <= t; +>foo_r3 : boolean +>null <= t : boolean +>t : T + + var foo_r4 = null >= t; +>foo_r4 : boolean +>null >= t : boolean +>t : T + + var foo_r5 = null == t; +>foo_r5 : boolean +>null == t : boolean +>t : T + + var foo_r6 = null != t; +>foo_r6 : boolean +>null != t : boolean +>t : T + + var foo_r7 = null === t; +>foo_r7 : boolean +>null === t : boolean +>t : T + + var foo_r8 = null !== t; +>foo_r8 : boolean +>null !== t : boolean +>t : T +} + +var a: boolean; +>a : boolean + +var b: number; +>b : number + +var c: string; +>c : string + +var d: void; +>d : void + +var e: E; +>e : E +>E : E + +var f: {}; +>f : {} + +var g: string[]; +>g : string[] + +// operator < +var r1a1 = null < a; +>r1a1 : boolean +>null < a : boolean +>a : boolean + +var r1a2 = null < b; +>r1a2 : boolean +>null < b : boolean +>b : number + +var r1a3 = null < c; +>r1a3 : boolean +>null < c : boolean +>c : string + +var r1a4 = null < d; +>r1a4 : boolean +>null < d : boolean +>d : void + +var r1a5 = null < e; +>r1a5 : boolean +>null < e : boolean +>e : E + +var r1a6 = null < f; +>r1a6 : boolean +>null < f : boolean +>f : {} + +var r1a7 = null < g; +>r1a7 : boolean +>null < g : boolean +>g : string[] + +var r1b1 = a < null; +>r1b1 : boolean +>a < null : boolean +>a : boolean + +var r1b2 = b < null; +>r1b2 : boolean +>b < null : boolean +>b : number + +var r1b3 = c < null; +>r1b3 : boolean +>c < null : boolean +>c : string + +var r1b4 = d < null; +>r1b4 : boolean +>d < null : boolean +>d : void + +var r1b5 = e < null; +>r1b5 : boolean +>e < null : boolean +>e : E + +var r1b6 = f < null; +>r1b6 : boolean +>f < null : boolean +>f : {} + +var r1b7 = g < null; +>r1b7 : boolean +>g < null : boolean +>g : string[] + +// operator > +var r2a1 = null > a; +>r2a1 : boolean +>null > a : boolean +>a : boolean + +var r2a2 = null > b; +>r2a2 : boolean +>null > b : boolean +>b : number + +var r2a3 = null > c; +>r2a3 : boolean +>null > c : boolean +>c : string + +var r2a4 = null > d; +>r2a4 : boolean +>null > d : boolean +>d : void + +var r2a5 = null > e; +>r2a5 : boolean +>null > e : boolean +>e : E + +var r2a6 = null > f; +>r2a6 : boolean +>null > f : boolean +>f : {} + +var r2a7 = null > g; +>r2a7 : boolean +>null > g : boolean +>g : string[] + +var r2b1 = a > null; +>r2b1 : boolean +>a > null : boolean +>a : boolean + +var r2b2 = b > null; +>r2b2 : boolean +>b > null : boolean +>b : number + +var r2b3 = c > null; +>r2b3 : boolean +>c > null : boolean +>c : string + +var r2b4 = d > null; +>r2b4 : boolean +>d > null : boolean +>d : void + +var r2b5 = e > null; +>r2b5 : boolean +>e > null : boolean +>e : E + +var r2b6 = f > null; +>r2b6 : boolean +>f > null : boolean +>f : {} + +var r2b7 = g > null; +>r2b7 : boolean +>g > null : boolean +>g : string[] + +// operator <= +var r3a1 = null <= a; +>r3a1 : boolean +>null <= a : boolean +>a : boolean + +var r3a2 = null <= b; +>r3a2 : boolean +>null <= b : boolean +>b : number + +var r3a3 = null <= c; +>r3a3 : boolean +>null <= c : boolean +>c : string + +var r3a4 = null <= d; +>r3a4 : boolean +>null <= d : boolean +>d : void + +var r3a5 = null <= e; +>r3a5 : boolean +>null <= e : boolean +>e : E + +var r3a6 = null <= f; +>r3a6 : boolean +>null <= f : boolean +>f : {} + +var r3a7 = null <= g; +>r3a7 : boolean +>null <= g : boolean +>g : string[] + +var r3b1 = a <= null; +>r3b1 : boolean +>a <= null : boolean +>a : boolean + +var r3b2 = b <= null; +>r3b2 : boolean +>b <= null : boolean +>b : number + +var r3b3 = c <= null; +>r3b3 : boolean +>c <= null : boolean +>c : string + +var r3b4 = d <= null; +>r3b4 : boolean +>d <= null : boolean +>d : void + +var r3b5 = e <= null; +>r3b5 : boolean +>e <= null : boolean +>e : E + +var r3b6 = f <= null; +>r3b6 : boolean +>f <= null : boolean +>f : {} + +var r3b7 = g <= null; +>r3b7 : boolean +>g <= null : boolean +>g : string[] + +// operator >= +var r4a1 = null >= a; +>r4a1 : boolean +>null >= a : boolean +>a : boolean + +var r4a2 = null >= b; +>r4a2 : boolean +>null >= b : boolean +>b : number + +var r4a3 = null >= c; +>r4a3 : boolean +>null >= c : boolean +>c : string + +var r4a4 = null >= d; +>r4a4 : boolean +>null >= d : boolean +>d : void + +var r4a5 = null >= e; +>r4a5 : boolean +>null >= e : boolean +>e : E + +var r4a6 = null >= f; +>r4a6 : boolean +>null >= f : boolean +>f : {} + +var r4a7 = null >= g; +>r4a7 : boolean +>null >= g : boolean +>g : string[] + +var r4b1 = a >= null; +>r4b1 : boolean +>a >= null : boolean +>a : boolean + +var r4b2 = b >= null; +>r4b2 : boolean +>b >= null : boolean +>b : number + +var r4b3 = c >= null; +>r4b3 : boolean +>c >= null : boolean +>c : string + +var r4b4 = d >= null; +>r4b4 : boolean +>d >= null : boolean +>d : void + +var r4b5 = e >= null; +>r4b5 : boolean +>e >= null : boolean +>e : E + +var r4b6 = f >= null; +>r4b6 : boolean +>f >= null : boolean +>f : {} + +var r4b7 = g >= null; +>r4b7 : boolean +>g >= null : boolean +>g : string[] + +// operator == +var r5a1 = null == a; +>r5a1 : boolean +>null == a : boolean +>a : boolean + +var r5a2 = null == b; +>r5a2 : boolean +>null == b : boolean +>b : number + +var r5a3 = null == c; +>r5a3 : boolean +>null == c : boolean +>c : string + +var r5a4 = null == d; +>r5a4 : boolean +>null == d : boolean +>d : void + +var r5a5 = null == e; +>r5a5 : boolean +>null == e : boolean +>e : E + +var r5a6 = null == f; +>r5a6 : boolean +>null == f : boolean +>f : {} + +var r5a7 = null == g; +>r5a7 : boolean +>null == g : boolean +>g : string[] + +var r5b1 = a == null; +>r5b1 : boolean +>a == null : boolean +>a : boolean + +var r5b2 = b == null; +>r5b2 : boolean +>b == null : boolean +>b : number + +var r5b3 = c == null; +>r5b3 : boolean +>c == null : boolean +>c : string + +var r5b4 = d == null; +>r5b4 : boolean +>d == null : boolean +>d : void + +var r5b5 = e == null; +>r5b5 : boolean +>e == null : boolean +>e : E + +var r5b6 = f == null; +>r5b6 : boolean +>f == null : boolean +>f : {} + +var r5b7 = g == null; +>r5b7 : boolean +>g == null : boolean +>g : string[] + +// operator != +var r6a1 = null != a; +>r6a1 : boolean +>null != a : boolean +>a : boolean + +var r6a2 = null != b; +>r6a2 : boolean +>null != b : boolean +>b : number + +var r6a3 = null != c; +>r6a3 : boolean +>null != c : boolean +>c : string + +var r6a4 = null != d; +>r6a4 : boolean +>null != d : boolean +>d : void + +var r6a5 = null != e; +>r6a5 : boolean +>null != e : boolean +>e : E + +var r6a6 = null != f; +>r6a6 : boolean +>null != f : boolean +>f : {} + +var r6a7 = null != g; +>r6a7 : boolean +>null != g : boolean +>g : string[] + +var r6b1 = a != null; +>r6b1 : boolean +>a != null : boolean +>a : boolean + +var r6b2 = b != null; +>r6b2 : boolean +>b != null : boolean +>b : number + +var r6b3 = c != null; +>r6b3 : boolean +>c != null : boolean +>c : string + +var r6b4 = d != null; +>r6b4 : boolean +>d != null : boolean +>d : void + +var r6b5 = e != null; +>r6b5 : boolean +>e != null : boolean +>e : E + +var r6b6 = f != null; +>r6b6 : boolean +>f != null : boolean +>f : {} + +var r6b7 = g != null; +>r6b7 : boolean +>g != null : boolean +>g : string[] + +// operator === +var r7a1 = null === a; +>r7a1 : boolean +>null === a : boolean +>a : boolean + +var r7a2 = null === b; +>r7a2 : boolean +>null === b : boolean +>b : number + +var r7a3 = null === c; +>r7a3 : boolean +>null === c : boolean +>c : string + +var r7a4 = null === d; +>r7a4 : boolean +>null === d : boolean +>d : void + +var r7a5 = null === e; +>r7a5 : boolean +>null === e : boolean +>e : E + +var r7a6 = null === f; +>r7a6 : boolean +>null === f : boolean +>f : {} + +var r7a7 = null === g; +>r7a7 : boolean +>null === g : boolean +>g : string[] + +var r7b1 = a === null; +>r7b1 : boolean +>a === null : boolean +>a : boolean + +var r7b2 = b === null; +>r7b2 : boolean +>b === null : boolean +>b : number + +var r7b3 = c === null; +>r7b3 : boolean +>c === null : boolean +>c : string + +var r7b4 = d === null; +>r7b4 : boolean +>d === null : boolean +>d : void + +var r7b5 = e === null; +>r7b5 : boolean +>e === null : boolean +>e : E + +var r7b6 = f === null; +>r7b6 : boolean +>f === null : boolean +>f : {} + +var r7b7 = g === null; +>r7b7 : boolean +>g === null : boolean +>g : string[] + +// operator !== +var r8a1 = null !== a; +>r8a1 : boolean +>null !== a : boolean +>a : boolean + +var r8a2 = null !== b; +>r8a2 : boolean +>null !== b : boolean +>b : number + +var r8a3 = null !== c; +>r8a3 : boolean +>null !== c : boolean +>c : string + +var r8a4 = null !== d; +>r8a4 : boolean +>null !== d : boolean +>d : void + +var r8a5 = null !== e; +>r8a5 : boolean +>null !== e : boolean +>e : E + +var r8a6 = null !== f; +>r8a6 : boolean +>null !== f : boolean +>f : {} + +var r8a7 = null !== g; +>r8a7 : boolean +>null !== g : boolean +>g : string[] + +var r8b1 = a !== null; +>r8b1 : boolean +>a !== null : boolean +>a : boolean + +var r8b2 = b !== null; +>r8b2 : boolean +>b !== null : boolean +>b : number + +var r8b3 = c !== null; +>r8b3 : boolean +>c !== null : boolean +>c : string + +var r8b4 = d !== null; +>r8b4 : boolean +>d !== null : boolean +>d : void + +var r8b5 = e !== null; +>r8b5 : boolean +>e !== null : boolean +>e : E + +var r8b6 = f !== null; +>r8b6 : boolean +>f !== null : boolean +>f : {} + +var r8b7 = g !== null; +>r8b7 : boolean +>g !== null : boolean +>g : string[] + diff --git a/tests/baselines/reference/comparisonOperatorWithOneOperandIsUndefined.js b/tests/baselines/reference/comparisonOperatorWithOneOperandIsUndefined.js index 1faffebbc60..9ec4c9ce122 100644 --- a/tests/baselines/reference/comparisonOperatorWithOneOperandIsUndefined.js +++ b/tests/baselines/reference/comparisonOperatorWithOneOperandIsUndefined.js @@ -200,6 +200,7 @@ var d; var e; var f; var g; +// operator < var r1a1 = x < a; var r1a2 = x < b; var r1a3 = x < c; @@ -214,6 +215,7 @@ var r1b4 = d < x; var r1b5 = e < x; var r1b6 = f < x; var r1b7 = g < x; +// operator > var r2a1 = x > a; var r2a2 = x > b; var r2a3 = x > c; @@ -228,6 +230,7 @@ var r2b4 = d > x; var r2b5 = e > x; var r2b6 = f > x; var r2b7 = g > x; +// operator <= var r3a1 = x <= a; var r3a2 = x <= b; var r3a3 = x <= c; @@ -242,6 +245,7 @@ var r3b4 = d <= x; var r3b5 = e <= x; var r3b6 = f <= x; var r3b7 = g <= x; +// operator >= var r4a1 = x >= a; var r4a2 = x >= b; var r4a3 = x >= c; @@ -256,6 +260,7 @@ var r4b4 = d >= x; var r4b5 = e >= x; var r4b6 = f >= x; var r4b7 = g >= x; +// operator == var r5a1 = x == a; var r5a2 = x == b; var r5a3 = x == c; @@ -270,6 +275,7 @@ var r5b4 = d == x; var r5b5 = e == x; var r5b6 = f == x; var r5b7 = g == x; +// operator != var r6a1 = x != a; var r6a2 = x != b; var r6a3 = x != c; @@ -284,6 +290,7 @@ var r6b4 = d != x; var r6b5 = e != x; var r6b6 = f != x; var r6b7 = g != x; +// operator === var r7a1 = x === a; var r7a2 = x === b; var r7a3 = x === c; @@ -298,6 +305,7 @@ var r7b4 = d === x; var r7b5 = e === x; var r7b6 = f === x; var r7b7 = g === x; +// operator !== var r8a1 = x !== a; var r8a2 = x !== b; var r8a3 = x !== c; diff --git a/tests/baselines/reference/comparisonOperatorWithOneOperandIsUndefined.types b/tests/baselines/reference/comparisonOperatorWithOneOperandIsUndefined.types new file mode 100644 index 00000000000..b4a70c3e3d6 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithOneOperandIsUndefined.types @@ -0,0 +1,816 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithOneOperandIsUndefined.ts === +var x: typeof undefined; +>x : any +>undefined : undefined + +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +function foo(t: T) { +>foo : (t: T) => void +>T : T +>t : T +>T : T + + var foo_r1 = t < x; +>foo_r1 : boolean +>t < x : boolean +>t : T +>x : any + + var foo_r2 = t > x; +>foo_r2 : boolean +>t > x : boolean +>t : T +>x : any + + var foo_r3 = t <= x; +>foo_r3 : boolean +>t <= x : boolean +>t : T +>x : any + + var foo_r4 = t >= x; +>foo_r4 : boolean +>t >= x : boolean +>t : T +>x : any + + var foo_r5 = t == x; +>foo_r5 : boolean +>t == x : boolean +>t : T +>x : any + + var foo_r6 = t != x; +>foo_r6 : boolean +>t != x : boolean +>t : T +>x : any + + var foo_r7 = t === x; +>foo_r7 : boolean +>t === x : boolean +>t : T +>x : any + + var foo_r8 = t !== x; +>foo_r8 : boolean +>t !== x : boolean +>t : T +>x : any + + var foo_r1 = x < t; +>foo_r1 : boolean +>x < t : boolean +>x : any +>t : T + + var foo_r2 = x > t; +>foo_r2 : boolean +>x > t : boolean +>x : any +>t : T + + var foo_r3 = x <= t; +>foo_r3 : boolean +>x <= t : boolean +>x : any +>t : T + + var foo_r4 = x >= t; +>foo_r4 : boolean +>x >= t : boolean +>x : any +>t : T + + var foo_r5 = x == t; +>foo_r5 : boolean +>x == t : boolean +>x : any +>t : T + + var foo_r6 = x != t; +>foo_r6 : boolean +>x != t : boolean +>x : any +>t : T + + var foo_r7 = x === t; +>foo_r7 : boolean +>x === t : boolean +>x : any +>t : T + + var foo_r8 = x !== t; +>foo_r8 : boolean +>x !== t : boolean +>x : any +>t : T +} + +var a: boolean; +>a : boolean + +var b: number; +>b : number + +var c: string; +>c : string + +var d: void; +>d : void + +var e: E; +>e : E +>E : E + +var f: {}; +>f : {} + +var g: string[]; +>g : string[] + +// operator < +var r1a1 = x < a; +>r1a1 : boolean +>x < a : boolean +>x : any +>a : boolean + +var r1a2 = x < b; +>r1a2 : boolean +>x < b : boolean +>x : any +>b : number + +var r1a3 = x < c; +>r1a3 : boolean +>x < c : boolean +>x : any +>c : string + +var r1a4 = x < d; +>r1a4 : boolean +>x < d : boolean +>x : any +>d : void + +var r1a5 = x < e; +>r1a5 : boolean +>x < e : boolean +>x : any +>e : E + +var r1a6 = x < f; +>r1a6 : boolean +>x < f : boolean +>x : any +>f : {} + +var r1a7 = x < g; +>r1a7 : boolean +>x < g : boolean +>x : any +>g : string[] + +var r1b1 = a < x; +>r1b1 : boolean +>a < x : boolean +>a : boolean +>x : any + +var r1b2 = b < x; +>r1b2 : boolean +>b < x : boolean +>b : number +>x : any + +var r1b3 = c < x; +>r1b3 : boolean +>c < x : boolean +>c : string +>x : any + +var r1b4 = d < x; +>r1b4 : boolean +>d < x : boolean +>d : void +>x : any + +var r1b5 = e < x; +>r1b5 : boolean +>e < x : boolean +>e : E +>x : any + +var r1b6 = f < x; +>r1b6 : boolean +>f < x : boolean +>f : {} +>x : any + +var r1b7 = g < x; +>r1b7 : boolean +>g < x : boolean +>g : string[] +>x : any + +// operator > +var r2a1 = x > a; +>r2a1 : boolean +>x > a : boolean +>x : any +>a : boolean + +var r2a2 = x > b; +>r2a2 : boolean +>x > b : boolean +>x : any +>b : number + +var r2a3 = x > c; +>r2a3 : boolean +>x > c : boolean +>x : any +>c : string + +var r2a4 = x > d; +>r2a4 : boolean +>x > d : boolean +>x : any +>d : void + +var r2a5 = x > e; +>r2a5 : boolean +>x > e : boolean +>x : any +>e : E + +var r2a6 = x > f; +>r2a6 : boolean +>x > f : boolean +>x : any +>f : {} + +var r2a7 = x > g; +>r2a7 : boolean +>x > g : boolean +>x : any +>g : string[] + +var r2b1 = a > x; +>r2b1 : boolean +>a > x : boolean +>a : boolean +>x : any + +var r2b2 = b > x; +>r2b2 : boolean +>b > x : boolean +>b : number +>x : any + +var r2b3 = c > x; +>r2b3 : boolean +>c > x : boolean +>c : string +>x : any + +var r2b4 = d > x; +>r2b4 : boolean +>d > x : boolean +>d : void +>x : any + +var r2b5 = e > x; +>r2b5 : boolean +>e > x : boolean +>e : E +>x : any + +var r2b6 = f > x; +>r2b6 : boolean +>f > x : boolean +>f : {} +>x : any + +var r2b7 = g > x; +>r2b7 : boolean +>g > x : boolean +>g : string[] +>x : any + +// operator <= +var r3a1 = x <= a; +>r3a1 : boolean +>x <= a : boolean +>x : any +>a : boolean + +var r3a2 = x <= b; +>r3a2 : boolean +>x <= b : boolean +>x : any +>b : number + +var r3a3 = x <= c; +>r3a3 : boolean +>x <= c : boolean +>x : any +>c : string + +var r3a4 = x <= d; +>r3a4 : boolean +>x <= d : boolean +>x : any +>d : void + +var r3a5 = x <= e; +>r3a5 : boolean +>x <= e : boolean +>x : any +>e : E + +var r3a6 = x <= f; +>r3a6 : boolean +>x <= f : boolean +>x : any +>f : {} + +var r3a7 = x <= g; +>r3a7 : boolean +>x <= g : boolean +>x : any +>g : string[] + +var r3b1 = a <= x; +>r3b1 : boolean +>a <= x : boolean +>a : boolean +>x : any + +var r3b2 = b <= x; +>r3b2 : boolean +>b <= x : boolean +>b : number +>x : any + +var r3b3 = c <= x; +>r3b3 : boolean +>c <= x : boolean +>c : string +>x : any + +var r3b4 = d <= x; +>r3b4 : boolean +>d <= x : boolean +>d : void +>x : any + +var r3b5 = e <= x; +>r3b5 : boolean +>e <= x : boolean +>e : E +>x : any + +var r3b6 = f <= x; +>r3b6 : boolean +>f <= x : boolean +>f : {} +>x : any + +var r3b7 = g <= x; +>r3b7 : boolean +>g <= x : boolean +>g : string[] +>x : any + +// operator >= +var r4a1 = x >= a; +>r4a1 : boolean +>x >= a : boolean +>x : any +>a : boolean + +var r4a2 = x >= b; +>r4a2 : boolean +>x >= b : boolean +>x : any +>b : number + +var r4a3 = x >= c; +>r4a3 : boolean +>x >= c : boolean +>x : any +>c : string + +var r4a4 = x >= d; +>r4a4 : boolean +>x >= d : boolean +>x : any +>d : void + +var r4a5 = x >= e; +>r4a5 : boolean +>x >= e : boolean +>x : any +>e : E + +var r4a6 = x >= f; +>r4a6 : boolean +>x >= f : boolean +>x : any +>f : {} + +var r4a7 = x >= g; +>r4a7 : boolean +>x >= g : boolean +>x : any +>g : string[] + +var r4b1 = a >= x; +>r4b1 : boolean +>a >= x : boolean +>a : boolean +>x : any + +var r4b2 = b >= x; +>r4b2 : boolean +>b >= x : boolean +>b : number +>x : any + +var r4b3 = c >= x; +>r4b3 : boolean +>c >= x : boolean +>c : string +>x : any + +var r4b4 = d >= x; +>r4b4 : boolean +>d >= x : boolean +>d : void +>x : any + +var r4b5 = e >= x; +>r4b5 : boolean +>e >= x : boolean +>e : E +>x : any + +var r4b6 = f >= x; +>r4b6 : boolean +>f >= x : boolean +>f : {} +>x : any + +var r4b7 = g >= x; +>r4b7 : boolean +>g >= x : boolean +>g : string[] +>x : any + +// operator == +var r5a1 = x == a; +>r5a1 : boolean +>x == a : boolean +>x : any +>a : boolean + +var r5a2 = x == b; +>r5a2 : boolean +>x == b : boolean +>x : any +>b : number + +var r5a3 = x == c; +>r5a3 : boolean +>x == c : boolean +>x : any +>c : string + +var r5a4 = x == d; +>r5a4 : boolean +>x == d : boolean +>x : any +>d : void + +var r5a5 = x == e; +>r5a5 : boolean +>x == e : boolean +>x : any +>e : E + +var r5a6 = x == f; +>r5a6 : boolean +>x == f : boolean +>x : any +>f : {} + +var r5a7 = x == g; +>r5a7 : boolean +>x == g : boolean +>x : any +>g : string[] + +var r5b1 = a == x; +>r5b1 : boolean +>a == x : boolean +>a : boolean +>x : any + +var r5b2 = b == x; +>r5b2 : boolean +>b == x : boolean +>b : number +>x : any + +var r5b3 = c == x; +>r5b3 : boolean +>c == x : boolean +>c : string +>x : any + +var r5b4 = d == x; +>r5b4 : boolean +>d == x : boolean +>d : void +>x : any + +var r5b5 = e == x; +>r5b5 : boolean +>e == x : boolean +>e : E +>x : any + +var r5b6 = f == x; +>r5b6 : boolean +>f == x : boolean +>f : {} +>x : any + +var r5b7 = g == x; +>r5b7 : boolean +>g == x : boolean +>g : string[] +>x : any + +// operator != +var r6a1 = x != a; +>r6a1 : boolean +>x != a : boolean +>x : any +>a : boolean + +var r6a2 = x != b; +>r6a2 : boolean +>x != b : boolean +>x : any +>b : number + +var r6a3 = x != c; +>r6a3 : boolean +>x != c : boolean +>x : any +>c : string + +var r6a4 = x != d; +>r6a4 : boolean +>x != d : boolean +>x : any +>d : void + +var r6a5 = x != e; +>r6a5 : boolean +>x != e : boolean +>x : any +>e : E + +var r6a6 = x != f; +>r6a6 : boolean +>x != f : boolean +>x : any +>f : {} + +var r6a7 = x != g; +>r6a7 : boolean +>x != g : boolean +>x : any +>g : string[] + +var r6b1 = a != x; +>r6b1 : boolean +>a != x : boolean +>a : boolean +>x : any + +var r6b2 = b != x; +>r6b2 : boolean +>b != x : boolean +>b : number +>x : any + +var r6b3 = c != x; +>r6b3 : boolean +>c != x : boolean +>c : string +>x : any + +var r6b4 = d != x; +>r6b4 : boolean +>d != x : boolean +>d : void +>x : any + +var r6b5 = e != x; +>r6b5 : boolean +>e != x : boolean +>e : E +>x : any + +var r6b6 = f != x; +>r6b6 : boolean +>f != x : boolean +>f : {} +>x : any + +var r6b7 = g != x; +>r6b7 : boolean +>g != x : boolean +>g : string[] +>x : any + +// operator === +var r7a1 = x === a; +>r7a1 : boolean +>x === a : boolean +>x : any +>a : boolean + +var r7a2 = x === b; +>r7a2 : boolean +>x === b : boolean +>x : any +>b : number + +var r7a3 = x === c; +>r7a3 : boolean +>x === c : boolean +>x : any +>c : string + +var r7a4 = x === d; +>r7a4 : boolean +>x === d : boolean +>x : any +>d : void + +var r7a5 = x === e; +>r7a5 : boolean +>x === e : boolean +>x : any +>e : E + +var r7a6 = x === f; +>r7a6 : boolean +>x === f : boolean +>x : any +>f : {} + +var r7a7 = x === g; +>r7a7 : boolean +>x === g : boolean +>x : any +>g : string[] + +var r7b1 = a === x; +>r7b1 : boolean +>a === x : boolean +>a : boolean +>x : any + +var r7b2 = b === x; +>r7b2 : boolean +>b === x : boolean +>b : number +>x : any + +var r7b3 = c === x; +>r7b3 : boolean +>c === x : boolean +>c : string +>x : any + +var r7b4 = d === x; +>r7b4 : boolean +>d === x : boolean +>d : void +>x : any + +var r7b5 = e === x; +>r7b5 : boolean +>e === x : boolean +>e : E +>x : any + +var r7b6 = f === x; +>r7b6 : boolean +>f === x : boolean +>f : {} +>x : any + +var r7b7 = g === x; +>r7b7 : boolean +>g === x : boolean +>g : string[] +>x : any + +// operator !== +var r8a1 = x !== a; +>r8a1 : boolean +>x !== a : boolean +>x : any +>a : boolean + +var r8a2 = x !== b; +>r8a2 : boolean +>x !== b : boolean +>x : any +>b : number + +var r8a3 = x !== c; +>r8a3 : boolean +>x !== c : boolean +>x : any +>c : string + +var r8a4 = x !== d; +>r8a4 : boolean +>x !== d : boolean +>x : any +>d : void + +var r8a5 = x !== e; +>r8a5 : boolean +>x !== e : boolean +>x : any +>e : E + +var r8a6 = x !== f; +>r8a6 : boolean +>x !== f : boolean +>x : any +>f : {} + +var r8a7 = x !== g; +>r8a7 : boolean +>x !== g : boolean +>x : any +>g : string[] + +var r8b1 = a !== x; +>r8b1 : boolean +>a !== x : boolean +>a : boolean +>x : any + +var r8b2 = b !== x; +>r8b2 : boolean +>b !== x : boolean +>b : number +>x : any + +var r8b3 = c !== x; +>r8b3 : boolean +>c !== x : boolean +>c : string +>x : any + +var r8b4 = d !== x; +>r8b4 : boolean +>d !== x : boolean +>d : void +>x : any + +var r8b5 = e !== x; +>r8b5 : boolean +>e !== x : boolean +>e : E +>x : any + +var r8b6 = f !== x; +>r8b6 : boolean +>f !== x : boolean +>f : {} +>x : any + +var r8b7 = g !== x; +>r8b7 : boolean +>g !== x : boolean +>g : string[] +>x : any + diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeEnumAndNumber.js b/tests/baselines/reference/comparisonOperatorWithSubtypeEnumAndNumber.js index a2866a7d44f..e0c1f33cb4a 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeEnumAndNumber.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeEnumAndNumber.js @@ -77,48 +77,56 @@ var E; })(E || (E = {})); var a; var b; +// operator < var ra1 = a < b; var ra2 = b < a; var ra3 = 0 /* a */ < b; var ra4 = b < 0 /* a */; var ra5 = 0 /* a */ < 0; var ra6 = 0 < 0 /* a */; +// operator > var rb1 = a > b; var rb2 = b > a; var rb3 = 0 /* a */ > b; var rb4 = b > 0 /* a */; var rb5 = 0 /* a */ > 0; var rb6 = 0 > 0 /* a */; +// operator <= var rc1 = a <= b; var rc2 = b <= a; var rc3 = 0 /* a */ <= b; var rc4 = b <= 0 /* a */; var rc5 = 0 /* a */ <= 0; var rc6 = 0 <= 0 /* a */; +// operator >= var rd1 = a >= b; var rd2 = b >= a; var rd3 = 0 /* a */ >= b; var rd4 = b >= 0 /* a */; var rd5 = 0 /* a */ >= 0; var rd6 = 0 >= 0 /* a */; +// operator == var re1 = a == b; var re2 = b == a; var re3 = 0 /* a */ == b; var re4 = b == 0 /* a */; var re5 = 0 /* a */ == 0; var re6 = 0 == 0 /* a */; +// operator != var rf1 = a != b; var rf2 = b != a; var rf3 = 0 /* a */ != b; var rf4 = b != 0 /* a */; var rf5 = 0 /* a */ != 0; var rf6 = 0 != 0 /* a */; +// operator === var rg1 = a === b; var rg2 = b === a; var rg3 = 0 /* a */ === b; var rg4 = b === 0 /* a */; var rg5 = 0 /* a */ === 0; var rg6 = 0 === 0 /* a */; +// operator !== var rh1 = a !== b; var rh2 = b !== a; var rh3 = 0 /* a */ !== b; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeEnumAndNumber.types b/tests/baselines/reference/comparisonOperatorWithSubtypeEnumAndNumber.types new file mode 100644 index 00000000000..2dfe5913a24 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeEnumAndNumber.types @@ -0,0 +1,358 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeEnumAndNumber.ts === +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a: E; +>a : E +>E : E + +var b: number; +>b : number + +// operator < +var ra1 = a < b; +>ra1 : boolean +>a < b : boolean +>a : E +>b : number + +var ra2 = b < a; +>ra2 : boolean +>b < a : boolean +>b : number +>a : E + +var ra3 = E.a < b; +>ra3 : boolean +>E.a < b : boolean +>E.a : E +>E : typeof E +>a : E +>b : number + +var ra4 = b < E.a; +>ra4 : boolean +>b < E.a : boolean +>b : number +>E.a : E +>E : typeof E +>a : E + +var ra5 = E.a < 0; +>ra5 : boolean +>E.a < 0 : boolean +>E.a : E +>E : typeof E +>a : E + +var ra6 = 0 < E.a; +>ra6 : boolean +>0 < E.a : boolean +>E.a : E +>E : typeof E +>a : E + +// operator > +var rb1 = a > b; +>rb1 : boolean +>a > b : boolean +>a : E +>b : number + +var rb2 = b > a; +>rb2 : boolean +>b > a : boolean +>b : number +>a : E + +var rb3 = E.a > b; +>rb3 : boolean +>E.a > b : boolean +>E.a : E +>E : typeof E +>a : E +>b : number + +var rb4 = b > E.a; +>rb4 : boolean +>b > E.a : boolean +>b : number +>E.a : E +>E : typeof E +>a : E + +var rb5 = E.a > 0; +>rb5 : boolean +>E.a > 0 : boolean +>E.a : E +>E : typeof E +>a : E + +var rb6 = 0 > E.a; +>rb6 : boolean +>0 > E.a : boolean +>E.a : E +>E : typeof E +>a : E + +// operator <= +var rc1 = a <= b; +>rc1 : boolean +>a <= b : boolean +>a : E +>b : number + +var rc2 = b <= a; +>rc2 : boolean +>b <= a : boolean +>b : number +>a : E + +var rc3 = E.a <= b; +>rc3 : boolean +>E.a <= b : boolean +>E.a : E +>E : typeof E +>a : E +>b : number + +var rc4 = b <= E.a; +>rc4 : boolean +>b <= E.a : boolean +>b : number +>E.a : E +>E : typeof E +>a : E + +var rc5 = E.a <= 0; +>rc5 : boolean +>E.a <= 0 : boolean +>E.a : E +>E : typeof E +>a : E + +var rc6 = 0 <= E.a; +>rc6 : boolean +>0 <= E.a : boolean +>E.a : E +>E : typeof E +>a : E + +// operator >= +var rd1 = a >= b; +>rd1 : boolean +>a >= b : boolean +>a : E +>b : number + +var rd2 = b >= a; +>rd2 : boolean +>b >= a : boolean +>b : number +>a : E + +var rd3 = E.a >= b; +>rd3 : boolean +>E.a >= b : boolean +>E.a : E +>E : typeof E +>a : E +>b : number + +var rd4 = b >= E.a; +>rd4 : boolean +>b >= E.a : boolean +>b : number +>E.a : E +>E : typeof E +>a : E + +var rd5 = E.a >= 0; +>rd5 : boolean +>E.a >= 0 : boolean +>E.a : E +>E : typeof E +>a : E + +var rd6 = 0 >= E.a; +>rd6 : boolean +>0 >= E.a : boolean +>E.a : E +>E : typeof E +>a : E + +// operator == +var re1 = a == b; +>re1 : boolean +>a == b : boolean +>a : E +>b : number + +var re2 = b == a; +>re2 : boolean +>b == a : boolean +>b : number +>a : E + +var re3 = E.a == b; +>re3 : boolean +>E.a == b : boolean +>E.a : E +>E : typeof E +>a : E +>b : number + +var re4 = b == E.a; +>re4 : boolean +>b == E.a : boolean +>b : number +>E.a : E +>E : typeof E +>a : E + +var re5 = E.a == 0; +>re5 : boolean +>E.a == 0 : boolean +>E.a : E +>E : typeof E +>a : E + +var re6 = 0 == E.a; +>re6 : boolean +>0 == E.a : boolean +>E.a : E +>E : typeof E +>a : E + +// operator != +var rf1 = a != b; +>rf1 : boolean +>a != b : boolean +>a : E +>b : number + +var rf2 = b != a; +>rf2 : boolean +>b != a : boolean +>b : number +>a : E + +var rf3 = E.a != b; +>rf3 : boolean +>E.a != b : boolean +>E.a : E +>E : typeof E +>a : E +>b : number + +var rf4 = b != E.a; +>rf4 : boolean +>b != E.a : boolean +>b : number +>E.a : E +>E : typeof E +>a : E + +var rf5 = E.a != 0; +>rf5 : boolean +>E.a != 0 : boolean +>E.a : E +>E : typeof E +>a : E + +var rf6 = 0 != E.a; +>rf6 : boolean +>0 != E.a : boolean +>E.a : E +>E : typeof E +>a : E + +// operator === +var rg1 = a === b; +>rg1 : boolean +>a === b : boolean +>a : E +>b : number + +var rg2 = b === a; +>rg2 : boolean +>b === a : boolean +>b : number +>a : E + +var rg3 = E.a === b; +>rg3 : boolean +>E.a === b : boolean +>E.a : E +>E : typeof E +>a : E +>b : number + +var rg4 = b === E.a; +>rg4 : boolean +>b === E.a : boolean +>b : number +>E.a : E +>E : typeof E +>a : E + +var rg5 = E.a === 0; +>rg5 : boolean +>E.a === 0 : boolean +>E.a : E +>E : typeof E +>a : E + +var rg6 = 0 === E.a; +>rg6 : boolean +>0 === E.a : boolean +>E.a : E +>E : typeof E +>a : E + +// operator !== +var rh1 = a !== b; +>rh1 : boolean +>a !== b : boolean +>a : E +>b : number + +var rh2 = b !== a; +>rh2 : boolean +>b !== a : boolean +>b : number +>a : E + +var rh3 = E.a !== b; +>rh3 : boolean +>E.a !== b : boolean +>E.a : E +>E : typeof E +>a : E +>b : number + +var rh4 = b !== E.a; +>rh4 : boolean +>b !== E.a : boolean +>b : number +>E.a : E +>E : typeof E +>a : E + +var rh5 = E.a !== 0; +>rh5 : boolean +>E.a !== 0 : boolean +>E.a : E +>E : typeof E +>a : E + +var rh6 = 0 !== E.a; +>rh6 : boolean +>0 !== E.a : boolean +>E.a : E +>E : typeof E +>a : E + diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.js index 1f6706c3a10..890add6bc8a 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.js @@ -300,6 +300,9 @@ var a10; var b10; var a11; var b11; +//var a12: { fn(t: T, u: U): T[] }; +//var b12: { fn(a: A, b: B): A[] }; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; @@ -311,6 +314,7 @@ var r1a8 = a8 < b8; var r1a9 = a9 < b9; var r1a10 = a10 < b10; var r1a11 = a11 < b11; +//var r1a12 = a12 < b12; var r1b1 = b1 < a1; var r1b2 = b2 < a2; var r1b3 = b3 < a3; @@ -322,6 +326,8 @@ var r1b8 = b8 < a8; var r1b9 = b9 < a9; var r1b10 = b10 < a10; var r1b11 = b11 < a11; +//var r1b12 = b12 < a12; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; @@ -333,6 +339,7 @@ var r2a8 = a8 > b8; var r2a9 = a9 > b9; var r2a10 = a10 > b10; var r2a11 = a11 > b11; +//var r2a12 = a12 > b12; var r2b1 = b1 > a1; var r2b2 = b2 > a2; var r2b3 = b3 > a3; @@ -344,6 +351,8 @@ var r2b8 = b8 > a8; var r2b9 = b9 > a9; var r2b10 = b10 > a10; var r2b11 = b11 > a11; +//var r2b12 = b12 > a12; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; @@ -355,6 +364,7 @@ var r3a8 = a8 <= b8; var r3a9 = a9 <= b9; var r3a10 = a10 <= b10; var r3a11 = a11 <= b11; +//var r3a12 = a12 <= b12; var r3b1 = b1 <= a1; var r3b2 = b2 <= a2; var r3b3 = b3 <= a3; @@ -366,6 +376,8 @@ var r3b8 = b8 <= a8; var r3b9 = b9 <= a9; var r3b10 = b10 <= a10; var r3b11 = b11 <= a11; +//var r3b12 = b12 <= a12; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; @@ -377,6 +389,7 @@ var r4a8 = a8 >= b8; var r4a9 = a9 >= b9; var r4a10 = a10 >= b10; var r4a11 = a11 >= b11; +//var r4a12 = a12 >= b12; var r4b1 = b1 >= a1; var r4b2 = b2 >= a2; var r4b3 = b3 >= a3; @@ -388,6 +401,8 @@ var r4b8 = b8 >= a8; var r4b9 = b9 >= a9; var r4b10 = b10 >= a10; var r4b11 = b11 >= a11; +//var r4b12 = b12 >= a12; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; @@ -399,6 +414,7 @@ var r5a8 = a8 == b8; var r5a9 = a9 == b9; var r5a10 = a10 == b10; var r5a11 = a11 == b11; +//var r5a12 = a12 == b12; var r5b1 = b1 == a1; var r5b2 = b2 == a2; var r5b3 = b3 == a3; @@ -410,6 +426,8 @@ var r5b8 = b8 == a8; var r5b9 = b9 == a9; var r5b10 = b10 == a10; var r5b11 = b11 == a11; +//var r5b12 = b12 == a12; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; @@ -421,6 +439,7 @@ var r6a8 = a8 != b8; var r6a9 = a9 != b9; var r6a10 = a10 != b10; var r6a11 = a11 != b11; +//var r6a12 = a12 != b12; var r6b1 = b1 != a1; var r6b2 = b2 != a2; var r6b3 = b3 != a3; @@ -432,6 +451,8 @@ var r6b8 = b8 != a8; var r6b9 = b9 != a9; var r6b10 = b10 != a10; var r6b11 = b11 != a11; +//var r6b12 = b12 != a12; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; @@ -443,6 +464,7 @@ var r7a8 = a8 === b8; var r7a9 = a9 === b9; var r7a10 = a10 === b10; var r7a11 = a11 === b11; +//var r7a12 = a12 === b12; var r7b1 = b1 === a1; var r7b2 = b2 === a2; var r7b3 = b3 === a3; @@ -454,6 +476,8 @@ var r7b8 = b8 === a8; var r7b9 = b9 === a9; var r7b10 = b10 === a10; var r7b11 = b11 === a11; +//var r7b12 = b12 === a12; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; @@ -465,6 +489,7 @@ var r8a8 = a8 !== b8; var r8a9 = a9 !== b9; var r8a10 = a10 !== b10; var r8a11 = a11 !== b11; +//var r8a12 = a12 !== b12; var r8b1 = b1 !== a1; var r8b2 = b2 !== a2; var r8b3 = b3 !== a3; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types new file mode 100644 index 00000000000..b3a972958b3 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types @@ -0,0 +1,1236 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnCallSignature.ts === +class Base { +>Base : Base + + public a: string; +>a : string +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + public b: string; +>b : string +} + +var a1: { fn(): void }; +>a1 : { fn(): void; } +>fn : () => void + +var b1: { fn(): void }; +>b1 : { fn(): void; } +>fn : () => void + +var a2: { fn(a: number, b: string): void }; +>a2 : { fn(a: number, b: string): void; } +>fn : (a: number, b: string) => void +>a : number +>b : string + +var b2: { fn(a: number, b: string): void }; +>b2 : { fn(a: number, b: string): void; } +>fn : (a: number, b: string) => void +>a : number +>b : string + +var a3: { fn(a: number, b: string): void }; +>a3 : { fn(a: number, b: string): void; } +>fn : (a: number, b: string) => void +>a : number +>b : string + +var b3: { fn(a: number): void }; +>b3 : { fn(a: number): void; } +>fn : (a: number) => void +>a : number + +var a4: { fn(a: number, b: string): void }; +>a4 : { fn(a: number, b: string): void; } +>fn : (a: number, b: string) => void +>a : number +>b : string + +var b4: { fn(): void }; +>b4 : { fn(): void; } +>fn : () => void + +var a5: { fn(a: Base): void }; +>a5 : { fn(a: Base): void; } +>fn : (a: Base) => void +>a : Base +>Base : Base + +var b5: { fn(a: Derived): void }; +>b5 : { fn(a: Derived): void; } +>fn : (a: Derived) => void +>a : Derived +>Derived : Derived + +var a6: { fn(a: Derived, b: Base): void }; +>a6 : { fn(a: Derived, b: Base): void; } +>fn : (a: Derived, b: Base) => void +>a : Derived +>Derived : Derived +>b : Base +>Base : Base + +var b6: { fn(a: Base, b: Derived): void }; +>b6 : { fn(a: Base, b: Derived): void; } +>fn : (a: Base, b: Derived) => void +>a : Base +>Base : Base +>b : Derived +>Derived : Derived + +var a7: { fn(): void }; +>a7 : { fn(): void; } +>fn : () => void + +var b7: { fn(): Base }; +>b7 : { fn(): Base; } +>fn : () => Base +>Base : Base + +var a8: { fn(): Base }; +>a8 : { fn(): Base; } +>fn : () => Base +>Base : Base + +var b8: { fn(): Base }; +>b8 : { fn(): Base; } +>fn : () => Base +>Base : Base + +var a9: { fn(): Base }; +>a9 : { fn(): Base; } +>fn : () => Base +>Base : Base + +var b9: { fn(): Derived }; +>b9 : { fn(): Derived; } +>fn : () => Derived +>Derived : Derived + +var a10: { fn(a?: Base): void }; +>a10 : { fn(a?: Base): void; } +>fn : (a?: Base) => void +>a : Base +>Base : Base + +var b10: { fn(a?: Derived): void }; +>b10 : { fn(a?: Derived): void; } +>fn : (a?: Derived) => void +>a : Derived +>Derived : Derived + +var a11: { fn(...a: Base[]): void }; +>a11 : { fn(...a: Base[]): void; } +>fn : (...a: Base[]) => void +>a : Base[] +>Base : Base + +var b11: { fn(...a: Derived[]): void }; +>b11 : { fn(...a: Derived[]): void; } +>fn : (...a: Derived[]) => void +>a : Derived[] +>Derived : Derived + +//var a12: { fn(t: T, u: U): T[] }; +//var b12: { fn(a: A, b: B): A[] }; + +// operator < +var r1a1 = a1 < b1; +>r1a1 : boolean +>a1 < b1 : boolean +>a1 : { fn(): void; } +>b1 : { fn(): void; } + +var r1a2 = a2 < b2; +>r1a2 : boolean +>a2 < b2 : boolean +>a2 : { fn(a: number, b: string): void; } +>b2 : { fn(a: number, b: string): void; } + +var r1a3 = a3 < b3; +>r1a3 : boolean +>a3 < b3 : boolean +>a3 : { fn(a: number, b: string): void; } +>b3 : { fn(a: number): void; } + +var r1a4 = a4 < b4; +>r1a4 : boolean +>a4 < b4 : boolean +>a4 : { fn(a: number, b: string): void; } +>b4 : { fn(): void; } + +var r1a5 = a5 < b5; +>r1a5 : boolean +>a5 < b5 : boolean +>a5 : { fn(a: Base): void; } +>b5 : { fn(a: Derived): void; } + +var r1a6 = a6 < b6; +>r1a6 : boolean +>a6 < b6 : boolean +>a6 : { fn(a: Derived, b: Base): void; } +>b6 : { fn(a: Base, b: Derived): void; } + +var r1a7 = a7 < b7; +>r1a7 : boolean +>a7 < b7 : boolean +>a7 : { fn(): void; } +>b7 : { fn(): Base; } + +var r1a8 = a8 < b8; +>r1a8 : boolean +>a8 < b8 : boolean +>a8 : { fn(): Base; } +>b8 : { fn(): Base; } + +var r1a9 = a9 < b9; +>r1a9 : boolean +>a9 < b9 : boolean +>a9 : { fn(): Base; } +>b9 : { fn(): Derived; } + +var r1a10 = a10 < b10; +>r1a10 : boolean +>a10 < b10 : boolean +>a10 : { fn(a?: Base): void; } +>b10 : { fn(a?: Derived): void; } + +var r1a11 = a11 < b11; +>r1a11 : boolean +>a11 < b11 : boolean +>a11 : { fn(...a: Base[]): void; } +>b11 : { fn(...a: Derived[]): void; } + +//var r1a12 = a12 < b12; + +var r1b1 = b1 < a1; +>r1b1 : boolean +>b1 < a1 : boolean +>b1 : { fn(): void; } +>a1 : { fn(): void; } + +var r1b2 = b2 < a2; +>r1b2 : boolean +>b2 < a2 : boolean +>b2 : { fn(a: number, b: string): void; } +>a2 : { fn(a: number, b: string): void; } + +var r1b3 = b3 < a3; +>r1b3 : boolean +>b3 < a3 : boolean +>b3 : { fn(a: number): void; } +>a3 : { fn(a: number, b: string): void; } + +var r1b4 = b4 < a4; +>r1b4 : boolean +>b4 < a4 : boolean +>b4 : { fn(): void; } +>a4 : { fn(a: number, b: string): void; } + +var r1b5 = b5 < a5; +>r1b5 : boolean +>b5 < a5 : boolean +>b5 : { fn(a: Derived): void; } +>a5 : { fn(a: Base): void; } + +var r1b6 = b6 < a6; +>r1b6 : boolean +>b6 < a6 : boolean +>b6 : { fn(a: Base, b: Derived): void; } +>a6 : { fn(a: Derived, b: Base): void; } + +var r1b7 = b7 < a7; +>r1b7 : boolean +>b7 < a7 : boolean +>b7 : { fn(): Base; } +>a7 : { fn(): void; } + +var r1b8 = b8 < a8; +>r1b8 : boolean +>b8 < a8 : boolean +>b8 : { fn(): Base; } +>a8 : { fn(): Base; } + +var r1b9 = b9 < a9; +>r1b9 : boolean +>b9 < a9 : boolean +>b9 : { fn(): Derived; } +>a9 : { fn(): Base; } + +var r1b10 = b10 < a10; +>r1b10 : boolean +>b10 < a10 : boolean +>b10 : { fn(a?: Derived): void; } +>a10 : { fn(a?: Base): void; } + +var r1b11 = b11 < a11; +>r1b11 : boolean +>b11 < a11 : boolean +>b11 : { fn(...a: Derived[]): void; } +>a11 : { fn(...a: Base[]): void; } + +//var r1b12 = b12 < a12; + +// operator > +var r2a1 = a1 > b1; +>r2a1 : boolean +>a1 > b1 : boolean +>a1 : { fn(): void; } +>b1 : { fn(): void; } + +var r2a2 = a2 > b2; +>r2a2 : boolean +>a2 > b2 : boolean +>a2 : { fn(a: number, b: string): void; } +>b2 : { fn(a: number, b: string): void; } + +var r2a3 = a3 > b3; +>r2a3 : boolean +>a3 > b3 : boolean +>a3 : { fn(a: number, b: string): void; } +>b3 : { fn(a: number): void; } + +var r2a4 = a4 > b4; +>r2a4 : boolean +>a4 > b4 : boolean +>a4 : { fn(a: number, b: string): void; } +>b4 : { fn(): void; } + +var r2a5 = a5 > b5; +>r2a5 : boolean +>a5 > b5 : boolean +>a5 : { fn(a: Base): void; } +>b5 : { fn(a: Derived): void; } + +var r2a6 = a6 > b6; +>r2a6 : boolean +>a6 > b6 : boolean +>a6 : { fn(a: Derived, b: Base): void; } +>b6 : { fn(a: Base, b: Derived): void; } + +var r2a7 = a7 > b7; +>r2a7 : boolean +>a7 > b7 : boolean +>a7 : { fn(): void; } +>b7 : { fn(): Base; } + +var r2a8 = a8 > b8; +>r2a8 : boolean +>a8 > b8 : boolean +>a8 : { fn(): Base; } +>b8 : { fn(): Base; } + +var r2a9 = a9 > b9; +>r2a9 : boolean +>a9 > b9 : boolean +>a9 : { fn(): Base; } +>b9 : { fn(): Derived; } + +var r2a10 = a10 > b10; +>r2a10 : boolean +>a10 > b10 : boolean +>a10 : { fn(a?: Base): void; } +>b10 : { fn(a?: Derived): void; } + +var r2a11 = a11 > b11; +>r2a11 : boolean +>a11 > b11 : boolean +>a11 : { fn(...a: Base[]): void; } +>b11 : { fn(...a: Derived[]): void; } + +//var r2a12 = a12 > b12; + +var r2b1 = b1 > a1; +>r2b1 : boolean +>b1 > a1 : boolean +>b1 : { fn(): void; } +>a1 : { fn(): void; } + +var r2b2 = b2 > a2; +>r2b2 : boolean +>b2 > a2 : boolean +>b2 : { fn(a: number, b: string): void; } +>a2 : { fn(a: number, b: string): void; } + +var r2b3 = b3 > a3; +>r2b3 : boolean +>b3 > a3 : boolean +>b3 : { fn(a: number): void; } +>a3 : { fn(a: number, b: string): void; } + +var r2b4 = b4 > a4; +>r2b4 : boolean +>b4 > a4 : boolean +>b4 : { fn(): void; } +>a4 : { fn(a: number, b: string): void; } + +var r2b5 = b5 > a5; +>r2b5 : boolean +>b5 > a5 : boolean +>b5 : { fn(a: Derived): void; } +>a5 : { fn(a: Base): void; } + +var r2b6 = b6 > a6; +>r2b6 : boolean +>b6 > a6 : boolean +>b6 : { fn(a: Base, b: Derived): void; } +>a6 : { fn(a: Derived, b: Base): void; } + +var r2b7 = b7 > a7; +>r2b7 : boolean +>b7 > a7 : boolean +>b7 : { fn(): Base; } +>a7 : { fn(): void; } + +var r2b8 = b8 > a8; +>r2b8 : boolean +>b8 > a8 : boolean +>b8 : { fn(): Base; } +>a8 : { fn(): Base; } + +var r2b9 = b9 > a9; +>r2b9 : boolean +>b9 > a9 : boolean +>b9 : { fn(): Derived; } +>a9 : { fn(): Base; } + +var r2b10 = b10 > a10; +>r2b10 : boolean +>b10 > a10 : boolean +>b10 : { fn(a?: Derived): void; } +>a10 : { fn(a?: Base): void; } + +var r2b11 = b11 > a11; +>r2b11 : boolean +>b11 > a11 : boolean +>b11 : { fn(...a: Derived[]): void; } +>a11 : { fn(...a: Base[]): void; } + +//var r2b12 = b12 > a12; + +// operator <= +var r3a1 = a1 <= b1; +>r3a1 : boolean +>a1 <= b1 : boolean +>a1 : { fn(): void; } +>b1 : { fn(): void; } + +var r3a2 = a2 <= b2; +>r3a2 : boolean +>a2 <= b2 : boolean +>a2 : { fn(a: number, b: string): void; } +>b2 : { fn(a: number, b: string): void; } + +var r3a3 = a3 <= b3; +>r3a3 : boolean +>a3 <= b3 : boolean +>a3 : { fn(a: number, b: string): void; } +>b3 : { fn(a: number): void; } + +var r3a4 = a4 <= b4; +>r3a4 : boolean +>a4 <= b4 : boolean +>a4 : { fn(a: number, b: string): void; } +>b4 : { fn(): void; } + +var r3a5 = a5 <= b5; +>r3a5 : boolean +>a5 <= b5 : boolean +>a5 : { fn(a: Base): void; } +>b5 : { fn(a: Derived): void; } + +var r3a6 = a6 <= b6; +>r3a6 : boolean +>a6 <= b6 : boolean +>a6 : { fn(a: Derived, b: Base): void; } +>b6 : { fn(a: Base, b: Derived): void; } + +var r3a7 = a7 <= b7; +>r3a7 : boolean +>a7 <= b7 : boolean +>a7 : { fn(): void; } +>b7 : { fn(): Base; } + +var r3a8 = a8 <= b8; +>r3a8 : boolean +>a8 <= b8 : boolean +>a8 : { fn(): Base; } +>b8 : { fn(): Base; } + +var r3a9 = a9 <= b9; +>r3a9 : boolean +>a9 <= b9 : boolean +>a9 : { fn(): Base; } +>b9 : { fn(): Derived; } + +var r3a10 = a10 <= b10; +>r3a10 : boolean +>a10 <= b10 : boolean +>a10 : { fn(a?: Base): void; } +>b10 : { fn(a?: Derived): void; } + +var r3a11 = a11 <= b11; +>r3a11 : boolean +>a11 <= b11 : boolean +>a11 : { fn(...a: Base[]): void; } +>b11 : { fn(...a: Derived[]): void; } + +//var r3a12 = a12 <= b12; + +var r3b1 = b1 <= a1; +>r3b1 : boolean +>b1 <= a1 : boolean +>b1 : { fn(): void; } +>a1 : { fn(): void; } + +var r3b2 = b2 <= a2; +>r3b2 : boolean +>b2 <= a2 : boolean +>b2 : { fn(a: number, b: string): void; } +>a2 : { fn(a: number, b: string): void; } + +var r3b3 = b3 <= a3; +>r3b3 : boolean +>b3 <= a3 : boolean +>b3 : { fn(a: number): void; } +>a3 : { fn(a: number, b: string): void; } + +var r3b4 = b4 <= a4; +>r3b4 : boolean +>b4 <= a4 : boolean +>b4 : { fn(): void; } +>a4 : { fn(a: number, b: string): void; } + +var r3b5 = b5 <= a5; +>r3b5 : boolean +>b5 <= a5 : boolean +>b5 : { fn(a: Derived): void; } +>a5 : { fn(a: Base): void; } + +var r3b6 = b6 <= a6; +>r3b6 : boolean +>b6 <= a6 : boolean +>b6 : { fn(a: Base, b: Derived): void; } +>a6 : { fn(a: Derived, b: Base): void; } + +var r3b7 = b7 <= a7; +>r3b7 : boolean +>b7 <= a7 : boolean +>b7 : { fn(): Base; } +>a7 : { fn(): void; } + +var r3b8 = b8 <= a8; +>r3b8 : boolean +>b8 <= a8 : boolean +>b8 : { fn(): Base; } +>a8 : { fn(): Base; } + +var r3b9 = b9 <= a9; +>r3b9 : boolean +>b9 <= a9 : boolean +>b9 : { fn(): Derived; } +>a9 : { fn(): Base; } + +var r3b10 = b10 <= a10; +>r3b10 : boolean +>b10 <= a10 : boolean +>b10 : { fn(a?: Derived): void; } +>a10 : { fn(a?: Base): void; } + +var r3b11 = b11 <= a11; +>r3b11 : boolean +>b11 <= a11 : boolean +>b11 : { fn(...a: Derived[]): void; } +>a11 : { fn(...a: Base[]): void; } + +//var r3b12 = b12 <= a12; + +// operator >= +var r4a1 = a1 >= b1; +>r4a1 : boolean +>a1 >= b1 : boolean +>a1 : { fn(): void; } +>b1 : { fn(): void; } + +var r4a2 = a2 >= b2; +>r4a2 : boolean +>a2 >= b2 : boolean +>a2 : { fn(a: number, b: string): void; } +>b2 : { fn(a: number, b: string): void; } + +var r4a3 = a3 >= b3; +>r4a3 : boolean +>a3 >= b3 : boolean +>a3 : { fn(a: number, b: string): void; } +>b3 : { fn(a: number): void; } + +var r4a4 = a4 >= b4; +>r4a4 : boolean +>a4 >= b4 : boolean +>a4 : { fn(a: number, b: string): void; } +>b4 : { fn(): void; } + +var r4a5 = a5 >= b5; +>r4a5 : boolean +>a5 >= b5 : boolean +>a5 : { fn(a: Base): void; } +>b5 : { fn(a: Derived): void; } + +var r4a6 = a6 >= b6; +>r4a6 : boolean +>a6 >= b6 : boolean +>a6 : { fn(a: Derived, b: Base): void; } +>b6 : { fn(a: Base, b: Derived): void; } + +var r4a7 = a7 >= b7; +>r4a7 : boolean +>a7 >= b7 : boolean +>a7 : { fn(): void; } +>b7 : { fn(): Base; } + +var r4a8 = a8 >= b8; +>r4a8 : boolean +>a8 >= b8 : boolean +>a8 : { fn(): Base; } +>b8 : { fn(): Base; } + +var r4a9 = a9 >= b9; +>r4a9 : boolean +>a9 >= b9 : boolean +>a9 : { fn(): Base; } +>b9 : { fn(): Derived; } + +var r4a10 = a10 >= b10; +>r4a10 : boolean +>a10 >= b10 : boolean +>a10 : { fn(a?: Base): void; } +>b10 : { fn(a?: Derived): void; } + +var r4a11 = a11 >= b11; +>r4a11 : boolean +>a11 >= b11 : boolean +>a11 : { fn(...a: Base[]): void; } +>b11 : { fn(...a: Derived[]): void; } + +//var r4a12 = a12 >= b12; + +var r4b1 = b1 >= a1; +>r4b1 : boolean +>b1 >= a1 : boolean +>b1 : { fn(): void; } +>a1 : { fn(): void; } + +var r4b2 = b2 >= a2; +>r4b2 : boolean +>b2 >= a2 : boolean +>b2 : { fn(a: number, b: string): void; } +>a2 : { fn(a: number, b: string): void; } + +var r4b3 = b3 >= a3; +>r4b3 : boolean +>b3 >= a3 : boolean +>b3 : { fn(a: number): void; } +>a3 : { fn(a: number, b: string): void; } + +var r4b4 = b4 >= a4; +>r4b4 : boolean +>b4 >= a4 : boolean +>b4 : { fn(): void; } +>a4 : { fn(a: number, b: string): void; } + +var r4b5 = b5 >= a5; +>r4b5 : boolean +>b5 >= a5 : boolean +>b5 : { fn(a: Derived): void; } +>a5 : { fn(a: Base): void; } + +var r4b6 = b6 >= a6; +>r4b6 : boolean +>b6 >= a6 : boolean +>b6 : { fn(a: Base, b: Derived): void; } +>a6 : { fn(a: Derived, b: Base): void; } + +var r4b7 = b7 >= a7; +>r4b7 : boolean +>b7 >= a7 : boolean +>b7 : { fn(): Base; } +>a7 : { fn(): void; } + +var r4b8 = b8 >= a8; +>r4b8 : boolean +>b8 >= a8 : boolean +>b8 : { fn(): Base; } +>a8 : { fn(): Base; } + +var r4b9 = b9 >= a9; +>r4b9 : boolean +>b9 >= a9 : boolean +>b9 : { fn(): Derived; } +>a9 : { fn(): Base; } + +var r4b10 = b10 >= a10; +>r4b10 : boolean +>b10 >= a10 : boolean +>b10 : { fn(a?: Derived): void; } +>a10 : { fn(a?: Base): void; } + +var r4b11 = b11 >= a11; +>r4b11 : boolean +>b11 >= a11 : boolean +>b11 : { fn(...a: Derived[]): void; } +>a11 : { fn(...a: Base[]): void; } + +//var r4b12 = b12 >= a12; + +// operator == +var r5a1 = a1 == b1; +>r5a1 : boolean +>a1 == b1 : boolean +>a1 : { fn(): void; } +>b1 : { fn(): void; } + +var r5a2 = a2 == b2; +>r5a2 : boolean +>a2 == b2 : boolean +>a2 : { fn(a: number, b: string): void; } +>b2 : { fn(a: number, b: string): void; } + +var r5a3 = a3 == b3; +>r5a3 : boolean +>a3 == b3 : boolean +>a3 : { fn(a: number, b: string): void; } +>b3 : { fn(a: number): void; } + +var r5a4 = a4 == b4; +>r5a4 : boolean +>a4 == b4 : boolean +>a4 : { fn(a: number, b: string): void; } +>b4 : { fn(): void; } + +var r5a5 = a5 == b5; +>r5a5 : boolean +>a5 == b5 : boolean +>a5 : { fn(a: Base): void; } +>b5 : { fn(a: Derived): void; } + +var r5a6 = a6 == b6; +>r5a6 : boolean +>a6 == b6 : boolean +>a6 : { fn(a: Derived, b: Base): void; } +>b6 : { fn(a: Base, b: Derived): void; } + +var r5a7 = a7 == b7; +>r5a7 : boolean +>a7 == b7 : boolean +>a7 : { fn(): void; } +>b7 : { fn(): Base; } + +var r5a8 = a8 == b8; +>r5a8 : boolean +>a8 == b8 : boolean +>a8 : { fn(): Base; } +>b8 : { fn(): Base; } + +var r5a9 = a9 == b9; +>r5a9 : boolean +>a9 == b9 : boolean +>a9 : { fn(): Base; } +>b9 : { fn(): Derived; } + +var r5a10 = a10 == b10; +>r5a10 : boolean +>a10 == b10 : boolean +>a10 : { fn(a?: Base): void; } +>b10 : { fn(a?: Derived): void; } + +var r5a11 = a11 == b11; +>r5a11 : boolean +>a11 == b11 : boolean +>a11 : { fn(...a: Base[]): void; } +>b11 : { fn(...a: Derived[]): void; } + +//var r5a12 = a12 == b12; + +var r5b1 = b1 == a1; +>r5b1 : boolean +>b1 == a1 : boolean +>b1 : { fn(): void; } +>a1 : { fn(): void; } + +var r5b2 = b2 == a2; +>r5b2 : boolean +>b2 == a2 : boolean +>b2 : { fn(a: number, b: string): void; } +>a2 : { fn(a: number, b: string): void; } + +var r5b3 = b3 == a3; +>r5b3 : boolean +>b3 == a3 : boolean +>b3 : { fn(a: number): void; } +>a3 : { fn(a: number, b: string): void; } + +var r5b4 = b4 == a4; +>r5b4 : boolean +>b4 == a4 : boolean +>b4 : { fn(): void; } +>a4 : { fn(a: number, b: string): void; } + +var r5b5 = b5 == a5; +>r5b5 : boolean +>b5 == a5 : boolean +>b5 : { fn(a: Derived): void; } +>a5 : { fn(a: Base): void; } + +var r5b6 = b6 == a6; +>r5b6 : boolean +>b6 == a6 : boolean +>b6 : { fn(a: Base, b: Derived): void; } +>a6 : { fn(a: Derived, b: Base): void; } + +var r5b7 = b7 == a7; +>r5b7 : boolean +>b7 == a7 : boolean +>b7 : { fn(): Base; } +>a7 : { fn(): void; } + +var r5b8 = b8 == a8; +>r5b8 : boolean +>b8 == a8 : boolean +>b8 : { fn(): Base; } +>a8 : { fn(): Base; } + +var r5b9 = b9 == a9; +>r5b9 : boolean +>b9 == a9 : boolean +>b9 : { fn(): Derived; } +>a9 : { fn(): Base; } + +var r5b10 = b10 == a10; +>r5b10 : boolean +>b10 == a10 : boolean +>b10 : { fn(a?: Derived): void; } +>a10 : { fn(a?: Base): void; } + +var r5b11 = b11 == a11; +>r5b11 : boolean +>b11 == a11 : boolean +>b11 : { fn(...a: Derived[]): void; } +>a11 : { fn(...a: Base[]): void; } + +//var r5b12 = b12 == a12; + +// operator != +var r6a1 = a1 != b1; +>r6a1 : boolean +>a1 != b1 : boolean +>a1 : { fn(): void; } +>b1 : { fn(): void; } + +var r6a2 = a2 != b2; +>r6a2 : boolean +>a2 != b2 : boolean +>a2 : { fn(a: number, b: string): void; } +>b2 : { fn(a: number, b: string): void; } + +var r6a3 = a3 != b3; +>r6a3 : boolean +>a3 != b3 : boolean +>a3 : { fn(a: number, b: string): void; } +>b3 : { fn(a: number): void; } + +var r6a4 = a4 != b4; +>r6a4 : boolean +>a4 != b4 : boolean +>a4 : { fn(a: number, b: string): void; } +>b4 : { fn(): void; } + +var r6a5 = a5 != b5; +>r6a5 : boolean +>a5 != b5 : boolean +>a5 : { fn(a: Base): void; } +>b5 : { fn(a: Derived): void; } + +var r6a6 = a6 != b6; +>r6a6 : boolean +>a6 != b6 : boolean +>a6 : { fn(a: Derived, b: Base): void; } +>b6 : { fn(a: Base, b: Derived): void; } + +var r6a7 = a7 != b7; +>r6a7 : boolean +>a7 != b7 : boolean +>a7 : { fn(): void; } +>b7 : { fn(): Base; } + +var r6a8 = a8 != b8; +>r6a8 : boolean +>a8 != b8 : boolean +>a8 : { fn(): Base; } +>b8 : { fn(): Base; } + +var r6a9 = a9 != b9; +>r6a9 : boolean +>a9 != b9 : boolean +>a9 : { fn(): Base; } +>b9 : { fn(): Derived; } + +var r6a10 = a10 != b10; +>r6a10 : boolean +>a10 != b10 : boolean +>a10 : { fn(a?: Base): void; } +>b10 : { fn(a?: Derived): void; } + +var r6a11 = a11 != b11; +>r6a11 : boolean +>a11 != b11 : boolean +>a11 : { fn(...a: Base[]): void; } +>b11 : { fn(...a: Derived[]): void; } + +//var r6a12 = a12 != b12; + +var r6b1 = b1 != a1; +>r6b1 : boolean +>b1 != a1 : boolean +>b1 : { fn(): void; } +>a1 : { fn(): void; } + +var r6b2 = b2 != a2; +>r6b2 : boolean +>b2 != a2 : boolean +>b2 : { fn(a: number, b: string): void; } +>a2 : { fn(a: number, b: string): void; } + +var r6b3 = b3 != a3; +>r6b3 : boolean +>b3 != a3 : boolean +>b3 : { fn(a: number): void; } +>a3 : { fn(a: number, b: string): void; } + +var r6b4 = b4 != a4; +>r6b4 : boolean +>b4 != a4 : boolean +>b4 : { fn(): void; } +>a4 : { fn(a: number, b: string): void; } + +var r6b5 = b5 != a5; +>r6b5 : boolean +>b5 != a5 : boolean +>b5 : { fn(a: Derived): void; } +>a5 : { fn(a: Base): void; } + +var r6b6 = b6 != a6; +>r6b6 : boolean +>b6 != a6 : boolean +>b6 : { fn(a: Base, b: Derived): void; } +>a6 : { fn(a: Derived, b: Base): void; } + +var r6b7 = b7 != a7; +>r6b7 : boolean +>b7 != a7 : boolean +>b7 : { fn(): Base; } +>a7 : { fn(): void; } + +var r6b8 = b8 != a8; +>r6b8 : boolean +>b8 != a8 : boolean +>b8 : { fn(): Base; } +>a8 : { fn(): Base; } + +var r6b9 = b9 != a9; +>r6b9 : boolean +>b9 != a9 : boolean +>b9 : { fn(): Derived; } +>a9 : { fn(): Base; } + +var r6b10 = b10 != a10; +>r6b10 : boolean +>b10 != a10 : boolean +>b10 : { fn(a?: Derived): void; } +>a10 : { fn(a?: Base): void; } + +var r6b11 = b11 != a11; +>r6b11 : boolean +>b11 != a11 : boolean +>b11 : { fn(...a: Derived[]): void; } +>a11 : { fn(...a: Base[]): void; } + +//var r6b12 = b12 != a12; + +// operator === +var r7a1 = a1 === b1; +>r7a1 : boolean +>a1 === b1 : boolean +>a1 : { fn(): void; } +>b1 : { fn(): void; } + +var r7a2 = a2 === b2; +>r7a2 : boolean +>a2 === b2 : boolean +>a2 : { fn(a: number, b: string): void; } +>b2 : { fn(a: number, b: string): void; } + +var r7a3 = a3 === b3; +>r7a3 : boolean +>a3 === b3 : boolean +>a3 : { fn(a: number, b: string): void; } +>b3 : { fn(a: number): void; } + +var r7a4 = a4 === b4; +>r7a4 : boolean +>a4 === b4 : boolean +>a4 : { fn(a: number, b: string): void; } +>b4 : { fn(): void; } + +var r7a5 = a5 === b5; +>r7a5 : boolean +>a5 === b5 : boolean +>a5 : { fn(a: Base): void; } +>b5 : { fn(a: Derived): void; } + +var r7a6 = a6 === b6; +>r7a6 : boolean +>a6 === b6 : boolean +>a6 : { fn(a: Derived, b: Base): void; } +>b6 : { fn(a: Base, b: Derived): void; } + +var r7a7 = a7 === b7; +>r7a7 : boolean +>a7 === b7 : boolean +>a7 : { fn(): void; } +>b7 : { fn(): Base; } + +var r7a8 = a8 === b8; +>r7a8 : boolean +>a8 === b8 : boolean +>a8 : { fn(): Base; } +>b8 : { fn(): Base; } + +var r7a9 = a9 === b9; +>r7a9 : boolean +>a9 === b9 : boolean +>a9 : { fn(): Base; } +>b9 : { fn(): Derived; } + +var r7a10 = a10 === b10; +>r7a10 : boolean +>a10 === b10 : boolean +>a10 : { fn(a?: Base): void; } +>b10 : { fn(a?: Derived): void; } + +var r7a11 = a11 === b11; +>r7a11 : boolean +>a11 === b11 : boolean +>a11 : { fn(...a: Base[]): void; } +>b11 : { fn(...a: Derived[]): void; } + +//var r7a12 = a12 === b12; + +var r7b1 = b1 === a1; +>r7b1 : boolean +>b1 === a1 : boolean +>b1 : { fn(): void; } +>a1 : { fn(): void; } + +var r7b2 = b2 === a2; +>r7b2 : boolean +>b2 === a2 : boolean +>b2 : { fn(a: number, b: string): void; } +>a2 : { fn(a: number, b: string): void; } + +var r7b3 = b3 === a3; +>r7b3 : boolean +>b3 === a3 : boolean +>b3 : { fn(a: number): void; } +>a3 : { fn(a: number, b: string): void; } + +var r7b4 = b4 === a4; +>r7b4 : boolean +>b4 === a4 : boolean +>b4 : { fn(): void; } +>a4 : { fn(a: number, b: string): void; } + +var r7b5 = b5 === a5; +>r7b5 : boolean +>b5 === a5 : boolean +>b5 : { fn(a: Derived): void; } +>a5 : { fn(a: Base): void; } + +var r7b6 = b6 === a6; +>r7b6 : boolean +>b6 === a6 : boolean +>b6 : { fn(a: Base, b: Derived): void; } +>a6 : { fn(a: Derived, b: Base): void; } + +var r7b7 = b7 === a7; +>r7b7 : boolean +>b7 === a7 : boolean +>b7 : { fn(): Base; } +>a7 : { fn(): void; } + +var r7b8 = b8 === a8; +>r7b8 : boolean +>b8 === a8 : boolean +>b8 : { fn(): Base; } +>a8 : { fn(): Base; } + +var r7b9 = b9 === a9; +>r7b9 : boolean +>b9 === a9 : boolean +>b9 : { fn(): Derived; } +>a9 : { fn(): Base; } + +var r7b10 = b10 === a10; +>r7b10 : boolean +>b10 === a10 : boolean +>b10 : { fn(a?: Derived): void; } +>a10 : { fn(a?: Base): void; } + +var r7b11 = b11 === a11; +>r7b11 : boolean +>b11 === a11 : boolean +>b11 : { fn(...a: Derived[]): void; } +>a11 : { fn(...a: Base[]): void; } + +//var r7b12 = b12 === a12; + +// operator !== +var r8a1 = a1 !== b1; +>r8a1 : boolean +>a1 !== b1 : boolean +>a1 : { fn(): void; } +>b1 : { fn(): void; } + +var r8a2 = a2 !== b2; +>r8a2 : boolean +>a2 !== b2 : boolean +>a2 : { fn(a: number, b: string): void; } +>b2 : { fn(a: number, b: string): void; } + +var r8a3 = a3 !== b3; +>r8a3 : boolean +>a3 !== b3 : boolean +>a3 : { fn(a: number, b: string): void; } +>b3 : { fn(a: number): void; } + +var r8a4 = a4 !== b4; +>r8a4 : boolean +>a4 !== b4 : boolean +>a4 : { fn(a: number, b: string): void; } +>b4 : { fn(): void; } + +var r8a5 = a5 !== b5; +>r8a5 : boolean +>a5 !== b5 : boolean +>a5 : { fn(a: Base): void; } +>b5 : { fn(a: Derived): void; } + +var r8a6 = a6 !== b6; +>r8a6 : boolean +>a6 !== b6 : boolean +>a6 : { fn(a: Derived, b: Base): void; } +>b6 : { fn(a: Base, b: Derived): void; } + +var r8a7 = a7 !== b7; +>r8a7 : boolean +>a7 !== b7 : boolean +>a7 : { fn(): void; } +>b7 : { fn(): Base; } + +var r8a8 = a8 !== b8; +>r8a8 : boolean +>a8 !== b8 : boolean +>a8 : { fn(): Base; } +>b8 : { fn(): Base; } + +var r8a9 = a9 !== b9; +>r8a9 : boolean +>a9 !== b9 : boolean +>a9 : { fn(): Base; } +>b9 : { fn(): Derived; } + +var r8a10 = a10 !== b10; +>r8a10 : boolean +>a10 !== b10 : boolean +>a10 : { fn(a?: Base): void; } +>b10 : { fn(a?: Derived): void; } + +var r8a11 = a11 !== b11; +>r8a11 : boolean +>a11 !== b11 : boolean +>a11 : { fn(...a: Base[]): void; } +>b11 : { fn(...a: Derived[]): void; } + +//var r8a12 = a12 !== b12; + +var r8b1 = b1 !== a1; +>r8b1 : boolean +>b1 !== a1 : boolean +>b1 : { fn(): void; } +>a1 : { fn(): void; } + +var r8b2 = b2 !== a2; +>r8b2 : boolean +>b2 !== a2 : boolean +>b2 : { fn(a: number, b: string): void; } +>a2 : { fn(a: number, b: string): void; } + +var r8b3 = b3 !== a3; +>r8b3 : boolean +>b3 !== a3 : boolean +>b3 : { fn(a: number): void; } +>a3 : { fn(a: number, b: string): void; } + +var r8b4 = b4 !== a4; +>r8b4 : boolean +>b4 !== a4 : boolean +>b4 : { fn(): void; } +>a4 : { fn(a: number, b: string): void; } + +var r8b5 = b5 !== a5; +>r8b5 : boolean +>b5 !== a5 : boolean +>b5 : { fn(a: Derived): void; } +>a5 : { fn(a: Base): void; } + +var r8b6 = b6 !== a6; +>r8b6 : boolean +>b6 !== a6 : boolean +>b6 : { fn(a: Base, b: Derived): void; } +>a6 : { fn(a: Derived, b: Base): void; } + +var r8b7 = b7 !== a7; +>r8b7 : boolean +>b7 !== a7 : boolean +>b7 : { fn(): Base; } +>a7 : { fn(): void; } + +var r8b8 = b8 !== a8; +>r8b8 : boolean +>b8 !== a8 : boolean +>b8 : { fn(): Base; } +>a8 : { fn(): Base; } + +var r8b9 = b9 !== a9; +>r8b9 : boolean +>b9 !== a9 : boolean +>b9 : { fn(): Derived; } +>a9 : { fn(): Base; } + +var r8b10 = b10 !== a10; +>r8b10 : boolean +>b10 !== a10 : boolean +>b10 : { fn(a?: Derived): void; } +>a10 : { fn(a?: Base): void; } + +var r8b11 = b11 !== a11; +>r8b11 : boolean +>b11 !== a11 : boolean +>b11 : { fn(...a: Derived[]): void; } +>a11 : { fn(...a: Base[]): void; } + +//var r8b12 = b12 !== a12; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.js index df82986e45d..aefeb6d87ff 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.js @@ -258,6 +258,9 @@ var a8; var b8; var a9; var b9; +//var a10: { (t: T, u: U): T[] }; +//var b10: { (a: A, b: B): A[] }; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; @@ -267,6 +270,7 @@ var r1a6 = a6 < b6; var r1a7 = a7 < b7; var r1a8 = a8 < b8; var r1a9 = a9 < b9; +//var r1a10 = a10 < b10; var r1b1 = b1 < a1; var r1b2 = b2 < a2; var r1b3 = b3 < a3; @@ -276,6 +280,8 @@ var r1b6 = b6 < a6; var r1b7 = b7 < a7; var r1b8 = b8 < a8; var r1b9 = b9 < a9; +//var r1b10 = b10 < a10; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; @@ -285,6 +291,7 @@ var r2a6 = a6 > b6; var r2a7 = a7 > b7; var r2a8 = a8 > b8; var r2a9 = a9 > b9; +//var r2a10 = a10 > b10; var r2b1 = b1 > a1; var r2b2 = b2 > a2; var r2b3 = b3 > a3; @@ -294,6 +301,8 @@ var r2b6 = b6 > a6; var r2b7 = b7 > a7; var r2b8 = b8 > a8; var r2b9 = b9 > a9; +//var r2b10 = b10 > a10; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; @@ -303,6 +312,7 @@ var r3a6 = a6 <= b6; var r3a7 = a7 <= b7; var r3a8 = a8 <= b8; var r3a9 = a9 <= b9; +//var r3a10 = a10 <= b10; var r3b1 = b1 <= a1; var r3b2 = b2 <= a2; var r3b3 = b3 <= a3; @@ -312,6 +322,8 @@ var r3b6 = b6 <= a6; var r3b7 = b7 <= a7; var r3b8 = b8 <= a8; var r3b9 = b9 <= a9; +//var r3b10 = b10 <= a10; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; @@ -321,6 +333,7 @@ var r4a6 = a6 >= b6; var r4a7 = a7 >= b7; var r4a8 = a8 >= b8; var r4a9 = a9 >= b9; +//var r4a10 = a10 >= b10; var r4b1 = b1 >= a1; var r4b2 = b2 >= a2; var r4b3 = b3 >= a3; @@ -330,6 +343,8 @@ var r4b6 = b6 >= a6; var r4b7 = b7 >= a7; var r4b8 = b8 >= a8; var r4b9 = b9 >= a9; +//var r4b10 = b10 >= a10; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; @@ -339,6 +354,7 @@ var r5a6 = a6 == b6; var r5a7 = a7 == b7; var r5a8 = a8 == b8; var r5a9 = a9 == b9; +//var r5a10 = a10 == b10; var r5b1 = b1 == a1; var r5b2 = b2 == a2; var r5b3 = b3 == a3; @@ -348,6 +364,8 @@ var r5b6 = b6 == a6; var r5b7 = b7 == a7; var r5b8 = b8 == a8; var r5b9 = b9 == a9; +//var r5b10 = b10 == a10; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; @@ -357,6 +375,7 @@ var r6a6 = a6 != b6; var r6a7 = a7 != b7; var r6a8 = a8 != b8; var r6a9 = a9 != b9; +//var r6a10 = a10 != b10; var r6b1 = b1 != a1; var r6b2 = b2 != a2; var r6b3 = b3 != a3; @@ -366,6 +385,8 @@ var r6b6 = b6 != a6; var r6b7 = b7 != a7; var r6b8 = b8 != a8; var r6b9 = b9 != a9; +//var r6b10 = b10 != a10; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; @@ -375,6 +396,7 @@ var r7a6 = a6 === b6; var r7a7 = a7 === b7; var r7a8 = a8 === b8; var r7a9 = a9 === b9; +//var r7a10 = a10 === b10; var r7b1 = b1 === a1; var r7b2 = b2 === a2; var r7b3 = b3 === a3; @@ -384,6 +406,8 @@ var r7b6 = b6 === a6; var r7b7 = b7 === a7; var r7b8 = b8 === a8; var r7b9 = b9 === a9; +//var r7b10 = b10 === a10; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; @@ -393,6 +417,7 @@ var r8a6 = a6 !== b6; var r8a7 = a7 !== b7; var r8a8 = a8 !== b8; var r8a9 = a9 !== b9; +//var r8a10 = a10 !== b10; var r8b1 = b1 !== a1; var r8b2 = b2 !== a2; var r8b3 = b3 !== a3; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types new file mode 100644 index 00000000000..737c13f183c --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types @@ -0,0 +1,1023 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnConstructorSignature.ts === +class Base { +>Base : Base + + public a: string; +>a : string +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + public b: string; +>b : string +} + +var a1: { new (): Base }; +>a1 : new () => Base +>Base : Base + +var b1: { new (): Base }; +>b1 : new () => Base +>Base : Base + +var a2: { new (a: number, b: string): Base }; +>a2 : new (a: number, b: string) => Base +>a : number +>b : string +>Base : Base + +var b2: { new (a: number, b: string): Base }; +>b2 : new (a: number, b: string) => Base +>a : number +>b : string +>Base : Base + +var a3: { new (a: number, b: string): Base }; +>a3 : new (a: number, b: string) => Base +>a : number +>b : string +>Base : Base + +var b3: { new (a: number): Base }; +>b3 : new (a: number) => Base +>a : number +>Base : Base + +var a4: { new (a: number, b: string): Base }; +>a4 : new (a: number, b: string) => Base +>a : number +>b : string +>Base : Base + +var b4: { new (): Base }; +>b4 : new () => Base +>Base : Base + +var a5: { new (a: Base): Base }; +>a5 : new (a: Base) => Base +>a : Base +>Base : Base +>Base : Base + +var b5: { new (a: Derived): Base }; +>b5 : new (a: Derived) => Base +>a : Derived +>Derived : Derived +>Base : Base + +var a6: { new (a: Derived, b: Base): Base }; +>a6 : new (a: Derived, b: Base) => Base +>a : Derived +>Derived : Derived +>b : Base +>Base : Base +>Base : Base + +var b6: { new (a: Base, b: Derived): Base }; +>b6 : new (a: Base, b: Derived) => Base +>a : Base +>Base : Base +>b : Derived +>Derived : Derived +>Base : Base + +var a7: { new (): Base }; +>a7 : new () => Base +>Base : Base + +var b7: { new (): Derived }; +>b7 : new () => Derived +>Derived : Derived + +var a8: { new (a?: Base): Base }; +>a8 : new (a?: Base) => Base +>a : Base +>Base : Base +>Base : Base + +var b8: { new (a?: Derived): Base }; +>b8 : new (a?: Derived) => Base +>a : Derived +>Derived : Derived +>Base : Base + +var a9: { new (...a: Base[]): Base }; +>a9 : new (...a: Base[]) => Base +>a : Base[] +>Base : Base +>Base : Base + +var b9: { new (...a: Derived[]): Base }; +>b9 : new (...a: Derived[]) => Base +>a : Derived[] +>Derived : Derived +>Base : Base + +//var a10: { (t: T, u: U): T[] }; +//var b10: { (a: A, b: B): A[] }; + +// operator < +var r1a1 = a1 < b1; +>r1a1 : boolean +>a1 < b1 : boolean +>a1 : new () => Base +>b1 : new () => Base + +var r1a2 = a2 < b2; +>r1a2 : boolean +>a2 < b2 : boolean +>a2 : new (a: number, b: string) => Base +>b2 : new (a: number, b: string) => Base + +var r1a3 = a3 < b3; +>r1a3 : boolean +>a3 < b3 : boolean +>a3 : new (a: number, b: string) => Base +>b3 : new (a: number) => Base + +var r1a4 = a4 < b4; +>r1a4 : boolean +>a4 < b4 : boolean +>a4 : new (a: number, b: string) => Base +>b4 : new () => Base + +var r1a5 = a5 < b5; +>r1a5 : boolean +>a5 < b5 : boolean +>a5 : new (a: Base) => Base +>b5 : new (a: Derived) => Base + +var r1a6 = a6 < b6; +>r1a6 : boolean +>a6 < b6 : boolean +>a6 : new (a: Derived, b: Base) => Base +>b6 : new (a: Base, b: Derived) => Base + +var r1a7 = a7 < b7; +>r1a7 : boolean +>a7 < b7 : boolean +>a7 : new () => Base +>b7 : new () => Derived + +var r1a8 = a8 < b8; +>r1a8 : boolean +>a8 < b8 : boolean +>a8 : new (a?: Base) => Base +>b8 : new (a?: Derived) => Base + +var r1a9 = a9 < b9; +>r1a9 : boolean +>a9 < b9 : boolean +>a9 : new (...a: Base[]) => Base +>b9 : new (...a: Derived[]) => Base + +//var r1a10 = a10 < b10; + +var r1b1 = b1 < a1; +>r1b1 : boolean +>b1 < a1 : boolean +>b1 : new () => Base +>a1 : new () => Base + +var r1b2 = b2 < a2; +>r1b2 : boolean +>b2 < a2 : boolean +>b2 : new (a: number, b: string) => Base +>a2 : new (a: number, b: string) => Base + +var r1b3 = b3 < a3; +>r1b3 : boolean +>b3 < a3 : boolean +>b3 : new (a: number) => Base +>a3 : new (a: number, b: string) => Base + +var r1b4 = b4 < a4; +>r1b4 : boolean +>b4 < a4 : boolean +>b4 : new () => Base +>a4 : new (a: number, b: string) => Base + +var r1b5 = b5 < a5; +>r1b5 : boolean +>b5 < a5 : boolean +>b5 : new (a: Derived) => Base +>a5 : new (a: Base) => Base + +var r1b6 = b6 < a6; +>r1b6 : boolean +>b6 < a6 : boolean +>b6 : new (a: Base, b: Derived) => Base +>a6 : new (a: Derived, b: Base) => Base + +var r1b7 = b7 < a7; +>r1b7 : boolean +>b7 < a7 : boolean +>b7 : new () => Derived +>a7 : new () => Base + +var r1b8 = b8 < a8; +>r1b8 : boolean +>b8 < a8 : boolean +>b8 : new (a?: Derived) => Base +>a8 : new (a?: Base) => Base + +var r1b9 = b9 < a9; +>r1b9 : boolean +>b9 < a9 : boolean +>b9 : new (...a: Derived[]) => Base +>a9 : new (...a: Base[]) => Base + +//var r1b10 = b10 < a10; + +// operator > +var r2a1 = a1 > b1; +>r2a1 : boolean +>a1 > b1 : boolean +>a1 : new () => Base +>b1 : new () => Base + +var r2a2 = a2 > b2; +>r2a2 : boolean +>a2 > b2 : boolean +>a2 : new (a: number, b: string) => Base +>b2 : new (a: number, b: string) => Base + +var r2a3 = a3 > b3; +>r2a3 : boolean +>a3 > b3 : boolean +>a3 : new (a: number, b: string) => Base +>b3 : new (a: number) => Base + +var r2a4 = a4 > b4; +>r2a4 : boolean +>a4 > b4 : boolean +>a4 : new (a: number, b: string) => Base +>b4 : new () => Base + +var r2a5 = a5 > b5; +>r2a5 : boolean +>a5 > b5 : boolean +>a5 : new (a: Base) => Base +>b5 : new (a: Derived) => Base + +var r2a6 = a6 > b6; +>r2a6 : boolean +>a6 > b6 : boolean +>a6 : new (a: Derived, b: Base) => Base +>b6 : new (a: Base, b: Derived) => Base + +var r2a7 = a7 > b7; +>r2a7 : boolean +>a7 > b7 : boolean +>a7 : new () => Base +>b7 : new () => Derived + +var r2a8 = a8 > b8; +>r2a8 : boolean +>a8 > b8 : boolean +>a8 : new (a?: Base) => Base +>b8 : new (a?: Derived) => Base + +var r2a9 = a9 > b9; +>r2a9 : boolean +>a9 > b9 : boolean +>a9 : new (...a: Base[]) => Base +>b9 : new (...a: Derived[]) => Base + +//var r2a10 = a10 > b10; + +var r2b1 = b1 > a1; +>r2b1 : boolean +>b1 > a1 : boolean +>b1 : new () => Base +>a1 : new () => Base + +var r2b2 = b2 > a2; +>r2b2 : boolean +>b2 > a2 : boolean +>b2 : new (a: number, b: string) => Base +>a2 : new (a: number, b: string) => Base + +var r2b3 = b3 > a3; +>r2b3 : boolean +>b3 > a3 : boolean +>b3 : new (a: number) => Base +>a3 : new (a: number, b: string) => Base + +var r2b4 = b4 > a4; +>r2b4 : boolean +>b4 > a4 : boolean +>b4 : new () => Base +>a4 : new (a: number, b: string) => Base + +var r2b5 = b5 > a5; +>r2b5 : boolean +>b5 > a5 : boolean +>b5 : new (a: Derived) => Base +>a5 : new (a: Base) => Base + +var r2b6 = b6 > a6; +>r2b6 : boolean +>b6 > a6 : boolean +>b6 : new (a: Base, b: Derived) => Base +>a6 : new (a: Derived, b: Base) => Base + +var r2b7 = b7 > a7; +>r2b7 : boolean +>b7 > a7 : boolean +>b7 : new () => Derived +>a7 : new () => Base + +var r2b8 = b8 > a8; +>r2b8 : boolean +>b8 > a8 : boolean +>b8 : new (a?: Derived) => Base +>a8 : new (a?: Base) => Base + +var r2b9 = b9 > a9; +>r2b9 : boolean +>b9 > a9 : boolean +>b9 : new (...a: Derived[]) => Base +>a9 : new (...a: Base[]) => Base + +//var r2b10 = b10 > a10; + +// operator <= +var r3a1 = a1 <= b1; +>r3a1 : boolean +>a1 <= b1 : boolean +>a1 : new () => Base +>b1 : new () => Base + +var r3a2 = a2 <= b2; +>r3a2 : boolean +>a2 <= b2 : boolean +>a2 : new (a: number, b: string) => Base +>b2 : new (a: number, b: string) => Base + +var r3a3 = a3 <= b3; +>r3a3 : boolean +>a3 <= b3 : boolean +>a3 : new (a: number, b: string) => Base +>b3 : new (a: number) => Base + +var r3a4 = a4 <= b4; +>r3a4 : boolean +>a4 <= b4 : boolean +>a4 : new (a: number, b: string) => Base +>b4 : new () => Base + +var r3a5 = a5 <= b5; +>r3a5 : boolean +>a5 <= b5 : boolean +>a5 : new (a: Base) => Base +>b5 : new (a: Derived) => Base + +var r3a6 = a6 <= b6; +>r3a6 : boolean +>a6 <= b6 : boolean +>a6 : new (a: Derived, b: Base) => Base +>b6 : new (a: Base, b: Derived) => Base + +var r3a7 = a7 <= b7; +>r3a7 : boolean +>a7 <= b7 : boolean +>a7 : new () => Base +>b7 : new () => Derived + +var r3a8 = a8 <= b8; +>r3a8 : boolean +>a8 <= b8 : boolean +>a8 : new (a?: Base) => Base +>b8 : new (a?: Derived) => Base + +var r3a9 = a9 <= b9; +>r3a9 : boolean +>a9 <= b9 : boolean +>a9 : new (...a: Base[]) => Base +>b9 : new (...a: Derived[]) => Base + +//var r3a10 = a10 <= b10; + +var r3b1 = b1 <= a1; +>r3b1 : boolean +>b1 <= a1 : boolean +>b1 : new () => Base +>a1 : new () => Base + +var r3b2 = b2 <= a2; +>r3b2 : boolean +>b2 <= a2 : boolean +>b2 : new (a: number, b: string) => Base +>a2 : new (a: number, b: string) => Base + +var r3b3 = b3 <= a3; +>r3b3 : boolean +>b3 <= a3 : boolean +>b3 : new (a: number) => Base +>a3 : new (a: number, b: string) => Base + +var r3b4 = b4 <= a4; +>r3b4 : boolean +>b4 <= a4 : boolean +>b4 : new () => Base +>a4 : new (a: number, b: string) => Base + +var r3b5 = b5 <= a5; +>r3b5 : boolean +>b5 <= a5 : boolean +>b5 : new (a: Derived) => Base +>a5 : new (a: Base) => Base + +var r3b6 = b6 <= a6; +>r3b6 : boolean +>b6 <= a6 : boolean +>b6 : new (a: Base, b: Derived) => Base +>a6 : new (a: Derived, b: Base) => Base + +var r3b7 = b7 <= a7; +>r3b7 : boolean +>b7 <= a7 : boolean +>b7 : new () => Derived +>a7 : new () => Base + +var r3b8 = b8 <= a8; +>r3b8 : boolean +>b8 <= a8 : boolean +>b8 : new (a?: Derived) => Base +>a8 : new (a?: Base) => Base + +var r3b9 = b9 <= a9; +>r3b9 : boolean +>b9 <= a9 : boolean +>b9 : new (...a: Derived[]) => Base +>a9 : new (...a: Base[]) => Base + +//var r3b10 = b10 <= a10; + +// operator >= +var r4a1 = a1 >= b1; +>r4a1 : boolean +>a1 >= b1 : boolean +>a1 : new () => Base +>b1 : new () => Base + +var r4a2 = a2 >= b2; +>r4a2 : boolean +>a2 >= b2 : boolean +>a2 : new (a: number, b: string) => Base +>b2 : new (a: number, b: string) => Base + +var r4a3 = a3 >= b3; +>r4a3 : boolean +>a3 >= b3 : boolean +>a3 : new (a: number, b: string) => Base +>b3 : new (a: number) => Base + +var r4a4 = a4 >= b4; +>r4a4 : boolean +>a4 >= b4 : boolean +>a4 : new (a: number, b: string) => Base +>b4 : new () => Base + +var r4a5 = a5 >= b5; +>r4a5 : boolean +>a5 >= b5 : boolean +>a5 : new (a: Base) => Base +>b5 : new (a: Derived) => Base + +var r4a6 = a6 >= b6; +>r4a6 : boolean +>a6 >= b6 : boolean +>a6 : new (a: Derived, b: Base) => Base +>b6 : new (a: Base, b: Derived) => Base + +var r4a7 = a7 >= b7; +>r4a7 : boolean +>a7 >= b7 : boolean +>a7 : new () => Base +>b7 : new () => Derived + +var r4a8 = a8 >= b8; +>r4a8 : boolean +>a8 >= b8 : boolean +>a8 : new (a?: Base) => Base +>b8 : new (a?: Derived) => Base + +var r4a9 = a9 >= b9; +>r4a9 : boolean +>a9 >= b9 : boolean +>a9 : new (...a: Base[]) => Base +>b9 : new (...a: Derived[]) => Base + +//var r4a10 = a10 >= b10; + +var r4b1 = b1 >= a1; +>r4b1 : boolean +>b1 >= a1 : boolean +>b1 : new () => Base +>a1 : new () => Base + +var r4b2 = b2 >= a2; +>r4b2 : boolean +>b2 >= a2 : boolean +>b2 : new (a: number, b: string) => Base +>a2 : new (a: number, b: string) => Base + +var r4b3 = b3 >= a3; +>r4b3 : boolean +>b3 >= a3 : boolean +>b3 : new (a: number) => Base +>a3 : new (a: number, b: string) => Base + +var r4b4 = b4 >= a4; +>r4b4 : boolean +>b4 >= a4 : boolean +>b4 : new () => Base +>a4 : new (a: number, b: string) => Base + +var r4b5 = b5 >= a5; +>r4b5 : boolean +>b5 >= a5 : boolean +>b5 : new (a: Derived) => Base +>a5 : new (a: Base) => Base + +var r4b6 = b6 >= a6; +>r4b6 : boolean +>b6 >= a6 : boolean +>b6 : new (a: Base, b: Derived) => Base +>a6 : new (a: Derived, b: Base) => Base + +var r4b7 = b7 >= a7; +>r4b7 : boolean +>b7 >= a7 : boolean +>b7 : new () => Derived +>a7 : new () => Base + +var r4b8 = b8 >= a8; +>r4b8 : boolean +>b8 >= a8 : boolean +>b8 : new (a?: Derived) => Base +>a8 : new (a?: Base) => Base + +var r4b9 = b9 >= a9; +>r4b9 : boolean +>b9 >= a9 : boolean +>b9 : new (...a: Derived[]) => Base +>a9 : new (...a: Base[]) => Base + +//var r4b10 = b10 >= a10; + +// operator == +var r5a1 = a1 == b1; +>r5a1 : boolean +>a1 == b1 : boolean +>a1 : new () => Base +>b1 : new () => Base + +var r5a2 = a2 == b2; +>r5a2 : boolean +>a2 == b2 : boolean +>a2 : new (a: number, b: string) => Base +>b2 : new (a: number, b: string) => Base + +var r5a3 = a3 == b3; +>r5a3 : boolean +>a3 == b3 : boolean +>a3 : new (a: number, b: string) => Base +>b3 : new (a: number) => Base + +var r5a4 = a4 == b4; +>r5a4 : boolean +>a4 == b4 : boolean +>a4 : new (a: number, b: string) => Base +>b4 : new () => Base + +var r5a5 = a5 == b5; +>r5a5 : boolean +>a5 == b5 : boolean +>a5 : new (a: Base) => Base +>b5 : new (a: Derived) => Base + +var r5a6 = a6 == b6; +>r5a6 : boolean +>a6 == b6 : boolean +>a6 : new (a: Derived, b: Base) => Base +>b6 : new (a: Base, b: Derived) => Base + +var r5a7 = a7 == b7; +>r5a7 : boolean +>a7 == b7 : boolean +>a7 : new () => Base +>b7 : new () => Derived + +var r5a8 = a8 == b8; +>r5a8 : boolean +>a8 == b8 : boolean +>a8 : new (a?: Base) => Base +>b8 : new (a?: Derived) => Base + +var r5a9 = a9 == b9; +>r5a9 : boolean +>a9 == b9 : boolean +>a9 : new (...a: Base[]) => Base +>b9 : new (...a: Derived[]) => Base + +//var r5a10 = a10 == b10; + +var r5b1 = b1 == a1; +>r5b1 : boolean +>b1 == a1 : boolean +>b1 : new () => Base +>a1 : new () => Base + +var r5b2 = b2 == a2; +>r5b2 : boolean +>b2 == a2 : boolean +>b2 : new (a: number, b: string) => Base +>a2 : new (a: number, b: string) => Base + +var r5b3 = b3 == a3; +>r5b3 : boolean +>b3 == a3 : boolean +>b3 : new (a: number) => Base +>a3 : new (a: number, b: string) => Base + +var r5b4 = b4 == a4; +>r5b4 : boolean +>b4 == a4 : boolean +>b4 : new () => Base +>a4 : new (a: number, b: string) => Base + +var r5b5 = b5 == a5; +>r5b5 : boolean +>b5 == a5 : boolean +>b5 : new (a: Derived) => Base +>a5 : new (a: Base) => Base + +var r5b6 = b6 == a6; +>r5b6 : boolean +>b6 == a6 : boolean +>b6 : new (a: Base, b: Derived) => Base +>a6 : new (a: Derived, b: Base) => Base + +var r5b7 = b7 == a7; +>r5b7 : boolean +>b7 == a7 : boolean +>b7 : new () => Derived +>a7 : new () => Base + +var r5b8 = b8 == a8; +>r5b8 : boolean +>b8 == a8 : boolean +>b8 : new (a?: Derived) => Base +>a8 : new (a?: Base) => Base + +var r5b9 = b9 == a9; +>r5b9 : boolean +>b9 == a9 : boolean +>b9 : new (...a: Derived[]) => Base +>a9 : new (...a: Base[]) => Base + +//var r5b10 = b10 == a10; + +// operator != +var r6a1 = a1 != b1; +>r6a1 : boolean +>a1 != b1 : boolean +>a1 : new () => Base +>b1 : new () => Base + +var r6a2 = a2 != b2; +>r6a2 : boolean +>a2 != b2 : boolean +>a2 : new (a: number, b: string) => Base +>b2 : new (a: number, b: string) => Base + +var r6a3 = a3 != b3; +>r6a3 : boolean +>a3 != b3 : boolean +>a3 : new (a: number, b: string) => Base +>b3 : new (a: number) => Base + +var r6a4 = a4 != b4; +>r6a4 : boolean +>a4 != b4 : boolean +>a4 : new (a: number, b: string) => Base +>b4 : new () => Base + +var r6a5 = a5 != b5; +>r6a5 : boolean +>a5 != b5 : boolean +>a5 : new (a: Base) => Base +>b5 : new (a: Derived) => Base + +var r6a6 = a6 != b6; +>r6a6 : boolean +>a6 != b6 : boolean +>a6 : new (a: Derived, b: Base) => Base +>b6 : new (a: Base, b: Derived) => Base + +var r6a7 = a7 != b7; +>r6a7 : boolean +>a7 != b7 : boolean +>a7 : new () => Base +>b7 : new () => Derived + +var r6a8 = a8 != b8; +>r6a8 : boolean +>a8 != b8 : boolean +>a8 : new (a?: Base) => Base +>b8 : new (a?: Derived) => Base + +var r6a9 = a9 != b9; +>r6a9 : boolean +>a9 != b9 : boolean +>a9 : new (...a: Base[]) => Base +>b9 : new (...a: Derived[]) => Base + +//var r6a10 = a10 != b10; + +var r6b1 = b1 != a1; +>r6b1 : boolean +>b1 != a1 : boolean +>b1 : new () => Base +>a1 : new () => Base + +var r6b2 = b2 != a2; +>r6b2 : boolean +>b2 != a2 : boolean +>b2 : new (a: number, b: string) => Base +>a2 : new (a: number, b: string) => Base + +var r6b3 = b3 != a3; +>r6b3 : boolean +>b3 != a3 : boolean +>b3 : new (a: number) => Base +>a3 : new (a: number, b: string) => Base + +var r6b4 = b4 != a4; +>r6b4 : boolean +>b4 != a4 : boolean +>b4 : new () => Base +>a4 : new (a: number, b: string) => Base + +var r6b5 = b5 != a5; +>r6b5 : boolean +>b5 != a5 : boolean +>b5 : new (a: Derived) => Base +>a5 : new (a: Base) => Base + +var r6b6 = b6 != a6; +>r6b6 : boolean +>b6 != a6 : boolean +>b6 : new (a: Base, b: Derived) => Base +>a6 : new (a: Derived, b: Base) => Base + +var r6b7 = b7 != a7; +>r6b7 : boolean +>b7 != a7 : boolean +>b7 : new () => Derived +>a7 : new () => Base + +var r6b8 = b8 != a8; +>r6b8 : boolean +>b8 != a8 : boolean +>b8 : new (a?: Derived) => Base +>a8 : new (a?: Base) => Base + +var r6b9 = b9 != a9; +>r6b9 : boolean +>b9 != a9 : boolean +>b9 : new (...a: Derived[]) => Base +>a9 : new (...a: Base[]) => Base + +//var r6b10 = b10 != a10; + +// operator === +var r7a1 = a1 === b1; +>r7a1 : boolean +>a1 === b1 : boolean +>a1 : new () => Base +>b1 : new () => Base + +var r7a2 = a2 === b2; +>r7a2 : boolean +>a2 === b2 : boolean +>a2 : new (a: number, b: string) => Base +>b2 : new (a: number, b: string) => Base + +var r7a3 = a3 === b3; +>r7a3 : boolean +>a3 === b3 : boolean +>a3 : new (a: number, b: string) => Base +>b3 : new (a: number) => Base + +var r7a4 = a4 === b4; +>r7a4 : boolean +>a4 === b4 : boolean +>a4 : new (a: number, b: string) => Base +>b4 : new () => Base + +var r7a5 = a5 === b5; +>r7a5 : boolean +>a5 === b5 : boolean +>a5 : new (a: Base) => Base +>b5 : new (a: Derived) => Base + +var r7a6 = a6 === b6; +>r7a6 : boolean +>a6 === b6 : boolean +>a6 : new (a: Derived, b: Base) => Base +>b6 : new (a: Base, b: Derived) => Base + +var r7a7 = a7 === b7; +>r7a7 : boolean +>a7 === b7 : boolean +>a7 : new () => Base +>b7 : new () => Derived + +var r7a8 = a8 === b8; +>r7a8 : boolean +>a8 === b8 : boolean +>a8 : new (a?: Base) => Base +>b8 : new (a?: Derived) => Base + +var r7a9 = a9 === b9; +>r7a9 : boolean +>a9 === b9 : boolean +>a9 : new (...a: Base[]) => Base +>b9 : new (...a: Derived[]) => Base + +//var r7a10 = a10 === b10; + +var r7b1 = b1 === a1; +>r7b1 : boolean +>b1 === a1 : boolean +>b1 : new () => Base +>a1 : new () => Base + +var r7b2 = b2 === a2; +>r7b2 : boolean +>b2 === a2 : boolean +>b2 : new (a: number, b: string) => Base +>a2 : new (a: number, b: string) => Base + +var r7b3 = b3 === a3; +>r7b3 : boolean +>b3 === a3 : boolean +>b3 : new (a: number) => Base +>a3 : new (a: number, b: string) => Base + +var r7b4 = b4 === a4; +>r7b4 : boolean +>b4 === a4 : boolean +>b4 : new () => Base +>a4 : new (a: number, b: string) => Base + +var r7b5 = b5 === a5; +>r7b5 : boolean +>b5 === a5 : boolean +>b5 : new (a: Derived) => Base +>a5 : new (a: Base) => Base + +var r7b6 = b6 === a6; +>r7b6 : boolean +>b6 === a6 : boolean +>b6 : new (a: Base, b: Derived) => Base +>a6 : new (a: Derived, b: Base) => Base + +var r7b7 = b7 === a7; +>r7b7 : boolean +>b7 === a7 : boolean +>b7 : new () => Derived +>a7 : new () => Base + +var r7b8 = b8 === a8; +>r7b8 : boolean +>b8 === a8 : boolean +>b8 : new (a?: Derived) => Base +>a8 : new (a?: Base) => Base + +var r7b9 = b9 === a9; +>r7b9 : boolean +>b9 === a9 : boolean +>b9 : new (...a: Derived[]) => Base +>a9 : new (...a: Base[]) => Base + +//var r7b10 = b10 === a10; + +// operator !== +var r8a1 = a1 !== b1; +>r8a1 : boolean +>a1 !== b1 : boolean +>a1 : new () => Base +>b1 : new () => Base + +var r8a2 = a2 !== b2; +>r8a2 : boolean +>a2 !== b2 : boolean +>a2 : new (a: number, b: string) => Base +>b2 : new (a: number, b: string) => Base + +var r8a3 = a3 !== b3; +>r8a3 : boolean +>a3 !== b3 : boolean +>a3 : new (a: number, b: string) => Base +>b3 : new (a: number) => Base + +var r8a4 = a4 !== b4; +>r8a4 : boolean +>a4 !== b4 : boolean +>a4 : new (a: number, b: string) => Base +>b4 : new () => Base + +var r8a5 = a5 !== b5; +>r8a5 : boolean +>a5 !== b5 : boolean +>a5 : new (a: Base) => Base +>b5 : new (a: Derived) => Base + +var r8a6 = a6 !== b6; +>r8a6 : boolean +>a6 !== b6 : boolean +>a6 : new (a: Derived, b: Base) => Base +>b6 : new (a: Base, b: Derived) => Base + +var r8a7 = a7 !== b7; +>r8a7 : boolean +>a7 !== b7 : boolean +>a7 : new () => Base +>b7 : new () => Derived + +var r8a8 = a8 !== b8; +>r8a8 : boolean +>a8 !== b8 : boolean +>a8 : new (a?: Base) => Base +>b8 : new (a?: Derived) => Base + +var r8a9 = a9 !== b9; +>r8a9 : boolean +>a9 !== b9 : boolean +>a9 : new (...a: Base[]) => Base +>b9 : new (...a: Derived[]) => Base + +//var r8a10 = a10 !== b10; + +var r8b1 = b1 !== a1; +>r8b1 : boolean +>b1 !== a1 : boolean +>b1 : new () => Base +>a1 : new () => Base + +var r8b2 = b2 !== a2; +>r8b2 : boolean +>b2 !== a2 : boolean +>b2 : new (a: number, b: string) => Base +>a2 : new (a: number, b: string) => Base + +var r8b3 = b3 !== a3; +>r8b3 : boolean +>b3 !== a3 : boolean +>b3 : new (a: number) => Base +>a3 : new (a: number, b: string) => Base + +var r8b4 = b4 !== a4; +>r8b4 : boolean +>b4 !== a4 : boolean +>b4 : new () => Base +>a4 : new (a: number, b: string) => Base + +var r8b5 = b5 !== a5; +>r8b5 : boolean +>b5 !== a5 : boolean +>b5 : new (a: Derived) => Base +>a5 : new (a: Base) => Base + +var r8b6 = b6 !== a6; +>r8b6 : boolean +>b6 !== a6 : boolean +>b6 : new (a: Base, b: Derived) => Base +>a6 : new (a: Derived, b: Base) => Base + +var r8b7 = b7 !== a7; +>r8b7 : boolean +>b7 !== a7 : boolean +>b7 : new () => Derived +>a7 : new () => Base + +var r8b8 = b8 !== a8; +>r8b8 : boolean +>b8 !== a8 : boolean +>b8 : new (a?: Derived) => Base +>a8 : new (a?: Base) => Base + +var r8b9 = b9 !== a9; +>r8b9 : boolean +>b9 !== a9 : boolean +>b9 : new (...a: Derived[]) => Base +>a9 : new (...a: Base[]) => Base + +//var r8b10 = b10 !== a10; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.js index c6c785266a0..ec152ef0da5 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.js @@ -134,6 +134,7 @@ var a3; var b3; var a4; var b4; +// operator < var r1a1 = a1 < b1; var r1a1 = a2 < b2; var r1a1 = a3 < b3; @@ -142,6 +143,7 @@ var r1b1 = b1 < a1; var r1b1 = b2 < a2; var r1b1 = b3 < a3; var r1b1 = b4 < a4; +// operator > var r2a1 = a1 > b1; var r2a1 = a2 > b2; var r2a1 = a3 > b3; @@ -150,6 +152,7 @@ var r2b1 = b1 > a1; var r2b1 = b2 > a2; var r2b1 = b3 > a3; var r2b1 = b4 > a4; +// operator <= var r3a1 = a1 <= b1; var r3a1 = a2 <= b2; var r3a1 = a3 <= b3; @@ -158,6 +161,7 @@ var r3b1 = b1 <= a1; var r3b1 = b2 <= a2; var r3b1 = b3 <= a3; var r3b1 = b4 <= a4; +// operator >= var r4a1 = a1 >= b1; var r4a1 = a2 >= b2; var r4a1 = a3 >= b3; @@ -166,6 +170,7 @@ var r4b1 = b1 >= a1; var r4b1 = b2 >= a2; var r4b1 = b3 >= a3; var r4b1 = b4 >= a4; +// operator == var r5a1 = a1 == b1; var r5a1 = a2 == b2; var r5a1 = a3 == b3; @@ -174,6 +179,7 @@ var r5b1 = b1 == a1; var r5b1 = b2 == a2; var r5b1 = b3 == a3; var r5b1 = b4 == a4; +// operator != var r6a1 = a1 != b1; var r6a1 = a2 != b2; var r6a1 = a3 != b3; @@ -182,6 +188,7 @@ var r6b1 = b1 != a1; var r6b1 = b2 != a2; var r6b1 = b3 != a3; var r6b1 = b4 != a4; +// operator === var r7a1 = a1 === b1; var r7a1 = a2 === b2; var r7a1 = a3 === b3; @@ -190,6 +197,7 @@ var r7b1 = b1 === a1; var r7b1 = b2 === a2; var r7b1 = b3 === a3; var r7b1 = b4 === a4; +// operator !== var r8a1 = a1 !== b1; var r8a1 = a2 !== b2; var r8a1 = a3 !== b3; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types new file mode 100644 index 00000000000..755df0be1dc --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types @@ -0,0 +1,444 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnIndexSignature.ts === +class Base { +>Base : Base + + public a: string; +>a : string +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + public b: string; +>b : string +} + +var a1: { [a: string]: string }; +>a1 : { [x: string]: string; } +>a : string + +var b1: { [b: string]: string }; +>b1 : { [x: string]: string; } +>b : string + +var a2: { [index: string]: Base }; +>a2 : { [x: string]: Base; } +>index : string +>Base : Base + +var b2: { [index: string]: Derived }; +>b2 : { [x: string]: Derived; } +>index : string +>Derived : Derived + +var a3: { [index: number]: string }; +>a3 : { [x: number]: string; } +>index : number + +var b3: { [index: number]: string }; +>b3 : { [x: number]: string; } +>index : number + +var a4: { [index: number]: Base }; +>a4 : { [x: number]: Base; } +>index : number +>Base : Base + +var b4: { [index: string]: Derived }; +>b4 : { [x: string]: Derived; } +>index : string +>Derived : Derived + +// operator < +var r1a1 = a1 < b1; +>r1a1 : boolean +>a1 < b1 : boolean +>a1 : { [x: string]: string; } +>b1 : { [x: string]: string; } + +var r1a1 = a2 < b2; +>r1a1 : boolean +>a2 < b2 : boolean +>a2 : { [x: string]: Base; } +>b2 : { [x: string]: Derived; } + +var r1a1 = a3 < b3; +>r1a1 : boolean +>a3 < b3 : boolean +>a3 : { [x: number]: string; } +>b3 : { [x: number]: string; } + +var r1a1 = a4 < b4; +>r1a1 : boolean +>a4 < b4 : boolean +>a4 : { [x: number]: Base; } +>b4 : { [x: string]: Derived; } + +var r1b1 = b1 < a1; +>r1b1 : boolean +>b1 < a1 : boolean +>b1 : { [x: string]: string; } +>a1 : { [x: string]: string; } + +var r1b1 = b2 < a2; +>r1b1 : boolean +>b2 < a2 : boolean +>b2 : { [x: string]: Derived; } +>a2 : { [x: string]: Base; } + +var r1b1 = b3 < a3; +>r1b1 : boolean +>b3 < a3 : boolean +>b3 : { [x: number]: string; } +>a3 : { [x: number]: string; } + +var r1b1 = b4 < a4; +>r1b1 : boolean +>b4 < a4 : boolean +>b4 : { [x: string]: Derived; } +>a4 : { [x: number]: Base; } + +// operator > +var r2a1 = a1 > b1; +>r2a1 : boolean +>a1 > b1 : boolean +>a1 : { [x: string]: string; } +>b1 : { [x: string]: string; } + +var r2a1 = a2 > b2; +>r2a1 : boolean +>a2 > b2 : boolean +>a2 : { [x: string]: Base; } +>b2 : { [x: string]: Derived; } + +var r2a1 = a3 > b3; +>r2a1 : boolean +>a3 > b3 : boolean +>a3 : { [x: number]: string; } +>b3 : { [x: number]: string; } + +var r2a1 = a4 > b4; +>r2a1 : boolean +>a4 > b4 : boolean +>a4 : { [x: number]: Base; } +>b4 : { [x: string]: Derived; } + +var r2b1 = b1 > a1; +>r2b1 : boolean +>b1 > a1 : boolean +>b1 : { [x: string]: string; } +>a1 : { [x: string]: string; } + +var r2b1 = b2 > a2; +>r2b1 : boolean +>b2 > a2 : boolean +>b2 : { [x: string]: Derived; } +>a2 : { [x: string]: Base; } + +var r2b1 = b3 > a3; +>r2b1 : boolean +>b3 > a3 : boolean +>b3 : { [x: number]: string; } +>a3 : { [x: number]: string; } + +var r2b1 = b4 > a4; +>r2b1 : boolean +>b4 > a4 : boolean +>b4 : { [x: string]: Derived; } +>a4 : { [x: number]: Base; } + +// operator <= +var r3a1 = a1 <= b1; +>r3a1 : boolean +>a1 <= b1 : boolean +>a1 : { [x: string]: string; } +>b1 : { [x: string]: string; } + +var r3a1 = a2 <= b2; +>r3a1 : boolean +>a2 <= b2 : boolean +>a2 : { [x: string]: Base; } +>b2 : { [x: string]: Derived; } + +var r3a1 = a3 <= b3; +>r3a1 : boolean +>a3 <= b3 : boolean +>a3 : { [x: number]: string; } +>b3 : { [x: number]: string; } + +var r3a1 = a4 <= b4; +>r3a1 : boolean +>a4 <= b4 : boolean +>a4 : { [x: number]: Base; } +>b4 : { [x: string]: Derived; } + +var r3b1 = b1 <= a1; +>r3b1 : boolean +>b1 <= a1 : boolean +>b1 : { [x: string]: string; } +>a1 : { [x: string]: string; } + +var r3b1 = b2 <= a2; +>r3b1 : boolean +>b2 <= a2 : boolean +>b2 : { [x: string]: Derived; } +>a2 : { [x: string]: Base; } + +var r3b1 = b3 <= a3; +>r3b1 : boolean +>b3 <= a3 : boolean +>b3 : { [x: number]: string; } +>a3 : { [x: number]: string; } + +var r3b1 = b4 <= a4; +>r3b1 : boolean +>b4 <= a4 : boolean +>b4 : { [x: string]: Derived; } +>a4 : { [x: number]: Base; } + +// operator >= +var r4a1 = a1 >= b1; +>r4a1 : boolean +>a1 >= b1 : boolean +>a1 : { [x: string]: string; } +>b1 : { [x: string]: string; } + +var r4a1 = a2 >= b2; +>r4a1 : boolean +>a2 >= b2 : boolean +>a2 : { [x: string]: Base; } +>b2 : { [x: string]: Derived; } + +var r4a1 = a3 >= b3; +>r4a1 : boolean +>a3 >= b3 : boolean +>a3 : { [x: number]: string; } +>b3 : { [x: number]: string; } + +var r4a1 = a4 >= b4; +>r4a1 : boolean +>a4 >= b4 : boolean +>a4 : { [x: number]: Base; } +>b4 : { [x: string]: Derived; } + +var r4b1 = b1 >= a1; +>r4b1 : boolean +>b1 >= a1 : boolean +>b1 : { [x: string]: string; } +>a1 : { [x: string]: string; } + +var r4b1 = b2 >= a2; +>r4b1 : boolean +>b2 >= a2 : boolean +>b2 : { [x: string]: Derived; } +>a2 : { [x: string]: Base; } + +var r4b1 = b3 >= a3; +>r4b1 : boolean +>b3 >= a3 : boolean +>b3 : { [x: number]: string; } +>a3 : { [x: number]: string; } + +var r4b1 = b4 >= a4; +>r4b1 : boolean +>b4 >= a4 : boolean +>b4 : { [x: string]: Derived; } +>a4 : { [x: number]: Base; } + +// operator == +var r5a1 = a1 == b1; +>r5a1 : boolean +>a1 == b1 : boolean +>a1 : { [x: string]: string; } +>b1 : { [x: string]: string; } + +var r5a1 = a2 == b2; +>r5a1 : boolean +>a2 == b2 : boolean +>a2 : { [x: string]: Base; } +>b2 : { [x: string]: Derived; } + +var r5a1 = a3 == b3; +>r5a1 : boolean +>a3 == b3 : boolean +>a3 : { [x: number]: string; } +>b3 : { [x: number]: string; } + +var r5a1 = a4 == b4; +>r5a1 : boolean +>a4 == b4 : boolean +>a4 : { [x: number]: Base; } +>b4 : { [x: string]: Derived; } + +var r5b1 = b1 == a1; +>r5b1 : boolean +>b1 == a1 : boolean +>b1 : { [x: string]: string; } +>a1 : { [x: string]: string; } + +var r5b1 = b2 == a2; +>r5b1 : boolean +>b2 == a2 : boolean +>b2 : { [x: string]: Derived; } +>a2 : { [x: string]: Base; } + +var r5b1 = b3 == a3; +>r5b1 : boolean +>b3 == a3 : boolean +>b3 : { [x: number]: string; } +>a3 : { [x: number]: string; } + +var r5b1 = b4 == a4; +>r5b1 : boolean +>b4 == a4 : boolean +>b4 : { [x: string]: Derived; } +>a4 : { [x: number]: Base; } + +// operator != +var r6a1 = a1 != b1; +>r6a1 : boolean +>a1 != b1 : boolean +>a1 : { [x: string]: string; } +>b1 : { [x: string]: string; } + +var r6a1 = a2 != b2; +>r6a1 : boolean +>a2 != b2 : boolean +>a2 : { [x: string]: Base; } +>b2 : { [x: string]: Derived; } + +var r6a1 = a3 != b3; +>r6a1 : boolean +>a3 != b3 : boolean +>a3 : { [x: number]: string; } +>b3 : { [x: number]: string; } + +var r6a1 = a4 != b4; +>r6a1 : boolean +>a4 != b4 : boolean +>a4 : { [x: number]: Base; } +>b4 : { [x: string]: Derived; } + +var r6b1 = b1 != a1; +>r6b1 : boolean +>b1 != a1 : boolean +>b1 : { [x: string]: string; } +>a1 : { [x: string]: string; } + +var r6b1 = b2 != a2; +>r6b1 : boolean +>b2 != a2 : boolean +>b2 : { [x: string]: Derived; } +>a2 : { [x: string]: Base; } + +var r6b1 = b3 != a3; +>r6b1 : boolean +>b3 != a3 : boolean +>b3 : { [x: number]: string; } +>a3 : { [x: number]: string; } + +var r6b1 = b4 != a4; +>r6b1 : boolean +>b4 != a4 : boolean +>b4 : { [x: string]: Derived; } +>a4 : { [x: number]: Base; } + +// operator === +var r7a1 = a1 === b1; +>r7a1 : boolean +>a1 === b1 : boolean +>a1 : { [x: string]: string; } +>b1 : { [x: string]: string; } + +var r7a1 = a2 === b2; +>r7a1 : boolean +>a2 === b2 : boolean +>a2 : { [x: string]: Base; } +>b2 : { [x: string]: Derived; } + +var r7a1 = a3 === b3; +>r7a1 : boolean +>a3 === b3 : boolean +>a3 : { [x: number]: string; } +>b3 : { [x: number]: string; } + +var r7a1 = a4 === b4; +>r7a1 : boolean +>a4 === b4 : boolean +>a4 : { [x: number]: Base; } +>b4 : { [x: string]: Derived; } + +var r7b1 = b1 === a1; +>r7b1 : boolean +>b1 === a1 : boolean +>b1 : { [x: string]: string; } +>a1 : { [x: string]: string; } + +var r7b1 = b2 === a2; +>r7b1 : boolean +>b2 === a2 : boolean +>b2 : { [x: string]: Derived; } +>a2 : { [x: string]: Base; } + +var r7b1 = b3 === a3; +>r7b1 : boolean +>b3 === a3 : boolean +>b3 : { [x: number]: string; } +>a3 : { [x: number]: string; } + +var r7b1 = b4 === a4; +>r7b1 : boolean +>b4 === a4 : boolean +>b4 : { [x: string]: Derived; } +>a4 : { [x: number]: Base; } + +// operator !== +var r8a1 = a1 !== b1; +>r8a1 : boolean +>a1 !== b1 : boolean +>a1 : { [x: string]: string; } +>b1 : { [x: string]: string; } + +var r8a1 = a2 !== b2; +>r8a1 : boolean +>a2 !== b2 : boolean +>a2 : { [x: string]: Base; } +>b2 : { [x: string]: Derived; } + +var r8a1 = a3 !== b3; +>r8a1 : boolean +>a3 !== b3 : boolean +>a3 : { [x: number]: string; } +>b3 : { [x: number]: string; } + +var r8a1 = a4 !== b4; +>r8a1 : boolean +>a4 !== b4 : boolean +>a4 : { [x: number]: Base; } +>b4 : { [x: string]: Derived; } + +var r8b1 = b1 !== a1; +>r8b1 : boolean +>b1 !== a1 : boolean +>b1 : { [x: string]: string; } +>a1 : { [x: string]: string; } + +var r8b1 = b2 !== a2; +>r8b1 : boolean +>b2 !== a2 : boolean +>b2 : { [x: string]: Derived; } +>a2 : { [x: string]: Base; } + +var r8b1 = b3 !== a3; +>r8b1 : boolean +>b3 !== a3 : boolean +>b3 : { [x: number]: string; } +>a3 : { [x: number]: string; } + +var r8b1 = b4 !== a4; +>r8b1 : boolean +>b4 !== a4 : boolean +>b4 : { [x: string]: Derived; } +>a4 : { [x: number]: Base; } + diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.js index 67a33f10a15..1a83da3e663 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.js @@ -195,97 +195,121 @@ var a5; var b5; var a6; var b6; +//var a7: { fn(x: T, y: U): T }; var b7; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; var r1a4 = a4 < b4; var r1a5 = a5 < b5; var r1a6 = a6 < b6; +//var r1a7 = a7 < b7; var r1b1 = b1 < a1; var r1b2 = b2 < a2; var r1b3 = b3 < a3; var r1b4 = b4 < a4; var r1b5 = b5 < a5; var r1b6 = b6 < a6; +//var r1b7 = b7 < a7; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; var r2a4 = a4 > b4; var r2a5 = a5 > b5; var r2a6 = a6 > b6; +//var r2a7 = a7 > b7; var r2b1 = b1 > a1; var r2b2 = b2 > a2; var r2b3 = b3 > a3; var r2b4 = b4 > a4; var r2b5 = b5 > a5; var r2b6 = b6 > a6; +//var r2b7 = b7 > a7; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; var r3a4 = a4 <= b4; var r3a5 = a5 <= b5; var r3a6 = a6 <= b6; +//var r3a7 = a7 <= b7; var r3b1 = b1 <= a1; var r3b2 = b2 <= a2; var r3b3 = b3 <= a3; var r3b4 = b4 <= a4; var r3b5 = b5 <= a5; var r3b6 = b6 <= a6; +//var r3b7 = b7 <= a7; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; var r4a4 = a4 >= b4; var r4a5 = a5 >= b5; var r4a6 = a6 >= b6; +//var r4a7 = a7 >= b7; var r4b1 = b1 >= a1; var r4b2 = b2 >= a2; var r4b3 = b3 >= a3; var r4b4 = b4 >= a4; var r4b5 = b5 >= a5; var r4b6 = b6 >= a6; +//var r4b7 = b7 >= a7; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; var r5a4 = a4 == b4; var r5a5 = a5 == b5; var r5a6 = a6 == b6; +//var r5a7 = a7 == b7; var r5b1 = b1 == a1; var r5b2 = b2 == a2; var r5b3 = b3 == a3; var r5b4 = b4 == a4; var r5b5 = b5 == a5; var r5b6 = b6 == a6; +//var r5b7 = b7 == a7; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; var r6a4 = a4 != b4; var r6a5 = a5 != b5; var r6a6 = a6 != b6; +//var r6a7 = a7 != b7; var r6b1 = b1 != a1; var r6b2 = b2 != a2; var r6b3 = b3 != a3; var r6b4 = b4 != a4; var r6b5 = b5 != a5; var r6b6 = b6 != a6; +//var r6b7 = b7 != a7; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; var r7a4 = a4 === b4; var r7a5 = a5 === b5; var r7a6 = a6 === b6; +//var r7a7 = a7 === b7; var r7b1 = b1 === a1; var r7b2 = b2 === a2; var r7b3 = b3 === a3; var r7b4 = b4 === a4; var r7b5 = b5 === a5; var r7b6 = b6 === a6; +//var r7b7 = b7 === a7; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; var r8a4 = a4 !== b4; var r8a5 = a5 !== b5; var r8a6 = a6 !== b6; +//var r8a7 = a7 !== b7; var r8b1 = b1 !== a1; var r8b2 = b2 !== a2; var r8b3 = b3 !== a3; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.js index c47ec3bc05f..393a2485c47 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.js @@ -195,97 +195,121 @@ var a5; var b5; var a6; var b6; +//var a7: { new (x: T, y: U): T }; var b7; +// operator < var r1a1 = a1 < b1; var r1a2 = a2 < b2; var r1a3 = a3 < b3; var r1a4 = a4 < b4; var r1a5 = a5 < b5; var r1a6 = a6 < b6; +//var r1a7 = a7 < b7; var r1b1 = b1 < a1; var r1b2 = b2 < a2; var r1b3 = b3 < a3; var r1b4 = b4 < a4; var r1b5 = b5 < a5; var r1b6 = b6 < a6; +//var r1b7 = b7 < a7; +// operator > var r2a1 = a1 > b1; var r2a2 = a2 > b2; var r2a3 = a3 > b3; var r2a4 = a4 > b4; var r2a5 = a5 > b5; var r2a6 = a6 > b6; +//var r2a7 = a7 > b7; var r2b1 = b1 > a1; var r2b2 = b2 > a2; var r2b3 = b3 > a3; var r2b4 = b4 > a4; var r2b5 = b5 > a5; var r2b6 = b6 > a6; +//var r2b7 = b7 > a7; +// operator <= var r3a1 = a1 <= b1; var r3a2 = a2 <= b2; var r3a3 = a3 <= b3; var r3a4 = a4 <= b4; var r3a5 = a5 <= b5; var r3a6 = a6 <= b6; +//var r3a7 = a7 <= b7; var r3b1 = b1 <= a1; var r3b2 = b2 <= a2; var r3b3 = b3 <= a3; var r3b4 = b4 <= a4; var r3b5 = b5 <= a5; var r3b6 = b6 <= a6; +//var r3b7 = b7 <= a7; +// operator >= var r4a1 = a1 >= b1; var r4a2 = a2 >= b2; var r4a3 = a3 >= b3; var r4a4 = a4 >= b4; var r4a5 = a5 >= b5; var r4a6 = a6 >= b6; +//var r4a7 = a7 >= b7; var r4b1 = b1 >= a1; var r4b2 = b2 >= a2; var r4b3 = b3 >= a3; var r4b4 = b4 >= a4; var r4b5 = b5 >= a5; var r4b6 = b6 >= a6; +//var r4b7 = b7 >= a7; +// operator == var r5a1 = a1 == b1; var r5a2 = a2 == b2; var r5a3 = a3 == b3; var r5a4 = a4 == b4; var r5a5 = a5 == b5; var r5a6 = a6 == b6; +//var r5a7 = a7 == b7; var r5b1 = b1 == a1; var r5b2 = b2 == a2; var r5b3 = b3 == a3; var r5b4 = b4 == a4; var r5b5 = b5 == a5; var r5b6 = b6 == a6; +//var r5b7 = b7 == a7; +// operator != var r6a1 = a1 != b1; var r6a2 = a2 != b2; var r6a3 = a3 != b3; var r6a4 = a4 != b4; var r6a5 = a5 != b5; var r6a6 = a6 != b6; +//var r6a7 = a7 != b7; var r6b1 = b1 != a1; var r6b2 = b2 != a2; var r6b3 = b3 != a3; var r6b4 = b4 != a4; var r6b5 = b5 != a5; var r6b6 = b6 != a6; +//var r6b7 = b7 != a7; +// operator === var r7a1 = a1 === b1; var r7a2 = a2 === b2; var r7a3 = a3 === b3; var r7a4 = a4 === b4; var r7a5 = a5 === b5; var r7a6 = a6 === b6; +//var r7a7 = a7 === b7; var r7b1 = b1 === a1; var r7b2 = b2 === a2; var r7b3 = b3 === a3; var r7b4 = b4 === a4; var r7b5 = b5 === a5; var r7b6 = b6 === a6; +//var r7b7 = b7 === a7; +// operator !== var r8a1 = a1 !== b1; var r8a2 = a2 !== b2; var r8a3 = a3 !== b3; var r8a4 = a4 !== b4; var r8a5 = a5 !== b5; var r8a6 = a6 !== b6; +//var r8a7 = a7 !== b7; var r8b1 = b1 !== a1; var r8b2 = b2 !== a2; var r8b3 = b3 !== a3; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnOptionalProperty.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnOptionalProperty.js index 570c6faf123..1a370b17d19 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnOptionalProperty.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnOptionalProperty.js @@ -46,19 +46,27 @@ var rh2 = b !== a; //// [comparisonOperatorWithSubtypeObjectOnOptionalProperty.js] var a; var b; +// operator < var ra1 = a < b; var ra2 = b < a; +// operator > var rb1 = a > b; var rb2 = b > a; +// operator <= var rc1 = a <= b; var rc2 = b <= a; +// operator >= var rd1 = a >= b; var rd2 = b >= a; +// operator == var re1 = a == b; var re2 = b == a; +// operator != var rf1 = a != b; var rf2 = b != a; +// operator === var rg1 = a === b; var rg2 = b === a; +// operator !== var rh1 = a !== b; var rh2 = b !== a; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnOptionalProperty.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnOptionalProperty.types new file mode 100644 index 00000000000..e94ef495a55 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnOptionalProperty.types @@ -0,0 +1,130 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnOptionalProperty.ts === +interface I { +>I : I + + a: string; +>a : string + + b?: number; +>b : number +} + +interface J { +>J : J + + a: string; +>a : string +} + +var a: I; +>a : I +>I : I + +var b: J; +>b : J +>J : J + +// operator < +var ra1 = a < b; +>ra1 : boolean +>a < b : boolean +>a : I +>b : J + +var ra2 = b < a; +>ra2 : boolean +>b < a : boolean +>b : J +>a : I + +// operator > +var rb1 = a > b; +>rb1 : boolean +>a > b : boolean +>a : I +>b : J + +var rb2 = b > a; +>rb2 : boolean +>b > a : boolean +>b : J +>a : I + +// operator <= +var rc1 = a <= b; +>rc1 : boolean +>a <= b : boolean +>a : I +>b : J + +var rc2 = b <= a; +>rc2 : boolean +>b <= a : boolean +>b : J +>a : I + +// operator >= +var rd1 = a >= b; +>rd1 : boolean +>a >= b : boolean +>a : I +>b : J + +var rd2 = b >= a; +>rd2 : boolean +>b >= a : boolean +>b : J +>a : I + +// operator == +var re1 = a == b; +>re1 : boolean +>a == b : boolean +>a : I +>b : J + +var re2 = b == a; +>re2 : boolean +>b == a : boolean +>b : J +>a : I + +// operator != +var rf1 = a != b; +>rf1 : boolean +>a != b : boolean +>a : I +>b : J + +var rf2 = b != a; +>rf2 : boolean +>b != a : boolean +>b : J +>a : I + +// operator === +var rg1 = a === b; +>rg1 : boolean +>a === b : boolean +>a : I +>b : J + +var rg2 = b === a; +>rg2 : boolean +>b === a : boolean +>b : J +>a : I + +// operator !== +var rh1 = a !== b; +>rh1 : boolean +>a !== b : boolean +>a : I +>b : J + +var rh2 = b !== a; +>rh2 : boolean +>b !== a : boolean +>b : J +>a : I + diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.js index 0dfe4cf330a..99c64617531 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.js @@ -123,34 +123,42 @@ var a1; var a2; var b1; var b2; +// operator < var ra1 = a1 < b1; var ra2 = a2 < b2; var ra3 = b1 < a1; var ra4 = b2 < a2; +// operator > var rb1 = a1 > b1; var rb2 = a2 > b2; var rb3 = b1 > a1; var rb4 = b2 > a2; +// operator <= var rc1 = a1 <= b1; var rc2 = a2 <= b2; var rc3 = b1 <= a1; var rc4 = b2 <= a2; +// operator >= var rd1 = a1 >= b1; var rd2 = a2 >= b2; var rd3 = b1 >= a1; var rd4 = b2 >= a2; +// operator == var re1 = a1 == b1; var re2 = a2 == b2; var re3 = b1 == a1; var re4 = b2 == a2; +// operator != var rf1 = a1 != b1; var rf2 = a2 != b2; var rf3 = b1 != a1; var rf4 = b2 != a2; +// operator === var rg1 = a1 === b1; var rg2 = a2 === b2; var rg3 = b1 === a1; var rg4 = b2 === a2; +// operator !== var rh1 = a1 !== b1; var rh2 = a2 !== b2; var rh3 = b1 !== a1; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types new file mode 100644 index 00000000000..d604115e161 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types @@ -0,0 +1,271 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithSubtypeObjectOnProperty.ts === +class Base { +>Base : Base + + public a: string; +>a : string +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + public b: string; +>b : string +} + +class A1 { +>A1 : A1 + + public a: Base; +>a : Base +>Base : Base + + public b: Base; +>b : Base +>Base : Base +} + +class B1 { +>B1 : B1 + + public a: Base; +>a : Base +>Base : Base + + public b: Derived; +>b : Derived +>Derived : Derived +} + +class A2 { +>A2 : A2 + + private a; +>a : any +} + +class B2 extends A2 { +>B2 : B2 +>A2 : A2 + + private b; +>b : any +} + +var a1: A1; +>a1 : A1 +>A1 : A1 + +var a2: A2; +>a2 : A2 +>A2 : A2 + +var b1: B1; +>b1 : B1 +>B1 : B1 + +var b2: B2; +>b2 : B2 +>B2 : B2 + +// operator < +var ra1 = a1 < b1; +>ra1 : boolean +>a1 < b1 : boolean +>a1 : A1 +>b1 : B1 + +var ra2 = a2 < b2; +>ra2 : boolean +>a2 < b2 : boolean +>a2 : A2 +>b2 : B2 + +var ra3 = b1 < a1; +>ra3 : boolean +>b1 < a1 : boolean +>b1 : B1 +>a1 : A1 + +var ra4 = b2 < a2; +>ra4 : boolean +>b2 < a2 : boolean +>b2 : B2 +>a2 : A2 + +// operator > +var rb1 = a1 > b1; +>rb1 : boolean +>a1 > b1 : boolean +>a1 : A1 +>b1 : B1 + +var rb2 = a2 > b2; +>rb2 : boolean +>a2 > b2 : boolean +>a2 : A2 +>b2 : B2 + +var rb3 = b1 > a1; +>rb3 : boolean +>b1 > a1 : boolean +>b1 : B1 +>a1 : A1 + +var rb4 = b2 > a2; +>rb4 : boolean +>b2 > a2 : boolean +>b2 : B2 +>a2 : A2 + +// operator <= +var rc1 = a1 <= b1; +>rc1 : boolean +>a1 <= b1 : boolean +>a1 : A1 +>b1 : B1 + +var rc2 = a2 <= b2; +>rc2 : boolean +>a2 <= b2 : boolean +>a2 : A2 +>b2 : B2 + +var rc3 = b1 <= a1; +>rc3 : boolean +>b1 <= a1 : boolean +>b1 : B1 +>a1 : A1 + +var rc4 = b2 <= a2; +>rc4 : boolean +>b2 <= a2 : boolean +>b2 : B2 +>a2 : A2 + +// operator >= +var rd1 = a1 >= b1; +>rd1 : boolean +>a1 >= b1 : boolean +>a1 : A1 +>b1 : B1 + +var rd2 = a2 >= b2; +>rd2 : boolean +>a2 >= b2 : boolean +>a2 : A2 +>b2 : B2 + +var rd3 = b1 >= a1; +>rd3 : boolean +>b1 >= a1 : boolean +>b1 : B1 +>a1 : A1 + +var rd4 = b2 >= a2; +>rd4 : boolean +>b2 >= a2 : boolean +>b2 : B2 +>a2 : A2 + +// operator == +var re1 = a1 == b1; +>re1 : boolean +>a1 == b1 : boolean +>a1 : A1 +>b1 : B1 + +var re2 = a2 == b2; +>re2 : boolean +>a2 == b2 : boolean +>a2 : A2 +>b2 : B2 + +var re3 = b1 == a1; +>re3 : boolean +>b1 == a1 : boolean +>b1 : B1 +>a1 : A1 + +var re4 = b2 == a2; +>re4 : boolean +>b2 == a2 : boolean +>b2 : B2 +>a2 : A2 + +// operator != +var rf1 = a1 != b1; +>rf1 : boolean +>a1 != b1 : boolean +>a1 : A1 +>b1 : B1 + +var rf2 = a2 != b2; +>rf2 : boolean +>a2 != b2 : boolean +>a2 : A2 +>b2 : B2 + +var rf3 = b1 != a1; +>rf3 : boolean +>b1 != a1 : boolean +>b1 : B1 +>a1 : A1 + +var rf4 = b2 != a2; +>rf4 : boolean +>b2 != a2 : boolean +>b2 : B2 +>a2 : A2 + +// operator === +var rg1 = a1 === b1; +>rg1 : boolean +>a1 === b1 : boolean +>a1 : A1 +>b1 : B1 + +var rg2 = a2 === b2; +>rg2 : boolean +>a2 === b2 : boolean +>a2 : A2 +>b2 : B2 + +var rg3 = b1 === a1; +>rg3 : boolean +>b1 === a1 : boolean +>b1 : B1 +>a1 : A1 + +var rg4 = b2 === a2; +>rg4 : boolean +>b2 === a2 : boolean +>b2 : B2 +>a2 : A2 + +// operator !== +var rh1 = a1 !== b1; +>rh1 : boolean +>a1 !== b1 : boolean +>a1 : A1 +>b1 : B1 + +var rh2 = a2 !== b2; +>rh2 : boolean +>a2 !== b2 : boolean +>a2 : A2 +>b2 : B2 + +var rh3 = b1 !== a1; +>rh3 : boolean +>b1 !== a1 : boolean +>b1 : B1 +>a1 : A1 + +var rh4 = b2 !== a2; +>rh4 : boolean +>b2 !== a2 : boolean +>b2 : B2 +>a2 : A2 + diff --git a/tests/baselines/reference/comparisonOperatorWithTwoOperandsAreAny.types b/tests/baselines/reference/comparisonOperatorWithTwoOperandsAreAny.types new file mode 100644 index 00000000000..7ddcb5da177 --- /dev/null +++ b/tests/baselines/reference/comparisonOperatorWithTwoOperandsAreAny.types @@ -0,0 +1,52 @@ +=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithTwoOperandsAreAny.ts === +var a: any; +>a : any + +var r1 = a < a; +>r1 : boolean +>a < a : boolean +>a : any +>a : any + +var r2 = a > a; +>r2 : boolean +>a > a : boolean +>a : any +>a : any + +var r3 = a <= a; +>r3 : boolean +>a <= a : boolean +>a : any +>a : any + +var r4 = a >= a; +>r4 : boolean +>a >= a : boolean +>a : any +>a : any + +var r5 = a == a; +>r5 : boolean +>a == a : boolean +>a : any +>a : any + +var r6 = a != a; +>r6 : boolean +>a != a : boolean +>a : any +>a : any + +var r7 = a === a; +>r7 : boolean +>a === a : boolean +>a : any +>a : any + +var r8 = a !== a; +>r8 : boolean +>a !== a : boolean +>a : any +>a : any + diff --git a/tests/baselines/reference/comparisonOperatorWithTypeParameter.js b/tests/baselines/reference/comparisonOperatorWithTypeParameter.js index 814fb5c6aa7..67d33eca223 100644 --- a/tests/baselines/reference/comparisonOperatorWithTypeParameter.js +++ b/tests/baselines/reference/comparisonOperatorWithTypeParameter.js @@ -82,6 +82,7 @@ function foo(t: T, u: U, v: V) { var a; var b; function foo(t, u, v) { + // errors var ra1 = t < u; var ra2 = t > u; var ra3 = t <= u; @@ -114,6 +115,7 @@ function foo(t, u, v) { var rd6 = v != t; var rd7 = v === t; var rd8 = v !== t; + // ok var re1 = t < a; var re2 = t > a; var re3 = t <= a; diff --git a/tests/baselines/reference/complexClassRelationships.js b/tests/baselines/reference/complexClassRelationships.js index d562905539e..a2a863cf54b 100644 --- a/tests/baselines/reference/complexClassRelationships.js +++ b/tests/baselines/reference/complexClassRelationships.js @@ -54,6 +54,7 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; +// There should be no errors in this file var Derived = (function (_super) { __extends(Derived, _super); function Derived() { diff --git a/tests/baselines/reference/complexClassRelationships.types b/tests/baselines/reference/complexClassRelationships.types new file mode 100644 index 00000000000..69bee9caade --- /dev/null +++ b/tests/baselines/reference/complexClassRelationships.types @@ -0,0 +1,122 @@ +=== tests/cases/compiler/complexClassRelationships.ts === +// There should be no errors in this file +class Derived extends Base { +>Derived : Derived +>Base : Base + + public static createEmpty(): Derived { +>createEmpty : () => Derived +>Derived : Derived + + var item = new Derived(); +>item : Derived +>new Derived() : Derived +>Derived : typeof Derived + + return item; +>item : Derived + } +} +class BaseCollection { +>BaseCollection : BaseCollection +>T : T +>Base : Base + + constructor(f: () => T) { +>f : () => T +>T : T + + (item: Thing) => { return [item.Components]; }; +>(item: Thing) => { return [item.Components]; } : (item: Thing) => ComponentCollection[] +>item : Thing +>Thing : Thing +>[item.Components] : ComponentCollection[] +>item.Components : ComponentCollection +>item : Thing +>Components : ComponentCollection + } +} +class Base { +>Base : Base + + ownerCollection: BaseCollection; +>ownerCollection : BaseCollection +>BaseCollection : BaseCollection +>Base : Base +} + +class Thing { +>Thing : Thing + + public get Components(): ComponentCollection { return null } +>Components : ComponentCollection +>ComponentCollection : ComponentCollection +} + +class ComponentCollection { +>ComponentCollection : ComponentCollection +>T : T + + private static sortComponents(p: Foo) { +>sortComponents : (p: Foo) => GenericType +>p : Foo +>Foo : Foo + + return p.prop1; +>p.prop1 : GenericType +>p : Foo +>prop1 : GenericType + } +} + +class Foo { +>Foo : Foo + + public get prop1() { +>prop1 : GenericType + + return new GenericType(this); +>new GenericType(this) : GenericType +>GenericType : typeof GenericType +>this : Foo + } + public populate() { +>populate : () => void + + this.prop2; +>this.prop2 : BaseCollection +>this : Foo +>prop2 : BaseCollection + } + public get prop2(): BaseCollection { +>prop2 : BaseCollection +>BaseCollection : BaseCollection +>Derived : Derived + + return new BaseCollection(Derived.createEmpty); +>new BaseCollection(Derived.createEmpty) : BaseCollection +>BaseCollection : typeof BaseCollection +>Derived : Derived +>Derived.createEmpty : () => Derived +>Derived : typeof Derived +>createEmpty : () => Derived + } +} + +class GenericType { +>GenericType : GenericType +>T : T + + constructor(parent: FooBase) { } +>parent : FooBase +>FooBase : FooBase +} + +class FooBase { +>FooBase : FooBase + + public populate() { +>populate : () => void + + } +} diff --git a/tests/baselines/reference/compositeGenericFunction.types b/tests/baselines/reference/compositeGenericFunction.types new file mode 100644 index 00000000000..421b7bbe514 --- /dev/null +++ b/tests/baselines/reference/compositeGenericFunction.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/compositeGenericFunction.ts === +function f(value: T) { return value; }; +>f : (value: T) => T +>T : T +>value : T +>T : T +>value : T + +function h(func: (x: number) => R): R { return null; } +>h : (func: (x: number) => R) => R +>R : R +>func : (x: number) => R +>x : number +>R : R +>R : R + +var z: number = h(f); +>z : number +>h(f) : number +>h : (func: (x: number) => R) => R +>f : (value: T) => T + +var z: number = h(f); +>z : number +>h(f) : number +>h : (func: (x: number) => R) => R +>f : (value: T) => T + diff --git a/tests/baselines/reference/compoundAdditionAssignmentLHSCanBeAssigned.types b/tests/baselines/reference/compoundAdditionAssignmentLHSCanBeAssigned.types new file mode 100644 index 00000000000..7b776389335 --- /dev/null +++ b/tests/baselines/reference/compoundAdditionAssignmentLHSCanBeAssigned.types @@ -0,0 +1,189 @@ +=== tests/cases/conformance/expressions/assignmentOperator/compoundAdditionAssignmentLHSCanBeAssigned.ts === +enum E { a, b } +>E : E +>a : E +>b : E + +var a: any; +>a : any + +var b: void; +>b : void + +var x1: any; +>x1 : any + +x1 += a; +>x1 += a : any +>x1 : any +>a : any + +x1 += b; +>x1 += b : any +>x1 : any +>b : void + +x1 += true; +>x1 += true : any +>x1 : any + +x1 += 0; +>x1 += 0 : any +>x1 : any + +x1 += ''; +>x1 += '' : string +>x1 : any + +x1 += E.a; +>x1 += E.a : any +>x1 : any +>E.a : E +>E : typeof E +>a : E + +x1 += {}; +>x1 += {} : any +>x1 : any +>{} : {} + +x1 += null; +>x1 += null : any +>x1 : any + +x1 += undefined; +>x1 += undefined : any +>x1 : any +>undefined : undefined + +var x2: string; +>x2 : string + +x2 += a; +>x2 += a : string +>x2 : string +>a : any + +x2 += b; +>x2 += b : string +>x2 : string +>b : void + +x2 += true; +>x2 += true : string +>x2 : string + +x2 += 0; +>x2 += 0 : string +>x2 : string + +x2 += ''; +>x2 += '' : string +>x2 : string + +x2 += E.a; +>x2 += E.a : string +>x2 : string +>E.a : E +>E : typeof E +>a : E + +x2 += {}; +>x2 += {} : string +>x2 : string +>{} : {} + +x2 += null; +>x2 += null : string +>x2 : string + +x2 += undefined; +>x2 += undefined : string +>x2 : string +>undefined : undefined + +var x3: number; +>x3 : number + +x3 += a; +>x3 += a : any +>x3 : number +>a : any + +x3 += 0; +>x3 += 0 : number +>x3 : number + +x3 += E.a; +>x3 += E.a : number +>x3 : number +>E.a : E +>E : typeof E +>a : E + +x3 += null; +>x3 += null : number +>x3 : number + +x3 += undefined; +>x3 += undefined : number +>x3 : number +>undefined : undefined + +var x4: E; +>x4 : E +>E : E + +x4 += a; +>x4 += a : any +>x4 : E +>a : any + +x4 += 0; +>x4 += 0 : number +>x4 : E + +x4 += E.a; +>x4 += E.a : number +>x4 : E +>E.a : E +>E : typeof E +>a : E + +x4 += null; +>x4 += null : number +>x4 : E + +x4 += undefined; +>x4 += undefined : number +>x4 : E +>undefined : undefined + +var x5: boolean; +>x5 : boolean + +x5 += a; +>x5 += a : any +>x5 : boolean +>a : any + +var x6: {}; +>x6 : {} + +x6 += a; +>x6 += a : any +>x6 : {} +>a : any + +x6 += ''; +>x6 += '' : string +>x6 : {} + +var x7: void; +>x7 : void + +x7 += a; +>x7 += a : any +>x7 : void +>a : any + diff --git a/tests/baselines/reference/compoundAdditionAssignmentLHSCannotBeAssigned.js b/tests/baselines/reference/compoundAdditionAssignmentLHSCannotBeAssigned.js index bb255b3809e..24fa635a0a1 100644 --- a/tests/baselines/reference/compoundAdditionAssignmentLHSCannotBeAssigned.js +++ b/tests/baselines/reference/compoundAdditionAssignmentLHSCannotBeAssigned.js @@ -18,6 +18,7 @@ var x5: void; x5 += ''; //// [compoundAdditionAssignmentLHSCannotBeAssigned.js] +// string can add every type, and result string cannot be assigned to below types var E; (function (E) { E[E["a"] = 0] = "a"; diff --git a/tests/baselines/reference/compoundArithmeticAssignmentLHSCanBeAssigned.types b/tests/baselines/reference/compoundArithmeticAssignmentLHSCanBeAssigned.types new file mode 100644 index 00000000000..c4345b97413 --- /dev/null +++ b/tests/baselines/reference/compoundArithmeticAssignmentLHSCanBeAssigned.types @@ -0,0 +1,99 @@ +=== tests/cases/conformance/expressions/assignmentOperator/compoundArithmeticAssignmentLHSCanBeAssigned.ts === +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a: any; +>a : any + +var b: number; +>b : number + +var c: E; +>c : E +>E : E + +var x1: any; +>x1 : any + +x1 *= a; +>x1 *= a : number +>x1 : any +>a : any + +x1 *= b; +>x1 *= b : number +>x1 : any +>b : number + +x1 *= c; +>x1 *= c : number +>x1 : any +>c : E + +x1 *= null; +>x1 *= null : number +>x1 : any + +x1 *= undefined; +>x1 *= undefined : number +>x1 : any +>undefined : undefined + +var x2: number; +>x2 : number + +x2 *= a; +>x2 *= a : number +>x2 : number +>a : any + +x2 *= b; +>x2 *= b : number +>x2 : number +>b : number + +x2 *= c; +>x2 *= c : number +>x2 : number +>c : E + +x2 *= null; +>x2 *= null : number +>x2 : number + +x2 *= undefined; +>x2 *= undefined : number +>x2 : number +>undefined : undefined + +var x3: E; +>x3 : E +>E : E + +x3 *= a; +>x3 *= a : number +>x3 : E +>a : any + +x3 *= b; +>x3 *= b : number +>x3 : E +>b : number + +x3 *= c; +>x3 *= c : number +>x3 : E +>c : E + +x3 *= null; +>x3 *= null : number +>x3 : E + +x3 *= undefined; +>x3 *= undefined : number +>x3 : E +>undefined : undefined + diff --git a/tests/baselines/reference/compoundAssignmentLHSIsReference.js b/tests/baselines/reference/compoundAssignmentLHSIsReference.js index ebc3d7be118..7b9b21db01a 100644 --- a/tests/baselines/reference/compoundAssignmentLHSIsReference.js +++ b/tests/baselines/reference/compoundAssignmentLHSIsReference.js @@ -36,6 +36,7 @@ function fn2(x4: number) { //// [compoundAssignmentLHSIsReference.js] var value; +// identifiers: variable and parameter var x1; x1 *= value; x1 += value; @@ -43,11 +44,13 @@ function fn1(x2) { x2 *= value; x2 += value; } +// property accesses var x3; x3.a *= value; x3.a += value; x3['a'] *= value; x3['a'] += value; +// parentheses, the contained expression is reference (x1) *= value; (x1) += value; function fn2(x4) { diff --git a/tests/baselines/reference/compoundAssignmentLHSIsReference.types b/tests/baselines/reference/compoundAssignmentLHSIsReference.types new file mode 100644 index 00000000000..e30cf19f3e3 --- /dev/null +++ b/tests/baselines/reference/compoundAssignmentLHSIsReference.types @@ -0,0 +1,124 @@ +=== tests/cases/conformance/expressions/assignmentOperator/compoundAssignmentLHSIsReference.ts === +var value; +>value : any + +// identifiers: variable and parameter +var x1: number; +>x1 : number + +x1 *= value; +>x1 *= value : number +>x1 : number +>value : any + +x1 += value; +>x1 += value : any +>x1 : number +>value : any + +function fn1(x2: number) { +>fn1 : (x2: number) => void +>x2 : number + + x2 *= value; +>x2 *= value : number +>x2 : number +>value : any + + x2 += value; +>x2 += value : any +>x2 : number +>value : any +} + +// property accesses +var x3: { a: number }; +>x3 : { a: number; } +>a : number + +x3.a *= value; +>x3.a *= value : number +>x3.a : number +>x3 : { a: number; } +>a : number +>value : any + +x3.a += value; +>x3.a += value : any +>x3.a : number +>x3 : { a: number; } +>a : number +>value : any + +x3['a'] *= value; +>x3['a'] *= value : number +>x3['a'] : number +>x3 : { a: number; } +>value : any + +x3['a'] += value; +>x3['a'] += value : any +>x3['a'] : number +>x3 : { a: number; } +>value : any + +// parentheses, the contained expression is reference +(x1) *= value; +>(x1) *= value : number +>(x1) : number +>x1 : number +>value : any + +(x1) += value; +>(x1) += value : any +>(x1) : number +>x1 : number +>value : any + +function fn2(x4: number) { +>fn2 : (x4: number) => void +>x4 : number + + (x4) *= value; +>(x4) *= value : number +>(x4) : number +>x4 : number +>value : any + + (x4) += value; +>(x4) += value : any +>(x4) : number +>x4 : number +>value : any +} + +(x3.a) *= value; +>(x3.a) *= value : number +>(x3.a) : number +>x3.a : number +>x3 : { a: number; } +>a : number +>value : any + +(x3.a) += value; +>(x3.a) += value : any +>(x3.a) : number +>x3.a : number +>x3 : { a: number; } +>a : number +>value : any + +(x3['a']) *= value; +>(x3['a']) *= value : number +>(x3['a']) : number +>x3['a'] : number +>x3 : { a: number; } +>value : any + +(x3['a']) += value; +>(x3['a']) += value : any +>(x3['a']) : number +>x3['a'] : number +>x3 : { a: number; } +>value : any + diff --git a/tests/baselines/reference/compoundAssignmentLHSIsValue.errors.txt b/tests/baselines/reference/compoundAssignmentLHSIsValue.errors.txt index a2c2eb188bc..7fe036ef084 100644 --- a/tests/baselines/reference/compoundAssignmentLHSIsValue.errors.txt +++ b/tests/baselines/reference/compoundAssignmentLHSIsValue.errors.txt @@ -137,12 +137,12 @@ super(); super *= value; ~~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. super += value; ~~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! Invalid left-hand side of assignment expression. } @@ -150,12 +150,12 @@ foo() { super *= value; ~~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. super += value; ~~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! Invalid left-hand side of assignment expression. } @@ -163,12 +163,12 @@ static sfoo() { super *= value; ~~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. super += value; ~~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! Invalid left-hand side of assignment expression. } diff --git a/tests/baselines/reference/compoundVarDecl1.types b/tests/baselines/reference/compoundVarDecl1.types new file mode 100644 index 00000000000..e9a04bff9b2 --- /dev/null +++ b/tests/baselines/reference/compoundVarDecl1.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/compoundVarDecl1.ts === +module Foo { var a = 1, b = 1; a = b + 2; } +>Foo : typeof Foo +>a : number +>b : number +>a = b + 2 : number +>a : number +>b + 2 : number +>b : number + +var foo = 4, bar = 5; +>foo : number +>bar : number + diff --git a/tests/baselines/reference/concatClassAndString.js b/tests/baselines/reference/concatClassAndString.js index 0d063a0e834..dca09ec7e58 100644 --- a/tests/baselines/reference/concatClassAndString.js +++ b/tests/baselines/reference/concatClassAndString.js @@ -6,6 +6,7 @@ f += ''; //// [concatClassAndString.js] +// Shouldn't compile (the long form f = f + ""; doesn't): var f = (function () { function f() { } diff --git a/tests/baselines/reference/concatError.js b/tests/baselines/reference/concatError.js index 3a7613484c5..e4ae4afdb65 100644 --- a/tests/baselines/reference/concatError.js +++ b/tests/baselines/reference/concatError.js @@ -34,6 +34,12 @@ c = c.m(cc); //// [concatError.js] var n1; +/* +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; fa = fa.concat([0]); fa = fa.concat(0); diff --git a/tests/baselines/reference/concatError.types b/tests/baselines/reference/concatError.types new file mode 100644 index 00000000000..46d74cfb6ec --- /dev/null +++ b/tests/baselines/reference/concatError.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/concatError.ts === + +var n1: number[]; +>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 : number[] + +fa = fa.concat([0]); +>fa = fa.concat([0]) : number[] +>fa : number[] +>fa.concat([0]) : number[] +>fa.concat : { (...items: U[]): number[]; (...items: number[]): number[]; } +>fa : number[] +>concat : { (...items: U[]): number[]; (...items: number[]): number[]; } +>[0] : number[] + +fa = fa.concat(0); +>fa = fa.concat(0) : number[] +>fa : number[] +>fa.concat(0) : number[] +>fa.concat : { (...items: U[]): number[]; (...items: number[]): number[]; } +>fa : number[] +>concat : { (...items: U[]): number[]; (...items: number[]): number[]; } + + + + + +/* + + + + +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/conditionalExpression1.js b/tests/baselines/reference/conditionalExpression1.js index 92010908553..4d90548ec62 100644 --- a/tests/baselines/reference/conditionalExpression1.js +++ b/tests/baselines/reference/conditionalExpression1.js @@ -2,4 +2,4 @@ var x: boolean = (true ? 1 : ""); // should be an error //// [conditionalExpression1.js] -var x = (true ? 1 : ""); +var x = (true ? 1 : ""); // should be an error diff --git a/tests/baselines/reference/conditionalExpressions2.types b/tests/baselines/reference/conditionalExpressions2.types new file mode 100644 index 00000000000..7fa483ad348 --- /dev/null +++ b/tests/baselines/reference/conditionalExpressions2.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/conditionalExpressions2.ts === +var a = false ? 1 : null; +>a : number +>false ? 1 : null : number + +var b = false ? undefined : 0; +>b : number +>false ? undefined : 0 : number +>undefined : undefined + +var c = false ? 1 : 0; +>c : number +>false ? 1 : 0 : number + +var d = false ? false : true; +>d : boolean +>false ? false : true : boolean + +var e = false ? "foo" : "bar"; +>e : string +>false ? "foo" : "bar" : string + +var f = false ? null : undefined; +>f : any +>false ? null : undefined : null +>undefined : undefined + +var g = true ? {g:5} : null; +>g : { g: number; } +>true ? {g:5} : null : { g: number; } +>{g:5} : { g: number; } +>g : number + +var h = [{h:5}, null]; +>h : { h: number; }[] +>[{h:5}, null] : { h: number; }[] +>{h:5} : { h: number; } +>h : number + +function i() { if (true) { return { x: 5 }; } else { return null; } } +>i : () => { x: number; } +>{ x: 5 } : { x: number; } +>x : number + diff --git a/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.js b/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.js index 2f279100954..ab9dca9023f 100644 --- a/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.js +++ b/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.js @@ -56,6 +56,7 @@ var resultIsObject3 = true || false ? exprIsObject1 : exprIsObject2; //// [conditionalOperatorConditionIsBooleanType.js] +//Cond ? Expr1 : Expr2, Cond is of boolean type, Expr1 and Expr2 have the same type var condBoolean; var exprAny1; var exprBoolean1; @@ -67,21 +68,25 @@ var exprBoolean2; var exprNumber2; var exprString2; var exprIsObject2; +//Cond is a boolean type variable condBoolean ? exprAny1 : exprAny2; condBoolean ? exprBoolean1 : exprBoolean2; condBoolean ? exprNumber1 : exprNumber2; condBoolean ? exprString1 : exprString2; condBoolean ? exprIsObject1 : exprIsObject2; +//Cond is a boolean type literal true ? exprAny1 : exprAny2; false ? exprBoolean1 : exprBoolean2; true ? exprNumber1 : exprNumber2; false ? exprString1 : exprString2; true ? exprIsObject1 : exprIsObject2; +//Cond is a boolean type expression !true ? exprAny1 : exprAny2; typeof "123" == "string" ? exprBoolean1 : exprBoolean2; 2 > 1 ? exprNumber1 : exprNumber2; null === undefined ? exprString1 : exprString2; true || false ? exprIsObject1 : exprIsObject2; +//Results shoud be same as Expr1 and Expr2 var resultIsAny1 = condBoolean ? exprAny1 : exprAny2; var resultIsBoolean1 = condBoolean ? exprBoolean1 : exprBoolean2; var resultIsNumber1 = condBoolean ? exprNumber1 : exprNumber2; diff --git a/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.types b/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.types new file mode 100644 index 00000000000..b3ca65219cb --- /dev/null +++ b/tests/baselines/reference/conditionalOperatorConditionIsBooleanType.types @@ -0,0 +1,230 @@ +=== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditionIsBooleanType.ts === +//Cond ? Expr1 : Expr2, Cond is of boolean type, Expr1 and Expr2 have the same type +var condBoolean: boolean; +>condBoolean : boolean + +var exprAny1: any; +>exprAny1 : any + +var exprBoolean1: boolean; +>exprBoolean1 : boolean + +var exprNumber1: number; +>exprNumber1 : number + +var exprString1: string; +>exprString1 : string + +var exprIsObject1: Object; +>exprIsObject1 : Object +>Object : Object + +var exprAny2: any; +>exprAny2 : any + +var exprBoolean2: boolean; +>exprBoolean2 : boolean + +var exprNumber2: number; +>exprNumber2 : number + +var exprString2: string; +>exprString2 : string + +var exprIsObject2: Object; +>exprIsObject2 : Object +>Object : Object + +//Cond is a boolean type variable +condBoolean ? exprAny1 : exprAny2; +>condBoolean ? exprAny1 : exprAny2 : any +>condBoolean : boolean +>exprAny1 : any +>exprAny2 : any + +condBoolean ? exprBoolean1 : exprBoolean2; +>condBoolean ? exprBoolean1 : exprBoolean2 : boolean +>condBoolean : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +condBoolean ? exprNumber1 : exprNumber2; +>condBoolean ? exprNumber1 : exprNumber2 : number +>condBoolean : boolean +>exprNumber1 : number +>exprNumber2 : number + +condBoolean ? exprString1 : exprString2; +>condBoolean ? exprString1 : exprString2 : string +>condBoolean : boolean +>exprString1 : string +>exprString2 : string + +condBoolean ? exprIsObject1 : exprIsObject2; +>condBoolean ? exprIsObject1 : exprIsObject2 : Object +>condBoolean : boolean +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is a boolean type literal +true ? exprAny1 : exprAny2; +>true ? exprAny1 : exprAny2 : any +>exprAny1 : any +>exprAny2 : any + +false ? exprBoolean1 : exprBoolean2; +>false ? exprBoolean1 : exprBoolean2 : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +true ? exprNumber1 : exprNumber2; +>true ? exprNumber1 : exprNumber2 : number +>exprNumber1 : number +>exprNumber2 : number + +false ? exprString1 : exprString2; +>false ? exprString1 : exprString2 : string +>exprString1 : string +>exprString2 : string + +true ? exprIsObject1 : exprIsObject2; +>true ? exprIsObject1 : exprIsObject2 : Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is a boolean type expression +!true ? exprAny1 : exprAny2; +>!true ? exprAny1 : exprAny2 : any +>!true : boolean +>exprAny1 : any +>exprAny2 : any + +typeof "123" == "string" ? exprBoolean1 : exprBoolean2; +>typeof "123" == "string" ? exprBoolean1 : exprBoolean2 : boolean +>typeof "123" == "string" : boolean +>typeof "123" : string +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +2 > 1 ? exprNumber1 : exprNumber2; +>2 > 1 ? exprNumber1 : exprNumber2 : number +>2 > 1 : boolean +>exprNumber1 : number +>exprNumber2 : number + +null === undefined ? exprString1 : exprString2; +>null === undefined ? exprString1 : exprString2 : string +>null === undefined : boolean +>undefined : undefined +>exprString1 : string +>exprString2 : string + +true || false ? exprIsObject1 : exprIsObject2; +>true || false ? exprIsObject1 : exprIsObject2 : Object +>true || false : boolean +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Results shoud be same as Expr1 and Expr2 +var resultIsAny1 = condBoolean ? exprAny1 : exprAny2; +>resultIsAny1 : any +>condBoolean ? exprAny1 : exprAny2 : any +>condBoolean : boolean +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean1 = condBoolean ? exprBoolean1 : exprBoolean2; +>resultIsBoolean1 : boolean +>condBoolean ? exprBoolean1 : exprBoolean2 : boolean +>condBoolean : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber1 = condBoolean ? exprNumber1 : exprNumber2; +>resultIsNumber1 : number +>condBoolean ? exprNumber1 : exprNumber2 : number +>condBoolean : boolean +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString1 = condBoolean ? exprString1 : exprString2; +>resultIsString1 : string +>condBoolean ? exprString1 : exprString2 : string +>condBoolean : boolean +>exprString1 : string +>exprString2 : string + +var resultIsObject1 = condBoolean ? exprIsObject1 : exprIsObject2; +>resultIsObject1 : Object +>condBoolean ? exprIsObject1 : exprIsObject2 : Object +>condBoolean : boolean +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny2 = true ? exprAny1 : exprAny2; +>resultIsAny2 : any +>true ? exprAny1 : exprAny2 : any +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean2 = false ? exprBoolean1 : exprBoolean2; +>resultIsBoolean2 : boolean +>false ? exprBoolean1 : exprBoolean2 : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber2 = true ? exprNumber1 : exprNumber2; +>resultIsNumber2 : number +>true ? exprNumber1 : exprNumber2 : number +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString2 = false ? exprString1 : exprString2; +>resultIsString2 : string +>false ? exprString1 : exprString2 : string +>exprString1 : string +>exprString2 : string + +var resultIsObject2 = true ? exprIsObject1 : exprIsObject2; +>resultIsObject2 : Object +>true ? exprIsObject1 : exprIsObject2 : Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny3 = !true ? exprAny1 : exprAny2; +>resultIsAny3 : any +>!true ? exprAny1 : exprAny2 : any +>!true : boolean +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean3 = typeof "123" == "string" ? exprBoolean1 : exprBoolean2; +>resultIsBoolean3 : boolean +>typeof "123" == "string" ? exprBoolean1 : exprBoolean2 : boolean +>typeof "123" == "string" : boolean +>typeof "123" : string +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber3 = 2 > 1 ? exprNumber1 : exprNumber2; +>resultIsNumber3 : number +>2 > 1 ? exprNumber1 : exprNumber2 : number +>2 > 1 : boolean +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString3 = null === undefined ? exprString1 : exprString2; +>resultIsString3 : string +>null === undefined ? exprString1 : exprString2 : string +>null === undefined : boolean +>undefined : undefined +>exprString1 : string +>exprString2 : string + +var resultIsObject3 = true || false ? exprIsObject1 : exprIsObject2; +>resultIsObject3 : Object +>true || false ? exprIsObject1 : exprIsObject2 : Object +>true || false : boolean +>exprIsObject1 : Object +>exprIsObject2 : Object + diff --git a/tests/baselines/reference/conditionalOperatorConditionIsNumberType.js b/tests/baselines/reference/conditionalOperatorConditionIsNumberType.js index 37ee498784b..166841f0a89 100644 --- a/tests/baselines/reference/conditionalOperatorConditionIsNumberType.js +++ b/tests/baselines/reference/conditionalOperatorConditionIsNumberType.js @@ -59,6 +59,7 @@ var resultIsObject3 = foo() / array[1] ? exprIsObject1 : exprIsObject2; //// [conditionalOperatorConditionIsNumberType.js] +//Cond ? Expr1 : Expr2, Cond is of number type, Expr1 and Expr2 have the same type var condNumber; var exprAny1; var exprBoolean1; @@ -70,16 +71,19 @@ var exprBoolean2; var exprNumber2; var exprString2; var exprIsObject2; +//Cond is a number type variable condNumber ? exprAny1 : exprAny2; condNumber ? exprBoolean1 : exprBoolean2; condNumber ? exprNumber1 : exprNumber2; condNumber ? exprString1 : exprString2; condNumber ? exprIsObject1 : exprIsObject2; +//Cond is a number type literal 1 ? exprAny1 : exprAny2; 0 ? exprBoolean1 : exprBoolean2; 0.123456789 ? exprNumber1 : exprNumber2; -10000000000000 ? exprString1 : exprString2; 1000000000000 ? exprIsObject1 : exprIsObject2; +//Cond is a number type expression function foo() { return 1; } @@ -90,6 +94,7 @@ var array = [1, 2, 3]; "string".length ? exprNumber1 : exprNumber2; foo() ? exprString1 : exprString2; foo() / array[1] ? exprIsObject1 : exprIsObject2; +//Results shoud be same as Expr1 and Expr2 var resultIsAny1 = condNumber ? exprAny1 : exprAny2; var resultIsBoolean1 = condNumber ? exprBoolean1 : exprBoolean2; var resultIsNumber1 = condNumber ? exprNumber1 : exprNumber2; diff --git a/tests/baselines/reference/conditionalOperatorConditionIsNumberType.types b/tests/baselines/reference/conditionalOperatorConditionIsNumberType.types new file mode 100644 index 00000000000..3396885509a --- /dev/null +++ b/tests/baselines/reference/conditionalOperatorConditionIsNumberType.types @@ -0,0 +1,247 @@ +=== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditionIsNumberType.ts === +//Cond ? Expr1 : Expr2, Cond is of number type, Expr1 and Expr2 have the same type +var condNumber: number; +>condNumber : number + +var exprAny1: any; +>exprAny1 : any + +var exprBoolean1: boolean; +>exprBoolean1 : boolean + +var exprNumber1: number; +>exprNumber1 : number + +var exprString1: string; +>exprString1 : string + +var exprIsObject1: Object; +>exprIsObject1 : Object +>Object : Object + +var exprAny2: any; +>exprAny2 : any + +var exprBoolean2: boolean; +>exprBoolean2 : boolean + +var exprNumber2: number; +>exprNumber2 : number + +var exprString2: string; +>exprString2 : string + +var exprIsObject2: Object; +>exprIsObject2 : Object +>Object : Object + +//Cond is a number type variable +condNumber ? exprAny1 : exprAny2; +>condNumber ? exprAny1 : exprAny2 : any +>condNumber : number +>exprAny1 : any +>exprAny2 : any + +condNumber ? exprBoolean1 : exprBoolean2; +>condNumber ? exprBoolean1 : exprBoolean2 : boolean +>condNumber : number +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +condNumber ? exprNumber1 : exprNumber2; +>condNumber ? exprNumber1 : exprNumber2 : number +>condNumber : number +>exprNumber1 : number +>exprNumber2 : number + +condNumber ? exprString1 : exprString2; +>condNumber ? exprString1 : exprString2 : string +>condNumber : number +>exprString1 : string +>exprString2 : string + +condNumber ? exprIsObject1 : exprIsObject2; +>condNumber ? exprIsObject1 : exprIsObject2 : Object +>condNumber : number +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is a number type literal +1 ? exprAny1 : exprAny2; +>1 ? exprAny1 : exprAny2 : any +>exprAny1 : any +>exprAny2 : any + +0 ? exprBoolean1 : exprBoolean2; +>0 ? exprBoolean1 : exprBoolean2 : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +0.123456789 ? exprNumber1 : exprNumber2; +>0.123456789 ? exprNumber1 : exprNumber2 : number +>exprNumber1 : number +>exprNumber2 : number + +- 10000000000000 ? exprString1 : exprString2; +>- 10000000000000 ? exprString1 : exprString2 : string +>- 10000000000000 : number +>exprString1 : string +>exprString2 : string + +1000000000000 ? exprIsObject1 : exprIsObject2; +>1000000000000 ? exprIsObject1 : exprIsObject2 : Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is a number type expression +function foo() { return 1 }; +>foo : () => number + +var array = [1, 2, 3]; +>array : number[] +>[1, 2, 3] : number[] + +1 * 0 ? exprAny1 : exprAny2; +>1 * 0 ? exprAny1 : exprAny2 : any +>1 * 0 : number +>exprAny1 : any +>exprAny2 : any + +1 + 1 ? exprBoolean1 : exprBoolean2; +>1 + 1 ? exprBoolean1 : exprBoolean2 : boolean +>1 + 1 : number +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +"string".length ? exprNumber1 : exprNumber2; +>"string".length ? exprNumber1 : exprNumber2 : number +>"string".length : number +>length : number +>exprNumber1 : number +>exprNumber2 : number + +foo() ? exprString1 : exprString2; +>foo() ? exprString1 : exprString2 : string +>foo() : number +>foo : () => number +>exprString1 : string +>exprString2 : string + +foo() / array[1] ? exprIsObject1 : exprIsObject2; +>foo() / array[1] ? exprIsObject1 : exprIsObject2 : Object +>foo() / array[1] : number +>foo() : number +>foo : () => number +>array[1] : number +>array : number[] +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Results shoud be same as Expr1 and Expr2 +var resultIsAny1 = condNumber ? exprAny1 : exprAny2; +>resultIsAny1 : any +>condNumber ? exprAny1 : exprAny2 : any +>condNumber : number +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean1 = condNumber ? exprBoolean1 : exprBoolean2; +>resultIsBoolean1 : boolean +>condNumber ? exprBoolean1 : exprBoolean2 : boolean +>condNumber : number +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber1 = condNumber ? exprNumber1 : exprNumber2; +>resultIsNumber1 : number +>condNumber ? exprNumber1 : exprNumber2 : number +>condNumber : number +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString1 = condNumber ? exprString1 : exprString2; +>resultIsString1 : string +>condNumber ? exprString1 : exprString2 : string +>condNumber : number +>exprString1 : string +>exprString2 : string + +var resultIsObject1 = condNumber ? exprIsObject1 : exprIsObject2; +>resultIsObject1 : Object +>condNumber ? exprIsObject1 : exprIsObject2 : Object +>condNumber : number +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny2 = 1 ? exprAny1 : exprAny2; +>resultIsAny2 : any +>1 ? exprAny1 : exprAny2 : any +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean2 = 0 ? exprBoolean1 : exprBoolean2; +>resultIsBoolean2 : boolean +>0 ? exprBoolean1 : exprBoolean2 : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber2 = 0.123456789 ? exprNumber1 : exprNumber2; +>resultIsNumber2 : number +>0.123456789 ? exprNumber1 : exprNumber2 : number +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString2 = - 10000000000000 ? exprString1 : exprString2; +>resultIsString2 : string +>- 10000000000000 ? exprString1 : exprString2 : string +>- 10000000000000 : number +>exprString1 : string +>exprString2 : string + +var resultIsObject2 = 1000000000000 ? exprIsObject1 : exprIsObject2; +>resultIsObject2 : Object +>1000000000000 ? exprIsObject1 : exprIsObject2 : Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny3 = 1 * 0 ? exprAny1 : exprAny2; +>resultIsAny3 : any +>1 * 0 ? exprAny1 : exprAny2 : any +>1 * 0 : number +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean3 = 1 + 1 ? exprBoolean1 : exprBoolean2; +>resultIsBoolean3 : boolean +>1 + 1 ? exprBoolean1 : exprBoolean2 : boolean +>1 + 1 : number +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber3 = "string".length ? exprNumber1 : exprNumber2; +>resultIsNumber3 : number +>"string".length ? exprNumber1 : exprNumber2 : number +>"string".length : number +>length : number +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString3 = foo() ? exprString1 : exprString2; +>resultIsString3 : string +>foo() ? exprString1 : exprString2 : string +>foo() : number +>foo : () => number +>exprString1 : string +>exprString2 : string + +var resultIsObject3 = foo() / array[1] ? exprIsObject1 : exprIsObject2; +>resultIsObject3 : Object +>foo() / array[1] ? exprIsObject1 : exprIsObject2 : Object +>foo() / array[1] : number +>foo() : number +>foo : () => number +>array[1] : number +>array : number[] +>exprIsObject1 : Object +>exprIsObject2 : Object + diff --git a/tests/baselines/reference/conditionalOperatorConditionIsObjectType.js b/tests/baselines/reference/conditionalOperatorConditionIsObjectType.js index f10533a2332..3f98398d94d 100644 --- a/tests/baselines/reference/conditionalOperatorConditionIsObjectType.js +++ b/tests/baselines/reference/conditionalOperatorConditionIsObjectType.js @@ -59,6 +59,7 @@ var resultIsObject3 = condObject.valueOf() ? exprIsObject1 : exprIsObject2; //// [conditionalOperatorConditionIsObjectType.js] +//Cond ? Expr1 : Expr2, Cond is of object type, Expr1 and Expr2 have the same type var condObject; var exprAny1; var exprBoolean1; @@ -79,21 +80,25 @@ var C = (function () { return C; })(); ; +//Cond is an object type variable condObject ? exprAny1 : exprAny2; condObject ? exprBoolean1 : exprBoolean2; condObject ? exprNumber1 : exprNumber2; condObject ? exprString1 : exprString2; condObject ? exprIsObject1 : exprIsObject2; +//Cond is an object type literal (function (a) { return a.length; }) ? exprAny1 : exprAny2; (function (a) { return a.length; }) ? exprBoolean1 : exprBoolean2; ({}) ? exprNumber1 : exprNumber2; ({ a: 1, b: "s" }) ? exprString1 : exprString2; ({ a: 1, b: "s" }) ? exprIsObject1 : exprIsObject2; +//Cond is an object type expression foo() ? exprAny1 : exprAny2; new Date() ? exprBoolean1 : exprBoolean2; new C() ? exprNumber1 : exprNumber2; C.doIt() ? exprString1 : exprString2; condObject.valueOf() ? exprIsObject1 : exprIsObject2; +//Results shoud be same as Expr1 and Expr2 var resultIsAny1 = condObject ? exprAny1 : exprAny2; var resultIsBoolean1 = condObject ? exprBoolean1 : exprBoolean2; var resultIsNumber1 = condObject ? exprNumber1 : exprNumber2; diff --git a/tests/baselines/reference/conditionalOperatorConditionIsObjectType.types b/tests/baselines/reference/conditionalOperatorConditionIsObjectType.types new file mode 100644 index 00000000000..36c15d64c54 --- /dev/null +++ b/tests/baselines/reference/conditionalOperatorConditionIsObjectType.types @@ -0,0 +1,296 @@ +=== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditionIsObjectType.ts === +//Cond ? Expr1 : Expr2, Cond is of object type, Expr1 and Expr2 have the same type +var condObject: Object; +>condObject : Object +>Object : Object + +var exprAny1: any; +>exprAny1 : any + +var exprBoolean1: boolean; +>exprBoolean1 : boolean + +var exprNumber1: number; +>exprNumber1 : number + +var exprString1: string; +>exprString1 : string + +var exprIsObject1: Object; +>exprIsObject1 : Object +>Object : Object + +var exprAny2: any; +>exprAny2 : any + +var exprBoolean2: boolean; +>exprBoolean2 : boolean + +var exprNumber2: number; +>exprNumber2 : number + +var exprString2: string; +>exprString2 : string + +var exprIsObject2: Object; +>exprIsObject2 : Object +>Object : Object + +function foo() { }; +>foo : () => void + +class C { static doIt: () => void }; +>C : C +>doIt : () => void + +//Cond is an object type variable +condObject ? exprAny1 : exprAny2; +>condObject ? exprAny1 : exprAny2 : any +>condObject : Object +>exprAny1 : any +>exprAny2 : any + +condObject ? exprBoolean1 : exprBoolean2; +>condObject ? exprBoolean1 : exprBoolean2 : boolean +>condObject : Object +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +condObject ? exprNumber1 : exprNumber2; +>condObject ? exprNumber1 : exprNumber2 : number +>condObject : Object +>exprNumber1 : number +>exprNumber2 : number + +condObject ? exprString1 : exprString2; +>condObject ? exprString1 : exprString2 : string +>condObject : Object +>exprString1 : string +>exprString2 : string + +condObject ? exprIsObject1 : exprIsObject2; +>condObject ? exprIsObject1 : exprIsObject2 : Object +>condObject : Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is an object type literal +((a: string) => a.length) ? exprAny1 : exprAny2; +>((a: string) => a.length) ? exprAny1 : exprAny2 : any +>((a: string) => a.length) : (a: string) => number +>(a: string) => a.length : (a: string) => number +>a : string +>a.length : number +>a : string +>length : number +>exprAny1 : any +>exprAny2 : any + +((a: string) => a.length) ? exprBoolean1 : exprBoolean2; +>((a: string) => a.length) ? exprBoolean1 : exprBoolean2 : boolean +>((a: string) => a.length) : (a: string) => number +>(a: string) => a.length : (a: string) => number +>a : string +>a.length : number +>a : string +>length : number +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +({}) ? exprNumber1 : exprNumber2; +>({}) ? exprNumber1 : exprNumber2 : number +>({}) : {} +>{} : {} +>exprNumber1 : number +>exprNumber2 : number + +({ a: 1, b: "s" }) ? exprString1 : exprString2; +>({ a: 1, b: "s" }) ? exprString1 : exprString2 : string +>({ a: 1, b: "s" }) : { a: number; b: string; } +>{ a: 1, b: "s" } : { a: number; b: string; } +>a : number +>b : string +>exprString1 : string +>exprString2 : string + +({ a: 1, b: "s" }) ? exprIsObject1 : exprIsObject2; +>({ a: 1, b: "s" }) ? exprIsObject1 : exprIsObject2 : Object +>({ a: 1, b: "s" }) : { a: number; b: string; } +>{ a: 1, b: "s" } : { a: number; b: string; } +>a : number +>b : string +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is an object type expression +foo() ? exprAny1 : exprAny2; +>foo() ? exprAny1 : exprAny2 : any +>foo() : void +>foo : () => void +>exprAny1 : any +>exprAny2 : any + +new Date() ? exprBoolean1 : exprBoolean2; +>new Date() ? exprBoolean1 : exprBoolean2 : boolean +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +new C() ? exprNumber1 : exprNumber2; +>new C() ? exprNumber1 : exprNumber2 : number +>new C() : C +>C : typeof C +>exprNumber1 : number +>exprNumber2 : number + +C.doIt() ? exprString1 : exprString2; +>C.doIt() ? exprString1 : exprString2 : string +>C.doIt() : void +>C.doIt : () => void +>C : typeof C +>doIt : () => void +>exprString1 : string +>exprString2 : string + +condObject.valueOf() ? exprIsObject1 : exprIsObject2; +>condObject.valueOf() ? exprIsObject1 : exprIsObject2 : Object +>condObject.valueOf() : Object +>condObject.valueOf : () => Object +>condObject : Object +>valueOf : () => Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Results shoud be same as Expr1 and Expr2 +var resultIsAny1 = condObject ? exprAny1 : exprAny2; +>resultIsAny1 : any +>condObject ? exprAny1 : exprAny2 : any +>condObject : Object +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean1 = condObject ? exprBoolean1 : exprBoolean2; +>resultIsBoolean1 : boolean +>condObject ? exprBoolean1 : exprBoolean2 : boolean +>condObject : Object +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber1 = condObject ? exprNumber1 : exprNumber2; +>resultIsNumber1 : number +>condObject ? exprNumber1 : exprNumber2 : number +>condObject : Object +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString1 = condObject ? exprString1 : exprString2; +>resultIsString1 : string +>condObject ? exprString1 : exprString2 : string +>condObject : Object +>exprString1 : string +>exprString2 : string + +var resultIsObject1 = condObject ? exprIsObject1 : exprIsObject2; +>resultIsObject1 : Object +>condObject ? exprIsObject1 : exprIsObject2 : Object +>condObject : Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny2 = ((a: string) => a.length) ? exprAny1 : exprAny2; +>resultIsAny2 : any +>((a: string) => a.length) ? exprAny1 : exprAny2 : any +>((a: string) => a.length) : (a: string) => number +>(a: string) => a.length : (a: string) => number +>a : string +>a.length : number +>a : string +>length : number +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean2 = ((a: string) => a.length) ? exprBoolean1 : exprBoolean2; +>resultIsBoolean2 : boolean +>((a: string) => a.length) ? exprBoolean1 : exprBoolean2 : boolean +>((a: string) => a.length) : (a: string) => number +>(a: string) => a.length : (a: string) => number +>a : string +>a.length : number +>a : string +>length : number +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber2 = ({}) ? exprNumber1 : exprNumber2; +>resultIsNumber2 : number +>({}) ? exprNumber1 : exprNumber2 : number +>({}) : {} +>{} : {} +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString2 = ({ a: 1, b: "s" }) ? exprString1 : exprString2; +>resultIsString2 : string +>({ a: 1, b: "s" }) ? exprString1 : exprString2 : string +>({ a: 1, b: "s" }) : { a: number; b: string; } +>{ a: 1, b: "s" } : { a: number; b: string; } +>a : number +>b : string +>exprString1 : string +>exprString2 : string + +var resultIsObject2 = ({ a: 1, b: "s" }) ? exprIsObject1 : exprIsObject2; +>resultIsObject2 : Object +>({ a: 1, b: "s" }) ? exprIsObject1 : exprIsObject2 : Object +>({ a: 1, b: "s" }) : { a: number; b: string; } +>{ a: 1, b: "s" } : { a: number; b: string; } +>a : number +>b : string +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny3 = foo() ? exprAny1 : exprAny2; +>resultIsAny3 : any +>foo() ? exprAny1 : exprAny2 : any +>foo() : void +>foo : () => void +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean3 = new Date() ? exprBoolean1 : exprBoolean2; +>resultIsBoolean3 : boolean +>new Date() ? exprBoolean1 : exprBoolean2 : boolean +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber3 = new C() ? exprNumber1 : exprNumber2; +>resultIsNumber3 : number +>new C() ? exprNumber1 : exprNumber2 : number +>new C() : C +>C : typeof C +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString3 = C.doIt() ? exprString1 : exprString2; +>resultIsString3 : string +>C.doIt() ? exprString1 : exprString2 : string +>C.doIt() : void +>C.doIt : () => void +>C : typeof C +>doIt : () => void +>exprString1 : string +>exprString2 : string + +var resultIsObject3 = condObject.valueOf() ? exprIsObject1 : exprIsObject2; +>resultIsObject3 : Object +>condObject.valueOf() ? exprIsObject1 : exprIsObject2 : Object +>condObject.valueOf() : Object +>condObject.valueOf : () => Object +>condObject : Object +>valueOf : () => Object +>exprIsObject1 : Object +>exprIsObject2 : Object + diff --git a/tests/baselines/reference/conditionalOperatorConditoinIsAnyType.js b/tests/baselines/reference/conditionalOperatorConditoinIsAnyType.js index 92de4bd4d53..5869023d17d 100644 --- a/tests/baselines/reference/conditionalOperatorConditoinIsAnyType.js +++ b/tests/baselines/reference/conditionalOperatorConditoinIsAnyType.js @@ -57,6 +57,7 @@ var resultIsObject3 = x.doSomeThing() ? exprIsObject1 : exprIsObject2; //// [conditionalOperatorConditoinIsAnyType.js] +//Cond ? Expr1 : Expr2, Cond is of any type, Expr1 and Expr2 have the same type var condAny; var x; var exprAny1; @@ -69,21 +70,25 @@ var exprBoolean2; var exprNumber2; var exprString2; var exprIsObject2; +//Cond is an any type variable condAny ? exprAny1 : exprAny2; condAny ? exprBoolean1 : exprBoolean2; condAny ? exprNumber1 : exprNumber2; condAny ? exprString1 : exprString2; condAny ? exprIsObject1 : exprIsObject2; +//Cond is an any type literal null ? exprAny1 : exprAny2; null ? exprBoolean1 : exprBoolean2; undefined ? exprNumber1 : exprNumber2; [null, undefined] ? exprString1 : exprString2; [null, undefined] ? exprIsObject1 : exprIsObject2; +//Cond is an any type expression x.doSomeThing() ? exprAny1 : exprAny2; x("x") ? exprBoolean1 : exprBoolean2; x(x) ? exprNumber1 : exprNumber2; x("x") ? exprString1 : exprString2; x.doSomeThing() ? exprIsObject1 : exprIsObject2; +//Results shoud be same as Expr1 and Expr2 var resultIsAny1 = condAny ? exprAny1 : exprAny2; var resultIsBoolean1 = condAny ? exprBoolean1 : exprBoolean2; var resultIsNumber1 = condAny ? exprNumber1 : exprNumber2; diff --git a/tests/baselines/reference/conditionalOperatorConditoinIsAnyType.types b/tests/baselines/reference/conditionalOperatorConditoinIsAnyType.types new file mode 100644 index 00000000000..9f5fc9326bb --- /dev/null +++ b/tests/baselines/reference/conditionalOperatorConditoinIsAnyType.types @@ -0,0 +1,259 @@ +=== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditoinIsAnyType.ts === +//Cond ? Expr1 : Expr2, Cond is of any type, Expr1 and Expr2 have the same type +var condAny: any; +>condAny : any + +var x: any; +>x : any + +var exprAny1: any; +>exprAny1 : any + +var exprBoolean1: boolean; +>exprBoolean1 : boolean + +var exprNumber1: number; +>exprNumber1 : number + +var exprString1: string; +>exprString1 : string + +var exprIsObject1: Object; +>exprIsObject1 : Object +>Object : Object + +var exprAny2: any; +>exprAny2 : any + +var exprBoolean2: boolean; +>exprBoolean2 : boolean + +var exprNumber2: number; +>exprNumber2 : number + +var exprString2: string; +>exprString2 : string + +var exprIsObject2: Object; +>exprIsObject2 : Object +>Object : Object + +//Cond is an any type variable +condAny ? exprAny1 : exprAny2; +>condAny ? exprAny1 : exprAny2 : any +>condAny : any +>exprAny1 : any +>exprAny2 : any + +condAny ? exprBoolean1 : exprBoolean2; +>condAny ? exprBoolean1 : exprBoolean2 : boolean +>condAny : any +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +condAny ? exprNumber1 : exprNumber2; +>condAny ? exprNumber1 : exprNumber2 : number +>condAny : any +>exprNumber1 : number +>exprNumber2 : number + +condAny ? exprString1 : exprString2; +>condAny ? exprString1 : exprString2 : string +>condAny : any +>exprString1 : string +>exprString2 : string + +condAny ? exprIsObject1 : exprIsObject2; +>condAny ? exprIsObject1 : exprIsObject2 : Object +>condAny : any +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is an any type literal +null ? exprAny1 : exprAny2; +>null ? exprAny1 : exprAny2 : any +>exprAny1 : any +>exprAny2 : any + +null ? exprBoolean1 : exprBoolean2; +>null ? exprBoolean1 : exprBoolean2 : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +undefined ? exprNumber1 : exprNumber2; +>undefined ? exprNumber1 : exprNumber2 : number +>undefined : undefined +>exprNumber1 : number +>exprNumber2 : number + +[null, undefined] ? exprString1 : exprString2; +>[null, undefined] ? exprString1 : exprString2 : string +>[null, undefined] : null[] +>undefined : undefined +>exprString1 : string +>exprString2 : string + +[null, undefined] ? exprIsObject1 : exprIsObject2; +>[null, undefined] ? exprIsObject1 : exprIsObject2 : Object +>[null, undefined] : null[] +>undefined : undefined +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is an any type expression +x.doSomeThing() ? exprAny1 : exprAny2; +>x.doSomeThing() ? exprAny1 : exprAny2 : any +>x.doSomeThing() : any +>x.doSomeThing : any +>x : any +>doSomeThing : any +>exprAny1 : any +>exprAny2 : any + +x("x") ? exprBoolean1 : exprBoolean2; +>x("x") ? exprBoolean1 : exprBoolean2 : boolean +>x("x") : any +>x : any +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +x(x) ? exprNumber1 : exprNumber2; +>x(x) ? exprNumber1 : exprNumber2 : number +>x(x) : any +>x : any +>x : any +>exprNumber1 : number +>exprNumber2 : number + +x("x") ? exprString1 : exprString2; +>x("x") ? exprString1 : exprString2 : string +>x("x") : any +>x : any +>exprString1 : string +>exprString2 : string + +x.doSomeThing() ? exprIsObject1 : exprIsObject2; +>x.doSomeThing() ? exprIsObject1 : exprIsObject2 : Object +>x.doSomeThing() : any +>x.doSomeThing : any +>x : any +>doSomeThing : any +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Results shoud be same as Expr1 and Expr2 +var resultIsAny1 = condAny ? exprAny1 : exprAny2; +>resultIsAny1 : any +>condAny ? exprAny1 : exprAny2 : any +>condAny : any +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean1 = condAny ? exprBoolean1 : exprBoolean2; +>resultIsBoolean1 : boolean +>condAny ? exprBoolean1 : exprBoolean2 : boolean +>condAny : any +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber1 = condAny ? exprNumber1 : exprNumber2; +>resultIsNumber1 : number +>condAny ? exprNumber1 : exprNumber2 : number +>condAny : any +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString1 = condAny ? exprString1 : exprString2; +>resultIsString1 : string +>condAny ? exprString1 : exprString2 : string +>condAny : any +>exprString1 : string +>exprString2 : string + +var resultIsObject1 = condAny ? exprIsObject1 : exprIsObject2; +>resultIsObject1 : Object +>condAny ? exprIsObject1 : exprIsObject2 : Object +>condAny : any +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny2 = null ? exprAny1 : exprAny2; +>resultIsAny2 : any +>null ? exprAny1 : exprAny2 : any +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean2 = null ? exprBoolean1 : exprBoolean2; +>resultIsBoolean2 : boolean +>null ? exprBoolean1 : exprBoolean2 : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber2 = undefined ? exprNumber1 : exprNumber2; +>resultIsNumber2 : number +>undefined ? exprNumber1 : exprNumber2 : number +>undefined : undefined +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString2 = [null, undefined] ? exprString1 : exprString2; +>resultIsString2 : string +>[null, undefined] ? exprString1 : exprString2 : string +>[null, undefined] : null[] +>undefined : undefined +>exprString1 : string +>exprString2 : string + +var resultIsObject2 = [null, undefined] ? exprIsObject1 : exprIsObject2; +>resultIsObject2 : Object +>[null, undefined] ? exprIsObject1 : exprIsObject2 : Object +>[null, undefined] : null[] +>undefined : undefined +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny3 = x.doSomeThing() ? exprAny1 : exprAny2; +>resultIsAny3 : any +>x.doSomeThing() ? exprAny1 : exprAny2 : any +>x.doSomeThing() : any +>x.doSomeThing : any +>x : any +>doSomeThing : any +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean3 = x("x") ? exprBoolean1 : exprBoolean2; +>resultIsBoolean3 : boolean +>x("x") ? exprBoolean1 : exprBoolean2 : boolean +>x("x") : any +>x : any +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber3 = x(x) ? exprNumber1 : exprNumber2; +>resultIsNumber3 : number +>x(x) ? exprNumber1 : exprNumber2 : number +>x(x) : any +>x : any +>x : any +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString3 = x("x") ? exprString1 : exprString2; +>resultIsString3 : string +>x("x") ? exprString1 : exprString2 : string +>x("x") : any +>x : any +>exprString1 : string +>exprString2 : string + +var resultIsObject3 = x.doSomeThing() ? exprIsObject1 : exprIsObject2; +>resultIsObject3 : Object +>x.doSomeThing() ? exprIsObject1 : exprIsObject2 : Object +>x.doSomeThing() : any +>x.doSomeThing : any +>x : any +>doSomeThing : any +>exprIsObject1 : Object +>exprIsObject2 : Object + diff --git a/tests/baselines/reference/conditionalOperatorConditoinIsStringType.js b/tests/baselines/reference/conditionalOperatorConditoinIsStringType.js index 048787d6061..4bd67a40640 100644 --- a/tests/baselines/reference/conditionalOperatorConditoinIsStringType.js +++ b/tests/baselines/reference/conditionalOperatorConditoinIsStringType.js @@ -59,6 +59,7 @@ var resultIsObject3 = array[1] ? exprIsObject1 : exprIsObject2; //// [conditionalOperatorConditoinIsStringType.js] +//Cond ? Expr1 : Expr2, Cond is of string type, Expr1 and Expr2 have the same type var condString; var exprAny1; var exprBoolean1; @@ -70,16 +71,19 @@ var exprBoolean2; var exprNumber2; var exprString2; var exprIsObject2; +//Cond is a string type variable condString ? exprAny1 : exprAny2; condString ? exprBoolean1 : exprBoolean2; condString ? exprNumber1 : exprNumber2; condString ? exprString1 : exprString2; condString ? exprIsObject1 : exprIsObject2; +//Cond is a string type literal "" ? exprAny1 : exprAny2; "string" ? exprBoolean1 : exprBoolean2; 'c' ? exprNumber1 : exprNumber2; 'string' ? exprString1 : exprString2; " " ? exprIsObject1 : exprIsObject2; +//Cond is a string type expression function foo() { return "string"; } @@ -90,6 +94,7 @@ condString.toUpperCase ? exprBoolean1 : exprBoolean2; condString + "string" ? exprNumber1 : exprNumber2; foo() ? exprString1 : exprString2; array[1] ? exprIsObject1 : exprIsObject2; +//Results shoud be same as Expr1 and Expr2 var resultIsAny1 = condString ? exprAny1 : exprAny2; var resultIsBoolean1 = condString ? exprBoolean1 : exprBoolean2; var resultIsNumber1 = condString ? exprNumber1 : exprNumber2; diff --git a/tests/baselines/reference/conditionalOperatorConditoinIsStringType.types b/tests/baselines/reference/conditionalOperatorConditoinIsStringType.types new file mode 100644 index 00000000000..668e0fc437c --- /dev/null +++ b/tests/baselines/reference/conditionalOperatorConditoinIsStringType.types @@ -0,0 +1,245 @@ +=== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditoinIsStringType.ts === +//Cond ? Expr1 : Expr2, Cond is of string type, Expr1 and Expr2 have the same type +var condString: string; +>condString : string + +var exprAny1: any; +>exprAny1 : any + +var exprBoolean1: boolean; +>exprBoolean1 : boolean + +var exprNumber1: number; +>exprNumber1 : number + +var exprString1: string; +>exprString1 : string + +var exprIsObject1: Object; +>exprIsObject1 : Object +>Object : Object + +var exprAny2: any; +>exprAny2 : any + +var exprBoolean2: boolean; +>exprBoolean2 : boolean + +var exprNumber2: number; +>exprNumber2 : number + +var exprString2: string; +>exprString2 : string + +var exprIsObject2: Object; +>exprIsObject2 : Object +>Object : Object + +//Cond is a string type variable +condString ? exprAny1 : exprAny2; +>condString ? exprAny1 : exprAny2 : any +>condString : string +>exprAny1 : any +>exprAny2 : any + +condString ? exprBoolean1 : exprBoolean2; +>condString ? exprBoolean1 : exprBoolean2 : boolean +>condString : string +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +condString ? exprNumber1 : exprNumber2; +>condString ? exprNumber1 : exprNumber2 : number +>condString : string +>exprNumber1 : number +>exprNumber2 : number + +condString ? exprString1 : exprString2; +>condString ? exprString1 : exprString2 : string +>condString : string +>exprString1 : string +>exprString2 : string + +condString ? exprIsObject1 : exprIsObject2; +>condString ? exprIsObject1 : exprIsObject2 : Object +>condString : string +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is a string type literal +"" ? exprAny1 : exprAny2; +>"" ? exprAny1 : exprAny2 : any +>exprAny1 : any +>exprAny2 : any + +"string" ? exprBoolean1 : exprBoolean2; +>"string" ? exprBoolean1 : exprBoolean2 : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +'c' ? exprNumber1 : exprNumber2; +>'c' ? exprNumber1 : exprNumber2 : number +>exprNumber1 : number +>exprNumber2 : number + +'string' ? exprString1 : exprString2; +>'string' ? exprString1 : exprString2 : string +>exprString1 : string +>exprString2 : string + +" " ? exprIsObject1 : exprIsObject2; +>" " ? exprIsObject1 : exprIsObject2 : Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Cond is a string type expression +function foo() { return "string" }; +>foo : () => string + +var array = ["1", "2", "3"]; +>array : string[] +>["1", "2", "3"] : string[] + +typeof condString ? exprAny1 : exprAny2; +>typeof condString ? exprAny1 : exprAny2 : any +>typeof condString : string +>condString : string +>exprAny1 : any +>exprAny2 : any + +condString.toUpperCase ? exprBoolean1 : exprBoolean2; +>condString.toUpperCase ? exprBoolean1 : exprBoolean2 : boolean +>condString.toUpperCase : () => string +>condString : string +>toUpperCase : () => string +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +condString + "string" ? exprNumber1 : exprNumber2; +>condString + "string" ? exprNumber1 : exprNumber2 : number +>condString + "string" : string +>condString : string +>exprNumber1 : number +>exprNumber2 : number + +foo() ? exprString1 : exprString2; +>foo() ? exprString1 : exprString2 : string +>foo() : string +>foo : () => string +>exprString1 : string +>exprString2 : string + +array[1] ? exprIsObject1 : exprIsObject2; +>array[1] ? exprIsObject1 : exprIsObject2 : Object +>array[1] : string +>array : string[] +>exprIsObject1 : Object +>exprIsObject2 : Object + +//Results shoud be same as Expr1 and Expr2 +var resultIsAny1 = condString ? exprAny1 : exprAny2; +>resultIsAny1 : any +>condString ? exprAny1 : exprAny2 : any +>condString : string +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean1 = condString ? exprBoolean1 : exprBoolean2; +>resultIsBoolean1 : boolean +>condString ? exprBoolean1 : exprBoolean2 : boolean +>condString : string +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber1 = condString ? exprNumber1 : exprNumber2; +>resultIsNumber1 : number +>condString ? exprNumber1 : exprNumber2 : number +>condString : string +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString1 = condString ? exprString1 : exprString2; +>resultIsString1 : string +>condString ? exprString1 : exprString2 : string +>condString : string +>exprString1 : string +>exprString2 : string + +var resultIsObject1 = condString ? exprIsObject1 : exprIsObject2; +>resultIsObject1 : Object +>condString ? exprIsObject1 : exprIsObject2 : Object +>condString : string +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny2 = "" ? exprAny1 : exprAny2; +>resultIsAny2 : any +>"" ? exprAny1 : exprAny2 : any +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean2 = "string" ? exprBoolean1 : exprBoolean2; +>resultIsBoolean2 : boolean +>"string" ? exprBoolean1 : exprBoolean2 : boolean +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber2 = 'c' ? exprNumber1 : exprNumber2; +>resultIsNumber2 : number +>'c' ? exprNumber1 : exprNumber2 : number +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString2 = 'string' ? exprString1 : exprString2; +>resultIsString2 : string +>'string' ? exprString1 : exprString2 : string +>exprString1 : string +>exprString2 : string + +var resultIsObject2 = " " ? exprIsObject1 : exprIsObject2; +>resultIsObject2 : Object +>" " ? exprIsObject1 : exprIsObject2 : Object +>exprIsObject1 : Object +>exprIsObject2 : Object + +var resultIsAny3 = typeof condString ? exprAny1 : exprAny2; +>resultIsAny3 : any +>typeof condString ? exprAny1 : exprAny2 : any +>typeof condString : string +>condString : string +>exprAny1 : any +>exprAny2 : any + +var resultIsBoolean3 = condString.toUpperCase ? exprBoolean1 : exprBoolean2; +>resultIsBoolean3 : boolean +>condString.toUpperCase ? exprBoolean1 : exprBoolean2 : boolean +>condString.toUpperCase : () => string +>condString : string +>toUpperCase : () => string +>exprBoolean1 : boolean +>exprBoolean2 : boolean + +var resultIsNumber3 = condString + "string" ? exprNumber1 : exprNumber2; +>resultIsNumber3 : number +>condString + "string" ? exprNumber1 : exprNumber2 : number +>condString + "string" : string +>condString : string +>exprNumber1 : number +>exprNumber2 : number + +var resultIsString3 = foo() ? exprString1 : exprString2; +>resultIsString3 : string +>foo() ? exprString1 : exprString2 : string +>foo() : string +>foo : () => string +>exprString1 : string +>exprString2 : string + +var resultIsObject3 = array[1] ? exprIsObject1 : exprIsObject2; +>resultIsObject3 : Object +>array[1] ? exprIsObject1 : exprIsObject2 : Object +>array[1] : string +>array : string[] +>exprIsObject1 : Object +>exprIsObject2 : Object + diff --git a/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.js b/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.js index f7c6b97c0bb..722310815ae 100644 --- a/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.js +++ b/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.js @@ -54,6 +54,7 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; +//Cond ? Expr1 : Expr2, Expr1 and Expr2 have identical best common type var X = (function () { function X() { } @@ -79,22 +80,33 @@ var B = (function (_super) { var x; var a; var b; +//Cond ? Expr1 : Expr2, Expr1 is supertype +//Be Not contextually typed true ? x : a; var result1 = true ? x : a; +//Expr1 and Expr2 are literals true ? {} : 1; true ? { a: 1 } : { a: 2, b: 'string' }; var result2 = true ? {} : 1; var result3 = true ? { a: 1 } : { a: 2, b: 'string' }; +//Contextually typed var resultIsX1 = true ? x : a; var result4 = true ? function (m) { return m.propertyX; } : function (n) { return n.propertyA; }; +//Cond ? Expr1 : Expr2, Expr2 is supertype +//Be Not contextually typed true ? a : x; var result5 = true ? a : x; +//Expr1 and Expr2 are literals true ? 1 : {}; true ? { a: 2, b: 'string' } : { a: 1 }; var result6 = true ? 1 : {}; var result7 = true ? { a: 2, b: 'string' } : { a: 1 }; +//Contextually typed var resultIsX2 = true ? x : a; var result8 = true ? function (m) { return m.propertyA; } : function (n) { return n.propertyX; }; +//Result = Cond ? Expr1 : Expr2, Result is supertype +//Contextually typed var resultIsX3 = true ? a : b; var result10 = true ? function (m) { return m.propertyX1; } : function (n) { return n.propertyX2; }; +//Expr1 and Expr2 are literals var result11 = true ? 1 : 'string'; diff --git a/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types b/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types new file mode 100644 index 00000000000..8ad918936d2 --- /dev/null +++ b/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types @@ -0,0 +1,188 @@ +=== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorWithIdenticalBCT.ts === +//Cond ? Expr1 : Expr2, Expr1 and Expr2 have identical best common type +class X { propertyX: any; propertyX1: number; propertyX2: string }; +>X : X +>propertyX : any +>propertyX1 : number +>propertyX2 : string + +class A extends X { propertyA: number }; +>A : A +>X : X +>propertyA : number + +class B extends X { propertyB: string }; +>B : B +>X : X +>propertyB : string + +var x: X; +>x : X +>X : X + +var a: A; +>a : A +>A : A + +var b: B; +>b : B +>B : B + +//Cond ? Expr1 : Expr2, Expr1 is supertype +//Be Not contextually typed +true ? x : a; +>true ? x : a : X +>x : X +>a : A + +var result1 = true ? x : a; +>result1 : X +>true ? x : a : X +>x : X +>a : A + +//Expr1 and Expr2 are literals +true ? {} : 1; +>true ? {} : 1 : {} +>{} : {} + +true ? { a: 1 } : { a: 2, b: 'string' }; +>true ? { a: 1 } : { a: 2, b: 'string' } : { a: number; } +>{ a: 1 } : { a: number; } +>a : number +>{ a: 2, b: 'string' } : { a: number; b: string; } +>a : number +>b : string + +var result2 = true ? {} : 1; +>result2 : {} +>true ? {} : 1 : {} +>{} : {} + +var result3 = true ? { a: 1 } : { a: 2, b: 'string' }; +>result3 : { a: number; } +>true ? { a: 1 } : { a: 2, b: 'string' } : { a: number; } +>{ a: 1 } : { a: number; } +>a : number +>{ a: 2, b: 'string' } : { a: number; b: string; } +>a : number +>b : string + +//Contextually typed +var resultIsX1: X = true ? x : a; +>resultIsX1 : X +>X : X +>true ? x : a : X +>x : X +>a : A + +var result4: (t: A) => any = true ? (m) => m.propertyX : (n) => n.propertyA; +>result4 : (t: A) => any +>t : A +>A : A +>true ? (m) => m.propertyX : (n) => n.propertyA : (t: A) => any +>(m) => m.propertyX : (m: A) => any +>m : A +>m.propertyX : any +>m : A +>propertyX : any +>(n) => n.propertyA : (n: A) => number +>n : A +>n.propertyA : number +>n : A +>propertyA : number + +//Cond ? Expr1 : Expr2, Expr2 is supertype +//Be Not contextually typed +true ? a : x; +>true ? a : x : X +>a : A +>x : X + +var result5 = true ? a : x; +>result5 : X +>true ? a : x : X +>a : A +>x : X + +//Expr1 and Expr2 are literals +true ? 1 : {}; +>true ? 1 : {} : {} +>{} : {} + +true ? { a: 2, b: 'string' } : { a: 1 }; +>true ? { a: 2, b: 'string' } : { a: 1 } : { a: number; } +>{ a: 2, b: 'string' } : { a: number; b: string; } +>a : number +>b : string +>{ a: 1 } : { a: number; } +>a : number + +var result6 = true ? 1 : {}; +>result6 : {} +>true ? 1 : {} : {} +>{} : {} + +var result7 = true ? { a: 2, b: 'string' } : { a: 1 }; +>result7 : { a: number; } +>true ? { a: 2, b: 'string' } : { a: 1 } : { a: number; } +>{ a: 2, b: 'string' } : { a: number; b: string; } +>a : number +>b : string +>{ a: 1 } : { a: number; } +>a : number + +//Contextually typed +var resultIsX2: X = true ? x : a; +>resultIsX2 : X +>X : X +>true ? x : a : X +>x : X +>a : A + +var result8: (t: A) => any = true ? (m) => m.propertyA : (n) => n.propertyX; +>result8 : (t: A) => any +>t : A +>A : A +>true ? (m) => m.propertyA : (n) => n.propertyX : (t: A) => any +>(m) => m.propertyA : (m: A) => number +>m : A +>m.propertyA : number +>m : A +>propertyA : number +>(n) => n.propertyX : (n: A) => any +>n : A +>n.propertyX : any +>n : A +>propertyX : any + +//Result = Cond ? Expr1 : Expr2, Result is supertype +//Contextually typed +var resultIsX3: X = true ? a : b; +>resultIsX3 : X +>X : X +>true ? a : b : X +>a : A +>b : B + +var result10: (t: X) => any = true ? (m) => m.propertyX1 : (n) => n.propertyX2; +>result10 : (t: X) => any +>t : X +>X : X +>true ? (m) => m.propertyX1 : (n) => n.propertyX2 : (t: X) => any +>(m) => m.propertyX1 : (m: X) => number +>m : X +>m.propertyX1 : number +>m : X +>propertyX1 : number +>(n) => n.propertyX2 : (n: X) => string +>n : X +>n.propertyX2 : string +>n : X +>propertyX2 : string + +//Expr1 and Expr2 are literals +var result11: any = true ? 1 : 'string'; +>result11 : any +>true ? 1 : 'string' : any + diff --git a/tests/baselines/reference/conditionalOperatorWithoutIdenticalBCT.js b/tests/baselines/reference/conditionalOperatorWithoutIdenticalBCT.js index d96b5ec9d1e..90125d4ebf6 100644 --- a/tests/baselines/reference/conditionalOperatorWithoutIdenticalBCT.js +++ b/tests/baselines/reference/conditionalOperatorWithoutIdenticalBCT.js @@ -28,6 +28,7 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; +//Cond ? Expr1 : Expr2, Expr1 and Expr2 have no identical best common type var X = (function () { function X() { } @@ -53,8 +54,11 @@ var B = (function (_super) { var x; var a; var b; +//Expect to have compiler errors +//Be not contextually typed true ? a : b; var result1 = true ? a : b; +//Be contextually typed and and bct is not identical var result2 = true ? a : b; var result3 = true ? a : b; var result4 = true ? function (m) { return m.propertyX1; } : function (n) { return n.propertyX2; }; diff --git a/tests/baselines/reference/conditionallyDuplicateOverloadsCausedByOverloadResolution.types b/tests/baselines/reference/conditionallyDuplicateOverloadsCausedByOverloadResolution.types new file mode 100644 index 00000000000..41981e19b8e --- /dev/null +++ b/tests/baselines/reference/conditionallyDuplicateOverloadsCausedByOverloadResolution.types @@ -0,0 +1,75 @@ +=== tests/cases/compiler/conditionallyDuplicateOverloadsCausedByOverloadResolution.ts === +declare function foo(func: (x: string, y: string) => any): boolean; +>foo : { (func: (x: string, y: string) => any): boolean; (func: (x: string, y: number) => any): string; } +>func : (x: string, y: string) => any +>x : string +>y : string + +declare function foo(func: (x: string, y: number) => any): string; +>foo : { (func: (x: string, y: string) => any): boolean; (func: (x: string, y: number) => any): string; } +>func : (x: string, y: number) => any +>x : string +>y : number + +var out = foo((x, y) => { +>out : boolean +>foo((x, y) => { function bar(a: typeof x): void; function bar(b: typeof y): void; function bar() { } return bar;}) : boolean +>foo : { (func: (x: string, y: string) => any): boolean; (func: (x: string, y: number) => any): string; } +>(x, y) => { function bar(a: typeof x): void; function bar(b: typeof y): void; function bar() { } return bar;} : (x: string, y: string) => { (a: string): void; (b: string): void; } +>x : string +>y : string + + function bar(a: typeof x): void; +>bar : { (a: string): void; (b: string): void; } +>a : string +>x : string + + function bar(b: typeof y): void; +>bar : { (a: string): void; (b: string): void; } +>b : string +>y : string + + function bar() { } +>bar : { (a: string): void; (b: string): void; } + + return bar; +>bar : { (a: string): void; (b: string): void; } + +}); + +declare function foo2(func: (x: string, y: string) => any): boolean; +>foo2 : { (func: (x: string, y: string) => any): boolean; (func: (x: string, y: number) => any): string; } +>func : (x: string, y: string) => any +>x : string +>y : string + +declare function foo2(func: (x: string, y: number) => any): string; +>foo2 : { (func: (x: string, y: string) => any): boolean; (func: (x: string, y: number) => any): string; } +>func : (x: string, y: number) => any +>x : string +>y : number + +var out2 = foo2((x, y) => { +>out2 : boolean +>foo2((x, y) => { var bar: { (a: typeof x): void; (b: typeof y): void; }; return bar;}) : boolean +>foo2 : { (func: (x: string, y: string) => any): boolean; (func: (x: string, y: number) => any): string; } +>(x, y) => { var bar: { (a: typeof x): void; (b: typeof y): void; }; return bar;} : (x: string, y: string) => { (a: string): void; (b: string): void; } +>x : string +>y : string + + var bar: { +>bar : { (a: string): void; (b: string): void; } + + (a: typeof x): void; +>a : string +>x : string + + (b: typeof y): void; +>b : string +>y : string + + }; + return bar; +>bar : { (a: string): void; (b: string): void; } + +}); diff --git a/tests/baselines/reference/conformanceFunctionOverloads.js b/tests/baselines/reference/conformanceFunctionOverloads.js index 021dc73f3ff..15dec719e40 100644 --- a/tests/baselines/reference/conformanceFunctionOverloads.js +++ b/tests/baselines/reference/conformanceFunctionOverloads.js @@ -24,3 +24,4 @@ //// [conformanceFunctionOverloads.js] +// Function overloads do not emit code diff --git a/tests/baselines/reference/conformanceFunctionOverloads.types b/tests/baselines/reference/conformanceFunctionOverloads.types new file mode 100644 index 00000000000..a80814ea93e --- /dev/null +++ b/tests/baselines/reference/conformanceFunctionOverloads.types @@ -0,0 +1,25 @@ +=== tests/cases/conformance/functions/conformanceFunctionOverloads.ts === +// Function overloads do not emit code +No type information for this code. +No type information for this code.// Function overload signature with optional parameter +No type information for this code. +No type information for this code.// Function overload signature with optional parameter +No type information for this code. +No type information for this code.// Function overloads with generic and non-generic overloads +No type information for this code. +No type information for this code.// Function overloads whose only difference is returning different unconstrained generic parameters +No type information for this code. +No type information for this code.// Function overloads whose only difference is returning different constrained generic parameters +No type information for this code. +No type information for this code.// Function overloads that differ only by type parameter constraints +No type information for this code. +No type information for this code.// Function overloads with matching accessibility +No type information for this code. +No type information for this code.// Function overloads with matching export +No type information for this code. +No type information for this code.// Function overloads with more params than implementation signature +No type information for this code. +No type information for this code.// Function overloads where return types are same infinitely recursive type reference +No type information for this code. +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/constantOverloadFunction.types b/tests/baselines/reference/constantOverloadFunction.types new file mode 100644 index 00000000000..1e74486cb32 --- /dev/null +++ b/tests/baselines/reference/constantOverloadFunction.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/constantOverloadFunction.ts === +class Base { foo() { } } +>Base : Base +>foo : () => void + +class Derived1 extends Base { bar() { } } +>Derived1 : Derived1 +>Base : Base +>bar : () => void + +class Derived2 extends Base { baz() { } } +>Derived2 : Derived2 +>Base : Base +>baz : () => void + +class Derived3 extends Base { biz() { } } +>Derived3 : Derived3 +>Base : Base +>biz : () => void + +function foo(tagName: 'canvas'): Derived1; +>foo : { (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; (tagName: string): Base; } +>tagName : 'canvas' +>Derived1 : Derived1 + +function foo(tagName: 'div'): Derived2; +>foo : { (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; (tagName: string): Base; } +>tagName : 'div' +>Derived2 : Derived2 + +function foo(tagName: 'span'): Derived3; +>foo : { (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; (tagName: string): Base; } +>tagName : 'span' +>Derived3 : Derived3 + +function foo(tagName: string): Base; +>foo : { (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; (tagName: string): Base; } +>tagName : string +>Base : Base + +function foo(tagName: any): Base { +>foo : { (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; (tagName: string): Base; } +>tagName : any +>Base : Base + + return null; +} + diff --git a/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.js b/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.js index 71f885cb803..3d99e07bb5e 100644 --- a/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.js +++ b/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.js @@ -26,6 +26,7 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; +// No errors var Constraint = (function () { function Constraint() { } diff --git a/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types b/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types new file mode 100644 index 00000000000..1d94a5e464c --- /dev/null +++ b/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/constraintCheckInGenericBaseTypeReference.ts === +// No errors +class Constraint { +>Constraint : Constraint + + public method() { } +>method : () => void +} +class GenericBase { +>GenericBase : GenericBase +>T : T +>Constraint : Constraint + + public items: any; +>items : any +} +class Derived extends GenericBase { +>Derived : Derived +>GenericBase : GenericBase +>TypeArg : TypeArg + +} +class TypeArg { +>TypeArg : TypeArg + + public method() { +>method : () => void + + Container.People.items; +>Container.People.items : any +>Container.People : Derived +>Container : typeof Container +>People : Derived +>items : any + } +} + +class Container { +>Container : Container + + public static People: Derived +>People : Derived +>Derived : Derived +} diff --git a/tests/baselines/reference/constraintPropagationThroughReturnTypes.types b/tests/baselines/reference/constraintPropagationThroughReturnTypes.types new file mode 100644 index 00000000000..6f56cca28cc --- /dev/null +++ b/tests/baselines/reference/constraintPropagationThroughReturnTypes.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/constraintPropagationThroughReturnTypes.ts === +function g(x: T): T { +>g : (x: T) => T +>T : T +>x : T +>T : T +>T : T + + return x; +>x : T +} + +function f(x: S) { +>f : (x: S) => void +>S : S +>foo : string +>x : S +>S : S + + var y = g(x); +>y : S +>g(x) : S +>g : (x: T) => T +>x : S + + y; +>y : S +} + diff --git a/tests/baselines/reference/constraintReferencingTypeParameterFromSameTypeParameterList.js b/tests/baselines/reference/constraintReferencingTypeParameterFromSameTypeParameterList.js index 3eaeba7ae83..acabb71b7ab 100644 --- a/tests/baselines/reference/constraintReferencingTypeParameterFromSameTypeParameterList.js +++ b/tests/baselines/reference/constraintReferencingTypeParameterFromSameTypeParameterList.js @@ -25,6 +25,7 @@ function foo(v: V) => void>() { //// [constraintReferencingTypeParameterFromSameTypeParameterList.js] +// used to be valid, now an error to do this function f() { } function foo() { diff --git a/tests/baselines/reference/constraintSatisfactionWithAny.js b/tests/baselines/reference/constraintSatisfactionWithAny.js index 2de3a3dd250..924c2ab1700 100644 --- a/tests/baselines/reference/constraintSatisfactionWithAny.js +++ b/tests/baselines/reference/constraintSatisfactionWithAny.js @@ -53,23 +53,30 @@ var c8 = new C4(b); //// [constraintSatisfactionWithAny.js] +// any is not a valid type argument unless there is no constraint, or the constraint is any function foo(x) { return null; } function foo2(x) { return null; } +//function foo3(x: T): T { return null; } function foo4(x) { return null; } var a; foo(a); foo2(a); +//foo3(a); foo4(a); var b; foo(b); foo2(b); +//foo3(b); foo4(b); +//function foo5(x: T, y: U): T { return null; } +//foo5(a, a); +//foo5(b, b); var C = (function () { function C(x) { this.x = x; @@ -86,6 +93,11 @@ var C2 = (function () { })(); var c3 = new C2(a); var c4 = new C2(b); +//class C3 { +// constructor(public x: T) { } +//} +//var c5 = new C3(a); +//var c6 = new C3(b); var C4 = (function () { function C4(x) { this.x = x; diff --git a/tests/baselines/reference/constraintSatisfactionWithAny.types b/tests/baselines/reference/constraintSatisfactionWithAny.types new file mode 100644 index 00000000000..e007d3cec73 --- /dev/null +++ b/tests/baselines/reference/constraintSatisfactionWithAny.types @@ -0,0 +1,150 @@ +=== tests/cases/conformance/types/typeParameters/typeArgumentLists/constraintSatisfactionWithAny.ts === +// any is not a valid type argument unless there is no constraint, or the constraint is any + +function foo(x: T): T { return null; } +>foo : (x: T) => T +>T : T +>String : String +>x : T +>T : T +>T : T + +function foo2(x: T): T { return null; } +>foo2 : (x: T) => T +>T : T +>x : number +>x : T +>T : T +>T : T + +//function foo3(x: T): T { return null; } +function foo4(x: T) => void>(x: T): T { return null; } +>foo4 : (x: T) => void>(x: T) => T +>T : T +>T : T +>x : T +>T : T +>x : T +>T : T +>T : T + +var a; +>a : any + +foo(a); +>foo(a) : any +>foo : (x: T) => T +>a : any + +foo2(a); +>foo2(a) : any +>foo2 : (x: T) => T +>a : any + +//foo3(a); +foo4(a); +>foo4(a) : any +>foo4 : (x: T) => void>(x: T) => T +>a : any + +var b: number; +>b : number + +foo(b); +>foo(b) : any +>foo : (x: T) => T +>b : number + +foo2(b); +>foo2(b) : any +>foo2 : (x: T) => T +>b : number + +//foo3(b); +foo4(b); +>foo4(b) : any +>foo4 : (x: T) => void>(x: T) => T +>b : number + +//function foo5(x: T, y: U): T { return null; } +//foo5(a, a); +//foo5(b, b); + +class C { +>C : C +>T : T +>String : String + + constructor(public x: T) { } +>x : T +>T : T +} + +var c1 = new C(a); +>c1 : C +>new C(a) : C +>C : typeof C +>a : any + +var c2 = new C(b); +>c2 : C +>new C(b) : C +>C : typeof C +>b : number + +class C2 { +>C2 : C2 +>T : T +>x : number + + constructor(public x: T) { } +>x : T +>T : T +} + +var c3 = new C2(a); +>c3 : C2 +>new C2(a) : C2 +>C2 : typeof C2 +>a : any + +var c4 = new C2(b); +>c4 : C2 +>new C2(b) : C2 +>C2 : typeof C2 +>b : number + +//class C3 { +// constructor(public x: T) { } +//} + +//var c5 = new C3(a); +//var c6 = new C3(b); + +class C4(x:T) => T> { +>C4 : C4 +>T : T +>T : T +>x : T +>T : T +>T : T + + constructor(public x: T) { } +>x : T +>T : T +} + +var c7 = new C4(a); +>c7 : C4 +>new C4(a) : C4 +>C4 : typeof C4 +>a : any + +var c8 = new C4(b); +>c8 : C4 +>new C4(b) : C4 +>C4 : typeof C4 +>b : number + + + diff --git a/tests/baselines/reference/constraintSatisfactionWithAny2.js b/tests/baselines/reference/constraintSatisfactionWithAny2.js index cb59e5edd05..5d3e0f2d791 100644 --- a/tests/baselines/reference/constraintSatisfactionWithAny2.js +++ b/tests/baselines/reference/constraintSatisfactionWithAny2.js @@ -9,6 +9,8 @@ foo(a); foo(a); //// [constraintSatisfactionWithAny2.js] +// errors expected for type parameter cannot be referenced in the constraints of the same list +// any is not a valid type argument unless there is no constraint, or the constraint is any var a; foo(a); foo(a); diff --git a/tests/baselines/reference/constraintSatisfactionWithEmptyObject.js b/tests/baselines/reference/constraintSatisfactionWithEmptyObject.js index baa4c7f29cc..5f9e902141b 100644 --- a/tests/baselines/reference/constraintSatisfactionWithEmptyObject.js +++ b/tests/baselines/reference/constraintSatisfactionWithEmptyObject.js @@ -38,6 +38,8 @@ var i2: I2<{}>; //// [constraintSatisfactionWithEmptyObject.js] +// valid uses of a basic object constraint, no errors expected +// Object constraint function foo(x) { } var r = foo({}); @@ -51,6 +53,7 @@ var C = (function () { })(); var r2 = new C({}); var i; +// {} constraint function foo2(x) { } var r = foo2({}); diff --git a/tests/baselines/reference/constraintSatisfactionWithEmptyObject.types b/tests/baselines/reference/constraintSatisfactionWithEmptyObject.types new file mode 100644 index 00000000000..113736bdd11 --- /dev/null +++ b/tests/baselines/reference/constraintSatisfactionWithEmptyObject.types @@ -0,0 +1,107 @@ +=== tests/cases/conformance/types/typeParameters/typeArgumentLists/constraintSatisfactionWithEmptyObject.ts === +// valid uses of a basic object constraint, no errors expected + +// Object constraint +function foo(x: T) { } +>foo : (x: T) => void +>T : T +>Object : Object +>x : T +>T : T + +var r = foo({}); +>r : void +>foo({}) : void +>foo : (x: T) => void +>{} : {} + +var a = {}; +>a : {} +>{} : {} + +var r = foo({}); +>r : void +>foo({}) : void +>foo : (x: T) => void +>{} : {} + +class C { +>C : C +>T : T +>Object : Object + + constructor(public x: T) { } +>x : T +>T : T +} + +var r2 = new C({}); +>r2 : C<{}> +>new C({}) : C<{}> +>C : typeof C +>{} : {} + +interface I { +>I : I +>T : T +>Object : Object + + x: T; +>x : T +>T : T +} +var i: I<{}>; +>i : I<{}> +>I : I + +// {} constraint +function foo2(x: T) { } +>foo2 : (x: T) => void +>T : T +>x : T +>T : T + +var r = foo2({}); +>r : void +>foo2({}) : void +>foo2 : (x: T) => void +>{} : {} + +var a = {}; +>a : {} +>{} : {} + +var r = foo2({}); +>r : void +>foo2({}) : void +>foo2 : (x: T) => void +>{} : {} + +class C2 { +>C2 : C2 +>T : T + + constructor(public x: T) { } +>x : T +>T : T +} + +var r2 = new C2({}); +>r2 : C<{}> +>new C2({}) : C2<{}> +>C2 : typeof C2 +>{} : {} + +interface I2 { +>I2 : I2 +>T : T + + x: T; +>x : T +>T : T +} +var i2: I2<{}>; +>i2 : I2<{}> +>I2 : I2 + + diff --git a/tests/baselines/reference/constraints0.js b/tests/baselines/reference/constraints0.js index 17a71a92259..d648eb0a31c 100644 --- a/tests/baselines/reference/constraints0.js +++ b/tests/baselines/reference/constraints0.js @@ -17,6 +17,6 @@ var v2: C; // should not work var y = v1.x.a; // 'a' should be of type 'number' //// [constraints0.js] -var v1; -var v2; -var y = v1.x.a; +var v1; // should work +var v2; // should not work +var y = v1.x.a; // 'a' should be of type 'number' diff --git a/tests/baselines/reference/constraintsThatReferenceOtherContstraints1.js b/tests/baselines/reference/constraintsThatReferenceOtherContstraints1.js index 61b6717966b..f137ac6baa0 100644 --- a/tests/baselines/reference/constraintsThatReferenceOtherContstraints1.js +++ b/tests/baselines/reference/constraintsThatReferenceOtherContstraints1.js @@ -20,4 +20,4 @@ var Bar = (function () { } return Bar; })(); -var x; +var x; // Error 2 Type '{ a: string; b: number; }' does not satisfy the constraint 'T' for type diff --git a/tests/baselines/reference/constraintsUsedInPrototypeProperty.js b/tests/baselines/reference/constraintsUsedInPrototypeProperty.js index fc5bae9a3d9..7f055e519c3 100644 --- a/tests/baselines/reference/constraintsUsedInPrototypeProperty.js +++ b/tests/baselines/reference/constraintsUsedInPrototypeProperty.js @@ -8,4 +8,4 @@ var Foo = (function () { } return Foo; })(); -Foo.prototype; +Foo.prototype; // Foo diff --git a/tests/baselines/reference/constraintsUsedInPrototypeProperty.types b/tests/baselines/reference/constraintsUsedInPrototypeProperty.types new file mode 100644 index 00000000000..a92b69a3392 --- /dev/null +++ b/tests/baselines/reference/constraintsUsedInPrototypeProperty.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/constraintsUsedInPrototypeProperty.ts === +class Foo { } +>Foo : Foo +>T : T +>U : U +>V : V + +Foo.prototype; // Foo +>Foo.prototype : Foo +>Foo : typeof Foo +>prototype : Foo + diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance.js b/tests/baselines/reference/constructSignatureAssignabilityInInheritance.js index ba7d4d0deac..066a20ac9b3 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance.js +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance.js @@ -72,6 +72,7 @@ module MemberWithConstructSignature { } //// [constructSignatureAssignabilityInInheritance.js] +// Checking basic subtype relations with construct signatures var MemberWithConstructSignature; (function (MemberWithConstructSignature) { var b; diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.js b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.js index 89eab63f934..3cc7bddd1d0 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.js +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.js @@ -70,6 +70,7 @@ interface I extends A { } //// [constructSignatureAssignabilityInInheritance2.js] +// checking subtype relations for function types as it relates to contextual signature instantiation var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types new file mode 100644 index 00000000000..7ab221024ca --- /dev/null +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types @@ -0,0 +1,398 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance2.ts === +// checking subtype relations for function types as it relates to contextual signature instantiation + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { // T +>A : A + + // M's + a: new (x: number) => number[]; +>a : new (x: number) => number[] +>x : number + + a2: new (x: number) => string[]; +>a2 : new (x: number) => string[] +>x : number + + a3: new (x: number) => void; +>a3 : new (x: number) => void +>x : number + + a4: new (x: string, y: number) => string; +>a4 : new (x: string, y: number) => string +>x : string +>y : number + + a5: new (x: (arg: string) => number) => string; +>a5 : new (x: (arg: string) => number) => string +>x : (arg: string) => number +>arg : string + + a6: new (x: (arg: Base) => Derived) => Base; +>a6 : new (x: (arg: Base) => Derived) => Base +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>Base : Base + + a7: new (x: (arg: Base) => Derived) => (r: Base) => Derived; +>a7 : new (x: (arg: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a8: new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a8 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a9: new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a9 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a10: new (...x: Derived[]) => Derived; +>a10 : new (...x: Derived[]) => Derived +>x : Derived[] +>Derived : Derived +>Derived : Derived + + a11: new (x: { foo: string }, y: { foo: string; bar: string }) => Base; +>a11 : new (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>x : { foo: string; } +>foo : string +>y : { foo: string; bar: string; } +>foo : string +>bar : string +>Base : Base + + a12: new (x: Array, y: Array) => Array; +>a12 : new (x: Base[], y: Derived2[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived2[] +>Array : T[] +>Derived2 : Derived2 +>Array : T[] +>Derived : Derived + + a13: new (x: Array, y: Array) => Array; +>a13 : new (x: Base[], y: Derived[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived[] +>Array : T[] +>Derived : Derived +>Array : T[] +>Derived : Derived + + a14: new (x: { a: string; b: number }) => Object; +>a14 : new (x: { a: string; b: number; }) => Object +>x : { a: string; b: number; } +>a : string +>b : number +>Object : Object + + a15: { +>a15 : { new (x: number): number[]; new (x: string): string[]; } + + new (x: number): number[]; +>x : number + + new (x: string): string[]; +>x : string + + }; + a16: { +>a16 : { new (x: T): number[]; new (x: U): number[]; } + + new (x: T): number[]; +>T : T +>Derived : Derived +>x : T +>T : T + + new (x: U): number[]; +>U : U +>Base : Base +>x : U +>U : U + + }; + a17: { +>a17 : { new (x: new (a: number) => number): number[]; new (x: new (a: string) => string): string[]; } + + new (x: new (a: number) => number): number[]; +>x : new (a: number) => number +>a : number + + new (x: new (a: string) => string): string[]; +>x : new (a: string) => string +>a : string + + }; + a18: { +>a18 : { new (x: { new (a: number): number; new (a: string): string; }): any[]; new (x: { new (a: boolean): boolean; new (a: Date): Date; }): any[]; } + + new (x: { +>x : { new (a: number): number; new (a: string): string; } + + new (a: number): number; +>a : number + + new (a: string): string; +>a : string + + }): any[]; + new (x: { +>x : { new (a: boolean): boolean; new (a: Date): Date; } + + new (a: boolean): boolean; +>a : boolean + + new (a: Date): Date; +>a : Date +>Date : Date +>Date : Date + + }): any[]; + }; +} + +// S's +interface I extends A { +>I : I +>A : A + + // N's + a: new (x: T) => T[]; // ok, instantiation of N is a subtype of M, T is number +>a : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: new (x: T) => string[]; // ok +>a2 : new (x: T) => string[] +>T : T +>x : T +>T : T + + a3: new (x: T) => T; // ok since Base returns void +>a3 : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + + a4: new (x: T, y: U) => T; // ok, instantiation of N is a subtype of M, T is string, U is number +>a4 : new (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + + a5: new (x: (arg: T) => U) => T; // ok, U is in a parameter position so inferences can be made +>a5 : new (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: new (x: (arg: T) => U) => T; // ok, same as a5 but with object type hierarchy +>a6 : new (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a7: new (x: (arg: T) => U) => (r: T) => U; // ok +>a7 : new (x: (arg: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>r : T +>T : T +>U : U + + a8: new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U; // ok +>a8 : new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: T) => U +>arg2 : T +>T : T +>U : U +>r : T +>T : T +>U : U + + a9: new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U; // ok, same as a8 with compatible object literal +>a9 : new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: { foo: string; bing: number; }) => U +>arg2 : { foo: string; bing: number; } +>foo : string +>bing : number +>U : U +>r : T +>T : T +>U : U + + a10: new (...x: T[]) => T; // ok +>a10 : new (...x: T[]) => T +>T : T +>Derived : Derived +>x : T[] +>T : T +>T : T + + a11: new (x: T, y: T) => T; // ok +>a11 : new (x: T, y: T) => T +>T : T +>Base : Base +>x : T +>T : T +>y : T +>T : T +>T : T + + a12: new >(x: Array, y: T) => Array; // ok, less specific parameter type +>a12 : new (x: Base[], y: T) => Derived[] +>T : T +>Array : T[] +>Base : Base +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>Array : T[] +>Derived : Derived + + a13: new >(x: Array, y: T) => T; // ok, T = Array, satisfies constraint, contextual signature instantiation succeeds +>a13 : new (x: Base[], y: T) => T +>T : T +>Array : T[] +>Derived : Derived +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>T : T + + a14: new (x: { a: T; b: T }) => T; // ok, best common type yields T = {} but that's satisfactory for this signature +>a14 : new (x: { a: T; b: T; }) => T +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a15: new (x: T) => T[]; // ok +>a15 : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a16: new (x: T) => number[]; // ok +>a16 : new (x: T) => number[] +>T : T +>Base : Base +>x : T +>T : T + + a17: new (x: new (a: T) => T) => T[]; // ok +>a17 : new (x: new (a: T) => T) => T[] +>T : T +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T + + a18: new (x: new (a: T) => T) => T[]; // ok, no inferences for T but assignable to any +>a18 : new (x: new (a: T) => T) => T[] +>T : T +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance3.js b/tests/baselines/reference/constructSignatureAssignabilityInInheritance3.js index 4706e9a49f4..f9f8ca0c089 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance3.js +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance3.js @@ -112,6 +112,8 @@ module Errors { } //// [constructSignatureAssignabilityInInheritance3.js] +// checking subtype relations for function types as it relates to contextual signature instantiation +// error cases var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.js b/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.js index 19adbba4b8e..4119b87ba97 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.js +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.js @@ -60,6 +60,7 @@ interface I extends A { } //// [constructSignatureAssignabilityInInheritance4.js] +// checking subtype relations for function types as it relates to contextual signature instantiation var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types new file mode 100644 index 00000000000..7782389d69a --- /dev/null +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types @@ -0,0 +1,332 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance4.ts === +// checking subtype relations for function types as it relates to contextual signature instantiation + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { // T +>A : A + + // M's + a: new (x: T) => T[]; +>a : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: new (x: T) => string[]; +>a2 : new (x: T) => string[] +>T : T +>x : T +>T : T + + a3: new (x: T) => void; +>a3 : new (x: T) => void +>T : T +>x : T +>T : T + + a4: new (x: T, y: U) => string; +>a4 : new (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + a5: new (x: (arg: T) => U) => T; +>a5 : new (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: new (x: (arg: T) => Derived) => T; +>a6 : new (x: (arg: T) => Derived) => T +>T : T +>Base : Base +>x : (arg: T) => Derived +>arg : T +>T : T +>Derived : Derived +>T : T + + a11: new (x: { foo: T }, y: { foo: T; bar: T }) => Base; +>a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>T : T +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T +>Base : Base + + a15: new (x: { a: T; b: T }) => T[]; +>a15 : new (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a16: new (x: { a: T; b: T }) => T[]; +>a16 : new (x: { a: T; b: T; }) => T[] +>T : T +>Base : Base +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a17: { +>a17 : { new (x: T): T[]; new (x: U): U[]; } + + new (x: T): T[]; +>T : T +>Base : Base +>x : T +>T : T +>T : T + + new (x: U): U[]; +>U : U +>Derived : Derived +>x : U +>U : U +>U : U + + }; + a18: { +>a18 : { new (x: T): number[]; new (x: U): number[]; } + + new (x: T): number[]; +>T : T +>Derived : Derived +>x : T +>T : T + + new (x: U): number[]; +>U : U +>Base : Base +>x : U +>U : U + + }; + a19: { +>a19 : { new (x: new (a: T) => T): T[]; new (x: new (a: U) => U): U[]; } + + new (x: new (a: T) => T): T[]; +>T : T +>Derived : Derived +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T + + new (x: new (a: U) => U): U[]; +>U : U +>Base : Base +>x : new (a: U) => U +>a : U +>U : U +>U : U +>U : U + + }; + a20: { +>a20 : { new (x: { new (a: T): T; new (a: U): U; }): any[]; new (x: { new (a: T): T; new (a: U): U; }): any[]; } + + new (x: { +>x : { new (a: T): T; new (a: U): U; } + + new (a: T): T; +>T : T +>Derived : Derived +>a : T +>T : T +>T : T + + new (a: U): U; +>U : U +>Base : Base +>a : U +>U : U +>U : U + + }): any[]; + new (x: { +>x : { new (a: T): T; new (a: U): U; } + + new (a: T): T; +>T : T +>Base : Base +>a : T +>T : T +>T : T + + new (a: U): U; +>U : U +>Derived2 : Derived2 +>a : U +>U : U +>U : U + + }): any[]; + }; +} + +// S's +interface I extends A { +>I : I +>A : A + + // N's + a: new (x: T) => T[]; // ok, instantiation of N is a subtype of M, T is number +>a : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: new (x: T) => string[]; // ok +>a2 : new (x: T) => string[] +>T : T +>x : T +>T : T + + a3: new (x: T) => T; // ok since Base returns void +>a3 : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + + a4: new (x: T, y: U) => string; // ok, instantiation of N is a subtype of M, T is string, U is number +>a4 : new (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + a5: new (x: (arg: T) => U) => T; // ok, U is in a parameter position so inferences can be made +>a5 : new (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: new (x: (arg: T) => U) => T; // ok, same as a5 but with object type hierarchy +>a6 : new (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a11: new (x: { foo: T }, y: { foo: U; bar: U }) => Base; // ok +>a11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>T : T +>U : U +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: U; bar: U; } +>foo : U +>U : U +>bar : U +>U : U +>Base : Base + + a15: new (x: { a: U; b: V; }) => U[]; // ok, T = U, T = V +>a15 : new (x: { a: U; b: V; }) => U[] +>U : U +>V : V +>x : { a: U; b: V; } +>a : U +>U : U +>b : V +>V : V +>U : U + + a16: new (x: { a: T; b: T }) => T[]; // ok, more general parameter type +>a16 : new (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a17: new (x: T) => T[]; // ok, more general parameter type +>a17 : new (x: T) => T[] +>T : T +>Base : Base +>x : T +>T : T +>T : T + + a18: new (x: T) => number[]; // ok, more general parameter type +>a18 : new (x: T) => number[] +>T : T +>Base : Base +>x : T +>T : T + + a19: new (x: new (a: T) => T) => T[]; // ok +>a19 : new (x: new (a: T) => T) => T[] +>T : T +>Base : Base +>x : new (a: T) => T +>a : T +>T : T +>T : T +>T : T + + a20: new (x: new (a: T) => T) => any[]; // ok +>a20 : new (x: new (a: T) => T) => any[] +>x : new (a: T) => T +>T : T +>Base : Base +>a : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.js b/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.js index 2440670d379..a33d2a03b26 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.js +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.js @@ -49,6 +49,8 @@ interface I extends B { } //// [constructSignatureAssignabilityInInheritance5.js] +// checking subtype relations for function types as it relates to contextual signature instantiation +// same as subtypingWithConstructSignatures2 just with an extra level of indirection in the inheritance chain var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types new file mode 100644 index 00000000000..dea9478b372 --- /dev/null +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types @@ -0,0 +1,314 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance5.ts === +// checking subtype relations for function types as it relates to contextual signature instantiation +// same as subtypingWithConstructSignatures2 just with an extra level of indirection in the inheritance chain + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { // T +>A : A + + // M's + a: new (x: number) => number[]; +>a : new (x: number) => number[] +>x : number + + a2: new (x: number) => string[]; +>a2 : new (x: number) => string[] +>x : number + + a3: new (x: number) => void; +>a3 : new (x: number) => void +>x : number + + a4: new (x: string, y: number) => string; +>a4 : new (x: string, y: number) => string +>x : string +>y : number + + a5: new (x: (arg: string) => number) => string; +>a5 : new (x: (arg: string) => number) => string +>x : (arg: string) => number +>arg : string + + a6: new (x: (arg: Base) => Derived) => Base; +>a6 : new (x: (arg: Base) => Derived) => Base +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>Base : Base + + a7: new (x: (arg: Base) => Derived) => (r: Base) => Derived; +>a7 : new (x: (arg: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a8: new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a8 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a9: new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; +>a9 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived +>x : (arg: Base) => Derived +>arg : Base +>Base : Base +>Derived : Derived +>y : (arg2: Base) => Derived +>arg2 : Base +>Base : Base +>Derived : Derived +>r : Base +>Base : Base +>Derived : Derived + + a10: new (...x: Derived[]) => Derived; +>a10 : new (...x: Derived[]) => Derived +>x : Derived[] +>Derived : Derived +>Derived : Derived + + a11: new (x: { foo: string }, y: { foo: string; bar: string }) => Base; +>a11 : new (x: { foo: string; }, y: { foo: string; bar: string; }) => Base +>x : { foo: string; } +>foo : string +>y : { foo: string; bar: string; } +>foo : string +>bar : string +>Base : Base + + a12: new (x: Array, y: Array) => Array; +>a12 : new (x: Base[], y: Derived2[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived2[] +>Array : T[] +>Derived2 : Derived2 +>Array : T[] +>Derived : Derived + + a13: new (x: Array, y: Array) => Array; +>a13 : new (x: Base[], y: Derived[]) => Derived[] +>x : Base[] +>Array : T[] +>Base : Base +>y : Derived[] +>Array : T[] +>Derived : Derived +>Array : T[] +>Derived : Derived + + a14: new (x: { a: string; b: number }) => Object; +>a14 : new (x: { a: string; b: number; }) => Object +>x : { a: string; b: number; } +>a : string +>b : number +>Object : Object +} + +interface B extends A { +>B : B +>A : A + + a: new (x: T) => T[]; +>a : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T +} + +// S's +interface I extends B { +>I : I +>B : B + + // N's + a: new (x: T) => T[]; // ok, instantiation of N is a subtype of M, T is number +>a : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: new (x: T) => string[]; // ok +>a2 : new (x: T) => string[] +>T : T +>x : T +>T : T + + a3: new (x: T) => T; // ok since Base returns void +>a3 : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + + a4: new (x: T, y: U) => T; // ok, instantiation of N is a subtype of M, T is string, U is number +>a4 : new (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + + a5: new (x: (arg: T) => U) => T; // ok, U is in a parameter position so inferences can be made +>a5 : new (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: new (x: (arg: T) => U) => T; // ok, same as a5 but with object type hierarchy +>a6 : new (x: (arg: T) => U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a7: new (x: (arg: T) => U) => (r: T) => U; // ok +>a7 : new (x: (arg: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>r : T +>T : T +>U : U + + a8: new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U; // ok +>a8 : new (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: T) => U +>arg2 : T +>T : T +>U : U +>r : T +>T : T +>U : U + + a9: new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U; // ok, same as a8 with compatible object literal +>a9 : new (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>y : (arg2: { foo: string; bing: number; }) => U +>arg2 : { foo: string; bing: number; } +>foo : string +>bing : number +>U : U +>r : T +>T : T +>U : U + + a10: new (...x: T[]) => T; // ok +>a10 : new (...x: T[]) => T +>T : T +>Derived : Derived +>x : T[] +>T : T +>T : T + + a11: new (x: T, y: T) => T; // ok +>a11 : new (x: T, y: T) => T +>T : T +>Base : Base +>x : T +>T : T +>y : T +>T : T +>T : T + + a12: new >(x: Array, y: T) => Array; // ok, less specific parameter type +>a12 : new (x: Base[], y: T) => Derived[] +>T : T +>Array : T[] +>Base : Base +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>Array : T[] +>Derived : Derived + + a13: new >(x: Array, y: T) => T; // ok, T = Array, satisfies constraint, contextual signature instantiation succeeds +>a13 : new (x: Base[], y: T) => T +>T : T +>Array : T[] +>Derived : Derived +>x : Base[] +>Array : T[] +>Base : Base +>y : T +>T : T +>T : T + + a14: new (x: { a: T; b: T }) => T; // ok, best common type yields T = {} but that's satisfactory for this signature +>a14 : new (x: { a: T; b: T; }) => T +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.js b/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.js index a6f56fdbe69..f94845e82bf 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.js +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.js @@ -51,6 +51,9 @@ interface I9 extends A { } //// [constructSignatureAssignabilityInInheritance6.js] +// checking subtype relations for function types as it relates to contextual signature instantiation +// same as subtypingWithConstructSignatures4 but using class type parameters instead of generic signatures +// all are errors var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types new file mode 100644 index 00000000000..193a19a5f2c --- /dev/null +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types @@ -0,0 +1,209 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance6.ts === +// checking subtype relations for function types as it relates to contextual signature instantiation +// same as subtypingWithConstructSignatures4 but using class type parameters instead of generic signatures +// all are errors + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +class OtherDerived extends Base { bing: string; } +>OtherDerived : OtherDerived +>Base : Base +>bing : string + +interface A { // T +>A : A + + // M's + a: new (x: T) => T[]; +>a : new (x: T) => T[] +>T : T +>x : T +>T : T +>T : T + + a2: new (x: T) => string[]; +>a2 : new (x: T) => string[] +>T : T +>x : T +>T : T + + a3: new (x: T) => void; +>a3 : new (x: T) => void +>T : T +>x : T +>T : T + + a4: new (x: T, y: U) => string; +>a4 : new (x: T, y: U) => string +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + a5: new (x: (arg: T) => U) => T; +>a5 : new (x: (arg: T) => U) => T +>T : T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T + + a6: new (x: (arg: T) => Derived) => T; +>a6 : new (x: (arg: T) => Derived) => T +>T : T +>Base : Base +>x : (arg: T) => Derived +>arg : T +>T : T +>Derived : Derived +>T : T + + a11: new (x: { foo: T }, y: { foo: T; bar: T }) => Base; +>a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base +>T : T +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T +>Base : Base + + a15: new (x: { a: T; b: T }) => T[]; +>a15 : new (x: { a: T; b: T; }) => T[] +>T : T +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T + + a16: new (x: { a: T; b: T }) => T[]; +>a16 : new (x: { a: T; b: T; }) => T[] +>T : T +>Base : Base +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T +} + +// S's +interface I extends A { +>I : I +>T : T +>A : A + + a: new (x: T) => T[]; +>a : new (x: T) => T[] +>x : T +>T : T +>T : T +} + +interface I2 extends A { +>I2 : I2 +>T : T +>A : A + + a2: new (x: T) => string[]; +>a2 : new (x: T) => string[] +>x : T +>T : T +} + +interface I3 extends A { +>I3 : I3 +>T : T +>A : A + + a3: new (x: T) => T; +>a3 : new (x: T) => T +>x : T +>T : T +>T : T +} + +interface I4 extends A { +>I4 : I4 +>T : T +>A : A + + a4: new (x: T, y: U) => string; +>a4 : new (x: T, y: U) => string +>U : U +>x : T +>T : T +>y : U +>U : U +} + +interface I5 extends A { +>I5 : I5 +>T : T +>A : A + + a5: new (x: (arg: T) => U) => T; +>a5 : new (x: (arg: T) => U) => T +>U : U +>x : (arg: T) => U +>arg : T +>T : T +>U : U +>T : T +} + +interface I7 extends A { +>I7 : I7 +>T : T +>A : A + + a11: new (x: { foo: T }, y: { foo: U; bar: U }) => Base; +>a11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base +>U : U +>x : { foo: T; } +>foo : T +>T : T +>y : { foo: U; bar: U; } +>foo : U +>U : U +>bar : U +>U : U +>Base : Base +} + +interface I9 extends A { +>I9 : I9 +>T : T +>A : A + + a16: new (x: { a: T; b: T }) => T[]; +>a16 : new (x: { a: T; b: T; }) => T[] +>x : { a: T; b: T; } +>a : T +>T : T +>b : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters.js b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters.js index 9f04781828a..f31d662d871 100644 --- a/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters.js +++ b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters.js @@ -30,6 +30,7 @@ var b: { } //// [constructSignatureWithAccessibilityModifiersOnParameters.js] +// Parameter properties are only valid in constructor definitions, not even in other forms of construct signatures var C = (function () { function C(x, y) { this.x = x; diff --git a/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.js b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.js index ddf8ced41cf..26abb6448f9 100644 --- a/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.js +++ b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.js @@ -37,6 +37,7 @@ var b: { } //// [constructSignatureWithAccessibilityModifiersOnParameters2.js] +// Parameter properties are not valid in overloads of constructors var C = (function () { function C(x, y) { this.x = x; diff --git a/tests/baselines/reference/constructSignaturesWithIdenticalOverloads.js b/tests/baselines/reference/constructSignaturesWithIdenticalOverloads.js index 4dd31fdfa1e..92528d6635c 100644 --- a/tests/baselines/reference/constructSignaturesWithIdenticalOverloads.js +++ b/tests/baselines/reference/constructSignaturesWithIdenticalOverloads.js @@ -50,6 +50,7 @@ var b: { var r6 = new b(1, ''); //// [constructSignaturesWithIdenticalOverloads.js] +// Duplicate overloads of construct signatures should generate errors var C = (function () { function C(x) { } diff --git a/tests/baselines/reference/constructSignaturesWithIdenticalOverloads.types b/tests/baselines/reference/constructSignaturesWithIdenticalOverloads.types new file mode 100644 index 00000000000..a34c5365f2d --- /dev/null +++ b/tests/baselines/reference/constructSignaturesWithIdenticalOverloads.types @@ -0,0 +1,158 @@ +=== tests/cases/conformance/types/objectTypeLiteral/constructSignatures/constructSignaturesWithIdenticalOverloads.ts === +// Duplicate overloads of construct signatures should generate errors + +class C { +>C : C + + constructor(x: number, y: string); +>x : number +>y : string + + constructor(x: number, y: string); // error +>x : number +>y : string + + constructor(x: number) { } +>x : number +} + +var r1 = new C(1, ''); +>r1 : C +>new C(1, '') : C +>C : typeof C + +class C2 { +>C2 : C2 +>T : T + + constructor(x: T, y: string); +>x : T +>T : T +>y : string + + constructor(x: T, y: string); // error +>x : T +>T : T +>y : string + + constructor(x: T) { } +>x : T +>T : T +} + +var r2 = new C2(1, ''); +>r2 : C2 +>new C2(1, '') : C2 +>C2 : typeof C2 + +interface I { +>I : I + + new (x: number, y: string): C; +>x : number +>y : string +>C : C + + new (x: number, y: string): C; // error +>x : number +>y : string +>C : C +} + +var i: I; +>i : I +>I : I + +var r3 = new i(1, ''); +>r3 : C +>new i(1, '') : C +>i : I + +interface I2 { +>I2 : I2 +>T : T + + new (x: T, y: string): C2; +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C2; // error +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C2; // error +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T +} + +var i2: I2; +>i2 : I2 +>I2 : I2 + +var r4 = new i2(1, ''); +>r4 : C2 +>new i2(1, '') : C2 +>i2 : I2 + +var a: { +>a : { new (x: number, y: string): C; new (x: number, y: string): C; } + + new (x: number, y: string): C; +>x : number +>y : string +>C : C + + new (x: number, y: string): C; // error +>x : number +>y : string +>C : C +} + +var r5 = new a(1, ''); +>r5 : C +>new a(1, '') : C +>a : { new (x: number, y: string): C; new (x: number, y: string): C; } + +var b: { +>b : { new (x: T, y: string): C2; new (x: T, y: string): C2; } + + new (x: T, y: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C2; // error +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T +} + +var r6 = new b(1, ''); +>r6 : C2 +>new b(1, '') : C2 +>b : { new (x: T, y: string): C2; new (x: T, y: string): C2; } + diff --git a/tests/baselines/reference/constructSignaturesWithOverloads.js b/tests/baselines/reference/constructSignaturesWithOverloads.js index da7a0be2578..1ee6290aeec 100644 --- a/tests/baselines/reference/constructSignaturesWithOverloads.js +++ b/tests/baselines/reference/constructSignaturesWithOverloads.js @@ -51,6 +51,7 @@ var b: { var r6 = new b(1, ''); //// [constructSignaturesWithOverloads.js] +// No errors expected for basic overloads of construct signatures var C = (function () { function C(x) { } diff --git a/tests/baselines/reference/constructSignaturesWithOverloads.types b/tests/baselines/reference/constructSignaturesWithOverloads.types new file mode 100644 index 00000000000..0cd9b744ee7 --- /dev/null +++ b/tests/baselines/reference/constructSignaturesWithOverloads.types @@ -0,0 +1,159 @@ +=== tests/cases/conformance/types/objectTypeLiteral/constructSignatures/constructSignaturesWithOverloads.ts === +// No errors expected for basic overloads of construct signatures + +class C { +>C : C + + constructor(x: number, y?: string); +>x : number +>y : string + + constructor(x: number, y: string); +>x : number +>y : string + + constructor(x: number) { } +>x : number +} + +var r1 = new C(1, ''); +>r1 : C +>new C(1, '') : C +>C : typeof C + +class C2 { +>C2 : C2 +>T : T + + constructor(x: T, y?: string); +>x : T +>T : T +>y : string + + constructor(x: T, y: string); +>x : T +>T : T +>y : string + + constructor(x: T) { } +>x : T +>T : T +} + +var r2 = new C2(1, ''); +>r2 : C2 +>new C2(1, '') : C2 +>C2 : typeof C2 + +interface I { +>I : I + + new(x: number, y?: string): C; +>x : number +>y : string +>C : C + + new(x: number, y: string): C; +>x : number +>y : string +>C : C +} + +var i: I; +>i : I +>I : I + +var r3 = new i(1, ''); +>r3 : C +>new i(1, '') : C +>i : I + +interface I2 { +>I2 : I2 +>T : T + + new (x: T, y?: string): C2; +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C2; +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y?: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + +} + +var i2: I2; +>i2 : I2 +>I2 : I2 + +var r4 = new i2(1, ''); +>r4 : C2 +>new i2(1, '') : C2 +>i2 : I2 + +var a: { +>a : { new (x: number, y?: string): C; new (x: number, y: string): C; } + + new(x: number, y?: string): C; +>x : number +>y : string +>C : C + + new(x: number, y: string): C; +>x : number +>y : string +>C : C +} + +var r5 = new a(1, ''); +>r5 : C +>new a(1, '') : C +>a : { new (x: number, y?: string): C; new (x: number, y: string): C; } + +var b: { +>b : { new (x: T, y?: string): C2; new (x: T, y: string): C2; } + + new(x: T, y?: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new(x: T, y: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T +} + +var r6 = new b(1, ''); +>r6 : C2 +>new b(1, '') : C2 +>b : { new (x: T, y?: string): C2; new (x: T, y: string): C2; } + diff --git a/tests/baselines/reference/constructSignaturesWithOverloads2.js b/tests/baselines/reference/constructSignaturesWithOverloads2.js index 026a907e99a..642cac9f364 100644 --- a/tests/baselines/reference/constructSignaturesWithOverloads2.js +++ b/tests/baselines/reference/constructSignaturesWithOverloads2.js @@ -40,6 +40,8 @@ var r4 = new i2(1, ''); var r5 = new i2(1, 1); //// [constructSignaturesWithOverloads2.js] +// No errors expected for basic overloads of construct signatures with merged declarations +// clodules var C = (function () { function C(x) { } diff --git a/tests/baselines/reference/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.js b/tests/baselines/reference/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.js index 4c9fe2b1085..1ef6884816d 100644 --- a/tests/baselines/reference/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.js +++ b/tests/baselines/reference/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.js @@ -33,6 +33,7 @@ var b: { } //// [constructSignaturesWithOverloadsThatDifferOnlyByReturnType.js] +// Error for construct signature overloads to differ only by return type var C = (function () { function C(x) { } diff --git a/tests/baselines/reference/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.types b/tests/baselines/reference/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.types new file mode 100644 index 00000000000..6e1ea33efa7 --- /dev/null +++ b/tests/baselines/reference/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.types @@ -0,0 +1,99 @@ +=== tests/cases/conformance/types/objectTypeLiteral/constructSignatures/constructSignaturesWithOverloadsThatDifferOnlyByReturnType.ts === +// Error for construct signature overloads to differ only by return type + +class C { +>C : C + + constructor(x: number) { } +>x : number +} + +class C2 { +>C2 : C2 +>T : T + + constructor(x: T, y?: string) { } +>x : T +>T : T +>y : string +} + +interface I { +>I : I + + new(x: number, y: string): C; +>x : number +>y : string +>C : C + + new(x: number, y: string): C2; // error +>x : number +>y : string +>C2 : C2 +} + +interface I2 { +>I2 : I2 +>T : T + + new (x: T, y: string): C2; +>x : T +>T : T +>y : string +>C2 : C2 + + new (x: T, y: string): C; // error +>x : T +>T : T +>y : string +>C : C + + new (x: T, y: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C; // error +>T : T +>x : T +>T : T +>y : string +>C : C + +} + +var a: { +>a : { new (x: number, y: string): C2; new (x: number, y: string): C; } + + new (x: number, y: string): C2; +>x : number +>y : string +>C2 : C2 + + new (x: number, y: string): C; // error +>x : number +>y : string +>C : C +} + +var b: { +>b : { new (x: T, y: string): C2; new (x: T, y: string): C; } + + new (x: T, y: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C; // error +>T : T +>x : T +>T : T +>y : string +>C : C +} diff --git a/tests/baselines/reference/constructorArgWithGenericCallSignature.js b/tests/baselines/reference/constructorArgWithGenericCallSignature.js index 90eada7cec4..5fa7c46124b 100644 --- a/tests/baselines/reference/constructorArgWithGenericCallSignature.js +++ b/tests/baselines/reference/constructorArgWithGenericCallSignature.js @@ -28,5 +28,5 @@ var Test; Test.F = F; })(Test || (Test = {})); var func; -Test.F(func); -var test = new Test.MyClass(func); +Test.F(func); // OK +var test = new Test.MyClass(func); // Should be OK diff --git a/tests/baselines/reference/constructorArgWithGenericCallSignature.types b/tests/baselines/reference/constructorArgWithGenericCallSignature.types new file mode 100644 index 00000000000..a419f3a3427 --- /dev/null +++ b/tests/baselines/reference/constructorArgWithGenericCallSignature.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/constructorArgWithGenericCallSignature.ts === +module Test { +>Test : typeof Test + + export interface MyFunc { +>MyFunc : MyFunc + + (value1: T): T; +>T : T +>value1 : T +>T : T +>T : T + } + export class MyClass { +>MyClass : MyClass + + constructor(func: MyFunc) { } +>func : MyFunc +>MyFunc : MyFunc + } + + export function F(func: MyFunc) { } +>F : (func: MyFunc) => void +>func : MyFunc +>MyFunc : MyFunc +} +var func: Test.MyFunc; +>func : Test.MyFunc +>Test : unknown +>MyFunc : Test.MyFunc + +Test.F(func); // OK +>Test.F(func) : void +>Test.F : (func: Test.MyFunc) => void +>Test : typeof Test +>F : (func: Test.MyFunc) => void +>func : Test.MyFunc + +var test = new Test.MyClass(func); // Should be OK +>test : Test.MyClass +>new Test.MyClass(func) : Test.MyClass +>Test.MyClass : typeof Test.MyClass +>Test : typeof Test +>MyClass : typeof Test.MyClass +>func : Test.MyFunc + diff --git a/tests/baselines/reference/constructorArgs.types b/tests/baselines/reference/constructorArgs.types new file mode 100644 index 00000000000..ccd23c22f5d --- /dev/null +++ b/tests/baselines/reference/constructorArgs.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/constructorArgs.ts === +interface Options { +>Options : Options + + value: number; +>value : number +} + +class Super { +>Super : Super + + constructor(value:number) { +>value : number + } +} + +class Sub extends Super { +>Sub : Sub +>Super : Super + + constructor(public options:Options) { +>options : Options +>Options : Options + + super(options.value); +>super(options.value) : void +>super : typeof Super +>options.value : number +>options : Options +>value : number + } +} + diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types new file mode 100644 index 00000000000..3702be4f2dc --- /dev/null +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types @@ -0,0 +1,38 @@ +=== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/constructorFunctionTypeIsAssignableToBaseType.ts === +class Base { +>Base : Base + + static foo: { +>foo : { bar: Object; } + + bar: Object; +>bar : Object +>Object : Object + } +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + // ok + static foo: { +>foo : { bar: number; } + + bar: number; +>bar : number + } +} + +class Derived2 extends Base { +>Derived2 : Derived2 +>Base : Base + + // ok, use assignability here + static foo: { +>foo : { bar: any; } + + bar: any; +>bar : any + } +} diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js index c7584804037..79094a38b1d 100644 --- a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.js @@ -33,6 +33,7 @@ class Derived2 extends Base { } //// [constructorFunctionTypeIsAssignableToBaseType2.js] +// the constructor function itself does not need to be a subtype of the base type constructor function var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -53,6 +54,7 @@ var Derived = (function (_super) { })(Base); var Derived2 = (function (_super) { __extends(Derived2, _super); + // ok, not enforcing assignability relation on this function Derived2(x) { _super.call(this, x); return 1; diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types new file mode 100644 index 00000000000..53853163827 --- /dev/null +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types @@ -0,0 +1,64 @@ +=== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/constructorFunctionTypeIsAssignableToBaseType2.ts === +// the constructor function itself does not need to be a subtype of the base type constructor function + +class Base { +>Base : Base + + static foo: { +>foo : { bar: Object; } + + bar: Object; +>bar : Object +>Object : Object + } + constructor(x: Object) { +>x : Object +>Object : Object + } +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + // ok + static foo: { +>foo : { bar: number; } + + bar: number; +>bar : number + } + + constructor(x: number) { +>x : number + + super(x); +>super(x) : void +>super : typeof Base +>x : number + } +} + +class Derived2 extends Base { +>Derived2 : Derived2 +>Base : Base + + static foo: { +>foo : { bar: number; } + + bar: number; +>bar : number + } + + // ok, not enforcing assignability relation on this + constructor(x: any) { +>x : any + + super(x); +>super(x) : void +>super : typeof Base +>x : any + + return 1; + } +} diff --git a/tests/baselines/reference/constructorHasPrototypeProperty.js b/tests/baselines/reference/constructorHasPrototypeProperty.js index 2f0587255b2..951593e9353 100644 --- a/tests/baselines/reference/constructorHasPrototypeProperty.js +++ b/tests/baselines/reference/constructorHasPrototypeProperty.js @@ -71,8 +71,8 @@ var Generic; } return D; })(C); - var r = C.prototype; - var ra = r.foo; - var r2 = D.prototype; - var rb = r2.baz; + var r = C.prototype; // C + var ra = r.foo; // any + var r2 = D.prototype; // D + var rb = r2.baz; // any })(Generic || (Generic = {})); diff --git a/tests/baselines/reference/constructorHasPrototypeProperty.types b/tests/baselines/reference/constructorHasPrototypeProperty.types new file mode 100644 index 00000000000..24dedb254eb --- /dev/null +++ b/tests/baselines/reference/constructorHasPrototypeProperty.types @@ -0,0 +1,100 @@ +=== tests/cases/conformance/classes/members/constructorFunctionTypes/constructorHasPrototypeProperty.ts === +module NonGeneric { +>NonGeneric : typeof NonGeneric + + class C { +>C : C + + foo: string; +>foo : string + } + + class D extends C { +>D : D +>C : C + + bar: string; +>bar : string + } + + var r = C.prototype; +>r : C +>C.prototype : C +>C : typeof C +>prototype : C + + r.foo; +>r.foo : string +>r : C +>foo : string + + var r2 = D.prototype; +>r2 : D +>D.prototype : D +>D : typeof D +>prototype : D + + r2.bar; +>r2.bar : string +>r2 : D +>bar : string +} + +module Generic { +>Generic : typeof Generic + + class C { +>C : C +>T : T +>U : U + + foo: T; +>foo : T +>T : T + + bar: U; +>bar : U +>U : U + } + + class D extends C { +>D : D +>T : T +>U : U +>C : C +>T : T +>U : U + + baz: T; +>baz : T +>T : T + + bing: U; +>bing : U +>U : U + } + + var r = C.prototype; // C +>r : C +>C.prototype : C +>C : typeof C +>prototype : C + + var ra = r.foo; // any +>ra : any +>r.foo : any +>r : C +>foo : any + + var r2 = D.prototype; // D +>r2 : D +>D.prototype : D +>D : typeof D +>prototype : D + + var rb = r2.baz; // any +>rb : any +>r2.baz : any +>r2 : D +>baz : any +} diff --git a/tests/baselines/reference/constructorImplementationWithDefaultValues.types b/tests/baselines/reference/constructorImplementationWithDefaultValues.types new file mode 100644 index 00000000000..6dc2b4f285b --- /dev/null +++ b/tests/baselines/reference/constructorImplementationWithDefaultValues.types @@ -0,0 +1,50 @@ +=== tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorImplementationWithDefaultValues.ts === +class C { +>C : C + + constructor(x); +>x : any + + constructor(x = 1) { +>x : number + + var y = x; +>y : number +>x : number + } +} + +class D { +>D : D +>T : T + + constructor(x); +>x : any + + constructor(x:T = null) { +>x : T +>T : T + + var y = x; +>y : T +>x : T + } +} + +class E { +>E : E +>T : T +>Date : Date + + constructor(x); +>x : any + + constructor(x: T = null) { +>x : T +>T : T + + var y = x; +>y : T +>x : T + } +} diff --git a/tests/baselines/reference/constructorOverloads2.types b/tests/baselines/reference/constructorOverloads2.types new file mode 100644 index 00000000000..65da67f04fe --- /dev/null +++ b/tests/baselines/reference/constructorOverloads2.types @@ -0,0 +1,74 @@ +=== tests/cases/compiler/constructorOverloads2.ts === +class FooBase { +>FooBase : FooBase + + constructor(s: string); +>s : string + + constructor(n: number); +>n : number + + constructor(x: any) { +>x : any + } + bar1() { /*WScript.Echo("base bar1");*/ } +>bar1 : () => void +} + +class Foo extends FooBase { +>Foo : Foo +>FooBase : FooBase + + constructor(s: string); +>s : string + + constructor(n: number); +>n : number + + constructor(a:any); +>a : any + + constructor(x: any, y?: any) { +>x : any +>y : any + + super(x); +>super(x) : void +>super : typeof FooBase +>x : any + } + bar1() { /*WScript.Echo("bar1");*/ } +>bar1 : () => void +} + +var f1 = new Foo("hey"); +>f1 : Foo +>new Foo("hey") : Foo +>Foo : typeof Foo + +var f2 = new Foo(0); +>f2 : Foo +>new Foo(0) : Foo +>Foo : typeof Foo + +var f3 = new Foo(f1); +>f3 : Foo +>new Foo(f1) : Foo +>Foo : typeof Foo +>f1 : Foo + +var f4 = new Foo([f1,f2,f3]); +>f4 : Foo +>new Foo([f1,f2,f3]) : Foo +>Foo : typeof Foo +>[f1,f2,f3] : Foo[] +>f1 : Foo +>f2 : Foo +>f3 : Foo + +f1.bar1(); +>f1.bar1() : void +>f1.bar1 : () => void +>f1 : Foo +>bar1 : () => void + diff --git a/tests/baselines/reference/constructorOverloads7.js b/tests/baselines/reference/constructorOverloads7.js index c9cd83c39e5..b7e152c66e1 100644 --- a/tests/baselines/reference/constructorOverloads7.js +++ b/tests/baselines/reference/constructorOverloads7.js @@ -26,6 +26,9 @@ function EF1(a,b) { return a+b; } //// [constructorOverloads7.js] +// Type provided by extern declaration +// Because Point is a constructor function, this is inferred +// to be Point and return type is inferred to be void function Point(x, y) { this.x = x; this.y = y; diff --git a/tests/baselines/reference/constructorOverloadsWithOptionalParameters.types b/tests/baselines/reference/constructorOverloadsWithOptionalParameters.types new file mode 100644 index 00000000000..c68aa782252 --- /dev/null +++ b/tests/baselines/reference/constructorOverloadsWithOptionalParameters.types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorOverloadsWithOptionalParameters.ts === +class C { +>C : C + + foo: string; +>foo : string + + constructor(x?, y?: any[]); +>x : any +>y : any[] + + constructor() { + } +} + +class D { +>D : D +>T : T + + foo: string; +>foo : string + + constructor(x?, y?: any[]); +>x : any +>y : any[] + + constructor() { + } +} diff --git a/tests/baselines/reference/constructorParameterProperties.js b/tests/baselines/reference/constructorParameterProperties.js index 3c1bed9672a..37ba30d24b0 100644 --- a/tests/baselines/reference/constructorParameterProperties.js +++ b/tests/baselines/reference/constructorParameterProperties.js @@ -27,7 +27,7 @@ var C = (function () { })(); var c; var r = c.y; -var r2 = c.x; +var r2 = c.x; // error var D = (function () { function D(a, x) { this.x = x; @@ -36,5 +36,5 @@ var D = (function () { })(); var d; var r = d.y; -var r2 = d.x; -var r3 = d.a; +var r2 = d.x; // error +var r3 = d.a; // error diff --git a/tests/baselines/reference/constructorParameterProperties2.js b/tests/baselines/reference/constructorParameterProperties2.js index 50509b7b3af..8ad0c8b6ea6 100644 --- a/tests/baselines/reference/constructorParameterProperties2.js +++ b/tests/baselines/reference/constructorParameterProperties2.js @@ -26,7 +26,7 @@ var r3 = e.y; // error //// [constructorParameterProperties2.js] var C = (function () { function C(y) { - } + } // ok return C; })(); var c; @@ -34,7 +34,7 @@ var r = c.y; var D = (function () { function D(y) { this.y = y; - } + } // error return D; })(); var d; @@ -42,8 +42,8 @@ var r2 = d.y; var E = (function () { function E(y) { this.y = y; - } + } // error return E; })(); var e; -var r3 = e.y; +var r3 = e.y; // error diff --git a/tests/baselines/reference/constructorParameterShadowsOuterScopes.js b/tests/baselines/reference/constructorParameterShadowsOuterScopes.js index 73f9d8ceda9..18a1891c927 100644 --- a/tests/baselines/reference/constructorParameterShadowsOuterScopes.js +++ b/tests/baselines/reference/constructorParameterShadowsOuterScopes.js @@ -21,18 +21,22 @@ class D { } //// [constructorParameterShadowsOuterScopes.js] +// Initializer expressions for instance member variables are evaluated in the scope of the class constructor +// body but are not permitted to reference parameters or local variables of the constructor. +// This effectively means that entities from outer scopes by the same name as a constructor parameter or +// local variable are inaccessible in initializer expressions for instance member variables var x = 1; var C = (function () { function C(x) { - this.b = x; - x = 2; + this.b = x; // error, evaluated in scope of constructor, cannot reference x + x = 2; // error, x is string } return C; })(); var y = 1; var D = (function () { function D(x) { - this.b = y; + this.b = y; // error, evaluated in scope of constructor, cannot reference y var y = ""; } return D; diff --git a/tests/baselines/reference/constructorReturningAPrimitive.js b/tests/baselines/reference/constructorReturningAPrimitive.js index 6e39c0c95e8..04308590a60 100644 --- a/tests/baselines/reference/constructorReturningAPrimitive.js +++ b/tests/baselines/reference/constructorReturningAPrimitive.js @@ -20,6 +20,8 @@ class B { var b = new B(); //// [constructorReturningAPrimitive.js] +// technically not allowed by JavaScript but we don't have a 'not-primitive' constraint +// functionally only possible when your class is otherwise devoid of members so of little consequence in practice var A = (function () { function A() { return 1; diff --git a/tests/baselines/reference/constructorReturningAPrimitive.types b/tests/baselines/reference/constructorReturningAPrimitive.types new file mode 100644 index 00000000000..c4ca2ba7078 --- /dev/null +++ b/tests/baselines/reference/constructorReturningAPrimitive.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/constructorReturningAPrimitive.ts === +// technically not allowed by JavaScript but we don't have a 'not-primitive' constraint +// functionally only possible when your class is otherwise devoid of members so of little consequence in practice + +class A { +>A : A + + constructor() { + return 1; + } +} + +var a = new A(); +>a : A +>new A() : A +>A : typeof A + +class B { +>B : B +>T : T + + constructor() { + var x: T; +>x : T +>T : T + + return x; +>x : T + } +} + +var b = new B(); +>b : B +>new B() : B +>B : typeof B + diff --git a/tests/baselines/reference/constructorStaticParamName.js b/tests/baselines/reference/constructorStaticParamName.js index e269b64684a..cf74aed2ebc 100644 --- a/tests/baselines/reference/constructorStaticParamName.js +++ b/tests/baselines/reference/constructorStaticParamName.js @@ -7,6 +7,7 @@ class test { //// [constructorStaticParamName.js] +// static as constructor parameter name should only give error if 'use strict' var test = (function () { function test(static) { } diff --git a/tests/baselines/reference/constructorStaticParamName.types b/tests/baselines/reference/constructorStaticParamName.types new file mode 100644 index 00000000000..9fdc94e4a73 --- /dev/null +++ b/tests/baselines/reference/constructorStaticParamName.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/constructorStaticParamName.ts === +// static as constructor parameter name should only give error if 'use strict' + +class test { +>test : test + + constructor (static) { } +>static : any +} + diff --git a/tests/baselines/reference/constructorTypeWithTypeParameters.types b/tests/baselines/reference/constructorTypeWithTypeParameters.types new file mode 100644 index 00000000000..e1f094bf8ef --- /dev/null +++ b/tests/baselines/reference/constructorTypeWithTypeParameters.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/constructorTypeWithTypeParameters.ts === +declare var X: { +>X : new () => number + + new (): number; +>T : T +} +declare var Y: { +>Y : new () => number + + new (): number; +} +var anotherVar: new () => number; +>anotherVar : new () => number +>T : T + diff --git a/tests/baselines/reference/constructorWithAssignableReturnExpression.js b/tests/baselines/reference/constructorWithAssignableReturnExpression.js index 2a2a16004e8..238f2e18aea 100644 --- a/tests/baselines/reference/constructorWithAssignableReturnExpression.js +++ b/tests/baselines/reference/constructorWithAssignableReturnExpression.js @@ -36,6 +36,7 @@ class G { } //// [constructorWithAssignableReturnExpression.js] +// a class constructor may return an expression, it must be assignable to the class instance type to be valid var C = (function () { function C() { return 1; @@ -44,7 +45,7 @@ var C = (function () { })(); var D = (function () { function D() { - return 1; + return 1; // error } return D; })(); @@ -56,7 +57,7 @@ var E = (function () { })(); var F = (function () { function F() { - return { x: 1 }; + return { x: 1 }; // error } return F; })(); diff --git a/tests/baselines/reference/constructorWithExpressionLessReturn.types b/tests/baselines/reference/constructorWithExpressionLessReturn.types new file mode 100644 index 00000000000..595a4ae533f --- /dev/null +++ b/tests/baselines/reference/constructorWithExpressionLessReturn.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/constructorDeclarations/constructorWithExpressionLessReturn.ts === +class C { +>C : C + + constructor() { + return; + } +} + +class D { +>D : D + + x: number; +>x : number + + constructor() { + return; + } +} + +class E { +>E : E + + constructor(public x: number) { +>x : number + + return; + } +} + +class F { +>F : F +>T : T + + constructor(public x: T) { +>x : T +>T : T + + return; + } +} diff --git a/tests/baselines/reference/constructorsWithSpecializedSignatures.js b/tests/baselines/reference/constructorsWithSpecializedSignatures.js index 771acaa67ca..4faa5e4030a 100644 --- a/tests/baselines/reference/constructorsWithSpecializedSignatures.js +++ b/tests/baselines/reference/constructorsWithSpecializedSignatures.js @@ -44,13 +44,15 @@ interface I2 { } //// [constructorsWithSpecializedSignatures.js] +// errors var D = (function () { function D(x) { } return D; })(); +// overloads are ok var D2 = (function () { function D2(x) { - } + } // error return D2; })(); diff --git a/tests/baselines/reference/contextualSigInstantiationRestParams.types b/tests/baselines/reference/contextualSigInstantiationRestParams.types new file mode 100644 index 00000000000..76a00310fd9 --- /dev/null +++ b/tests/baselines/reference/contextualSigInstantiationRestParams.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/contextualSigInstantiationRestParams.ts === +declare function toInstantiate(a?: A, b?: B): B; +>toInstantiate : (a?: A, b?: B) => B +>A : A +>B : B +>a : A +>A : A +>b : B +>B : B +>B : B + +declare function contextual(...s: string[]): string +>contextual : (...s: string[]) => string +>s : string[] + +var sig: typeof contextual = toInstantiate; +>sig : (...s: string[]) => string +>contextual : (...s: string[]) => string +>toInstantiate : (a?: A, b?: B) => B + diff --git a/tests/baselines/reference/contextualSignatureInstantiation1.js b/tests/baselines/reference/contextualSignatureInstantiation1.js index ea83871d445..843ac5140f0 100644 --- a/tests/baselines/reference/contextualSignatureInstantiation1.js +++ b/tests/baselines/reference/contextualSignatureInstantiation1.js @@ -9,6 +9,6 @@ var r100 = map2(e2); // type arg inference should fail for S since a generic lam //// [contextualSignatureInstantiation1.js] var e = function (x, y) { return x.length; }; -var r99 = map(e); +var r99 = map(e); // should be {}[] for S since a generic lambda is not inferentially typed var e2 = function (x, y) { return x.length; }; -var r100 = map2(e2); +var r100 = map2(e2); // type arg inference should fail for S since a generic lambda is not inferentially typed. Falls back to { length: number } diff --git a/tests/baselines/reference/contextualSignatureInstantiation1.types b/tests/baselines/reference/contextualSignatureInstantiation1.types new file mode 100644 index 00000000000..3a95e87b76f --- /dev/null +++ b/tests/baselines/reference/contextualSignatureInstantiation1.types @@ -0,0 +1,60 @@ +=== tests/cases/compiler/contextualSignatureInstantiation1.ts === +declare function map(f: (x: S) => T): (a: S[]) => T[]; +>map : (f: (x: S) => T) => (a: S[]) => T[] +>S : S +>T : T +>f : (x: S) => T +>x : S +>S : S +>T : T +>a : S[] +>S : S +>T : T + +var e = (x: string, y?: K) => x.length; +>e : (x: string, y?: K) => number +>(x: string, y?: K) => x.length : (x: string, y?: K) => number +>K : K +>x : string +>y : K +>K : K +>x.length : number +>x : string +>length : number + +var r99 = map(e); // should be {}[] for S since a generic lambda is not inferentially typed +>r99 : (a: {}[]) => number[] +>map(e) : (a: {}[]) => number[] +>map : (f: (x: S) => T) => (a: S[]) => T[] +>e : (x: string, y?: K) => number + +declare function map2(f: (x: S) => T): (a: S[]) => T[]; +>map2 : (f: (x: S) => T) => (a: S[]) => T[] +>S : S +>length : number +>T : T +>f : (x: S) => T +>x : S +>S : S +>T : T +>a : S[] +>S : S +>T : T + +var e2 = (x: string, y?: K) => x.length; +>e2 : (x: string, y?: K) => number +>(x: string, y?: K) => x.length : (x: string, y?: K) => number +>K : K +>x : string +>y : K +>K : K +>x.length : number +>x : string +>length : number + +var r100 = map2(e2); // type arg inference should fail for S since a generic lambda is not inferentially typed. Falls back to { length: number } +>r100 : (a: { length: number; }[]) => number[] +>map2(e2) : (a: { length: number; }[]) => number[] +>map2 : (f: (x: S) => T) => (a: S[]) => T[] +>e2 : (x: string, y?: K) => number + diff --git a/tests/baselines/reference/contextualSignatureInstantiation2.js b/tests/baselines/reference/contextualSignatureInstantiation2.js index c88467d9fb3..78bc5a88856 100644 --- a/tests/baselines/reference/contextualSignatureInstantiation2.js +++ b/tests/baselines/reference/contextualSignatureInstantiation2.js @@ -6,6 +6,7 @@ var id: (x:T) => T; var r23 = dot(id)(id); //// [contextualSignatureInstantiation2.js] +// dot f g x = f(g(x)) var dot; dot = function (f) { return function (g) { return function (x) { return f(g(x)); }; }; }; var id; diff --git a/tests/baselines/reference/contextualSignatureInstantiation2.types b/tests/baselines/reference/contextualSignatureInstantiation2.types new file mode 100644 index 00000000000..3c28c472517 --- /dev/null +++ b/tests/baselines/reference/contextualSignatureInstantiation2.types @@ -0,0 +1,61 @@ +=== tests/cases/compiler/contextualSignatureInstantiation2.ts === +// dot f g x = f(g(x)) +var dot: (f: (_: T) => S) => (g: (_: U) => T) => (_: U) => S; +>dot : (f: (_: T) => S) => (g: (_: U) => T) => (_: U) => S +>T : T +>S : S +>f : (_: T) => S +>_ : T +>T : T +>S : S +>U : U +>g : (_: U) => T +>_ : U +>U : U +>T : T +>_ : U +>U : U +>S : S + +dot = (f: (_: T) => S) => (g: (_: U) => T): (r:U) => S => (x) => f(g(x)); +>dot = (f: (_: T) => S) => (g: (_: U) => T): (r:U) => S => (x) => f(g(x)) : (f: (_: T) => S) => (g: (_: U) => T) => (r: U) => S +>dot : (f: (_: T) => S) => (g: (_: U) => T) => (_: U) => S +>(f: (_: T) => S) => (g: (_: U) => T): (r:U) => S => (x) => f(g(x)) : (f: (_: T) => S) => (g: (_: U) => T) => (r: U) => S +>T : T +>S : S +>f : (_: T) => S +>_ : T +>T : T +>S : S +>(g: (_: U) => T): (r:U) => S => (x) => f(g(x)) : (g: (_: U) => T) => (r: U) => S +>U : U +>g : (_: U) => T +>_ : U +>U : U +>T : T +>r : U +>U : U +>S : S +>(x) => f(g(x)) : (x: U) => S +>x : U +>f(g(x)) : S +>f : (_: T) => S +>g(x) : T +>g : (_: U) => T +>x : U + +var id: (x:T) => T; +>id : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var r23 = dot(id)(id); +>r23 : (_: {}) => {} +>dot(id)(id) : (_: {}) => {} +>dot(id) : (g: (_: U) => {}) => (_: U) => {} +>dot : (f: (_: T) => S) => (g: (_: U) => T) => (_: U) => S +>id : (x: T) => T +>id : (x: T) => T + diff --git a/tests/baselines/reference/contextualSignatureInstantiation3.js b/tests/baselines/reference/contextualSignatureInstantiation3.js index 44737476482..9198a02ccda 100644 --- a/tests/baselines/reference/contextualSignatureInstantiation3.js +++ b/tests/baselines/reference/contextualSignatureInstantiation3.js @@ -34,9 +34,10 @@ function singleton(x) { return [x]; } var xs = [1, 2, 3]; +// Have compiler check that we get the correct types var v1; -var v1 = xs.map(identity); -var v1 = map(xs, identity); +var v1 = xs.map(identity); // Error if not number[] +var v1 = map(xs, identity); // Error if not number[] var v2; -var v2 = xs.map(singleton); -var v2 = map(xs, singleton); +var v2 = xs.map(singleton); // Error if not number[][] +var v2 = map(xs, singleton); // Error if not number[][] diff --git a/tests/baselines/reference/contextualSignatureInstantiation3.types b/tests/baselines/reference/contextualSignatureInstantiation3.types new file mode 100644 index 00000000000..c6ed5a7e97d --- /dev/null +++ b/tests/baselines/reference/contextualSignatureInstantiation3.types @@ -0,0 +1,83 @@ +=== tests/cases/compiler/contextualSignatureInstantiation3.ts === +function map(items: T[], f: (x: T) => U): U[]{ +>map : (items: T[], f: (x: T) => U) => U[] +>T : T +>U : U +>items : T[] +>T : T +>f : (x: T) => U +>x : T +>T : T +>U : U +>U : U + + return items.map(f); +>items.map(f) : U[] +>items.map : (callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any) => U[] +>items : T[] +>map : (callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any) => U[] +>f : (x: T) => U +} + +function identity(x: T) { +>identity : (x: T) => T +>T : T +>x : T +>T : T + + return x; +>x : T +} + +function singleton(x: T) { +>singleton : (x: T) => T[] +>T : T +>x : T +>T : T + + return [x]; +>[x] : T[] +>x : T +} + +var xs = [1, 2, 3]; +>xs : number[] +>[1, 2, 3] : number[] + +// Have compiler check that we get the correct types +var v1: number[]; +>v1 : number[] + +var v1 = xs.map(identity); // Error if not number[] +>v1 : number[] +>xs.map(identity) : number[] +>xs.map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>xs : number[] +>map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>identity : (x: T) => T + +var v1 = map(xs, identity); // Error if not number[] +>v1 : number[] +>map(xs, identity) : number[] +>map : (items: T[], f: (x: T) => U) => U[] +>xs : number[] +>identity : (x: T) => T + +var v2: number[][]; +>v2 : number[][] + +var v2 = xs.map(singleton); // Error if not number[][] +>v2 : number[][] +>xs.map(singleton) : number[][] +>xs.map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>xs : number[] +>map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>singleton : (x: T) => T[] + +var v2 = map(xs, singleton); // Error if not number[][] +>v2 : number[][] +>map(xs, singleton) : number[][] +>map : (items: T[], f: (x: T) => U) => U[] +>xs : number[] +>singleton : (x: T) => T[] + diff --git a/tests/baselines/reference/contextualSignatureInstantiationWithTypeParameterConstrainedToOuterTypeParameter.js b/tests/baselines/reference/contextualSignatureInstantiationWithTypeParameterConstrainedToOuterTypeParameter.js index eb6213f381c..bd76a746ac9 100644 --- a/tests/baselines/reference/contextualSignatureInstantiationWithTypeParameterConstrainedToOuterTypeParameter.js +++ b/tests/baselines/reference/contextualSignatureInstantiationWithTypeParameterConstrainedToOuterTypeParameter.js @@ -14,4 +14,4 @@ function f() { return g; } var h; -var x = h("", f()); +var x = h("", f()); // Call should succeed and x should be string. All type parameters should be instantiated to string diff --git a/tests/baselines/reference/contextualSignatureInstantiationWithTypeParameterConstrainedToOuterTypeParameter.types b/tests/baselines/reference/contextualSignatureInstantiationWithTypeParameterConstrainedToOuterTypeParameter.types new file mode 100644 index 00000000000..89ea3028d94 --- /dev/null +++ b/tests/baselines/reference/contextualSignatureInstantiationWithTypeParameterConstrainedToOuterTypeParameter.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/contextualSignatureInstantiationWithTypeParameterConstrainedToOuterTypeParameter.ts === +function f() { +>f : () => (u: U) => U +>T : T + + function g(u: U): U { return null } +>g : (u: U) => U +>U : U +>T : T +>u : U +>U : U +>U : U + + return g; +>g : (u: U) => U +} +var h: (v: V, func: (v: V) => W) => W; +>h : (v: V, func: (v: V) => W) => W +>V : V +>W : W +>v : V +>V : V +>func : (v: V) => W +>v : V +>V : V +>W : W +>W : W + +var x = h("", f()); // Call should succeed and x should be string. All type parameters should be instantiated to string +>x : string +>h("", f()) : string +>h : (v: V, func: (v: V) => W) => W +>f() : (u: U) => U +>f : () => (u: U) => U + diff --git a/tests/baselines/reference/contextualSignatureInstatiationContravariance.js b/tests/baselines/reference/contextualSignatureInstatiationContravariance.js index f2ea802c81e..6e731d61713 100644 --- a/tests/baselines/reference/contextualSignatureInstatiationContravariance.js +++ b/tests/baselines/reference/contextualSignatureInstatiationContravariance.js @@ -14,6 +14,6 @@ h2 = f2; // valid because Giraffe satisfies the constraint. It is safe in the tr //// [contextualSignatureInstatiationContravariance.js] var f2; var g2; -g2 = f2; +g2 = f2; // valid because both Giraffe and Elephant satisfy the constraint. T is Animal var h2; -h2 = f2; +h2 = f2; // valid because Giraffe satisfies the constraint. It is safe in the traditional contravariant fashion. diff --git a/tests/baselines/reference/contextualSignatureInstatiationContravariance.types b/tests/baselines/reference/contextualSignatureInstatiationContravariance.types new file mode 100644 index 00000000000..d1d8a38dbc4 --- /dev/null +++ b/tests/baselines/reference/contextualSignatureInstatiationContravariance.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/contextualSignatureInstatiationContravariance.ts === +interface Animal { x } +>Animal : Animal +>x : any + +interface Giraffe extends Animal { y } +>Giraffe : Giraffe +>Animal : Animal +>y : any + +interface Elephant extends Animal { y2 } +>Elephant : Elephant +>Animal : Animal +>y2 : any + +var f2: (x: T, y: T) => void; +>f2 : (x: T, y: T) => void +>T : T +>Animal : Animal +>x : T +>T : T +>y : T +>T : T + +var g2: (g: Giraffe, e: Elephant) => void; +>g2 : (g: Giraffe, e: Elephant) => void +>g : Giraffe +>Giraffe : Giraffe +>e : Elephant +>Elephant : Elephant + +g2 = f2; // valid because both Giraffe and Elephant satisfy the constraint. T is Animal +>g2 = f2 : (x: T, y: T) => void +>g2 : (g: Giraffe, e: Elephant) => void +>f2 : (x: T, y: T) => void + +var h2: (g1: Giraffe, g2: Giraffe) => void; +>h2 : (g1: Giraffe, g2: Giraffe) => void +>g1 : Giraffe +>Giraffe : Giraffe +>g2 : Giraffe +>Giraffe : Giraffe + +h2 = f2; // valid because Giraffe satisfies the constraint. It is safe in the traditional contravariant fashion. +>h2 = f2 : (x: T, y: T) => void +>h2 : (g1: Giraffe, g2: Giraffe) => void +>f2 : (x: T, y: T) => void + diff --git a/tests/baselines/reference/contextualSignatureInstatiationCovariance.js b/tests/baselines/reference/contextualSignatureInstatiationCovariance.js index c766c43e510..dd37210f96c 100644 --- a/tests/baselines/reference/contextualSignatureInstatiationCovariance.js +++ b/tests/baselines/reference/contextualSignatureInstatiationCovariance.js @@ -14,6 +14,6 @@ h2 = f2; // Animal does not satisfy the constraint, but T is at worst a Giraffe //// [contextualSignatureInstatiationCovariance.js] var f2; var g2; -g2 = f2; +g2 = f2; // While neither Animal nor TallThing satisfy the constraint, T is at worst a Giraffe and compatible with both via covariance. var h2; -h2 = f2; +h2 = f2; // Animal does not satisfy the constraint, but T is at worst a Giraffe and compatible with Animal via covariance. diff --git a/tests/baselines/reference/contextualSignatureInstatiationCovariance.types b/tests/baselines/reference/contextualSignatureInstatiationCovariance.types new file mode 100644 index 00000000000..40ec11a473b --- /dev/null +++ b/tests/baselines/reference/contextualSignatureInstatiationCovariance.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/contextualSignatureInstatiationCovariance.ts === +interface Animal { x } +>Animal : Animal +>x : any + +interface TallThing { x2 } +>TallThing : TallThing +>x2 : any + +interface Giraffe extends Animal, TallThing { y } +>Giraffe : Giraffe +>Animal : Animal +>TallThing : TallThing +>y : any + +var f2: (x: T, y: T) => void; +>f2 : (x: T, y: T) => void +>T : T +>Giraffe : Giraffe +>x : T +>T : T +>y : T +>T : T + +var g2: (a: Animal, t: TallThing) => void; +>g2 : (a: Animal, t: TallThing) => void +>a : Animal +>Animal : Animal +>t : TallThing +>TallThing : TallThing + +g2 = f2; // While neither Animal nor TallThing satisfy the constraint, T is at worst a Giraffe and compatible with both via covariance. +>g2 = f2 : (x: T, y: T) => void +>g2 : (a: Animal, t: TallThing) => void +>f2 : (x: T, y: T) => void + +var h2: (a1: Animal, a2: Animal) => void; +>h2 : (a1: Animal, a2: Animal) => void +>a1 : Animal +>Animal : Animal +>a2 : Animal +>Animal : Animal + +h2 = f2; // Animal does not satisfy the constraint, but T is at worst a Giraffe and compatible with Animal via covariance. +>h2 = f2 : (x: T, y: T) => void +>h2 : (a1: Animal, a2: Animal) => void +>f2 : (x: T, y: T) => void + diff --git a/tests/baselines/reference/contextualTypeAny.types b/tests/baselines/reference/contextualTypeAny.types new file mode 100644 index 00000000000..c95bfd70ecf --- /dev/null +++ b/tests/baselines/reference/contextualTypeAny.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/contextualTypeAny.ts === +var x: any; +>x : any + +var obj: { [s: string]: number } = { p: "", q: x }; +>obj : { [x: string]: number; } +>s : string +>{ p: "", q: x } : { [x: string]: any; p: string; q: any; } +>p : string +>q : any +>x : any + +var arr: number[] = ["", x]; +>arr : number[] +>["", x] : any[] +>x : any + diff --git a/tests/baselines/reference/contextualTypeAppliedToVarArgs.types b/tests/baselines/reference/contextualTypeAppliedToVarArgs.types new file mode 100644 index 00000000000..cbd16aea35f --- /dev/null +++ b/tests/baselines/reference/contextualTypeAppliedToVarArgs.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/contextualTypeAppliedToVarArgs.ts === +function delegate(instance: any, method: (...args: any[]) => any, data?: any): (...args: any[]) => any { +>delegate : (instance: any, method: (...args: any[]) => any, data?: any) => (...args: any[]) => any +>instance : any +>method : (...args: any[]) => any +>args : any[] +>data : any +>args : any[] + + return function () { }; +>function () { } : () => void +} + +class Foo{ +>Foo : Foo + + + Bar() { +>Bar : () => void + + delegate(this, function (source, args2) +>delegate(this, function (source, args2) { var a = source.node; var b = args2.node; } ) : (...args: any[]) => any +>delegate : (instance: any, method: (...args: any[]) => any, data?: any) => (...args: any[]) => any +>this : Foo +>function (source, args2) { var a = source.node; var b = args2.node; } : (source: any, args2: any) => void +>source : any +>args2 : any + { + var a = source.node; +>a : any +>source.node : any +>source : any +>node : any + + var b = args2.node; +>b : any +>args2.node : any +>args2 : any +>node : any + + } ); + } +} + diff --git a/tests/baselines/reference/contextualTypeArrayReturnType.types b/tests/baselines/reference/contextualTypeArrayReturnType.types new file mode 100644 index 00000000000..b0cd03f8510 --- /dev/null +++ b/tests/baselines/reference/contextualTypeArrayReturnType.types @@ -0,0 +1,45 @@ +=== tests/cases/compiler/contextualTypeArrayReturnType.ts === +interface IBookStyle { +>IBookStyle : IBookStyle + + initialLeftPageTransforms?: (width: number) => NamedTransform[]; +>initialLeftPageTransforms : (width: number) => NamedTransform[] +>width : number +>NamedTransform : NamedTransform +} + +interface NamedTransform { +>NamedTransform : NamedTransform + + [name: string]: Transform3D; +>name : string +>Transform3D : Transform3D +} + +interface Transform3D { +>Transform3D : Transform3D + + cachedCss: string; +>cachedCss : string +} + +var style: IBookStyle = { +>style : IBookStyle +>IBookStyle : IBookStyle +>{ initialLeftPageTransforms: (width: number) => { return [ {'ry': null } ]; }} : { initialLeftPageTransforms: (width: number) => NamedTransform[]; } + + initialLeftPageTransforms: (width: number) => { +>initialLeftPageTransforms : (width: number) => NamedTransform[] +>(width: number) => { return [ {'ry': null } ]; } : (width: number) => NamedTransform[] +>width : number + + return [ +>[ {'ry': null } ] : NamedTransform[] + + {'ry': null } +>{'ry': null } : { [x: string]: Transform3D; 'ry': null; } + + ]; + } +} + diff --git a/tests/baselines/reference/contextualTyping.js b/tests/baselines/reference/contextualTyping.js index 30a1d614141..6d9f1911038 100644 --- a/tests/baselines/reference/contextualTyping.js +++ b/tests/baselines/reference/contextualTyping.js @@ -232,4 +232,4 @@ var x: B = { }; //// [contextualTyping.js] -var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map \ No newline at end of file +// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map \ No newline at end of file diff --git a/tests/baselines/reference/contextualTyping.js.map b/tests/baselines/reference/contextualTyping.js.map index ec75015e5b0..14455bb0ba3 100644 --- a/tests/baselines/reference/contextualTyping.js.map +++ b/tests/baselines/reference/contextualTyping.js.map @@ -1,2 +1,2 @@ //// [contextualTyping.js.map] -{"version":3,"file":"contextualTyping.js","sourceRoot":"","sources":["contextualTyping.ts"],"names":["C1T5","C1T5.constructor","C2T5","C4T5","C4T5.constructor","C5T5","c9t5","C11t5","C11t5.constructor","EF1","Point"],"mappings":"AAaA,IAAM,IAAI;IAAVA,SAAMA,IAAIA;QACNC,QAAGA,GAAqCA,UAASA,CAACA;YAC9C,MAAM,CAAC,CAAC,CAAC;QACb,CAAC,CAAAA;IACLA,CAACA;IAADD,WAACA;AAADA,CAACA,AAJD,IAIC;AAGD,IAAO,IAAI,CAIV;AAJD,WAAO,IAAI,EAAC,CAAC;IACEE,QAAGA,GAAqCA,UAASA,CAACA;QACzD,MAAM,CAAC,CAAC,CAAC;IACb,CAAC,CAAAA;AACLA,CAACA,EAJM,IAAI,KAAJ,IAAI,QAIV;AAGD,IAAI,IAAI,GAA0B,CAAC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC,CAAC;AAC7D,IAAI,IAAI,GAAS,CAAC;IACd,CAAC,EAAE,CAAC;CACP,CAAC,CAAA;AACF,IAAI,IAAI,GAAa,EAAE,CAAC;AACxB,IAAI,IAAI,GAAe;IAAa,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AACxD,IAAI,IAAI,GAAwB,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAClE,IAAI,IAAI,GAAmC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAChF,IAAI,IAAI,GAGJ,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC;AAE9B,IAAI,IAAI,GAAqC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC;AACvE,IAAI,IAAI,GAAe,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;AAC/B,IAAI,KAAK,GAAW,CAAO,CAAC,EAAE,CAAC,EAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,IAAI,KAAK,GAAwC,CAAC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC;AAChF,IAAI,KAAK,GAAS;IACd,GAAG,EAAQ,CAAC,EAAE,CAAC;CAClB,CAAA;AACD,IAAI,KAAK,GAAS,CAAC;IACf,CAAC,EAAE,UAAS,CAAC,EAAE,CAAC;QAAI,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;CAClC,CAAC,CAAA;AACF,IAAI,KAAK,GAAS,CAAC;IACf,CAAC,EAAE,EAAE;CACR,CAAC,CAAA;AAGF,IAAM,IAAI;IAENC,SAFEA,IAAIA;QAGFC,IAAIA,CAACA,GAAGA,GAAGA,UAASA,CAACA,EAAEA,CAACA;YACpB,MAAM,CAAC,CAAC,CAAC;QACb,CAAC,CAAAA;IACLA,CAACA;IACLD,WAACA;AAADA,CAACA,AAPD,IAOC;AAGD,IAAO,IAAI,CAKV;AALD,WAAO,IAAI,EAAC,CAAC;IACEE,QAAqCA,CAACA;IACjDA,QAAGA,GAAGA,UAASA,CAACA,EAAEA,CAACA;QACf,MAAM,CAAC,CAAC,CAAC;IACb,CAAC,CAAAA;AACLA,CAACA,EALM,IAAI,KAAJ,IAAI,QAKV;AAGD,IAAI,IAAyB,CAAC;AAC9B,IAAI,GAAwB,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAG9D,IAAI,IAAY,CAAC;AACjB,IAAI,CAAC,CAAC,CAAC,GAAS,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;AAuBzB,IAAI,KAAK,GAkBS,CAAC,EAAE,CAAC,CAAC;AAEvB,KAAK,CAAC,EAAE,GAAG,CAAC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC,CAAC;AACtC,KAAK,CAAC,EAAE,GAAS,CAAC;IACd,CAAC,EAAE,CAAC;CACP,CAAC,CAAC;AACH,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;AACd,KAAK,CAAC,EAAE,GAAG;IAAa,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAC5C,KAAK,CAAC,EAAE,GAAG,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAC7C,KAAK,CAAC,EAAE,GAAG,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAChD,KAAK,CAAC,EAAE,GAAG,UAAS,CAAS;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC;AAE5C,KAAK,CAAC,EAAE,GAAG,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC;AACrC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;AACnB,KAAK,CAAC,GAAG,GAAG,CAAO,CAAC,EAAE,CAAC,EAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,KAAK,CAAC,GAAG,GAAG,CAAC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC;AAC3C,KAAK,CAAC,GAAG,GAAG;IACR,GAAG,EAAQ,CAAC,EAAE,CAAC;CAClB,CAAA;AACD,KAAK,CAAC,GAAG,GAAS,CAAC;IACf,CAAC,EAAE,UAAS,CAAC,EAAE,CAAC;QAAI,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;CAClC,CAAC,CAAA;AACF,KAAK,CAAC,GAAG,GAAS,CAAC;IACf,CAAC,EAAE,EAAE;CACR,CAAC,CAAA;AAEF,SAAS,IAAI,CAAC,CAAsB;AAAGC,CAACA;AAAA,CAAC;AACzC,IAAI,CAAC,UAAS,CAAC;IACX,MAAM,CAAO,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAGH,IAAI,KAAK,GAA8B;IAAa,MAAM,CAAC,UAAS,CAAC;QAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;IAAC,CAAC,CAAA;AAAC,CAAC,CAAC;AAG/F,IAAM,KAAK;IAAGC,SAARA,KAAKA,CAAeA,CAAsBA;IAAIC,CAACA;IAACD,YAACA;AAADA,CAACA,AAAvD,IAAuD;AAAA,CAAC;AACxD,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC,CAAC;AAGrD,IAAI,KAAK,GAA2B,CAAC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC,CAAC;AAC/D,IAAI,KAAK,GAAU,CAAC;IAChB,CAAC,EAAE,CAAC;CACP,CAAC,CAAC;AACH,IAAI,KAAK,GAAc,EAAE,CAAC;AAC1B,IAAI,KAAK,GAAgB;IAAa,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAC1D,IAAI,KAAK,GAAyB,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AACpE,IAAI,KAAK,GAAoC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAClF,IAAI,KAAK,GAGN,UAAS,CAAQ;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC;AAEnC,IAAI,KAAK,GAAsC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC;AACzE,IAAI,KAAK,GAAgB,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,GAAY,CAAO,CAAC,EAAE,CAAC,EAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,IAAI,MAAM,GAAyC,CAAC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC;AAClF,IAAI,MAAM,GAAU;IAChB,GAAG,EAAQ,CAAC,EAAE,CAAC;CAClB,CAAA;AACD,IAAI,MAAM,GAAU,CAAC;IACjB,CAAC,EAAE,UAAS,CAAC,EAAE,CAAC;QAAI,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;CAClC,CAAC,CAAA;AACF,IAAI,MAAM,GAAU,CAAC;IACjB,CAAC,EAAE,EAAE;CACR,CAAC,CAAA;AAOF,SAAS,GAAG,CAAC,CAAC,EAAC,CAAC;IAAIE,MAAMA,CAACA,CAACA,GAACA,CAACA,CAACA;AAACA,CAACA;AAEjC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;AAcnB,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;IACfC,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;IACXA,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;IAEXA,MAAMA,CAACA,IAAIA,CAACA;AAChBA,CAACA;AAED,KAAK,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/B,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,UAAS,EAAE,EAAE,EAAE;IACjC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,GAAG;IACd,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,GAAG,EAAE,UAAS,EAAE,EAAE,EAAE;QAChB,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;CACJ,CAAC;AAIF,IAAI,CAAC,GAAM,EAAG,CAAC"} \ No newline at end of file +{"version":3,"file":"contextualTyping.js","sourceRoot":"","sources":["contextualTyping.ts"],"names":["C1T5","C1T5.constructor","C2T5","C4T5","C4T5.constructor","C5T5","c9t5","C11t5","C11t5.constructor","EF1","Point"],"mappings":"AAaA,AADA,sCAAsC;IAChC,IAAI;IAAVA,SAAMA,IAAIA;QACNC,QAAGA,GAAqCA,UAASA,CAACA;YAC9C,MAAM,CAAC,CAAC,CAAC;QACb,CAAC,CAAAA;IACLA,CAACA;IAADD,WAACA;AAADA,CAACA,AAJD,IAIC;AAGD,AADA,uCAAuC;AACvC,IAAO,IAAI,CAIV;AAJD,WAAO,IAAI,EAAC,CAAC;IACEE,QAAGA,GAAqCA,UAASA,CAACA;QACzD,MAAM,CAAC,CAAC,CAAC;IACb,CAAC,CAAAA;AACLA,CAACA,EAJM,IAAI,KAAJ,IAAI,QAIV;AAGD,AADA,gCAAgC;IAC5B,IAAI,GAA0B,CAAC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC,CAAC;AAC7D,IAAI,IAAI,GAAS,CAAC;IACd,CAAC,EAAE,CAAC;CACP,CAAC,CAAA;AACF,IAAI,IAAI,GAAa,EAAE,CAAC;AACxB,IAAI,IAAI,GAAe;IAAa,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AACxD,IAAI,IAAI,GAAwB,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAClE,IAAI,IAAI,GAAmC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAChF,IAAI,IAAI,GAGJ,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC;AAE9B,IAAI,IAAI,GAAqC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC;AACvE,IAAI,IAAI,GAAe,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;AAC/B,IAAI,KAAK,GAAW,CAAO,CAAC,EAAE,CAAC,EAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,IAAI,KAAK,GAAwC,CAAC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC;AAChF,IAAI,KAAK,GAAS;IACd,GAAG,EAAQ,CAAC,EAAE,CAAC;CAClB,CAAA;AACD,IAAI,KAAK,GAAS,CAAC;IACf,CAAC,EAAE,UAAS,CAAC,EAAE,CAAC;QAAI,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;CAClC,CAAC,CAAA;AACF,IAAI,KAAK,GAAS,CAAC;IACf,CAAC,EAAE,EAAE;CACR,CAAC,CAAA;AAGF,AADA,qCAAqC;IAC/B,IAAI;IAENC,SAFEA,IAAIA;QAGFC,IAAIA,CAACA,GAAGA,GAAGA,UAASA,CAACA,EAAEA,CAACA;YACpB,MAAM,CAAC,CAAC,CAAC;QACb,CAAC,CAAAA;IACLA,CAACA;IACLD,WAACA;AAADA,CAACA,AAPD,IAOC;AAGD,AADA,sCAAsC;AACtC,IAAO,IAAI,CAKV;AALD,WAAO,IAAI,EAAC,CAAC;IACEE,QAAqCA,CAACA;IACjDA,QAAGA,GAAGA,UAASA,CAACA,EAAEA,CAACA;QACf,MAAM,CAAC,CAAC,CAAC;IACb,CAAC,CAAAA;AACLA,CAACA,EALM,IAAI,KAAJ,IAAI,QAKV;AAGD,AADA,+BAA+B;IAC3B,IAAyB,CAAC;AAC9B,IAAI,GAAwB,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAG9D,AADA,kCAAkC;IAC9B,IAAY,CAAC;AACjB,IAAI,CAAC,CAAC,CAAC,GAAS,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;AAuBzB,IAAI,KAAK,GAkBS,CAAC,EAAE,CAAC,CAAC;AAEvB,KAAK,CAAC,EAAE,GAAG,CAAC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC,CAAC;AACtC,KAAK,CAAC,EAAE,GAAS,CAAC;IACd,CAAC,EAAE,CAAC;CACP,CAAC,CAAC;AACH,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;AACd,KAAK,CAAC,EAAE,GAAG;IAAa,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAC5C,KAAK,CAAC,EAAE,GAAG,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAC7C,KAAK,CAAC,EAAE,GAAG,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAChD,KAAK,CAAC,EAAE,GAAG,UAAS,CAAS;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC;AAE5C,KAAK,CAAC,EAAE,GAAG,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC;AACrC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;AACnB,KAAK,CAAC,GAAG,GAAG,CAAO,CAAC,EAAE,CAAC,EAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,KAAK,CAAC,GAAG,GAAG,CAAC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC;AAC3C,KAAK,CAAC,GAAG,GAAG;IACR,GAAG,EAAQ,CAAC,EAAE,CAAC;CAClB,CAAA;AACD,KAAK,CAAC,GAAG,GAAS,CAAC;IACf,CAAC,EAAE,UAAS,CAAC,EAAE,CAAC;QAAI,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;CAClC,CAAC,CAAA;AACF,KAAK,CAAC,GAAG,GAAS,CAAC;IACf,CAAC,EAAE,EAAE;CACR,CAAC,CAAA;AAEF,AADA,yBAAyB;SAChB,IAAI,CAAC,CAAsB;AAAGC,CAACA;AAAA,CAAC;AACzC,IAAI,CAAC,UAAS,CAAC;IACX,MAAM,CAAO,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAGH,AADA,4BAA4B;IACxB,KAAK,GAA8B;IAAa,MAAM,CAAC,UAAS,CAAC;QAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;IAAC,CAAC,CAAA;AAAC,CAAC,CAAC;AAG/F,AADA,0BAA0B;IACpB,KAAK;IAAGC,SAARA,KAAKA,CAAeA,CAAsBA;IAAIC,CAACA;IAACD,YAACA;AAADA,CAACA,AAAvD,IAAuD;AAAA,CAAC;AACxD,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC,CAAC;AAGrD,AADA,qCAAqC;IACjC,KAAK,GAA2B,CAAC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC,CAAC;AAC/D,IAAI,KAAK,GAAU,CAAC;IAChB,CAAC,EAAE,CAAC;CACP,CAAC,CAAC;AACH,IAAI,KAAK,GAAc,EAAE,CAAC;AAC1B,IAAI,KAAK,GAAgB;IAAa,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAC1D,IAAI,KAAK,GAAyB,UAAS,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AACpE,IAAI,KAAK,GAAoC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAO,CAAC,EAAE,CAAC,CAAA;AAAC,CAAC,CAAC;AAClF,IAAI,KAAK,GAGN,UAAS,CAAQ;IAAI,MAAM,CAAC,CAAC,CAAA;AAAC,CAAC,CAAC;AAEnC,IAAI,KAAK,GAAsC,UAAS,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC;AACzE,IAAI,KAAK,GAAgB,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,GAAY,CAAO,CAAC,EAAE,CAAC,EAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,IAAI,MAAM,GAAyC,CAAC,UAAS,CAAC,EAAE,CAAC;IAAI,MAAM,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC;AAClF,IAAI,MAAM,GAAU;IAChB,GAAG,EAAQ,CAAC,EAAE,CAAC;CAClB,CAAA;AACD,IAAI,MAAM,GAAU,CAAC;IACjB,CAAC,EAAE,UAAS,CAAC,EAAE,CAAC;QAAI,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;CAClC,CAAC,CAAA;AACF,IAAI,MAAM,GAAU,CAAC;IACjB,CAAC,EAAE,EAAE;CACR,CAAC,CAAA;AAOF,SAAS,GAAG,CAAC,CAAC,EAAC,CAAC;IAAIE,MAAMA,CAACA,CAACA,GAACA,CAACA,CAACA;AAACA,CAACA;AAEjC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;AAcnB,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;IACfC,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;IACXA,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;IAEXA,MAAMA,CAACA,IAAIA,CAACA;AAChBA,CAACA;AAED,KAAK,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/B,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,UAAS,EAAE,EAAE,EAAE;IACjC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,GAAG;IACd,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,GAAG,EAAE,UAAS,EAAE,EAAE,EAAE;QAChB,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;CACJ,CAAC;AAIF,IAAI,CAAC,GAAM,EAAG,CAAC"} \ No newline at end of file diff --git a/tests/baselines/reference/contextualTyping.sourcemap.txt b/tests/baselines/reference/contextualTyping.sourcemap.txt index 7a61448e62a..1befbbc01d4 100644 --- a/tests/baselines/reference/contextualTyping.sourcemap.txt +++ b/tests/baselines/reference/contextualTyping.sourcemap.txt @@ -8,10 +8,10 @@ sources: contextualTyping.ts emittedFile:tests/cases/compiler/contextualTyping.js sourceFile:contextualTyping.ts ------------------------------------------------------------------- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1 > -2 >^^^^ -3 > ^^^^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1 >// DEFAULT INTERFACES >interface IFoo { > n: number; @@ -26,93 +26,102 @@ sourceFile:contextualTyping.ts > >// CONTEXT: Class property declaration > -2 >class -3 > C1T5 +2 > +3 >// CONTEXT: Class property declaration 1 >Emitted(1, 1) Source(14, 1) + SourceIndex(0) -2 >Emitted(1, 5) Source(14, 7) + SourceIndex(0) -3 >Emitted(1, 9) Source(14, 11) + SourceIndex(0) +2 >Emitted(1, 1) Source(13, 1) + SourceIndex(0) +3 >Emitted(1, 39) Source(13, 39) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +2 > ^^^^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >class +2 > C1T5 +1->Emitted(2, 5) Source(14, 7) + SourceIndex(0) +2 >Emitted(2, 9) Source(14, 11) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^^ 3 > ^^^^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 > class 3 > C1T5 -1->Emitted(2, 5) Source(14, 1) + SourceIndex(0) name (C1T5) -2 >Emitted(2, 14) Source(14, 7) + SourceIndex(0) name (C1T5) -3 >Emitted(2, 18) Source(14, 11) + SourceIndex(0) name (C1T5) +1->Emitted(3, 5) Source(14, 1) + SourceIndex(0) name (C1T5) +2 >Emitted(3, 14) Source(14, 7) + SourceIndex(0) name (C1T5) +3 >Emitted(3, 18) Source(14, 11) + SourceIndex(0) name (C1T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^^^^^ 3 > ^^^ 4 > ^^^^^^^^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> { > 2 > foo 3 > : (i: number, s: string) => number = 4 > function( 5 > i -1->Emitted(3, 9) Source(15, 5) + SourceIndex(0) name (C1T5.constructor) -2 >Emitted(3, 17) Source(15, 8) + SourceIndex(0) name (C1T5.constructor) -3 >Emitted(3, 20) Source(15, 45) + SourceIndex(0) name (C1T5.constructor) -4 >Emitted(3, 30) Source(15, 54) + SourceIndex(0) name (C1T5.constructor) -5 >Emitted(3, 31) Source(15, 55) + SourceIndex(0) name (C1T5.constructor) +1->Emitted(4, 9) Source(15, 5) + SourceIndex(0) name (C1T5.constructor) +2 >Emitted(4, 17) Source(15, 8) + SourceIndex(0) name (C1T5.constructor) +3 >Emitted(4, 20) Source(15, 45) + SourceIndex(0) name (C1T5.constructor) +4 >Emitted(4, 30) Source(15, 54) + SourceIndex(0) name (C1T5.constructor) +5 >Emitted(4, 31) Source(15, 55) + SourceIndex(0) name (C1T5.constructor) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { > 2 > return 3 > 4 > i 5 > ; -1->Emitted(4, 13) Source(16, 9) + SourceIndex(0) -2 >Emitted(4, 19) Source(16, 15) + SourceIndex(0) -3 >Emitted(4, 20) Source(16, 16) + SourceIndex(0) -4 >Emitted(4, 21) Source(16, 17) + SourceIndex(0) -5 >Emitted(4, 22) Source(16, 18) + SourceIndex(0) +1->Emitted(5, 13) Source(16, 9) + SourceIndex(0) +2 >Emitted(5, 19) Source(16, 15) + SourceIndex(0) +3 >Emitted(5, 20) Source(16, 16) + SourceIndex(0) +4 >Emitted(5, 21) Source(16, 17) + SourceIndex(0) +5 >Emitted(5, 22) Source(16, 18) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > } 3 > -1->Emitted(5, 9) Source(17, 5) + SourceIndex(0) -2 >Emitted(5, 10) Source(17, 6) + SourceIndex(0) -3 >Emitted(5, 11) Source(17, 6) + SourceIndex(0) name (C1T5.constructor) +1->Emitted(6, 9) Source(17, 5) + SourceIndex(0) +2 >Emitted(6, 10) Source(17, 6) + SourceIndex(0) +3 >Emitted(6, 11) Source(17, 6) + SourceIndex(0) name (C1T5.constructor) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > } -1->Emitted(6, 5) Source(18, 1) + SourceIndex(0) name (C1T5.constructor) -2 >Emitted(6, 6) Source(18, 2) + SourceIndex(0) name (C1T5.constructor) +1->Emitted(7, 5) Source(18, 1) + SourceIndex(0) name (C1T5.constructor) +2 >Emitted(7, 6) Source(18, 2) + SourceIndex(0) name (C1T5.constructor) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^^^^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 > } -1->Emitted(7, 5) Source(18, 1) + SourceIndex(0) name (C1T5) -2 >Emitted(7, 16) Source(18, 2) + SourceIndex(0) name (C1T5) +1->Emitted(8, 5) Source(18, 1) + SourceIndex(0) name (C1T5) +2 >Emitted(8, 16) Source(18, 2) + SourceIndex(0) name (C1T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > 4 > ^^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > @@ -121,20 +130,32 @@ sourceFile:contextualTyping.ts > return i; > } > } -1->Emitted(8, 1) Source(18, 1) + SourceIndex(0) name (C1T5) -2 >Emitted(8, 2) Source(18, 2) + SourceIndex(0) name (C1T5) -3 >Emitted(8, 2) Source(14, 1) + SourceIndex(0) -4 >Emitted(8, 6) Source(18, 2) + SourceIndex(0) +1->Emitted(9, 1) Source(18, 1) + SourceIndex(0) name (C1T5) +2 >Emitted(9, 2) Source(18, 2) + SourceIndex(0) name (C1T5) +3 >Emitted(9, 2) Source(14, 1) + SourceIndex(0) +4 >Emitted(9, 6) Source(18, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^ -4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Module property declaration > +2 > +3 >// CONTEXT: Module property declaration +1->Emitted(10, 1) Source(21, 1) + SourceIndex(0) +2 >Emitted(10, 1) Source(20, 1) + SourceIndex(0) +3 >Emitted(10, 40) Source(20, 40) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 >^^^^ +3 > ^^^^ +4 > ^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + > 2 >module 3 > C2T5 4 > { @@ -142,84 +163,84 @@ sourceFile:contextualTyping.ts > return i; > } > } -1->Emitted(9, 1) Source(21, 1) + SourceIndex(0) -2 >Emitted(9, 5) Source(21, 8) + SourceIndex(0) -3 >Emitted(9, 9) Source(21, 12) + SourceIndex(0) -4 >Emitted(9, 10) Source(25, 2) + SourceIndex(0) +1->Emitted(11, 1) Source(21, 1) + SourceIndex(0) +2 >Emitted(11, 5) Source(21, 8) + SourceIndex(0) +3 >Emitted(11, 9) Source(21, 12) + SourceIndex(0) +4 >Emitted(11, 10) Source(25, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^^^^^^^ 3 > ^^^^ 4 > ^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >module 3 > C2T5 4 > 5 > { -1->Emitted(10, 1) Source(21, 1) + SourceIndex(0) -2 >Emitted(10, 12) Source(21, 8) + SourceIndex(0) -3 >Emitted(10, 16) Source(21, 12) + SourceIndex(0) -4 >Emitted(10, 18) Source(21, 13) + SourceIndex(0) -5 >Emitted(10, 19) Source(21, 14) + SourceIndex(0) +1->Emitted(12, 1) Source(21, 1) + SourceIndex(0) +2 >Emitted(12, 12) Source(21, 8) + SourceIndex(0) +3 >Emitted(12, 16) Source(21, 12) + SourceIndex(0) +4 >Emitted(12, 18) Source(21, 13) + SourceIndex(0) +5 >Emitted(12, 19) Source(21, 14) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^ 3 > ^^^ 4 > ^^^^^^^^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > export var 2 > foo 3 > : (i: number, s: string) => number = 4 > function( 5 > i -1->Emitted(11, 5) Source(22, 16) + SourceIndex(0) name (C2T5) -2 >Emitted(11, 13) Source(22, 19) + SourceIndex(0) name (C2T5) -3 >Emitted(11, 16) Source(22, 56) + SourceIndex(0) name (C2T5) -4 >Emitted(11, 26) Source(22, 65) + SourceIndex(0) name (C2T5) -5 >Emitted(11, 27) Source(22, 66) + SourceIndex(0) name (C2T5) +1->Emitted(13, 5) Source(22, 16) + SourceIndex(0) name (C2T5) +2 >Emitted(13, 13) Source(22, 19) + SourceIndex(0) name (C2T5) +3 >Emitted(13, 16) Source(22, 56) + SourceIndex(0) name (C2T5) +4 >Emitted(13, 26) Source(22, 65) + SourceIndex(0) name (C2T5) +5 >Emitted(13, 27) Source(22, 66) + SourceIndex(0) name (C2T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { > 2 > return 3 > 4 > i 5 > ; -1->Emitted(12, 9) Source(23, 9) + SourceIndex(0) -2 >Emitted(12, 15) Source(23, 15) + SourceIndex(0) -3 >Emitted(12, 16) Source(23, 16) + SourceIndex(0) -4 >Emitted(12, 17) Source(23, 17) + SourceIndex(0) -5 >Emitted(12, 18) Source(23, 18) + SourceIndex(0) +1->Emitted(14, 9) Source(23, 9) + SourceIndex(0) +2 >Emitted(14, 15) Source(23, 15) + SourceIndex(0) +3 >Emitted(14, 16) Source(23, 16) + SourceIndex(0) +4 >Emitted(14, 17) Source(23, 17) + SourceIndex(0) +5 >Emitted(14, 18) Source(23, 18) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > } 3 > -1->Emitted(13, 5) Source(24, 5) + SourceIndex(0) -2 >Emitted(13, 6) Source(24, 6) + SourceIndex(0) -3 >Emitted(13, 7) Source(24, 6) + SourceIndex(0) name (C2T5) +1->Emitted(15, 5) Source(24, 5) + SourceIndex(0) +2 >Emitted(15, 6) Source(24, 6) + SourceIndex(0) +3 >Emitted(15, 7) Source(24, 6) + SourceIndex(0) name (C2T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^^ 4 > ^^^^ 5 > ^^^^^ 6 > ^^^^ 7 > ^^^^^^^^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >} @@ -232,123 +253,132 @@ sourceFile:contextualTyping.ts > return i; > } > } -1->Emitted(14, 1) Source(25, 1) + SourceIndex(0) name (C2T5) -2 >Emitted(14, 2) Source(25, 2) + SourceIndex(0) name (C2T5) -3 >Emitted(14, 4) Source(21, 8) + SourceIndex(0) -4 >Emitted(14, 8) Source(21, 12) + SourceIndex(0) -5 >Emitted(14, 13) Source(21, 8) + SourceIndex(0) -6 >Emitted(14, 17) Source(21, 12) + SourceIndex(0) -7 >Emitted(14, 25) Source(25, 2) + SourceIndex(0) +1->Emitted(16, 1) Source(25, 1) + SourceIndex(0) name (C2T5) +2 >Emitted(16, 2) Source(25, 2) + SourceIndex(0) name (C2T5) +3 >Emitted(16, 4) Source(21, 8) + SourceIndex(0) +4 >Emitted(16, 8) Source(21, 12) + SourceIndex(0) +5 >Emitted(16, 13) Source(21, 8) + SourceIndex(0) +6 >Emitted(16, 17) Source(21, 12) + SourceIndex(0) +7 >Emitted(16, 25) Source(25, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^ -4 > ^^^ -5 > ^ -6 > ^^^^^^^^^^ -7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Variable declaration > -2 >var -3 > c3t1 -4 > : (s: string) => string = -5 > ( -6 > function( -7 > s -1->Emitted(15, 1) Source(28, 1) + SourceIndex(0) -2 >Emitted(15, 5) Source(28, 5) + SourceIndex(0) -3 >Emitted(15, 9) Source(28, 9) + SourceIndex(0) -4 >Emitted(15, 12) Source(28, 35) + SourceIndex(0) -5 >Emitted(15, 13) Source(28, 36) + SourceIndex(0) -6 >Emitted(15, 23) Source(28, 45) + SourceIndex(0) -7 >Emitted(15, 24) Source(28, 46) + SourceIndex(0) +2 > +3 >// CONTEXT: Variable declaration +1->Emitted(17, 1) Source(28, 1) + SourceIndex(0) +2 >Emitted(17, 1) Source(27, 1) + SourceIndex(0) +3 >Emitted(17, 33) Source(27, 33) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +2 > ^^^^ +3 > ^^^ +4 > ^ +5 > ^^^^^^^^^^ +6 > ^ +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >var +2 > c3t1 +3 > : (s: string) => string = +4 > ( +5 > function( +6 > s +1->Emitted(18, 5) Source(28, 5) + SourceIndex(0) +2 >Emitted(18, 9) Source(28, 9) + SourceIndex(0) +3 >Emitted(18, 12) Source(28, 35) + SourceIndex(0) +4 >Emitted(18, 13) Source(28, 36) + SourceIndex(0) +5 >Emitted(18, 23) Source(28, 45) + SourceIndex(0) +6 >Emitted(18, 24) Source(28, 46) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > -1->Emitted(16, 5) Source(28, 50) + SourceIndex(0) -2 >Emitted(16, 11) Source(28, 56) + SourceIndex(0) -3 >Emitted(16, 12) Source(28, 57) + SourceIndex(0) -4 >Emitted(16, 13) Source(28, 58) + SourceIndex(0) -5 >Emitted(16, 14) Source(28, 58) + SourceIndex(0) +1->Emitted(19, 5) Source(28, 50) + SourceIndex(0) +2 >Emitted(19, 11) Source(28, 56) + SourceIndex(0) +3 >Emitted(19, 12) Source(28, 57) + SourceIndex(0) +4 >Emitted(19, 13) Source(28, 58) + SourceIndex(0) +5 >Emitted(19, 14) Source(28, 58) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ) 4 > ; -1->Emitted(17, 1) Source(28, 59) + SourceIndex(0) -2 >Emitted(17, 2) Source(28, 60) + SourceIndex(0) -3 >Emitted(17, 3) Source(28, 61) + SourceIndex(0) -4 >Emitted(17, 4) Source(28, 62) + SourceIndex(0) +1->Emitted(20, 1) Source(28, 59) + SourceIndex(0) +2 >Emitted(20, 2) Source(28, 60) + SourceIndex(0) +3 >Emitted(20, 3) Source(28, 61) + SourceIndex(0) +4 >Emitted(20, 4) Source(28, 62) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^ 4 > ^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c3t2 4 > = 5 > ( -1->Emitted(18, 1) Source(29, 1) + SourceIndex(0) -2 >Emitted(18, 5) Source(29, 5) + SourceIndex(0) -3 >Emitted(18, 9) Source(29, 9) + SourceIndex(0) -4 >Emitted(18, 12) Source(29, 18) + SourceIndex(0) -5 >Emitted(18, 13) Source(29, 19) + SourceIndex(0) +1->Emitted(21, 1) Source(29, 1) + SourceIndex(0) +2 >Emitted(21, 5) Source(29, 5) + SourceIndex(0) +3 >Emitted(21, 9) Source(29, 9) + SourceIndex(0) +4 >Emitted(21, 12) Source(29, 18) + SourceIndex(0) +5 >Emitted(21, 13) Source(29, 19) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > n 3 > : 4 > 1 -1->Emitted(19, 5) Source(30, 5) + SourceIndex(0) -2 >Emitted(19, 6) Source(30, 6) + SourceIndex(0) -3 >Emitted(19, 8) Source(30, 8) + SourceIndex(0) -4 >Emitted(19, 9) Source(30, 9) + SourceIndex(0) +1->Emitted(22, 5) Source(30, 5) + SourceIndex(0) +2 >Emitted(22, 6) Source(30, 6) + SourceIndex(0) +3 >Emitted(22, 8) Source(30, 8) + SourceIndex(0) +4 >Emitted(22, 9) Source(30, 9) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > -1->Emitted(20, 2) Source(31, 2) + SourceIndex(0) -2 >Emitted(20, 3) Source(31, 3) + SourceIndex(0) -3 >Emitted(20, 4) Source(31, 3) + SourceIndex(0) +1->Emitted(23, 2) Source(31, 2) + SourceIndex(0) +2 >Emitted(23, 3) Source(31, 3) + SourceIndex(0) +3 >Emitted(23, 4) Source(31, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^ 4 > ^^^ 5 > ^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -356,36 +386,36 @@ sourceFile:contextualTyping.ts 4 > : number[] = 5 > [] 6 > ; -1->Emitted(21, 1) Source(32, 1) + SourceIndex(0) -2 >Emitted(21, 5) Source(32, 5) + SourceIndex(0) -3 >Emitted(21, 9) Source(32, 9) + SourceIndex(0) -4 >Emitted(21, 12) Source(32, 22) + SourceIndex(0) -5 >Emitted(21, 14) Source(32, 24) + SourceIndex(0) -6 >Emitted(21, 15) Source(32, 25) + SourceIndex(0) +1->Emitted(24, 1) Source(32, 1) + SourceIndex(0) +2 >Emitted(24, 5) Source(32, 5) + SourceIndex(0) +3 >Emitted(24, 9) Source(32, 9) + SourceIndex(0) +4 >Emitted(24, 12) Source(32, 22) + SourceIndex(0) +5 >Emitted(24, 14) Source(32, 24) + SourceIndex(0) +6 >Emitted(24, 15) Source(32, 25) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^ 4 > ^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c3t4 4 > : () => IFoo = -1->Emitted(22, 1) Source(33, 1) + SourceIndex(0) -2 >Emitted(22, 5) Source(33, 5) + SourceIndex(0) -3 >Emitted(22, 9) Source(33, 9) + SourceIndex(0) -4 >Emitted(22, 12) Source(33, 24) + SourceIndex(0) +1->Emitted(25, 1) Source(33, 1) + SourceIndex(0) +2 >Emitted(25, 5) Source(33, 5) + SourceIndex(0) +3 >Emitted(25, 9) Source(33, 9) + SourceIndex(0) +4 >Emitted(25, 12) Source(33, 24) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->function() { 2 > return 3 > @@ -393,32 +423,32 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(23, 5) Source(33, 37) + SourceIndex(0) -2 >Emitted(23, 11) Source(33, 43) + SourceIndex(0) -3 >Emitted(23, 12) Source(33, 50) + SourceIndex(0) -4 >Emitted(23, 13) Source(33, 51) + SourceIndex(0) -5 >Emitted(23, 15) Source(33, 53) + SourceIndex(0) -6 >Emitted(23, 16) Source(33, 54) + SourceIndex(0) -7 >Emitted(23, 17) Source(33, 54) + SourceIndex(0) +1->Emitted(26, 5) Source(33, 37) + SourceIndex(0) +2 >Emitted(26, 11) Source(33, 43) + SourceIndex(0) +3 >Emitted(26, 12) Source(33, 50) + SourceIndex(0) +4 >Emitted(26, 13) Source(33, 51) + SourceIndex(0) +5 >Emitted(26, 15) Source(33, 53) + SourceIndex(0) +6 >Emitted(26, 16) Source(33, 54) + SourceIndex(0) +7 >Emitted(26, 17) Source(33, 54) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(24, 1) Source(33, 55) + SourceIndex(0) -2 >Emitted(24, 2) Source(33, 56) + SourceIndex(0) -3 >Emitted(24, 3) Source(33, 57) + SourceIndex(0) +1->Emitted(27, 1) Source(33, 55) + SourceIndex(0) +2 >Emitted(27, 2) Source(33, 56) + SourceIndex(0) +3 >Emitted(27, 3) Source(33, 57) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^ 4 > ^^^ 5 > ^^^^^^^^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -426,21 +456,21 @@ sourceFile:contextualTyping.ts 4 > : (n: number) => IFoo = 5 > function( 6 > n -1->Emitted(25, 1) Source(34, 1) + SourceIndex(0) -2 >Emitted(25, 5) Source(34, 5) + SourceIndex(0) -3 >Emitted(25, 9) Source(34, 9) + SourceIndex(0) -4 >Emitted(25, 12) Source(34, 33) + SourceIndex(0) -5 >Emitted(25, 22) Source(34, 42) + SourceIndex(0) -6 >Emitted(25, 23) Source(34, 43) + SourceIndex(0) +1->Emitted(28, 1) Source(34, 1) + SourceIndex(0) +2 >Emitted(28, 5) Source(34, 5) + SourceIndex(0) +3 >Emitted(28, 9) Source(34, 9) + SourceIndex(0) +4 >Emitted(28, 12) Source(34, 33) + SourceIndex(0) +5 >Emitted(28, 22) Source(34, 42) + SourceIndex(0) +6 >Emitted(28, 23) Source(34, 43) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -448,26 +478,26 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(26, 5) Source(34, 47) + SourceIndex(0) -2 >Emitted(26, 11) Source(34, 53) + SourceIndex(0) -3 >Emitted(26, 12) Source(34, 60) + SourceIndex(0) -4 >Emitted(26, 13) Source(34, 61) + SourceIndex(0) -5 >Emitted(26, 15) Source(34, 63) + SourceIndex(0) -6 >Emitted(26, 16) Source(34, 64) + SourceIndex(0) -7 >Emitted(26, 17) Source(34, 64) + SourceIndex(0) +1->Emitted(29, 5) Source(34, 47) + SourceIndex(0) +2 >Emitted(29, 11) Source(34, 53) + SourceIndex(0) +3 >Emitted(29, 12) Source(34, 60) + SourceIndex(0) +4 >Emitted(29, 13) Source(34, 61) + SourceIndex(0) +5 >Emitted(29, 15) Source(34, 63) + SourceIndex(0) +6 >Emitted(29, 16) Source(34, 64) + SourceIndex(0) +7 >Emitted(29, 17) Source(34, 64) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(27, 1) Source(34, 65) + SourceIndex(0) -2 >Emitted(27, 2) Source(34, 66) + SourceIndex(0) -3 >Emitted(27, 3) Source(34, 67) + SourceIndex(0) +1->Emitted(30, 1) Source(34, 65) + SourceIndex(0) +2 >Emitted(30, 2) Source(34, 66) + SourceIndex(0) +3 >Emitted(30, 3) Source(34, 67) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^ 4 > ^^^ @@ -475,7 +505,7 @@ sourceFile:contextualTyping.ts 6 > ^ 7 > ^^ 8 > ^ -9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -485,23 +515,23 @@ sourceFile:contextualTyping.ts 6 > n 7 > , 8 > s -1->Emitted(28, 1) Source(35, 1) + SourceIndex(0) -2 >Emitted(28, 5) Source(35, 5) + SourceIndex(0) -3 >Emitted(28, 9) Source(35, 9) + SourceIndex(0) -4 >Emitted(28, 12) Source(35, 44) + SourceIndex(0) -5 >Emitted(28, 22) Source(35, 53) + SourceIndex(0) -6 >Emitted(28, 23) Source(35, 54) + SourceIndex(0) -7 >Emitted(28, 25) Source(35, 56) + SourceIndex(0) -8 >Emitted(28, 26) Source(35, 57) + SourceIndex(0) +1->Emitted(31, 1) Source(35, 1) + SourceIndex(0) +2 >Emitted(31, 5) Source(35, 5) + SourceIndex(0) +3 >Emitted(31, 9) Source(35, 9) + SourceIndex(0) +4 >Emitted(31, 12) Source(35, 44) + SourceIndex(0) +5 >Emitted(31, 22) Source(35, 53) + SourceIndex(0) +6 >Emitted(31, 23) Source(35, 54) + SourceIndex(0) +7 >Emitted(31, 25) Source(35, 56) + SourceIndex(0) +8 >Emitted(31, 26) Source(35, 57) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -509,32 +539,32 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(29, 5) Source(35, 61) + SourceIndex(0) -2 >Emitted(29, 11) Source(35, 67) + SourceIndex(0) -3 >Emitted(29, 12) Source(35, 74) + SourceIndex(0) -4 >Emitted(29, 13) Source(35, 75) + SourceIndex(0) -5 >Emitted(29, 15) Source(35, 77) + SourceIndex(0) -6 >Emitted(29, 16) Source(35, 78) + SourceIndex(0) -7 >Emitted(29, 17) Source(35, 78) + SourceIndex(0) +1->Emitted(32, 5) Source(35, 61) + SourceIndex(0) +2 >Emitted(32, 11) Source(35, 67) + SourceIndex(0) +3 >Emitted(32, 12) Source(35, 74) + SourceIndex(0) +4 >Emitted(32, 13) Source(35, 75) + SourceIndex(0) +5 >Emitted(32, 15) Source(35, 77) + SourceIndex(0) +6 >Emitted(32, 16) Source(35, 78) + SourceIndex(0) +7 >Emitted(32, 17) Source(35, 78) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(30, 1) Source(35, 79) + SourceIndex(0) -2 >Emitted(30, 2) Source(35, 80) + SourceIndex(0) -3 >Emitted(30, 3) Source(35, 81) + SourceIndex(0) +1->Emitted(33, 1) Source(35, 79) + SourceIndex(0) +2 >Emitted(33, 2) Source(35, 80) + SourceIndex(0) +3 >Emitted(33, 3) Source(35, 81) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^ 4 > ^^^ 5 > ^^^^^^^^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -545,48 +575,48 @@ sourceFile:contextualTyping.ts > } = 5 > function( 6 > n -1->Emitted(31, 1) Source(36, 1) + SourceIndex(0) -2 >Emitted(31, 5) Source(36, 5) + SourceIndex(0) -3 >Emitted(31, 9) Source(36, 9) + SourceIndex(0) -4 >Emitted(31, 12) Source(39, 5) + SourceIndex(0) -5 >Emitted(31, 22) Source(39, 14) + SourceIndex(0) -6 >Emitted(31, 23) Source(39, 15) + SourceIndex(0) +1->Emitted(34, 1) Source(36, 1) + SourceIndex(0) +2 >Emitted(34, 5) Source(36, 5) + SourceIndex(0) +3 >Emitted(34, 9) Source(36, 9) + SourceIndex(0) +4 >Emitted(34, 12) Source(39, 5) + SourceIndex(0) +5 >Emitted(34, 22) Source(39, 14) + SourceIndex(0) +6 >Emitted(34, 23) Source(39, 15) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > n 5 > ; -1->Emitted(32, 5) Source(39, 19) + SourceIndex(0) -2 >Emitted(32, 11) Source(39, 25) + SourceIndex(0) -3 >Emitted(32, 12) Source(39, 26) + SourceIndex(0) -4 >Emitted(32, 13) Source(39, 27) + SourceIndex(0) -5 >Emitted(32, 14) Source(39, 28) + SourceIndex(0) +1->Emitted(35, 5) Source(39, 19) + SourceIndex(0) +2 >Emitted(35, 11) Source(39, 25) + SourceIndex(0) +3 >Emitted(35, 12) Source(39, 26) + SourceIndex(0) +4 >Emitted(35, 13) Source(39, 27) + SourceIndex(0) +5 >Emitted(35, 14) Source(39, 28) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(33, 1) Source(39, 29) + SourceIndex(0) -2 >Emitted(33, 2) Source(39, 30) + SourceIndex(0) -3 >Emitted(33, 3) Source(39, 31) + SourceIndex(0) +1->Emitted(36, 1) Source(39, 29) + SourceIndex(0) +2 >Emitted(36, 2) Source(39, 30) + SourceIndex(0) +3 >Emitted(36, 3) Source(39, 31) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^ 4 > ^^^ 5 > ^^^^^^^^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -595,42 +625,42 @@ sourceFile:contextualTyping.ts 4 > : (n: number, s: string) => number = 5 > function( 6 > n -1->Emitted(34, 1) Source(41, 1) + SourceIndex(0) -2 >Emitted(34, 5) Source(41, 5) + SourceIndex(0) -3 >Emitted(34, 9) Source(41, 9) + SourceIndex(0) -4 >Emitted(34, 12) Source(41, 46) + SourceIndex(0) -5 >Emitted(34, 22) Source(41, 55) + SourceIndex(0) -6 >Emitted(34, 23) Source(41, 56) + SourceIndex(0) +1->Emitted(37, 1) Source(41, 1) + SourceIndex(0) +2 >Emitted(37, 5) Source(41, 5) + SourceIndex(0) +3 >Emitted(37, 9) Source(41, 9) + SourceIndex(0) +4 >Emitted(37, 12) Source(41, 46) + SourceIndex(0) +5 >Emitted(37, 22) Source(41, 55) + SourceIndex(0) +6 >Emitted(37, 23) Source(41, 56) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > n 5 > ; -1->Emitted(35, 5) Source(41, 60) + SourceIndex(0) -2 >Emitted(35, 11) Source(41, 66) + SourceIndex(0) -3 >Emitted(35, 12) Source(41, 67) + SourceIndex(0) -4 >Emitted(35, 13) Source(41, 68) + SourceIndex(0) -5 >Emitted(35, 14) Source(41, 69) + SourceIndex(0) +1->Emitted(38, 5) Source(41, 60) + SourceIndex(0) +2 >Emitted(38, 11) Source(41, 66) + SourceIndex(0) +3 >Emitted(38, 12) Source(41, 67) + SourceIndex(0) +4 >Emitted(38, 13) Source(41, 68) + SourceIndex(0) +5 >Emitted(38, 14) Source(41, 69) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(36, 1) Source(41, 70) + SourceIndex(0) -2 >Emitted(36, 2) Source(41, 71) + SourceIndex(0) -3 >Emitted(36, 3) Source(41, 72) + SourceIndex(0) +1->Emitted(39, 1) Source(41, 70) + SourceIndex(0) +2 >Emitted(39, 2) Source(41, 71) + SourceIndex(0) +3 >Emitted(39, 3) Source(41, 72) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^ 4 > ^^^ @@ -640,7 +670,7 @@ sourceFile:contextualTyping.ts 8 > ^^ 9 > ^ 10> ^ -11> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +11> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -652,18 +682,18 @@ sourceFile:contextualTyping.ts 8 > [] 9 > ] 10> ; -1->Emitted(37, 1) Source(42, 1) + SourceIndex(0) -2 >Emitted(37, 5) Source(42, 5) + SourceIndex(0) -3 >Emitted(37, 9) Source(42, 9) + SourceIndex(0) -4 >Emitted(37, 12) Source(42, 24) + SourceIndex(0) -5 >Emitted(37, 13) Source(42, 25) + SourceIndex(0) -6 >Emitted(37, 15) Source(42, 27) + SourceIndex(0) -7 >Emitted(37, 17) Source(42, 28) + SourceIndex(0) -8 >Emitted(37, 19) Source(42, 30) + SourceIndex(0) -9 >Emitted(37, 20) Source(42, 31) + SourceIndex(0) -10>Emitted(37, 21) Source(42, 32) + SourceIndex(0) +1->Emitted(40, 1) Source(42, 1) + SourceIndex(0) +2 >Emitted(40, 5) Source(42, 5) + SourceIndex(0) +3 >Emitted(40, 9) Source(42, 9) + SourceIndex(0) +4 >Emitted(40, 12) Source(42, 24) + SourceIndex(0) +5 >Emitted(40, 13) Source(42, 25) + SourceIndex(0) +6 >Emitted(40, 15) Source(42, 27) + SourceIndex(0) +7 >Emitted(40, 17) Source(42, 28) + SourceIndex(0) +8 >Emitted(40, 19) Source(42, 30) + SourceIndex(0) +9 >Emitted(40, 20) Source(42, 31) + SourceIndex(0) +10>Emitted(40, 21) Source(42, 32) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ @@ -677,7 +707,7 @@ sourceFile:contextualTyping.ts 12> ^ 13> ^ 14> ^ -15> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +15> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -693,22 +723,22 @@ sourceFile:contextualTyping.ts 12> ) 13> ] 14> ; -1->Emitted(38, 1) Source(43, 1) + SourceIndex(0) -2 >Emitted(38, 5) Source(43, 5) + SourceIndex(0) -3 >Emitted(38, 10) Source(43, 10) + SourceIndex(0) -4 >Emitted(38, 13) Source(43, 21) + SourceIndex(0) -5 >Emitted(38, 14) Source(43, 28) + SourceIndex(0) -6 >Emitted(38, 15) Source(43, 29) + SourceIndex(0) -7 >Emitted(38, 17) Source(43, 31) + SourceIndex(0) -8 >Emitted(38, 18) Source(43, 32) + SourceIndex(0) -9 >Emitted(38, 20) Source(43, 39) + SourceIndex(0) -10>Emitted(38, 21) Source(43, 40) + SourceIndex(0) -11>Emitted(38, 23) Source(43, 42) + SourceIndex(0) -12>Emitted(38, 24) Source(43, 43) + SourceIndex(0) -13>Emitted(38, 25) Source(43, 44) + SourceIndex(0) -14>Emitted(38, 26) Source(43, 45) + SourceIndex(0) +1->Emitted(41, 1) Source(43, 1) + SourceIndex(0) +2 >Emitted(41, 5) Source(43, 5) + SourceIndex(0) +3 >Emitted(41, 10) Source(43, 10) + SourceIndex(0) +4 >Emitted(41, 13) Source(43, 21) + SourceIndex(0) +5 >Emitted(41, 14) Source(43, 28) + SourceIndex(0) +6 >Emitted(41, 15) Source(43, 29) + SourceIndex(0) +7 >Emitted(41, 17) Source(43, 31) + SourceIndex(0) +8 >Emitted(41, 18) Source(43, 32) + SourceIndex(0) +9 >Emitted(41, 20) Source(43, 39) + SourceIndex(0) +10>Emitted(41, 21) Source(43, 40) + SourceIndex(0) +11>Emitted(41, 23) Source(43, 42) + SourceIndex(0) +12>Emitted(41, 24) Source(43, 43) + SourceIndex(0) +13>Emitted(41, 25) Source(43, 44) + SourceIndex(0) +14>Emitted(41, 26) Source(43, 45) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ @@ -717,7 +747,7 @@ sourceFile:contextualTyping.ts 7 > ^ 8 > ^^ 9 > ^ -10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -728,69 +758,69 @@ sourceFile:contextualTyping.ts 7 > n 8 > , 9 > s -1->Emitted(39, 1) Source(44, 1) + SourceIndex(0) -2 >Emitted(39, 5) Source(44, 5) + SourceIndex(0) -3 >Emitted(39, 10) Source(44, 10) + SourceIndex(0) -4 >Emitted(39, 13) Source(44, 50) + SourceIndex(0) -5 >Emitted(39, 14) Source(44, 51) + SourceIndex(0) -6 >Emitted(39, 24) Source(44, 60) + SourceIndex(0) -7 >Emitted(39, 25) Source(44, 61) + SourceIndex(0) -8 >Emitted(39, 27) Source(44, 63) + SourceIndex(0) -9 >Emitted(39, 28) Source(44, 64) + SourceIndex(0) +1->Emitted(42, 1) Source(44, 1) + SourceIndex(0) +2 >Emitted(42, 5) Source(44, 5) + SourceIndex(0) +3 >Emitted(42, 10) Source(44, 10) + SourceIndex(0) +4 >Emitted(42, 13) Source(44, 50) + SourceIndex(0) +5 >Emitted(42, 14) Source(44, 51) + SourceIndex(0) +6 >Emitted(42, 24) Source(44, 60) + SourceIndex(0) +7 >Emitted(42, 25) Source(44, 61) + SourceIndex(0) +8 >Emitted(42, 27) Source(44, 63) + SourceIndex(0) +9 >Emitted(42, 28) Source(44, 64) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > ; -1->Emitted(40, 5) Source(44, 68) + SourceIndex(0) -2 >Emitted(40, 11) Source(44, 74) + SourceIndex(0) -3 >Emitted(40, 12) Source(44, 75) + SourceIndex(0) -4 >Emitted(40, 13) Source(44, 76) + SourceIndex(0) -5 >Emitted(40, 14) Source(44, 77) + SourceIndex(0) +1->Emitted(43, 5) Source(44, 68) + SourceIndex(0) +2 >Emitted(43, 11) Source(44, 74) + SourceIndex(0) +3 >Emitted(43, 12) Source(44, 75) + SourceIndex(0) +4 >Emitted(43, 13) Source(44, 76) + SourceIndex(0) +5 >Emitted(43, 14) Source(44, 77) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ] 4 > ; -1->Emitted(41, 1) Source(44, 78) + SourceIndex(0) -2 >Emitted(41, 2) Source(44, 79) + SourceIndex(0) -3 >Emitted(41, 3) Source(44, 80) + SourceIndex(0) -4 >Emitted(41, 4) Source(44, 81) + SourceIndex(0) +1->Emitted(44, 1) Source(44, 78) + SourceIndex(0) +2 >Emitted(44, 2) Source(44, 79) + SourceIndex(0) +3 >Emitted(44, 3) Source(44, 80) + SourceIndex(0) +4 >Emitted(44, 4) Source(44, 81) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c3t12 4 > : IBar = -1->Emitted(42, 1) Source(45, 1) + SourceIndex(0) -2 >Emitted(42, 5) Source(45, 5) + SourceIndex(0) -3 >Emitted(42, 10) Source(45, 10) + SourceIndex(0) -4 >Emitted(42, 13) Source(45, 19) + SourceIndex(0) +1->Emitted(45, 1) Source(45, 1) + SourceIndex(0) +2 >Emitted(45, 5) Source(45, 5) + SourceIndex(0) +3 >Emitted(45, 10) Source(45, 10) + SourceIndex(0) +4 >Emitted(45, 13) Source(45, 19) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^ 3 > ^^ 4 > ^ 5 > ^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > foo @@ -798,48 +828,48 @@ sourceFile:contextualTyping.ts 4 > ( 5 > {} 6 > ) -1->Emitted(43, 5) Source(46, 5) + SourceIndex(0) -2 >Emitted(43, 8) Source(46, 8) + SourceIndex(0) -3 >Emitted(43, 10) Source(46, 16) + SourceIndex(0) -4 >Emitted(43, 11) Source(46, 17) + SourceIndex(0) -5 >Emitted(43, 13) Source(46, 19) + SourceIndex(0) -6 >Emitted(43, 14) Source(46, 20) + SourceIndex(0) +1->Emitted(46, 5) Source(46, 5) + SourceIndex(0) +2 >Emitted(46, 8) Source(46, 8) + SourceIndex(0) +3 >Emitted(46, 10) Source(46, 16) + SourceIndex(0) +4 >Emitted(46, 11) Source(46, 17) + SourceIndex(0) +5 >Emitted(46, 13) Source(46, 19) + SourceIndex(0) +6 >Emitted(46, 14) Source(46, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > -1->Emitted(44, 2) Source(47, 2) + SourceIndex(0) -2 >Emitted(44, 3) Source(47, 2) + SourceIndex(0) +1->Emitted(47, 2) Source(47, 2) + SourceIndex(0) +2 >Emitted(47, 3) Source(47, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c3t13 4 > = 5 > ( -1->Emitted(45, 1) Source(48, 1) + SourceIndex(0) -2 >Emitted(45, 5) Source(48, 5) + SourceIndex(0) -3 >Emitted(45, 10) Source(48, 10) + SourceIndex(0) -4 >Emitted(45, 13) Source(48, 19) + SourceIndex(0) -5 >Emitted(45, 14) Source(48, 20) + SourceIndex(0) +1->Emitted(48, 1) Source(48, 1) + SourceIndex(0) +2 >Emitted(48, 5) Source(48, 5) + SourceIndex(0) +3 >Emitted(48, 10) Source(48, 10) + SourceIndex(0) +4 >Emitted(48, 13) Source(48, 19) + SourceIndex(0) +5 >Emitted(48, 14) Source(48, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^^^^^^^^^^ 5 > ^ 6 > ^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > f @@ -848,124 +878,133 @@ sourceFile:contextualTyping.ts 5 > i 6 > , 7 > s -1->Emitted(46, 5) Source(49, 5) + SourceIndex(0) -2 >Emitted(46, 6) Source(49, 6) + SourceIndex(0) -3 >Emitted(46, 8) Source(49, 8) + SourceIndex(0) -4 >Emitted(46, 18) Source(49, 17) + SourceIndex(0) -5 >Emitted(46, 19) Source(49, 18) + SourceIndex(0) -6 >Emitted(46, 21) Source(49, 20) + SourceIndex(0) -7 >Emitted(46, 22) Source(49, 21) + SourceIndex(0) +1->Emitted(49, 5) Source(49, 5) + SourceIndex(0) +2 >Emitted(49, 6) Source(49, 6) + SourceIndex(0) +3 >Emitted(49, 8) Source(49, 8) + SourceIndex(0) +4 >Emitted(49, 18) Source(49, 17) + SourceIndex(0) +5 >Emitted(49, 19) Source(49, 18) + SourceIndex(0) +6 >Emitted(49, 21) Source(49, 20) + SourceIndex(0) +7 >Emitted(49, 22) Source(49, 21) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > ; -1->Emitted(47, 9) Source(49, 25) + SourceIndex(0) -2 >Emitted(47, 15) Source(49, 31) + SourceIndex(0) -3 >Emitted(47, 16) Source(49, 32) + SourceIndex(0) -4 >Emitted(47, 17) Source(49, 33) + SourceIndex(0) -5 >Emitted(47, 18) Source(49, 34) + SourceIndex(0) +1->Emitted(50, 9) Source(49, 25) + SourceIndex(0) +2 >Emitted(50, 15) Source(49, 31) + SourceIndex(0) +3 >Emitted(50, 16) Source(49, 32) + SourceIndex(0) +4 >Emitted(50, 17) Source(49, 33) + SourceIndex(0) +5 >Emitted(50, 18) Source(49, 34) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 > } -1->Emitted(48, 5) Source(49, 35) + SourceIndex(0) -2 >Emitted(48, 6) Source(49, 36) + SourceIndex(0) +1->Emitted(51, 5) Source(49, 35) + SourceIndex(0) +2 >Emitted(51, 6) Source(49, 36) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > -1->Emitted(49, 2) Source(50, 2) + SourceIndex(0) -2 >Emitted(49, 3) Source(50, 3) + SourceIndex(0) -3 >Emitted(49, 4) Source(50, 3) + SourceIndex(0) +1->Emitted(52, 2) Source(50, 2) + SourceIndex(0) +2 >Emitted(52, 3) Source(50, 3) + SourceIndex(0) +3 >Emitted(52, 4) Source(50, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c3t14 4 > = 5 > ( -1->Emitted(50, 1) Source(51, 1) + SourceIndex(0) -2 >Emitted(50, 5) Source(51, 5) + SourceIndex(0) -3 >Emitted(50, 10) Source(51, 10) + SourceIndex(0) -4 >Emitted(50, 13) Source(51, 19) + SourceIndex(0) -5 >Emitted(50, 14) Source(51, 20) + SourceIndex(0) +1->Emitted(53, 1) Source(51, 1) + SourceIndex(0) +2 >Emitted(53, 5) Source(51, 5) + SourceIndex(0) +3 >Emitted(53, 10) Source(51, 10) + SourceIndex(0) +4 >Emitted(53, 13) Source(51, 19) + SourceIndex(0) +5 >Emitted(53, 14) Source(51, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > a 3 > : 4 > [] -1->Emitted(51, 5) Source(52, 5) + SourceIndex(0) -2 >Emitted(51, 6) Source(52, 6) + SourceIndex(0) -3 >Emitted(51, 8) Source(52, 8) + SourceIndex(0) -4 >Emitted(51, 10) Source(52, 10) + SourceIndex(0) +1->Emitted(54, 5) Source(52, 5) + SourceIndex(0) +2 >Emitted(54, 6) Source(52, 6) + SourceIndex(0) +3 >Emitted(54, 8) Source(52, 8) + SourceIndex(0) +4 >Emitted(54, 10) Source(52, 10) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > -1->Emitted(52, 2) Source(53, 2) + SourceIndex(0) -2 >Emitted(52, 3) Source(53, 3) + SourceIndex(0) -3 >Emitted(52, 4) Source(53, 3) + SourceIndex(0) +1->Emitted(55, 2) Source(53, 2) + SourceIndex(0) +2 >Emitted(55, 3) Source(53, 3) + SourceIndex(0) +3 >Emitted(55, 4) Source(53, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Class property assignment > -2 >class -3 > C4T5 -1->Emitted(53, 1) Source(56, 1) + SourceIndex(0) -2 >Emitted(53, 5) Source(56, 7) + SourceIndex(0) -3 >Emitted(53, 9) Source(56, 11) + SourceIndex(0) +2 > +3 >// CONTEXT: Class property assignment +1->Emitted(56, 1) Source(56, 1) + SourceIndex(0) +2 >Emitted(56, 1) Source(55, 1) + SourceIndex(0) +3 >Emitted(56, 38) Source(55, 38) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +2 > ^^^^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >class +2 > C4T5 +1->Emitted(57, 5) Source(56, 7) + SourceIndex(0) +2 >Emitted(57, 9) Source(56, 11) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^^ 3 > ^^^^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> { > foo: (i: number, s: string) => string; > 2 > 3 > C4T5 -1->Emitted(54, 5) Source(58, 5) + SourceIndex(0) name (C4T5) -2 >Emitted(54, 14) Source(56, 7) + SourceIndex(0) name (C4T5) -3 >Emitted(54, 18) Source(56, 11) + SourceIndex(0) name (C4T5) +1->Emitted(58, 5) Source(58, 5) + SourceIndex(0) name (C4T5) +2 >Emitted(58, 14) Source(56, 7) + SourceIndex(0) name (C4T5) +3 >Emitted(58, 18) Source(56, 11) + SourceIndex(0) name (C4T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^ 3 > ^ 4 > ^^^ @@ -974,7 +1013,7 @@ sourceFile:contextualTyping.ts 7 > ^ 8 > ^^ 9 > ^ -10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> { > foo: (i: number, s: string) => string; > constructor() { @@ -987,69 +1026,69 @@ sourceFile:contextualTyping.ts 7 > i 8 > , 9 > s -1->Emitted(55, 9) Source(59, 9) + SourceIndex(0) name (C4T5.constructor) -2 >Emitted(55, 13) Source(59, 13) + SourceIndex(0) name (C4T5.constructor) -3 >Emitted(55, 14) Source(59, 14) + SourceIndex(0) name (C4T5.constructor) -4 >Emitted(55, 17) Source(59, 17) + SourceIndex(0) name (C4T5.constructor) -5 >Emitted(55, 20) Source(59, 20) + SourceIndex(0) name (C4T5.constructor) -6 >Emitted(55, 30) Source(59, 29) + SourceIndex(0) name (C4T5.constructor) -7 >Emitted(55, 31) Source(59, 30) + SourceIndex(0) name (C4T5.constructor) -8 >Emitted(55, 33) Source(59, 32) + SourceIndex(0) name (C4T5.constructor) -9 >Emitted(55, 34) Source(59, 33) + SourceIndex(0) name (C4T5.constructor) +1->Emitted(59, 9) Source(59, 9) + SourceIndex(0) name (C4T5.constructor) +2 >Emitted(59, 13) Source(59, 13) + SourceIndex(0) name (C4T5.constructor) +3 >Emitted(59, 14) Source(59, 14) + SourceIndex(0) name (C4T5.constructor) +4 >Emitted(59, 17) Source(59, 17) + SourceIndex(0) name (C4T5.constructor) +5 >Emitted(59, 20) Source(59, 20) + SourceIndex(0) name (C4T5.constructor) +6 >Emitted(59, 30) Source(59, 29) + SourceIndex(0) name (C4T5.constructor) +7 >Emitted(59, 31) Source(59, 30) + SourceIndex(0) name (C4T5.constructor) +8 >Emitted(59, 33) Source(59, 32) + SourceIndex(0) name (C4T5.constructor) +9 >Emitted(59, 34) Source(59, 33) + SourceIndex(0) name (C4T5.constructor) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { > 2 > return 3 > 4 > s 5 > ; -1->Emitted(56, 13) Source(60, 13) + SourceIndex(0) -2 >Emitted(56, 19) Source(60, 19) + SourceIndex(0) -3 >Emitted(56, 20) Source(60, 20) + SourceIndex(0) -4 >Emitted(56, 21) Source(60, 21) + SourceIndex(0) -5 >Emitted(56, 22) Source(60, 22) + SourceIndex(0) +1->Emitted(60, 13) Source(60, 13) + SourceIndex(0) +2 >Emitted(60, 19) Source(60, 19) + SourceIndex(0) +3 >Emitted(60, 20) Source(60, 20) + SourceIndex(0) +4 >Emitted(60, 21) Source(60, 21) + SourceIndex(0) +5 >Emitted(60, 22) Source(60, 22) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > } 3 > -1->Emitted(57, 9) Source(61, 9) + SourceIndex(0) -2 >Emitted(57, 10) Source(61, 10) + SourceIndex(0) -3 >Emitted(57, 11) Source(61, 10) + SourceIndex(0) name (C4T5.constructor) +1->Emitted(61, 9) Source(61, 9) + SourceIndex(0) +2 >Emitted(61, 10) Source(61, 10) + SourceIndex(0) +3 >Emitted(61, 11) Source(61, 10) + SourceIndex(0) name (C4T5.constructor) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > } -1->Emitted(58, 5) Source(62, 5) + SourceIndex(0) name (C4T5.constructor) -2 >Emitted(58, 6) Source(62, 6) + SourceIndex(0) name (C4T5.constructor) +1->Emitted(62, 5) Source(62, 5) + SourceIndex(0) name (C4T5.constructor) +2 >Emitted(62, 6) Source(62, 6) + SourceIndex(0) name (C4T5.constructor) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^^^^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > } -1->Emitted(59, 5) Source(63, 1) + SourceIndex(0) name (C4T5) -2 >Emitted(59, 16) Source(63, 2) + SourceIndex(0) name (C4T5) +1->Emitted(63, 5) Source(63, 1) + SourceIndex(0) name (C4T5) +2 >Emitted(63, 16) Source(63, 2) + SourceIndex(0) name (C4T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > 4 > ^^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > @@ -1061,20 +1100,32 @@ sourceFile:contextualTyping.ts > } > } > } -1->Emitted(60, 1) Source(63, 1) + SourceIndex(0) name (C4T5) -2 >Emitted(60, 2) Source(63, 2) + SourceIndex(0) name (C4T5) -3 >Emitted(60, 2) Source(56, 1) + SourceIndex(0) -4 >Emitted(60, 6) Source(63, 2) + SourceIndex(0) +1->Emitted(64, 1) Source(63, 1) + SourceIndex(0) name (C4T5) +2 >Emitted(64, 2) Source(63, 2) + SourceIndex(0) name (C4T5) +3 >Emitted(64, 2) Source(56, 1) + SourceIndex(0) +4 >Emitted(64, 6) Source(63, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^ -4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Module property assignment > +2 > +3 >// CONTEXT: Module property assignment +1->Emitted(65, 1) Source(66, 1) + SourceIndex(0) +2 >Emitted(65, 1) Source(65, 1) + SourceIndex(0) +3 >Emitted(65, 39) Source(65, 39) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 >^^^^ +3 > ^^^^ +4 > ^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + > 2 >module 3 > C5T5 4 > { @@ -1083,48 +1134,48 @@ sourceFile:contextualTyping.ts > return s; > } > } -1->Emitted(61, 1) Source(66, 1) + SourceIndex(0) -2 >Emitted(61, 5) Source(66, 8) + SourceIndex(0) -3 >Emitted(61, 9) Source(66, 12) + SourceIndex(0) -4 >Emitted(61, 10) Source(71, 2) + SourceIndex(0) +1->Emitted(66, 1) Source(66, 1) + SourceIndex(0) +2 >Emitted(66, 5) Source(66, 8) + SourceIndex(0) +3 >Emitted(66, 9) Source(66, 12) + SourceIndex(0) +4 >Emitted(66, 10) Source(71, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^^^^^^^ 3 > ^^^^ 4 > ^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >module 3 > C5T5 4 > 5 > { -1->Emitted(62, 1) Source(66, 1) + SourceIndex(0) -2 >Emitted(62, 12) Source(66, 8) + SourceIndex(0) -3 >Emitted(62, 16) Source(66, 12) + SourceIndex(0) -4 >Emitted(62, 18) Source(66, 13) + SourceIndex(0) -5 >Emitted(62, 19) Source(66, 14) + SourceIndex(0) +1->Emitted(67, 1) Source(66, 1) + SourceIndex(0) +2 >Emitted(67, 12) Source(66, 8) + SourceIndex(0) +3 >Emitted(67, 16) Source(66, 12) + SourceIndex(0) +4 >Emitted(67, 18) Source(66, 13) + SourceIndex(0) +5 >Emitted(67, 19) Source(66, 14) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > export var 2 > foo: (i: number, s: string) => string 3 > ; -1->Emitted(63, 5) Source(67, 16) + SourceIndex(0) name (C5T5) -2 >Emitted(63, 13) Source(67, 53) + SourceIndex(0) name (C5T5) -3 >Emitted(63, 14) Source(67, 54) + SourceIndex(0) name (C5T5) +1->Emitted(68, 5) Source(67, 16) + SourceIndex(0) name (C5T5) +2 >Emitted(68, 13) Source(67, 53) + SourceIndex(0) name (C5T5) +3 >Emitted(68, 14) Source(67, 54) + SourceIndex(0) name (C5T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^ 3 > ^^^ 4 > ^^^^^^^^^^ 5 > ^ 6 > ^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > foo @@ -1133,52 +1184,52 @@ sourceFile:contextualTyping.ts 5 > i 6 > , 7 > s -1->Emitted(64, 5) Source(68, 5) + SourceIndex(0) name (C5T5) -2 >Emitted(64, 13) Source(68, 8) + SourceIndex(0) name (C5T5) -3 >Emitted(64, 16) Source(68, 11) + SourceIndex(0) name (C5T5) -4 >Emitted(64, 26) Source(68, 20) + SourceIndex(0) name (C5T5) -5 >Emitted(64, 27) Source(68, 21) + SourceIndex(0) name (C5T5) -6 >Emitted(64, 29) Source(68, 23) + SourceIndex(0) name (C5T5) -7 >Emitted(64, 30) Source(68, 24) + SourceIndex(0) name (C5T5) +1->Emitted(69, 5) Source(68, 5) + SourceIndex(0) name (C5T5) +2 >Emitted(69, 13) Source(68, 8) + SourceIndex(0) name (C5T5) +3 >Emitted(69, 16) Source(68, 11) + SourceIndex(0) name (C5T5) +4 >Emitted(69, 26) Source(68, 20) + SourceIndex(0) name (C5T5) +5 >Emitted(69, 27) Source(68, 21) + SourceIndex(0) name (C5T5) +6 >Emitted(69, 29) Source(68, 23) + SourceIndex(0) name (C5T5) +7 >Emitted(69, 30) Source(68, 24) + SourceIndex(0) name (C5T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { > 2 > return 3 > 4 > s 5 > ; -1->Emitted(65, 9) Source(69, 9) + SourceIndex(0) -2 >Emitted(65, 15) Source(69, 15) + SourceIndex(0) -3 >Emitted(65, 16) Source(69, 16) + SourceIndex(0) -4 >Emitted(65, 17) Source(69, 17) + SourceIndex(0) -5 >Emitted(65, 18) Source(69, 18) + SourceIndex(0) +1->Emitted(70, 9) Source(69, 9) + SourceIndex(0) +2 >Emitted(70, 15) Source(69, 15) + SourceIndex(0) +3 >Emitted(70, 16) Source(69, 16) + SourceIndex(0) +4 >Emitted(70, 17) Source(69, 17) + SourceIndex(0) +5 >Emitted(70, 18) Source(69, 18) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > } 3 > -1->Emitted(66, 5) Source(70, 5) + SourceIndex(0) -2 >Emitted(66, 6) Source(70, 6) + SourceIndex(0) -3 >Emitted(66, 7) Source(70, 6) + SourceIndex(0) name (C5T5) +1->Emitted(71, 5) Source(70, 5) + SourceIndex(0) +2 >Emitted(71, 6) Source(70, 6) + SourceIndex(0) +3 >Emitted(71, 7) Source(70, 6) + SourceIndex(0) name (C5T5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^^ 4 > ^^^^ 5 > ^^^^^ 6 > ^^^^ 7 > ^^^^^^^^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >} @@ -1192,57 +1243,66 @@ sourceFile:contextualTyping.ts > return s; > } > } -1->Emitted(67, 1) Source(71, 1) + SourceIndex(0) name (C5T5) -2 >Emitted(67, 2) Source(71, 2) + SourceIndex(0) name (C5T5) -3 >Emitted(67, 4) Source(66, 8) + SourceIndex(0) -4 >Emitted(67, 8) Source(66, 12) + SourceIndex(0) -5 >Emitted(67, 13) Source(66, 8) + SourceIndex(0) -6 >Emitted(67, 17) Source(66, 12) + SourceIndex(0) -7 >Emitted(67, 25) Source(71, 2) + SourceIndex(0) +1->Emitted(72, 1) Source(71, 1) + SourceIndex(0) name (C5T5) +2 >Emitted(72, 2) Source(71, 2) + SourceIndex(0) name (C5T5) +3 >Emitted(72, 4) Source(66, 8) + SourceIndex(0) +4 >Emitted(72, 8) Source(66, 12) + SourceIndex(0) +5 >Emitted(72, 13) Source(66, 8) + SourceIndex(0) +6 >Emitted(72, 17) Source(66, 12) + SourceIndex(0) +7 >Emitted(72, 25) Source(71, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^ -4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Variable assignment > -2 >var -3 > c6t5: (n: number) => IFoo -4 > ; -1->Emitted(68, 1) Source(74, 1) + SourceIndex(0) -2 >Emitted(68, 5) Source(74, 5) + SourceIndex(0) -3 >Emitted(68, 9) Source(74, 30) + SourceIndex(0) -4 >Emitted(68, 10) Source(74, 31) + SourceIndex(0) +2 > +3 >// CONTEXT: Variable assignment +1->Emitted(73, 1) Source(74, 1) + SourceIndex(0) +2 >Emitted(73, 1) Source(73, 1) + SourceIndex(0) +3 >Emitted(73, 32) Source(73, 32) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +2 > ^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >var +2 > c6t5: (n: number) => IFoo +3 > ; +1->Emitted(74, 5) Source(74, 5) + SourceIndex(0) +2 >Emitted(74, 9) Source(74, 30) + SourceIndex(0) +3 >Emitted(74, 10) Source(74, 31) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^ 4 > ^^^^^^^^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >c6t5 3 > = <(n: number) => IFoo> 4 > function( 5 > n -1->Emitted(69, 1) Source(75, 1) + SourceIndex(0) -2 >Emitted(69, 5) Source(75, 5) + SourceIndex(0) -3 >Emitted(69, 8) Source(75, 29) + SourceIndex(0) -4 >Emitted(69, 18) Source(75, 38) + SourceIndex(0) -5 >Emitted(69, 19) Source(75, 39) + SourceIndex(0) +1->Emitted(75, 1) Source(75, 1) + SourceIndex(0) +2 >Emitted(75, 5) Source(75, 5) + SourceIndex(0) +3 >Emitted(75, 8) Source(75, 29) + SourceIndex(0) +4 >Emitted(75, 18) Source(75, 38) + SourceIndex(0) +5 >Emitted(75, 19) Source(75, 39) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -1250,43 +1310,52 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(70, 5) Source(75, 43) + SourceIndex(0) -2 >Emitted(70, 11) Source(75, 49) + SourceIndex(0) -3 >Emitted(70, 12) Source(75, 56) + SourceIndex(0) -4 >Emitted(70, 13) Source(75, 57) + SourceIndex(0) -5 >Emitted(70, 15) Source(75, 59) + SourceIndex(0) -6 >Emitted(70, 16) Source(75, 60) + SourceIndex(0) -7 >Emitted(70, 17) Source(75, 60) + SourceIndex(0) +1->Emitted(76, 5) Source(75, 43) + SourceIndex(0) +2 >Emitted(76, 11) Source(75, 49) + SourceIndex(0) +3 >Emitted(76, 12) Source(75, 56) + SourceIndex(0) +4 >Emitted(76, 13) Source(75, 57) + SourceIndex(0) +5 >Emitted(76, 15) Source(75, 59) + SourceIndex(0) +6 >Emitted(76, 16) Source(75, 60) + SourceIndex(0) +7 >Emitted(76, 17) Source(75, 60) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(71, 1) Source(75, 61) + SourceIndex(0) -2 >Emitted(71, 2) Source(75, 62) + SourceIndex(0) -3 >Emitted(71, 3) Source(75, 63) + SourceIndex(0) +1->Emitted(77, 1) Source(75, 61) + SourceIndex(0) +2 >Emitted(77, 2) Source(75, 62) + SourceIndex(0) +3 >Emitted(77, 3) Source(75, 63) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^ -4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Array index assignment > -2 >var -3 > c7t2: IFoo[] -4 > ; -1->Emitted(72, 1) Source(78, 1) + SourceIndex(0) -2 >Emitted(72, 5) Source(78, 5) + SourceIndex(0) -3 >Emitted(72, 9) Source(78, 17) + SourceIndex(0) -4 >Emitted(72, 10) Source(78, 18) + SourceIndex(0) +2 > +3 >// CONTEXT: Array index assignment +1->Emitted(78, 1) Source(78, 1) + SourceIndex(0) +2 >Emitted(78, 1) Source(77, 1) + SourceIndex(0) +3 >Emitted(78, 35) Source(77, 35) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +2 > ^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >var +2 > c7t2: IFoo[] +3 > ; +1->Emitted(79, 5) Source(78, 5) + SourceIndex(0) +2 >Emitted(79, 9) Source(78, 17) + SourceIndex(0) +3 >Emitted(79, 10) Source(78, 18) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^ 4 > ^ @@ -1300,7 +1369,7 @@ sourceFile:contextualTyping.ts 12> ^^ 13> ^ 14> ^ -15> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +15> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >c7t2 @@ -1316,22 +1385,22 @@ sourceFile:contextualTyping.ts 12> } 13> ) 14> ; -1->Emitted(73, 1) Source(79, 1) + SourceIndex(0) -2 >Emitted(73, 5) Source(79, 5) + SourceIndex(0) -3 >Emitted(73, 6) Source(79, 6) + SourceIndex(0) -4 >Emitted(73, 7) Source(79, 7) + SourceIndex(0) -5 >Emitted(73, 8) Source(79, 8) + SourceIndex(0) -6 >Emitted(73, 11) Source(79, 17) + SourceIndex(0) -7 >Emitted(73, 12) Source(79, 18) + SourceIndex(0) -8 >Emitted(73, 14) Source(79, 19) + SourceIndex(0) -9 >Emitted(73, 15) Source(79, 20) + SourceIndex(0) -10>Emitted(73, 17) Source(79, 22) + SourceIndex(0) -11>Emitted(73, 18) Source(79, 23) + SourceIndex(0) -12>Emitted(73, 20) Source(79, 24) + SourceIndex(0) -13>Emitted(73, 21) Source(79, 25) + SourceIndex(0) -14>Emitted(73, 22) Source(79, 26) + SourceIndex(0) +1->Emitted(80, 1) Source(79, 1) + SourceIndex(0) +2 >Emitted(80, 5) Source(79, 5) + SourceIndex(0) +3 >Emitted(80, 6) Source(79, 6) + SourceIndex(0) +4 >Emitted(80, 7) Source(79, 7) + SourceIndex(0) +5 >Emitted(80, 8) Source(79, 8) + SourceIndex(0) +6 >Emitted(80, 11) Source(79, 17) + SourceIndex(0) +7 >Emitted(80, 12) Source(79, 18) + SourceIndex(0) +8 >Emitted(80, 14) Source(79, 19) + SourceIndex(0) +9 >Emitted(80, 15) Source(79, 20) + SourceIndex(0) +10>Emitted(80, 17) Source(79, 22) + SourceIndex(0) +11>Emitted(80, 18) Source(79, 23) + SourceIndex(0) +12>Emitted(80, 20) Source(79, 24) + SourceIndex(0) +13>Emitted(80, 21) Source(79, 25) + SourceIndex(0) +14>Emitted(80, 22) Source(79, 26) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ @@ -1339,7 +1408,7 @@ sourceFile:contextualTyping.ts 6 > ^^ 7 > ^ 8 > ^ -9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Object property assignment @@ -1389,16 +1458,16 @@ sourceFile:contextualTyping.ts 6 > {} 7 > ) 8 > ; -1->Emitted(74, 1) Source(102, 1) + SourceIndex(0) -2 >Emitted(74, 5) Source(102, 5) + SourceIndex(0) -3 >Emitted(74, 10) Source(102, 10) + SourceIndex(0) -4 >Emitted(74, 13) Source(120, 19) + SourceIndex(0) -5 >Emitted(74, 14) Source(120, 20) + SourceIndex(0) -6 >Emitted(74, 16) Source(120, 22) + SourceIndex(0) -7 >Emitted(74, 17) Source(120, 23) + SourceIndex(0) -8 >Emitted(74, 18) Source(120, 24) + SourceIndex(0) +1->Emitted(81, 1) Source(102, 1) + SourceIndex(0) +2 >Emitted(81, 5) Source(102, 5) + SourceIndex(0) +3 >Emitted(81, 10) Source(102, 10) + SourceIndex(0) +4 >Emitted(81, 13) Source(120, 19) + SourceIndex(0) +5 >Emitted(81, 14) Source(120, 20) + SourceIndex(0) +6 >Emitted(81, 16) Source(120, 22) + SourceIndex(0) +7 >Emitted(81, 17) Source(120, 23) + SourceIndex(0) +8 >Emitted(81, 18) Source(120, 24) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ @@ -1406,7 +1475,7 @@ sourceFile:contextualTyping.ts 6 > ^ 7 > ^^^^^^^^^^ 8 > ^ -9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -1417,53 +1486,53 @@ sourceFile:contextualTyping.ts 6 > ( 7 > function( 8 > s -1->Emitted(75, 1) Source(122, 1) + SourceIndex(0) -2 >Emitted(75, 6) Source(122, 6) + SourceIndex(0) -3 >Emitted(75, 7) Source(122, 7) + SourceIndex(0) -4 >Emitted(75, 9) Source(122, 9) + SourceIndex(0) -5 >Emitted(75, 12) Source(122, 12) + SourceIndex(0) -6 >Emitted(75, 13) Source(122, 13) + SourceIndex(0) -7 >Emitted(75, 23) Source(122, 22) + SourceIndex(0) -8 >Emitted(75, 24) Source(122, 23) + SourceIndex(0) +1->Emitted(82, 1) Source(122, 1) + SourceIndex(0) +2 >Emitted(82, 6) Source(122, 6) + SourceIndex(0) +3 >Emitted(82, 7) Source(122, 7) + SourceIndex(0) +4 >Emitted(82, 9) Source(122, 9) + SourceIndex(0) +5 >Emitted(82, 12) Source(122, 12) + SourceIndex(0) +6 >Emitted(82, 13) Source(122, 13) + SourceIndex(0) +7 >Emitted(82, 23) Source(122, 22) + SourceIndex(0) +8 >Emitted(82, 24) Source(122, 23) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > -1->Emitted(76, 5) Source(122, 27) + SourceIndex(0) -2 >Emitted(76, 11) Source(122, 33) + SourceIndex(0) -3 >Emitted(76, 12) Source(122, 34) + SourceIndex(0) -4 >Emitted(76, 13) Source(122, 35) + SourceIndex(0) -5 >Emitted(76, 14) Source(122, 35) + SourceIndex(0) +1->Emitted(83, 5) Source(122, 27) + SourceIndex(0) +2 >Emitted(83, 11) Source(122, 33) + SourceIndex(0) +3 >Emitted(83, 12) Source(122, 34) + SourceIndex(0) +4 >Emitted(83, 13) Source(122, 35) + SourceIndex(0) +5 >Emitted(83, 14) Source(122, 35) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ) 4 > ; -1->Emitted(77, 1) Source(122, 36) + SourceIndex(0) -2 >Emitted(77, 2) Source(122, 37) + SourceIndex(0) -3 >Emitted(77, 3) Source(122, 38) + SourceIndex(0) -4 >Emitted(77, 4) Source(122, 39) + SourceIndex(0) +1->Emitted(84, 1) Source(122, 36) + SourceIndex(0) +2 >Emitted(84, 2) Source(122, 37) + SourceIndex(0) +3 >Emitted(84, 3) Source(122, 38) + SourceIndex(0) +4 >Emitted(84, 4) Source(122, 39) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ 5 > ^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -1471,48 +1540,48 @@ sourceFile:contextualTyping.ts 4 > t2 5 > = 6 > ( -1->Emitted(78, 1) Source(123, 1) + SourceIndex(0) -2 >Emitted(78, 6) Source(123, 6) + SourceIndex(0) -3 >Emitted(78, 7) Source(123, 7) + SourceIndex(0) -4 >Emitted(78, 9) Source(123, 9) + SourceIndex(0) -5 >Emitted(78, 12) Source(123, 18) + SourceIndex(0) -6 >Emitted(78, 13) Source(123, 19) + SourceIndex(0) +1->Emitted(85, 1) Source(123, 1) + SourceIndex(0) +2 >Emitted(85, 6) Source(123, 6) + SourceIndex(0) +3 >Emitted(85, 7) Source(123, 7) + SourceIndex(0) +4 >Emitted(85, 9) Source(123, 9) + SourceIndex(0) +5 >Emitted(85, 12) Source(123, 18) + SourceIndex(0) +6 >Emitted(85, 13) Source(123, 19) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > n 3 > : 4 > 1 -1->Emitted(79, 5) Source(124, 5) + SourceIndex(0) -2 >Emitted(79, 6) Source(124, 6) + SourceIndex(0) -3 >Emitted(79, 8) Source(124, 8) + SourceIndex(0) -4 >Emitted(79, 9) Source(124, 9) + SourceIndex(0) +1->Emitted(86, 5) Source(124, 5) + SourceIndex(0) +2 >Emitted(86, 6) Source(124, 6) + SourceIndex(0) +3 >Emitted(86, 8) Source(124, 8) + SourceIndex(0) +4 >Emitted(86, 9) Source(124, 9) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > ; -1->Emitted(80, 2) Source(125, 2) + SourceIndex(0) -2 >Emitted(80, 3) Source(125, 3) + SourceIndex(0) -3 >Emitted(80, 4) Source(125, 4) + SourceIndex(0) +1->Emitted(87, 2) Source(125, 2) + SourceIndex(0) +2 >Emitted(87, 3) Source(125, 3) + SourceIndex(0) +3 >Emitted(87, 4) Source(125, 4) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ 5 > ^^^ 6 > ^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -1521,40 +1590,40 @@ sourceFile:contextualTyping.ts 5 > = 6 > [] 7 > ; -1->Emitted(81, 1) Source(126, 1) + SourceIndex(0) -2 >Emitted(81, 6) Source(126, 6) + SourceIndex(0) -3 >Emitted(81, 7) Source(126, 7) + SourceIndex(0) -4 >Emitted(81, 9) Source(126, 9) + SourceIndex(0) -5 >Emitted(81, 12) Source(126, 12) + SourceIndex(0) -6 >Emitted(81, 14) Source(126, 14) + SourceIndex(0) -7 >Emitted(81, 15) Source(126, 15) + SourceIndex(0) +1->Emitted(88, 1) Source(126, 1) + SourceIndex(0) +2 >Emitted(88, 6) Source(126, 6) + SourceIndex(0) +3 >Emitted(88, 7) Source(126, 7) + SourceIndex(0) +4 >Emitted(88, 9) Source(126, 9) + SourceIndex(0) +5 >Emitted(88, 12) Source(126, 12) + SourceIndex(0) +6 >Emitted(88, 14) Source(126, 14) + SourceIndex(0) +7 >Emitted(88, 15) Source(126, 15) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ 5 > ^^^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 3 > . 4 > t4 5 > = -1->Emitted(82, 1) Source(127, 1) + SourceIndex(0) -2 >Emitted(82, 6) Source(127, 6) + SourceIndex(0) -3 >Emitted(82, 7) Source(127, 7) + SourceIndex(0) -4 >Emitted(82, 9) Source(127, 9) + SourceIndex(0) -5 >Emitted(82, 12) Source(127, 12) + SourceIndex(0) +1->Emitted(89, 1) Source(127, 1) + SourceIndex(0) +2 >Emitted(89, 6) Source(127, 6) + SourceIndex(0) +3 >Emitted(89, 7) Source(127, 7) + SourceIndex(0) +4 >Emitted(89, 9) Source(127, 9) + SourceIndex(0) +5 >Emitted(89, 12) Source(127, 12) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->function() { 2 > return 3 > @@ -1562,33 +1631,33 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(83, 5) Source(127, 25) + SourceIndex(0) -2 >Emitted(83, 11) Source(127, 31) + SourceIndex(0) -3 >Emitted(83, 12) Source(127, 38) + SourceIndex(0) -4 >Emitted(83, 13) Source(127, 39) + SourceIndex(0) -5 >Emitted(83, 15) Source(127, 41) + SourceIndex(0) -6 >Emitted(83, 16) Source(127, 42) + SourceIndex(0) -7 >Emitted(83, 17) Source(127, 42) + SourceIndex(0) +1->Emitted(90, 5) Source(127, 25) + SourceIndex(0) +2 >Emitted(90, 11) Source(127, 31) + SourceIndex(0) +3 >Emitted(90, 12) Source(127, 38) + SourceIndex(0) +4 >Emitted(90, 13) Source(127, 39) + SourceIndex(0) +5 >Emitted(90, 15) Source(127, 41) + SourceIndex(0) +6 >Emitted(90, 16) Source(127, 42) + SourceIndex(0) +7 >Emitted(90, 17) Source(127, 42) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(84, 1) Source(127, 43) + SourceIndex(0) -2 >Emitted(84, 2) Source(127, 44) + SourceIndex(0) -3 >Emitted(84, 3) Source(127, 45) + SourceIndex(0) +1->Emitted(91, 1) Source(127, 43) + SourceIndex(0) +2 >Emitted(91, 2) Source(127, 44) + SourceIndex(0) +3 >Emitted(91, 3) Source(127, 45) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ 5 > ^^^ 6 > ^^^^^^^^^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -1597,22 +1666,22 @@ sourceFile:contextualTyping.ts 5 > = 6 > function( 7 > n -1->Emitted(85, 1) Source(128, 1) + SourceIndex(0) -2 >Emitted(85, 6) Source(128, 6) + SourceIndex(0) -3 >Emitted(85, 7) Source(128, 7) + SourceIndex(0) -4 >Emitted(85, 9) Source(128, 9) + SourceIndex(0) -5 >Emitted(85, 12) Source(128, 12) + SourceIndex(0) -6 >Emitted(85, 22) Source(128, 21) + SourceIndex(0) -7 >Emitted(85, 23) Source(128, 22) + SourceIndex(0) +1->Emitted(92, 1) Source(128, 1) + SourceIndex(0) +2 >Emitted(92, 6) Source(128, 6) + SourceIndex(0) +3 >Emitted(92, 7) Source(128, 7) + SourceIndex(0) +4 >Emitted(92, 9) Source(128, 9) + SourceIndex(0) +5 >Emitted(92, 12) Source(128, 12) + SourceIndex(0) +6 >Emitted(92, 22) Source(128, 21) + SourceIndex(0) +7 >Emitted(92, 23) Source(128, 22) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -1620,26 +1689,26 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(86, 5) Source(128, 26) + SourceIndex(0) -2 >Emitted(86, 11) Source(128, 32) + SourceIndex(0) -3 >Emitted(86, 12) Source(128, 39) + SourceIndex(0) -4 >Emitted(86, 13) Source(128, 40) + SourceIndex(0) -5 >Emitted(86, 15) Source(128, 42) + SourceIndex(0) -6 >Emitted(86, 16) Source(128, 43) + SourceIndex(0) -7 >Emitted(86, 17) Source(128, 43) + SourceIndex(0) +1->Emitted(93, 5) Source(128, 26) + SourceIndex(0) +2 >Emitted(93, 11) Source(128, 32) + SourceIndex(0) +3 >Emitted(93, 12) Source(128, 39) + SourceIndex(0) +4 >Emitted(93, 13) Source(128, 40) + SourceIndex(0) +5 >Emitted(93, 15) Source(128, 42) + SourceIndex(0) +6 >Emitted(93, 16) Source(128, 43) + SourceIndex(0) +7 >Emitted(93, 17) Source(128, 43) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(87, 1) Source(128, 44) + SourceIndex(0) -2 >Emitted(87, 2) Source(128, 45) + SourceIndex(0) -3 >Emitted(87, 3) Source(128, 46) + SourceIndex(0) +1->Emitted(94, 1) Source(128, 44) + SourceIndex(0) +2 >Emitted(94, 2) Source(128, 45) + SourceIndex(0) +3 >Emitted(94, 3) Source(128, 46) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ @@ -1648,7 +1717,7 @@ sourceFile:contextualTyping.ts 7 > ^ 8 > ^^ 9 > ^ -10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -1659,24 +1728,24 @@ sourceFile:contextualTyping.ts 7 > n 8 > , 9 > s -1->Emitted(88, 1) Source(129, 1) + SourceIndex(0) -2 >Emitted(88, 6) Source(129, 6) + SourceIndex(0) -3 >Emitted(88, 7) Source(129, 7) + SourceIndex(0) -4 >Emitted(88, 9) Source(129, 9) + SourceIndex(0) -5 >Emitted(88, 12) Source(129, 12) + SourceIndex(0) -6 >Emitted(88, 22) Source(129, 21) + SourceIndex(0) -7 >Emitted(88, 23) Source(129, 22) + SourceIndex(0) -8 >Emitted(88, 25) Source(129, 24) + SourceIndex(0) -9 >Emitted(88, 26) Source(129, 25) + SourceIndex(0) +1->Emitted(95, 1) Source(129, 1) + SourceIndex(0) +2 >Emitted(95, 6) Source(129, 6) + SourceIndex(0) +3 >Emitted(95, 7) Source(129, 7) + SourceIndex(0) +4 >Emitted(95, 9) Source(129, 9) + SourceIndex(0) +5 >Emitted(95, 12) Source(129, 12) + SourceIndex(0) +6 >Emitted(95, 22) Source(129, 21) + SourceIndex(0) +7 >Emitted(95, 23) Source(129, 22) + SourceIndex(0) +8 >Emitted(95, 25) Source(129, 24) + SourceIndex(0) +9 >Emitted(95, 26) Source(129, 25) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -1684,33 +1753,33 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(89, 5) Source(129, 29) + SourceIndex(0) -2 >Emitted(89, 11) Source(129, 35) + SourceIndex(0) -3 >Emitted(89, 12) Source(129, 42) + SourceIndex(0) -4 >Emitted(89, 13) Source(129, 43) + SourceIndex(0) -5 >Emitted(89, 15) Source(129, 45) + SourceIndex(0) -6 >Emitted(89, 16) Source(129, 46) + SourceIndex(0) -7 >Emitted(89, 17) Source(129, 46) + SourceIndex(0) +1->Emitted(96, 5) Source(129, 29) + SourceIndex(0) +2 >Emitted(96, 11) Source(129, 35) + SourceIndex(0) +3 >Emitted(96, 12) Source(129, 42) + SourceIndex(0) +4 >Emitted(96, 13) Source(129, 43) + SourceIndex(0) +5 >Emitted(96, 15) Source(129, 45) + SourceIndex(0) +6 >Emitted(96, 16) Source(129, 46) + SourceIndex(0) +7 >Emitted(96, 17) Source(129, 46) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(90, 1) Source(129, 47) + SourceIndex(0) -2 >Emitted(90, 2) Source(129, 48) + SourceIndex(0) -3 >Emitted(90, 3) Source(129, 49) + SourceIndex(0) +1->Emitted(97, 1) Source(129, 47) + SourceIndex(0) +2 >Emitted(97, 2) Source(129, 48) + SourceIndex(0) +3 >Emitted(97, 3) Source(129, 49) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ 5 > ^^^ 6 > ^^^^^^^^^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -1719,50 +1788,50 @@ sourceFile:contextualTyping.ts 5 > = 6 > function( 7 > n: number -1->Emitted(91, 1) Source(130, 1) + SourceIndex(0) -2 >Emitted(91, 6) Source(130, 6) + SourceIndex(0) -3 >Emitted(91, 7) Source(130, 7) + SourceIndex(0) -4 >Emitted(91, 9) Source(130, 9) + SourceIndex(0) -5 >Emitted(91, 12) Source(130, 12) + SourceIndex(0) -6 >Emitted(91, 22) Source(130, 21) + SourceIndex(0) -7 >Emitted(91, 23) Source(130, 30) + SourceIndex(0) +1->Emitted(98, 1) Source(130, 1) + SourceIndex(0) +2 >Emitted(98, 6) Source(130, 6) + SourceIndex(0) +3 >Emitted(98, 7) Source(130, 7) + SourceIndex(0) +4 >Emitted(98, 9) Source(130, 9) + SourceIndex(0) +5 >Emitted(98, 12) Source(130, 12) + SourceIndex(0) +6 >Emitted(98, 22) Source(130, 21) + SourceIndex(0) +7 >Emitted(98, 23) Source(130, 30) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > n 5 > -1->Emitted(92, 5) Source(130, 34) + SourceIndex(0) -2 >Emitted(92, 11) Source(130, 40) + SourceIndex(0) -3 >Emitted(92, 12) Source(130, 41) + SourceIndex(0) -4 >Emitted(92, 13) Source(130, 42) + SourceIndex(0) -5 >Emitted(92, 14) Source(130, 42) + SourceIndex(0) +1->Emitted(99, 5) Source(130, 34) + SourceIndex(0) +2 >Emitted(99, 11) Source(130, 40) + SourceIndex(0) +3 >Emitted(99, 12) Source(130, 41) + SourceIndex(0) +4 >Emitted(99, 13) Source(130, 42) + SourceIndex(0) +5 >Emitted(99, 14) Source(130, 42) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(93, 1) Source(130, 43) + SourceIndex(0) -2 >Emitted(93, 2) Source(130, 44) + SourceIndex(0) -3 >Emitted(93, 3) Source(130, 45) + SourceIndex(0) +1->Emitted(100, 1) Source(130, 43) + SourceIndex(0) +2 >Emitted(100, 2) Source(130, 44) + SourceIndex(0) +3 >Emitted(100, 3) Source(130, 45) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ 5 > ^^^ 6 > ^^^^^^^^^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -1772,43 +1841,43 @@ sourceFile:contextualTyping.ts 5 > = 6 > function( 7 > n -1->Emitted(94, 1) Source(132, 1) + SourceIndex(0) -2 >Emitted(94, 6) Source(132, 6) + SourceIndex(0) -3 >Emitted(94, 7) Source(132, 7) + SourceIndex(0) -4 >Emitted(94, 9) Source(132, 9) + SourceIndex(0) -5 >Emitted(94, 12) Source(132, 12) + SourceIndex(0) -6 >Emitted(94, 22) Source(132, 21) + SourceIndex(0) -7 >Emitted(94, 23) Source(132, 22) + SourceIndex(0) +1->Emitted(101, 1) Source(132, 1) + SourceIndex(0) +2 >Emitted(101, 6) Source(132, 6) + SourceIndex(0) +3 >Emitted(101, 7) Source(132, 7) + SourceIndex(0) +4 >Emitted(101, 9) Source(132, 9) + SourceIndex(0) +5 >Emitted(101, 12) Source(132, 12) + SourceIndex(0) +6 >Emitted(101, 22) Source(132, 21) + SourceIndex(0) +7 >Emitted(101, 23) Source(132, 22) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > n 5 > ; -1->Emitted(95, 5) Source(132, 26) + SourceIndex(0) -2 >Emitted(95, 11) Source(132, 32) + SourceIndex(0) -3 >Emitted(95, 12) Source(132, 33) + SourceIndex(0) -4 >Emitted(95, 13) Source(132, 34) + SourceIndex(0) -5 >Emitted(95, 14) Source(132, 35) + SourceIndex(0) +1->Emitted(102, 5) Source(132, 26) + SourceIndex(0) +2 >Emitted(102, 11) Source(132, 32) + SourceIndex(0) +3 >Emitted(102, 12) Source(132, 33) + SourceIndex(0) +4 >Emitted(102, 13) Source(132, 34) + SourceIndex(0) +5 >Emitted(102, 14) Source(132, 35) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(96, 1) Source(132, 36) + SourceIndex(0) -2 >Emitted(96, 2) Source(132, 37) + SourceIndex(0) -3 >Emitted(96, 3) Source(132, 38) + SourceIndex(0) +1->Emitted(103, 1) Source(132, 36) + SourceIndex(0) +2 >Emitted(103, 2) Source(132, 37) + SourceIndex(0) +3 >Emitted(103, 3) Source(132, 38) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^ @@ -1819,7 +1888,7 @@ sourceFile:contextualTyping.ts 9 > ^^ 10> ^ 11> ^ -12> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +12> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -1832,19 +1901,19 @@ sourceFile:contextualTyping.ts 9 > [] 10> ] 11> ; -1->Emitted(97, 1) Source(133, 1) + SourceIndex(0) -2 >Emitted(97, 6) Source(133, 6) + SourceIndex(0) -3 >Emitted(97, 7) Source(133, 7) + SourceIndex(0) -4 >Emitted(97, 9) Source(133, 9) + SourceIndex(0) -5 >Emitted(97, 12) Source(133, 12) + SourceIndex(0) -6 >Emitted(97, 13) Source(133, 13) + SourceIndex(0) -7 >Emitted(97, 15) Source(133, 15) + SourceIndex(0) -8 >Emitted(97, 17) Source(133, 16) + SourceIndex(0) -9 >Emitted(97, 19) Source(133, 18) + SourceIndex(0) -10>Emitted(97, 20) Source(133, 19) + SourceIndex(0) -11>Emitted(97, 21) Source(133, 20) + SourceIndex(0) +1->Emitted(104, 1) Source(133, 1) + SourceIndex(0) +2 >Emitted(104, 6) Source(133, 6) + SourceIndex(0) +3 >Emitted(104, 7) Source(133, 7) + SourceIndex(0) +4 >Emitted(104, 9) Source(133, 9) + SourceIndex(0) +5 >Emitted(104, 12) Source(133, 12) + SourceIndex(0) +6 >Emitted(104, 13) Source(133, 13) + SourceIndex(0) +7 >Emitted(104, 15) Source(133, 15) + SourceIndex(0) +8 >Emitted(104, 17) Source(133, 16) + SourceIndex(0) +9 >Emitted(104, 19) Source(133, 18) + SourceIndex(0) +10>Emitted(104, 20) Source(133, 19) + SourceIndex(0) +11>Emitted(104, 21) Source(133, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^^ @@ -1859,7 +1928,7 @@ sourceFile:contextualTyping.ts 13> ^ 14> ^ 15> ^ -16> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +16> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -1876,23 +1945,23 @@ sourceFile:contextualTyping.ts 13> ) 14> ] 15> ; -1->Emitted(98, 1) Source(134, 1) + SourceIndex(0) -2 >Emitted(98, 6) Source(134, 6) + SourceIndex(0) -3 >Emitted(98, 7) Source(134, 7) + SourceIndex(0) -4 >Emitted(98, 10) Source(134, 10) + SourceIndex(0) -5 >Emitted(98, 13) Source(134, 13) + SourceIndex(0) -6 >Emitted(98, 14) Source(134, 20) + SourceIndex(0) -7 >Emitted(98, 15) Source(134, 21) + SourceIndex(0) -8 >Emitted(98, 17) Source(134, 23) + SourceIndex(0) -9 >Emitted(98, 18) Source(134, 24) + SourceIndex(0) -10>Emitted(98, 20) Source(134, 31) + SourceIndex(0) -11>Emitted(98, 21) Source(134, 32) + SourceIndex(0) -12>Emitted(98, 23) Source(134, 34) + SourceIndex(0) -13>Emitted(98, 24) Source(134, 35) + SourceIndex(0) -14>Emitted(98, 25) Source(134, 36) + SourceIndex(0) -15>Emitted(98, 26) Source(134, 37) + SourceIndex(0) +1->Emitted(105, 1) Source(134, 1) + SourceIndex(0) +2 >Emitted(105, 6) Source(134, 6) + SourceIndex(0) +3 >Emitted(105, 7) Source(134, 7) + SourceIndex(0) +4 >Emitted(105, 10) Source(134, 10) + SourceIndex(0) +5 >Emitted(105, 13) Source(134, 13) + SourceIndex(0) +6 >Emitted(105, 14) Source(134, 20) + SourceIndex(0) +7 >Emitted(105, 15) Source(134, 21) + SourceIndex(0) +8 >Emitted(105, 17) Source(134, 23) + SourceIndex(0) +9 >Emitted(105, 18) Source(134, 24) + SourceIndex(0) +10>Emitted(105, 20) Source(134, 31) + SourceIndex(0) +11>Emitted(105, 21) Source(134, 32) + SourceIndex(0) +12>Emitted(105, 23) Source(134, 34) + SourceIndex(0) +13>Emitted(105, 24) Source(134, 35) + SourceIndex(0) +14>Emitted(105, 25) Source(134, 36) + SourceIndex(0) +15>Emitted(105, 26) Source(134, 37) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^^ @@ -1902,7 +1971,7 @@ sourceFile:contextualTyping.ts 8 > ^ 9 > ^^ 10> ^ -11> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +11> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -1914,73 +1983,73 @@ sourceFile:contextualTyping.ts 8 > n 9 > , 10> s -1->Emitted(99, 1) Source(135, 1) + SourceIndex(0) -2 >Emitted(99, 6) Source(135, 6) + SourceIndex(0) -3 >Emitted(99, 7) Source(135, 7) + SourceIndex(0) -4 >Emitted(99, 10) Source(135, 10) + SourceIndex(0) -5 >Emitted(99, 13) Source(135, 13) + SourceIndex(0) -6 >Emitted(99, 14) Source(135, 14) + SourceIndex(0) -7 >Emitted(99, 24) Source(135, 23) + SourceIndex(0) -8 >Emitted(99, 25) Source(135, 24) + SourceIndex(0) -9 >Emitted(99, 27) Source(135, 26) + SourceIndex(0) -10>Emitted(99, 28) Source(135, 27) + SourceIndex(0) +1->Emitted(106, 1) Source(135, 1) + SourceIndex(0) +2 >Emitted(106, 6) Source(135, 6) + SourceIndex(0) +3 >Emitted(106, 7) Source(135, 7) + SourceIndex(0) +4 >Emitted(106, 10) Source(135, 10) + SourceIndex(0) +5 >Emitted(106, 13) Source(135, 13) + SourceIndex(0) +6 >Emitted(106, 14) Source(135, 14) + SourceIndex(0) +7 >Emitted(106, 24) Source(135, 23) + SourceIndex(0) +8 >Emitted(106, 25) Source(135, 24) + SourceIndex(0) +9 >Emitted(106, 27) Source(135, 26) + SourceIndex(0) +10>Emitted(106, 28) Source(135, 27) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > ; -1->Emitted(100, 5) Source(135, 31) + SourceIndex(0) -2 >Emitted(100, 11) Source(135, 37) + SourceIndex(0) -3 >Emitted(100, 12) Source(135, 38) + SourceIndex(0) -4 >Emitted(100, 13) Source(135, 39) + SourceIndex(0) -5 >Emitted(100, 14) Source(135, 40) + SourceIndex(0) +1->Emitted(107, 5) Source(135, 31) + SourceIndex(0) +2 >Emitted(107, 11) Source(135, 37) + SourceIndex(0) +3 >Emitted(107, 12) Source(135, 38) + SourceIndex(0) +4 >Emitted(107, 13) Source(135, 39) + SourceIndex(0) +5 >Emitted(107, 14) Source(135, 40) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ] 4 > ; -1->Emitted(101, 1) Source(135, 41) + SourceIndex(0) -2 >Emitted(101, 2) Source(135, 42) + SourceIndex(0) -3 >Emitted(101, 3) Source(135, 43) + SourceIndex(0) -4 >Emitted(101, 4) Source(135, 44) + SourceIndex(0) +1->Emitted(108, 1) Source(135, 41) + SourceIndex(0) +2 >Emitted(108, 2) Source(135, 42) + SourceIndex(0) +3 >Emitted(108, 3) Source(135, 43) + SourceIndex(0) +4 >Emitted(108, 4) Source(135, 44) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^^ 5 > ^^^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 3 > . 4 > t12 5 > = -1->Emitted(102, 1) Source(136, 1) + SourceIndex(0) -2 >Emitted(102, 6) Source(136, 6) + SourceIndex(0) -3 >Emitted(102, 7) Source(136, 7) + SourceIndex(0) -4 >Emitted(102, 10) Source(136, 10) + SourceIndex(0) -5 >Emitted(102, 13) Source(136, 13) + SourceIndex(0) +1->Emitted(109, 1) Source(136, 1) + SourceIndex(0) +2 >Emitted(109, 6) Source(136, 6) + SourceIndex(0) +3 >Emitted(109, 7) Source(136, 7) + SourceIndex(0) +4 >Emitted(109, 10) Source(136, 10) + SourceIndex(0) +5 >Emitted(109, 13) Source(136, 13) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^ 3 > ^^ 4 > ^ 5 > ^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > foo @@ -1988,29 +2057,29 @@ sourceFile:contextualTyping.ts 4 > ( 5 > {} 6 > ) -1->Emitted(103, 5) Source(137, 5) + SourceIndex(0) -2 >Emitted(103, 8) Source(137, 8) + SourceIndex(0) -3 >Emitted(103, 10) Source(137, 16) + SourceIndex(0) -4 >Emitted(103, 11) Source(137, 17) + SourceIndex(0) -5 >Emitted(103, 13) Source(137, 19) + SourceIndex(0) -6 >Emitted(103, 14) Source(137, 20) + SourceIndex(0) +1->Emitted(110, 5) Source(137, 5) + SourceIndex(0) +2 >Emitted(110, 8) Source(137, 8) + SourceIndex(0) +3 >Emitted(110, 10) Source(137, 16) + SourceIndex(0) +4 >Emitted(110, 11) Source(137, 17) + SourceIndex(0) +5 >Emitted(110, 13) Source(137, 19) + SourceIndex(0) +6 >Emitted(110, 14) Source(137, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > -1->Emitted(104, 2) Source(138, 2) + SourceIndex(0) -2 >Emitted(104, 3) Source(138, 2) + SourceIndex(0) +1->Emitted(111, 2) Source(138, 2) + SourceIndex(0) +2 >Emitted(111, 3) Source(138, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^^ 5 > ^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -2018,21 +2087,21 @@ sourceFile:contextualTyping.ts 4 > t13 5 > = 6 > ( -1->Emitted(105, 1) Source(139, 1) + SourceIndex(0) -2 >Emitted(105, 6) Source(139, 6) + SourceIndex(0) -3 >Emitted(105, 7) Source(139, 7) + SourceIndex(0) -4 >Emitted(105, 10) Source(139, 10) + SourceIndex(0) -5 >Emitted(105, 13) Source(139, 19) + SourceIndex(0) -6 >Emitted(105, 14) Source(139, 20) + SourceIndex(0) +1->Emitted(112, 1) Source(139, 1) + SourceIndex(0) +2 >Emitted(112, 6) Source(139, 6) + SourceIndex(0) +3 >Emitted(112, 7) Source(139, 7) + SourceIndex(0) +4 >Emitted(112, 10) Source(139, 10) + SourceIndex(0) +5 >Emitted(112, 13) Source(139, 19) + SourceIndex(0) +6 >Emitted(112, 14) Source(139, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^^^^^^^^^^ 5 > ^ 6 > ^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > f @@ -2041,58 +2110,58 @@ sourceFile:contextualTyping.ts 5 > i 6 > , 7 > s -1->Emitted(106, 5) Source(140, 5) + SourceIndex(0) -2 >Emitted(106, 6) Source(140, 6) + SourceIndex(0) -3 >Emitted(106, 8) Source(140, 8) + SourceIndex(0) -4 >Emitted(106, 18) Source(140, 17) + SourceIndex(0) -5 >Emitted(106, 19) Source(140, 18) + SourceIndex(0) -6 >Emitted(106, 21) Source(140, 20) + SourceIndex(0) -7 >Emitted(106, 22) Source(140, 21) + SourceIndex(0) +1->Emitted(113, 5) Source(140, 5) + SourceIndex(0) +2 >Emitted(113, 6) Source(140, 6) + SourceIndex(0) +3 >Emitted(113, 8) Source(140, 8) + SourceIndex(0) +4 >Emitted(113, 18) Source(140, 17) + SourceIndex(0) +5 >Emitted(113, 19) Source(140, 18) + SourceIndex(0) +6 >Emitted(113, 21) Source(140, 20) + SourceIndex(0) +7 >Emitted(113, 22) Source(140, 21) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > ; -1->Emitted(107, 9) Source(140, 25) + SourceIndex(0) -2 >Emitted(107, 15) Source(140, 31) + SourceIndex(0) -3 >Emitted(107, 16) Source(140, 32) + SourceIndex(0) -4 >Emitted(107, 17) Source(140, 33) + SourceIndex(0) -5 >Emitted(107, 18) Source(140, 34) + SourceIndex(0) +1->Emitted(114, 9) Source(140, 25) + SourceIndex(0) +2 >Emitted(114, 15) Source(140, 31) + SourceIndex(0) +3 >Emitted(114, 16) Source(140, 32) + SourceIndex(0) +4 >Emitted(114, 17) Source(140, 33) + SourceIndex(0) +5 >Emitted(114, 18) Source(140, 34) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 > } -1->Emitted(108, 5) Source(140, 35) + SourceIndex(0) -2 >Emitted(108, 6) Source(140, 36) + SourceIndex(0) +1->Emitted(115, 5) Source(140, 35) + SourceIndex(0) +2 >Emitted(115, 6) Source(140, 36) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > -1->Emitted(109, 2) Source(141, 2) + SourceIndex(0) -2 >Emitted(109, 3) Source(141, 3) + SourceIndex(0) -3 >Emitted(109, 4) Source(141, 3) + SourceIndex(0) +1->Emitted(116, 2) Source(141, 2) + SourceIndex(0) +2 >Emitted(116, 3) Source(141, 3) + SourceIndex(0) +3 >Emitted(116, 4) Source(141, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^^ 5 > ^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >objc8 @@ -2100,101 +2169,110 @@ sourceFile:contextualTyping.ts 4 > t14 5 > = 6 > ( -1->Emitted(110, 1) Source(142, 1) + SourceIndex(0) -2 >Emitted(110, 6) Source(142, 6) + SourceIndex(0) -3 >Emitted(110, 7) Source(142, 7) + SourceIndex(0) -4 >Emitted(110, 10) Source(142, 10) + SourceIndex(0) -5 >Emitted(110, 13) Source(142, 19) + SourceIndex(0) -6 >Emitted(110, 14) Source(142, 20) + SourceIndex(0) +1->Emitted(117, 1) Source(142, 1) + SourceIndex(0) +2 >Emitted(117, 6) Source(142, 6) + SourceIndex(0) +3 >Emitted(117, 7) Source(142, 7) + SourceIndex(0) +4 >Emitted(117, 10) Source(142, 10) + SourceIndex(0) +5 >Emitted(117, 13) Source(142, 19) + SourceIndex(0) +6 >Emitted(117, 14) Source(142, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > a 3 > : 4 > [] -1->Emitted(111, 5) Source(143, 5) + SourceIndex(0) -2 >Emitted(111, 6) Source(143, 6) + SourceIndex(0) -3 >Emitted(111, 8) Source(143, 8) + SourceIndex(0) -4 >Emitted(111, 10) Source(143, 10) + SourceIndex(0) +1->Emitted(118, 5) Source(143, 5) + SourceIndex(0) +2 >Emitted(118, 6) Source(143, 6) + SourceIndex(0) +3 >Emitted(118, 8) Source(143, 8) + SourceIndex(0) +4 >Emitted(118, 10) Source(143, 10) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > -1->Emitted(112, 2) Source(144, 2) + SourceIndex(0) -2 >Emitted(112, 3) Source(144, 3) + SourceIndex(0) -3 >Emitted(112, 4) Source(144, 3) + SourceIndex(0) +1->Emitted(119, 2) Source(144, 2) + SourceIndex(0) +2 >Emitted(119, 3) Source(144, 3) + SourceIndex(0) +3 >Emitted(119, 4) Source(144, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^^^^^^ -3 > ^^^^ -4 > ^ -5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >// CONTEXT: Function call > -2 >function -3 > c9t5 -4 > ( -5 > f: (n: number) => IFoo -1->Emitted(113, 1) Source(146, 1) + SourceIndex(0) -2 >Emitted(113, 10) Source(146, 10) + SourceIndex(0) -3 >Emitted(113, 14) Source(146, 14) + SourceIndex(0) -4 >Emitted(113, 15) Source(146, 15) + SourceIndex(0) -5 >Emitted(113, 16) Source(146, 37) + SourceIndex(0) +2 > +3 >// CONTEXT: Function call +1->Emitted(120, 1) Source(146, 1) + SourceIndex(0) +2 >Emitted(120, 1) Source(145, 1) + SourceIndex(0) +3 >Emitted(120, 26) Source(145, 26) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^^ +2 > ^^^^ +3 > ^ +4 > ^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >function +2 > c9t5 +3 > ( +4 > f: (n: number) => IFoo +1->Emitted(121, 10) Source(146, 10) + SourceIndex(0) +2 >Emitted(121, 14) Source(146, 14) + SourceIndex(0) +3 >Emitted(121, 15) Source(146, 15) + SourceIndex(0) +4 >Emitted(121, 16) Source(146, 37) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 >} -1->Emitted(114, 1) Source(146, 40) + SourceIndex(0) name (c9t5) -2 >Emitted(114, 2) Source(146, 41) + SourceIndex(0) name (c9t5) +1->Emitted(122, 1) Source(146, 40) + SourceIndex(0) name (c9t5) +2 >Emitted(122, 2) Source(146, 41) + SourceIndex(0) name (c9t5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >; -1->Emitted(115, 1) Source(146, 41) + SourceIndex(0) -2 >Emitted(115, 2) Source(146, 42) + SourceIndex(0) +1->Emitted(123, 1) Source(146, 41) + SourceIndex(0) +2 >Emitted(123, 2) Source(146, 42) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^ 4 > ^^^^^^^^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >c9t5 3 > ( 4 > function( 5 > n -1->Emitted(116, 1) Source(147, 1) + SourceIndex(0) -2 >Emitted(116, 5) Source(147, 5) + SourceIndex(0) -3 >Emitted(116, 6) Source(147, 6) + SourceIndex(0) -4 >Emitted(116, 16) Source(147, 15) + SourceIndex(0) -5 >Emitted(116, 17) Source(147, 16) + SourceIndex(0) +1->Emitted(124, 1) Source(147, 1) + SourceIndex(0) +2 >Emitted(124, 5) Source(147, 5) + SourceIndex(0) +3 >Emitted(124, 6) Source(147, 6) + SourceIndex(0) +4 >Emitted(124, 16) Source(147, 15) + SourceIndex(0) +5 >Emitted(124, 17) Source(147, 16) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { > 2 > return @@ -2203,71 +2281,80 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > ; -1->Emitted(117, 5) Source(148, 5) + SourceIndex(0) -2 >Emitted(117, 11) Source(148, 11) + SourceIndex(0) -3 >Emitted(117, 12) Source(148, 18) + SourceIndex(0) -4 >Emitted(117, 13) Source(148, 19) + SourceIndex(0) -5 >Emitted(117, 15) Source(148, 21) + SourceIndex(0) -6 >Emitted(117, 16) Source(148, 22) + SourceIndex(0) -7 >Emitted(117, 17) Source(148, 23) + SourceIndex(0) +1->Emitted(125, 5) Source(148, 5) + SourceIndex(0) +2 >Emitted(125, 11) Source(148, 11) + SourceIndex(0) +3 >Emitted(125, 12) Source(148, 18) + SourceIndex(0) +4 >Emitted(125, 13) Source(148, 19) + SourceIndex(0) +5 >Emitted(125, 15) Source(148, 21) + SourceIndex(0) +6 >Emitted(125, 16) Source(148, 22) + SourceIndex(0) +7 >Emitted(125, 17) Source(148, 23) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >} 3 > ) 4 > ; -1->Emitted(118, 1) Source(149, 1) + SourceIndex(0) -2 >Emitted(118, 2) Source(149, 2) + SourceIndex(0) -3 >Emitted(118, 3) Source(149, 3) + SourceIndex(0) -4 >Emitted(118, 4) Source(149, 4) + SourceIndex(0) +1->Emitted(126, 1) Source(149, 1) + SourceIndex(0) +2 >Emitted(126, 2) Source(149, 2) + SourceIndex(0) +3 >Emitted(126, 3) Source(149, 3) + SourceIndex(0) +4 >Emitted(126, 4) Source(149, 4) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^^ -4 > ^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Return statement > -2 >var -3 > c10t5 -4 > : () => (n: number) => IFoo = -1->Emitted(119, 1) Source(152, 1) + SourceIndex(0) -2 >Emitted(119, 5) Source(152, 5) + SourceIndex(0) -3 >Emitted(119, 10) Source(152, 10) + SourceIndex(0) -4 >Emitted(119, 13) Source(152, 40) + SourceIndex(0) +2 > +3 >// CONTEXT: Return statement +1->Emitted(127, 1) Source(152, 1) + SourceIndex(0) +2 >Emitted(127, 1) Source(151, 1) + SourceIndex(0) +3 >Emitted(127, 29) Source(151, 29) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +2 > ^^^^^ +3 > ^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >var +2 > c10t5 +3 > : () => (n: number) => IFoo = +1->Emitted(128, 5) Source(152, 5) + SourceIndex(0) +2 >Emitted(128, 10) Source(152, 10) + SourceIndex(0) +3 >Emitted(128, 13) Source(152, 40) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^^^^^^^^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->function() { 2 > return 3 > 4 > function( 5 > n -1->Emitted(120, 5) Source(152, 53) + SourceIndex(0) -2 >Emitted(120, 11) Source(152, 59) + SourceIndex(0) -3 >Emitted(120, 12) Source(152, 60) + SourceIndex(0) -4 >Emitted(120, 22) Source(152, 69) + SourceIndex(0) -5 >Emitted(120, 23) Source(152, 70) + SourceIndex(0) +1->Emitted(129, 5) Source(152, 53) + SourceIndex(0) +2 >Emitted(129, 11) Source(152, 59) + SourceIndex(0) +3 >Emitted(129, 12) Source(152, 60) + SourceIndex(0) +4 >Emitted(129, 22) Source(152, 69) + SourceIndex(0) +5 >Emitted(129, 23) Source(152, 70) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -2275,106 +2362,115 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(121, 9) Source(152, 74) + SourceIndex(0) -2 >Emitted(121, 15) Source(152, 80) + SourceIndex(0) -3 >Emitted(121, 16) Source(152, 87) + SourceIndex(0) -4 >Emitted(121, 17) Source(152, 88) + SourceIndex(0) -5 >Emitted(121, 19) Source(152, 90) + SourceIndex(0) -6 >Emitted(121, 20) Source(152, 91) + SourceIndex(0) -7 >Emitted(121, 21) Source(152, 91) + SourceIndex(0) +1->Emitted(130, 9) Source(152, 74) + SourceIndex(0) +2 >Emitted(130, 15) Source(152, 80) + SourceIndex(0) +3 >Emitted(130, 16) Source(152, 87) + SourceIndex(0) +4 >Emitted(130, 17) Source(152, 88) + SourceIndex(0) +5 >Emitted(130, 19) Source(152, 90) + SourceIndex(0) +6 >Emitted(130, 20) Source(152, 91) + SourceIndex(0) +7 >Emitted(130, 21) Source(152, 91) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 > } 3 > -1->Emitted(122, 5) Source(152, 92) + SourceIndex(0) -2 >Emitted(122, 6) Source(152, 93) + SourceIndex(0) -3 >Emitted(122, 7) Source(152, 93) + SourceIndex(0) +1->Emitted(131, 5) Source(152, 92) + SourceIndex(0) +2 >Emitted(131, 6) Source(152, 93) + SourceIndex(0) +3 >Emitted(131, 7) Source(152, 93) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(123, 1) Source(152, 94) + SourceIndex(0) -2 >Emitted(123, 2) Source(152, 95) + SourceIndex(0) -3 >Emitted(123, 3) Source(152, 96) + SourceIndex(0) +1->Emitted(132, 1) Source(152, 94) + SourceIndex(0) +2 >Emitted(132, 2) Source(152, 95) + SourceIndex(0) +3 >Emitted(132, 3) Source(152, 96) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Newing a class > -2 >class -3 > C11t5 -1->Emitted(124, 1) Source(155, 1) + SourceIndex(0) -2 >Emitted(124, 5) Source(155, 7) + SourceIndex(0) -3 >Emitted(124, 10) Source(155, 12) + SourceIndex(0) +2 > +3 >// CONTEXT: Newing a class +1->Emitted(133, 1) Source(155, 1) + SourceIndex(0) +2 >Emitted(133, 1) Source(154, 1) + SourceIndex(0) +3 >Emitted(133, 27) Source(154, 27) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +2 > ^^^^^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >class +2 > C11t5 +1->Emitted(134, 5) Source(155, 7) + SourceIndex(0) +2 >Emitted(134, 10) Source(155, 12) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^^ 3 > ^^^^^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> { 2 > 3 > C11t5 4 > { constructor( 5 > f: (n: number) => IFoo -1->Emitted(125, 5) Source(155, 15) + SourceIndex(0) name (C11t5) -2 >Emitted(125, 14) Source(155, 7) + SourceIndex(0) name (C11t5) -3 >Emitted(125, 19) Source(155, 12) + SourceIndex(0) name (C11t5) -4 >Emitted(125, 20) Source(155, 27) + SourceIndex(0) name (C11t5) -5 >Emitted(125, 21) Source(155, 49) + SourceIndex(0) name (C11t5) +1->Emitted(135, 5) Source(155, 15) + SourceIndex(0) name (C11t5) +2 >Emitted(135, 14) Source(155, 7) + SourceIndex(0) name (C11t5) +3 >Emitted(135, 19) Source(155, 12) + SourceIndex(0) name (C11t5) +4 >Emitted(135, 20) Source(155, 27) + SourceIndex(0) name (C11t5) +5 >Emitted(135, 21) Source(155, 49) + SourceIndex(0) name (C11t5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > } -1->Emitted(126, 5) Source(155, 53) + SourceIndex(0) name (C11t5.constructor) -2 >Emitted(126, 6) Source(155, 54) + SourceIndex(0) name (C11t5.constructor) +1->Emitted(136, 5) Source(155, 53) + SourceIndex(0) name (C11t5.constructor) +2 >Emitted(136, 6) Source(155, 54) + SourceIndex(0) name (C11t5.constructor) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^^^^^^^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 > } -1->Emitted(127, 5) Source(155, 55) + SourceIndex(0) name (C11t5) -2 >Emitted(127, 17) Source(155, 56) + SourceIndex(0) name (C11t5) +1->Emitted(137, 5) Source(155, 55) + SourceIndex(0) name (C11t5) +2 >Emitted(137, 17) Source(155, 56) + SourceIndex(0) name (C11t5) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > 4 > ^^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > 4 > class C11t5 { constructor(f: (n: number) => IFoo) { } } -1->Emitted(128, 1) Source(155, 55) + SourceIndex(0) name (C11t5) -2 >Emitted(128, 2) Source(155, 56) + SourceIndex(0) name (C11t5) -3 >Emitted(128, 2) Source(155, 1) + SourceIndex(0) -4 >Emitted(128, 6) Source(155, 56) + SourceIndex(0) +1->Emitted(138, 1) Source(155, 55) + SourceIndex(0) name (C11t5) +2 >Emitted(138, 2) Source(155, 56) + SourceIndex(0) name (C11t5) +3 >Emitted(138, 2) Source(155, 1) + SourceIndex(0) +4 >Emitted(138, 6) Source(155, 56) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >; -1->Emitted(129, 1) Source(155, 56) + SourceIndex(0) -2 >Emitted(129, 2) Source(155, 57) + SourceIndex(0) +1->Emitted(139, 1) Source(155, 56) + SourceIndex(0) +2 >Emitted(139, 2) Source(155, 57) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^ 4 > ^^^ @@ -2383,7 +2479,7 @@ sourceFile:contextualTyping.ts 7 > ^ 8 > ^^^^^^^^^^ 9 > ^ -10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -2394,24 +2490,24 @@ sourceFile:contextualTyping.ts 7 > ( 8 > function( 9 > n -1->Emitted(130, 1) Source(156, 1) + SourceIndex(0) -2 >Emitted(130, 5) Source(156, 5) + SourceIndex(0) -3 >Emitted(130, 6) Source(156, 6) + SourceIndex(0) -4 >Emitted(130, 9) Source(156, 9) + SourceIndex(0) -5 >Emitted(130, 13) Source(156, 13) + SourceIndex(0) -6 >Emitted(130, 18) Source(156, 18) + SourceIndex(0) -7 >Emitted(130, 19) Source(156, 19) + SourceIndex(0) -8 >Emitted(130, 29) Source(156, 28) + SourceIndex(0) -9 >Emitted(130, 30) Source(156, 29) + SourceIndex(0) +1->Emitted(140, 1) Source(156, 1) + SourceIndex(0) +2 >Emitted(140, 5) Source(156, 5) + SourceIndex(0) +3 >Emitted(140, 6) Source(156, 6) + SourceIndex(0) +4 >Emitted(140, 9) Source(156, 9) + SourceIndex(0) +5 >Emitted(140, 13) Source(156, 13) + SourceIndex(0) +6 >Emitted(140, 18) Source(156, 18) + SourceIndex(0) +7 >Emitted(140, 19) Source(156, 19) + SourceIndex(0) +8 >Emitted(140, 29) Source(156, 28) + SourceIndex(0) +9 >Emitted(140, 30) Source(156, 29) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -2419,137 +2515,146 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(131, 5) Source(156, 33) + SourceIndex(0) -2 >Emitted(131, 11) Source(156, 39) + SourceIndex(0) -3 >Emitted(131, 12) Source(156, 46) + SourceIndex(0) -4 >Emitted(131, 13) Source(156, 47) + SourceIndex(0) -5 >Emitted(131, 15) Source(156, 49) + SourceIndex(0) -6 >Emitted(131, 16) Source(156, 50) + SourceIndex(0) -7 >Emitted(131, 17) Source(156, 50) + SourceIndex(0) +1->Emitted(141, 5) Source(156, 33) + SourceIndex(0) +2 >Emitted(141, 11) Source(156, 39) + SourceIndex(0) +3 >Emitted(141, 12) Source(156, 46) + SourceIndex(0) +4 >Emitted(141, 13) Source(156, 47) + SourceIndex(0) +5 >Emitted(141, 15) Source(156, 49) + SourceIndex(0) +6 >Emitted(141, 16) Source(156, 50) + SourceIndex(0) +7 >Emitted(141, 17) Source(156, 50) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ) 4 > ; -1->Emitted(132, 1) Source(156, 51) + SourceIndex(0) -2 >Emitted(132, 2) Source(156, 52) + SourceIndex(0) -3 >Emitted(132, 3) Source(156, 53) + SourceIndex(0) -4 >Emitted(132, 4) Source(156, 54) + SourceIndex(0) +1->Emitted(142, 1) Source(156, 51) + SourceIndex(0) +2 >Emitted(142, 2) Source(156, 52) + SourceIndex(0) +3 >Emitted(142, 3) Source(156, 53) + SourceIndex(0) +4 >Emitted(142, 4) Source(156, 54) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> -2 >^^^^ -3 > ^^^^^ -4 > ^^^ -5 > ^ -6 > ^^^^^^^^^^ -7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Type annotated expression > -2 >var -3 > c12t1 -4 > = <(s: string) => string> -5 > ( -6 > function( -7 > s -1->Emitted(133, 1) Source(159, 1) + SourceIndex(0) -2 >Emitted(133, 5) Source(159, 5) + SourceIndex(0) -3 >Emitted(133, 10) Source(159, 10) + SourceIndex(0) -4 >Emitted(133, 13) Source(159, 37) + SourceIndex(0) -5 >Emitted(133, 14) Source(159, 38) + SourceIndex(0) -6 >Emitted(133, 24) Source(159, 47) + SourceIndex(0) -7 >Emitted(133, 25) Source(159, 48) + SourceIndex(0) +2 > +3 >// CONTEXT: Type annotated expression +1->Emitted(143, 1) Source(159, 1) + SourceIndex(0) +2 >Emitted(143, 1) Source(158, 1) + SourceIndex(0) +3 >Emitted(143, 38) Source(158, 38) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +2 > ^^^^^ +3 > ^^^ +4 > ^ +5 > ^^^^^^^^^^ +6 > ^ +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1-> + >var +2 > c12t1 +3 > = <(s: string) => string> +4 > ( +5 > function( +6 > s +1->Emitted(144, 5) Source(159, 5) + SourceIndex(0) +2 >Emitted(144, 10) Source(159, 10) + SourceIndex(0) +3 >Emitted(144, 13) Source(159, 37) + SourceIndex(0) +4 >Emitted(144, 14) Source(159, 38) + SourceIndex(0) +5 >Emitted(144, 24) Source(159, 47) + SourceIndex(0) +6 >Emitted(144, 25) Source(159, 48) + SourceIndex(0) +--- +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > -1->Emitted(134, 5) Source(159, 52) + SourceIndex(0) -2 >Emitted(134, 11) Source(159, 58) + SourceIndex(0) -3 >Emitted(134, 12) Source(159, 59) + SourceIndex(0) -4 >Emitted(134, 13) Source(159, 60) + SourceIndex(0) -5 >Emitted(134, 14) Source(159, 60) + SourceIndex(0) +1->Emitted(145, 5) Source(159, 52) + SourceIndex(0) +2 >Emitted(145, 11) Source(159, 58) + SourceIndex(0) +3 >Emitted(145, 12) Source(159, 59) + SourceIndex(0) +4 >Emitted(145, 13) Source(159, 60) + SourceIndex(0) +5 >Emitted(145, 14) Source(159, 60) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ) 4 > ; -1->Emitted(135, 1) Source(159, 61) + SourceIndex(0) -2 >Emitted(135, 2) Source(159, 62) + SourceIndex(0) -3 >Emitted(135, 3) Source(159, 63) + SourceIndex(0) -4 >Emitted(135, 4) Source(159, 64) + SourceIndex(0) +1->Emitted(146, 1) Source(159, 61) + SourceIndex(0) +2 >Emitted(146, 2) Source(159, 62) + SourceIndex(0) +3 >Emitted(146, 3) Source(159, 63) + SourceIndex(0) +4 >Emitted(146, 4) Source(159, 64) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c12t2 4 > = 5 > ( -1->Emitted(136, 1) Source(160, 1) + SourceIndex(0) -2 >Emitted(136, 5) Source(160, 5) + SourceIndex(0) -3 >Emitted(136, 10) Source(160, 10) + SourceIndex(0) -4 >Emitted(136, 13) Source(160, 20) + SourceIndex(0) -5 >Emitted(136, 14) Source(160, 21) + SourceIndex(0) +1->Emitted(147, 1) Source(160, 1) + SourceIndex(0) +2 >Emitted(147, 5) Source(160, 5) + SourceIndex(0) +3 >Emitted(147, 10) Source(160, 10) + SourceIndex(0) +4 >Emitted(147, 13) Source(160, 20) + SourceIndex(0) +5 >Emitted(147, 14) Source(160, 21) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > n 3 > : 4 > 1 -1->Emitted(137, 5) Source(161, 5) + SourceIndex(0) -2 >Emitted(137, 6) Source(161, 6) + SourceIndex(0) -3 >Emitted(137, 8) Source(161, 8) + SourceIndex(0) -4 >Emitted(137, 9) Source(161, 9) + SourceIndex(0) +1->Emitted(148, 5) Source(161, 5) + SourceIndex(0) +2 >Emitted(148, 6) Source(161, 6) + SourceIndex(0) +3 >Emitted(148, 8) Source(161, 8) + SourceIndex(0) +4 >Emitted(148, 9) Source(161, 9) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > ; -1->Emitted(138, 2) Source(162, 2) + SourceIndex(0) -2 >Emitted(138, 3) Source(162, 3) + SourceIndex(0) -3 >Emitted(138, 4) Source(162, 4) + SourceIndex(0) +1->Emitted(149, 2) Source(162, 2) + SourceIndex(0) +2 >Emitted(149, 3) Source(162, 3) + SourceIndex(0) +3 >Emitted(149, 4) Source(162, 4) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ 5 > ^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -2557,36 +2662,36 @@ sourceFile:contextualTyping.ts 4 > = 5 > [] 6 > ; -1->Emitted(139, 1) Source(163, 1) + SourceIndex(0) -2 >Emitted(139, 5) Source(163, 5) + SourceIndex(0) -3 >Emitted(139, 10) Source(163, 10) + SourceIndex(0) -4 >Emitted(139, 13) Source(163, 24) + SourceIndex(0) -5 >Emitted(139, 15) Source(163, 26) + SourceIndex(0) -6 >Emitted(139, 16) Source(163, 27) + SourceIndex(0) +1->Emitted(150, 1) Source(163, 1) + SourceIndex(0) +2 >Emitted(150, 5) Source(163, 5) + SourceIndex(0) +3 >Emitted(150, 10) Source(163, 10) + SourceIndex(0) +4 >Emitted(150, 13) Source(163, 24) + SourceIndex(0) +5 >Emitted(150, 15) Source(163, 26) + SourceIndex(0) +6 >Emitted(150, 16) Source(163, 27) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c12t4 4 > = <() => IFoo> -1->Emitted(140, 1) Source(164, 1) + SourceIndex(0) -2 >Emitted(140, 5) Source(164, 5) + SourceIndex(0) -3 >Emitted(140, 10) Source(164, 10) + SourceIndex(0) -4 >Emitted(140, 13) Source(164, 26) + SourceIndex(0) +1->Emitted(151, 1) Source(164, 1) + SourceIndex(0) +2 >Emitted(151, 5) Source(164, 5) + SourceIndex(0) +3 >Emitted(151, 10) Source(164, 10) + SourceIndex(0) +4 >Emitted(151, 13) Source(164, 26) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->function() { 2 > return 3 > @@ -2594,32 +2699,32 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(141, 5) Source(164, 39) + SourceIndex(0) -2 >Emitted(141, 11) Source(164, 45) + SourceIndex(0) -3 >Emitted(141, 12) Source(164, 52) + SourceIndex(0) -4 >Emitted(141, 13) Source(164, 53) + SourceIndex(0) -5 >Emitted(141, 15) Source(164, 55) + SourceIndex(0) -6 >Emitted(141, 16) Source(164, 56) + SourceIndex(0) -7 >Emitted(141, 17) Source(164, 56) + SourceIndex(0) +1->Emitted(152, 5) Source(164, 39) + SourceIndex(0) +2 >Emitted(152, 11) Source(164, 45) + SourceIndex(0) +3 >Emitted(152, 12) Source(164, 52) + SourceIndex(0) +4 >Emitted(152, 13) Source(164, 53) + SourceIndex(0) +5 >Emitted(152, 15) Source(164, 55) + SourceIndex(0) +6 >Emitted(152, 16) Source(164, 56) + SourceIndex(0) +7 >Emitted(152, 17) Source(164, 56) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(142, 1) Source(164, 57) + SourceIndex(0) -2 >Emitted(142, 2) Source(164, 58) + SourceIndex(0) -3 >Emitted(142, 3) Source(164, 59) + SourceIndex(0) +1->Emitted(153, 1) Source(164, 57) + SourceIndex(0) +2 >Emitted(153, 2) Source(164, 58) + SourceIndex(0) +3 >Emitted(153, 3) Source(164, 59) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ 5 > ^^^^^^^^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -2627,21 +2732,21 @@ sourceFile:contextualTyping.ts 4 > = <(n: number) => IFoo> 5 > function( 6 > n -1->Emitted(143, 1) Source(165, 1) + SourceIndex(0) -2 >Emitted(143, 5) Source(165, 5) + SourceIndex(0) -3 >Emitted(143, 10) Source(165, 10) + SourceIndex(0) -4 >Emitted(143, 13) Source(165, 35) + SourceIndex(0) -5 >Emitted(143, 23) Source(165, 44) + SourceIndex(0) -6 >Emitted(143, 24) Source(165, 45) + SourceIndex(0) +1->Emitted(154, 1) Source(165, 1) + SourceIndex(0) +2 >Emitted(154, 5) Source(165, 5) + SourceIndex(0) +3 >Emitted(154, 10) Source(165, 10) + SourceIndex(0) +4 >Emitted(154, 13) Source(165, 35) + SourceIndex(0) +5 >Emitted(154, 23) Source(165, 44) + SourceIndex(0) +6 >Emitted(154, 24) Source(165, 45) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -2649,26 +2754,26 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(144, 5) Source(165, 49) + SourceIndex(0) -2 >Emitted(144, 11) Source(165, 55) + SourceIndex(0) -3 >Emitted(144, 12) Source(165, 62) + SourceIndex(0) -4 >Emitted(144, 13) Source(165, 63) + SourceIndex(0) -5 >Emitted(144, 15) Source(165, 65) + SourceIndex(0) -6 >Emitted(144, 16) Source(165, 66) + SourceIndex(0) -7 >Emitted(144, 17) Source(165, 66) + SourceIndex(0) +1->Emitted(155, 5) Source(165, 49) + SourceIndex(0) +2 >Emitted(155, 11) Source(165, 55) + SourceIndex(0) +3 >Emitted(155, 12) Source(165, 62) + SourceIndex(0) +4 >Emitted(155, 13) Source(165, 63) + SourceIndex(0) +5 >Emitted(155, 15) Source(165, 65) + SourceIndex(0) +6 >Emitted(155, 16) Source(165, 66) + SourceIndex(0) +7 >Emitted(155, 17) Source(165, 66) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(145, 1) Source(165, 67) + SourceIndex(0) -2 >Emitted(145, 2) Source(165, 68) + SourceIndex(0) -3 >Emitted(145, 3) Source(165, 69) + SourceIndex(0) +1->Emitted(156, 1) Source(165, 67) + SourceIndex(0) +2 >Emitted(156, 2) Source(165, 68) + SourceIndex(0) +3 >Emitted(156, 3) Source(165, 69) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ @@ -2676,7 +2781,7 @@ sourceFile:contextualTyping.ts 6 > ^ 7 > ^^ 8 > ^ -9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -2686,23 +2791,23 @@ sourceFile:contextualTyping.ts 6 > n 7 > , 8 > s -1->Emitted(146, 1) Source(166, 1) + SourceIndex(0) -2 >Emitted(146, 5) Source(166, 5) + SourceIndex(0) -3 >Emitted(146, 10) Source(166, 10) + SourceIndex(0) -4 >Emitted(146, 13) Source(166, 46) + SourceIndex(0) -5 >Emitted(146, 23) Source(166, 55) + SourceIndex(0) -6 >Emitted(146, 24) Source(166, 56) + SourceIndex(0) -7 >Emitted(146, 26) Source(166, 58) + SourceIndex(0) -8 >Emitted(146, 27) Source(166, 59) + SourceIndex(0) +1->Emitted(157, 1) Source(166, 1) + SourceIndex(0) +2 >Emitted(157, 5) Source(166, 5) + SourceIndex(0) +3 >Emitted(157, 10) Source(166, 10) + SourceIndex(0) +4 >Emitted(157, 13) Source(166, 46) + SourceIndex(0) +5 >Emitted(157, 23) Source(166, 55) + SourceIndex(0) +6 >Emitted(157, 24) Source(166, 56) + SourceIndex(0) +7 >Emitted(157, 26) Source(166, 58) + SourceIndex(0) +8 >Emitted(157, 27) Source(166, 59) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -2710,32 +2815,32 @@ sourceFile:contextualTyping.ts 5 > {} 6 > ) 7 > -1->Emitted(147, 5) Source(166, 63) + SourceIndex(0) -2 >Emitted(147, 11) Source(166, 69) + SourceIndex(0) -3 >Emitted(147, 12) Source(166, 76) + SourceIndex(0) -4 >Emitted(147, 13) Source(166, 77) + SourceIndex(0) -5 >Emitted(147, 15) Source(166, 79) + SourceIndex(0) -6 >Emitted(147, 16) Source(166, 80) + SourceIndex(0) -7 >Emitted(147, 17) Source(166, 80) + SourceIndex(0) +1->Emitted(158, 5) Source(166, 63) + SourceIndex(0) +2 >Emitted(158, 11) Source(166, 69) + SourceIndex(0) +3 >Emitted(158, 12) Source(166, 76) + SourceIndex(0) +4 >Emitted(158, 13) Source(166, 77) + SourceIndex(0) +5 >Emitted(158, 15) Source(166, 79) + SourceIndex(0) +6 >Emitted(158, 16) Source(166, 80) + SourceIndex(0) +7 >Emitted(158, 17) Source(166, 80) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(148, 1) Source(166, 81) + SourceIndex(0) -2 >Emitted(148, 2) Source(166, 82) + SourceIndex(0) -3 >Emitted(148, 3) Source(166, 83) + SourceIndex(0) +1->Emitted(159, 1) Source(166, 81) + SourceIndex(0) +2 >Emitted(159, 2) Source(166, 82) + SourceIndex(0) +3 >Emitted(159, 3) Source(166, 83) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ 5 > ^^^^^^^^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -2746,48 +2851,48 @@ sourceFile:contextualTyping.ts > }> 5 > function( 6 > n:number -1->Emitted(149, 1) Source(167, 1) + SourceIndex(0) -2 >Emitted(149, 5) Source(167, 5) + SourceIndex(0) -3 >Emitted(149, 10) Source(167, 10) + SourceIndex(0) -4 >Emitted(149, 13) Source(170, 4) + SourceIndex(0) -5 >Emitted(149, 23) Source(170, 13) + SourceIndex(0) -6 >Emitted(149, 24) Source(170, 21) + SourceIndex(0) +1->Emitted(160, 1) Source(167, 1) + SourceIndex(0) +2 >Emitted(160, 5) Source(167, 5) + SourceIndex(0) +3 >Emitted(160, 10) Source(167, 10) + SourceIndex(0) +4 >Emitted(160, 13) Source(170, 4) + SourceIndex(0) +5 >Emitted(160, 23) Source(170, 13) + SourceIndex(0) +6 >Emitted(160, 24) Source(170, 21) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > n 5 > -1->Emitted(150, 5) Source(170, 25) + SourceIndex(0) -2 >Emitted(150, 11) Source(170, 31) + SourceIndex(0) -3 >Emitted(150, 12) Source(170, 32) + SourceIndex(0) -4 >Emitted(150, 13) Source(170, 33) + SourceIndex(0) -5 >Emitted(150, 14) Source(170, 33) + SourceIndex(0) +1->Emitted(161, 5) Source(170, 25) + SourceIndex(0) +2 >Emitted(161, 11) Source(170, 31) + SourceIndex(0) +3 >Emitted(161, 12) Source(170, 32) + SourceIndex(0) +4 >Emitted(161, 13) Source(170, 33) + SourceIndex(0) +5 >Emitted(161, 14) Source(170, 33) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(151, 1) Source(170, 34) + SourceIndex(0) -2 >Emitted(151, 2) Source(170, 35) + SourceIndex(0) -3 >Emitted(151, 3) Source(170, 36) + SourceIndex(0) +1->Emitted(162, 1) Source(170, 34) + SourceIndex(0) +2 >Emitted(162, 2) Source(170, 35) + SourceIndex(0) +3 >Emitted(162, 3) Source(170, 36) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ 5 > ^^^^^^^^^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -2796,42 +2901,42 @@ sourceFile:contextualTyping.ts 4 > = <(n: number, s: string) => number> 5 > function( 6 > n -1->Emitted(152, 1) Source(172, 1) + SourceIndex(0) -2 >Emitted(152, 5) Source(172, 5) + SourceIndex(0) -3 >Emitted(152, 10) Source(172, 10) + SourceIndex(0) -4 >Emitted(152, 13) Source(172, 48) + SourceIndex(0) -5 >Emitted(152, 23) Source(172, 57) + SourceIndex(0) -6 >Emitted(152, 24) Source(172, 58) + SourceIndex(0) +1->Emitted(163, 1) Source(172, 1) + SourceIndex(0) +2 >Emitted(163, 5) Source(172, 5) + SourceIndex(0) +3 >Emitted(163, 10) Source(172, 10) + SourceIndex(0) +4 >Emitted(163, 13) Source(172, 48) + SourceIndex(0) +5 >Emitted(163, 23) Source(172, 57) + SourceIndex(0) +6 >Emitted(163, 24) Source(172, 58) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > n 5 > ; -1->Emitted(153, 5) Source(172, 62) + SourceIndex(0) -2 >Emitted(153, 11) Source(172, 68) + SourceIndex(0) -3 >Emitted(153, 12) Source(172, 69) + SourceIndex(0) -4 >Emitted(153, 13) Source(172, 70) + SourceIndex(0) -5 >Emitted(153, 14) Source(172, 71) + SourceIndex(0) +1->Emitted(164, 5) Source(172, 62) + SourceIndex(0) +2 >Emitted(164, 11) Source(172, 68) + SourceIndex(0) +3 >Emitted(164, 12) Source(172, 69) + SourceIndex(0) +4 >Emitted(164, 13) Source(172, 70) + SourceIndex(0) +5 >Emitted(164, 14) Source(172, 71) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ; -1->Emitted(154, 1) Source(172, 72) + SourceIndex(0) -2 >Emitted(154, 2) Source(172, 73) + SourceIndex(0) -3 >Emitted(154, 3) Source(172, 74) + SourceIndex(0) +1->Emitted(165, 1) Source(172, 72) + SourceIndex(0) +2 >Emitted(165, 2) Source(172, 73) + SourceIndex(0) +3 >Emitted(165, 3) Source(172, 74) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^ 4 > ^^^ @@ -2841,7 +2946,7 @@ sourceFile:contextualTyping.ts 8 > ^^ 9 > ^ 10> ^ -11> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +11> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -2853,18 +2958,18 @@ sourceFile:contextualTyping.ts 8 > [] 9 > ] 10> ; -1->Emitted(155, 1) Source(173, 1) + SourceIndex(0) -2 >Emitted(155, 5) Source(173, 5) + SourceIndex(0) -3 >Emitted(155, 10) Source(173, 10) + SourceIndex(0) -4 >Emitted(155, 13) Source(173, 26) + SourceIndex(0) -5 >Emitted(155, 14) Source(173, 27) + SourceIndex(0) -6 >Emitted(155, 16) Source(173, 29) + SourceIndex(0) -7 >Emitted(155, 18) Source(173, 30) + SourceIndex(0) -8 >Emitted(155, 20) Source(173, 32) + SourceIndex(0) -9 >Emitted(155, 21) Source(173, 33) + SourceIndex(0) -10>Emitted(155, 22) Source(173, 34) + SourceIndex(0) +1->Emitted(166, 1) Source(173, 1) + SourceIndex(0) +2 >Emitted(166, 5) Source(173, 5) + SourceIndex(0) +3 >Emitted(166, 10) Source(173, 10) + SourceIndex(0) +4 >Emitted(166, 13) Source(173, 26) + SourceIndex(0) +5 >Emitted(166, 14) Source(173, 27) + SourceIndex(0) +6 >Emitted(166, 16) Source(173, 29) + SourceIndex(0) +7 >Emitted(166, 18) Source(173, 30) + SourceIndex(0) +8 >Emitted(166, 20) Source(173, 32) + SourceIndex(0) +9 >Emitted(166, 21) Source(173, 33) + SourceIndex(0) +10>Emitted(166, 22) Source(173, 34) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^^ 4 > ^^^ @@ -2878,7 +2983,7 @@ sourceFile:contextualTyping.ts 12> ^ 13> ^ 14> ^ -15> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +15> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -2894,22 +2999,22 @@ sourceFile:contextualTyping.ts 12> ) 13> ] 14> ; -1->Emitted(156, 1) Source(174, 1) + SourceIndex(0) -2 >Emitted(156, 5) Source(174, 5) + SourceIndex(0) -3 >Emitted(156, 11) Source(174, 11) + SourceIndex(0) -4 >Emitted(156, 14) Source(174, 23) + SourceIndex(0) -5 >Emitted(156, 15) Source(174, 30) + SourceIndex(0) -6 >Emitted(156, 16) Source(174, 31) + SourceIndex(0) -7 >Emitted(156, 18) Source(174, 33) + SourceIndex(0) -8 >Emitted(156, 19) Source(174, 34) + SourceIndex(0) -9 >Emitted(156, 21) Source(174, 41) + SourceIndex(0) -10>Emitted(156, 22) Source(174, 42) + SourceIndex(0) -11>Emitted(156, 24) Source(174, 44) + SourceIndex(0) -12>Emitted(156, 25) Source(174, 45) + SourceIndex(0) -13>Emitted(156, 26) Source(174, 46) + SourceIndex(0) -14>Emitted(156, 27) Source(174, 47) + SourceIndex(0) +1->Emitted(167, 1) Source(174, 1) + SourceIndex(0) +2 >Emitted(167, 5) Source(174, 5) + SourceIndex(0) +3 >Emitted(167, 11) Source(174, 11) + SourceIndex(0) +4 >Emitted(167, 14) Source(174, 23) + SourceIndex(0) +5 >Emitted(167, 15) Source(174, 30) + SourceIndex(0) +6 >Emitted(167, 16) Source(174, 31) + SourceIndex(0) +7 >Emitted(167, 18) Source(174, 33) + SourceIndex(0) +8 >Emitted(167, 19) Source(174, 34) + SourceIndex(0) +9 >Emitted(167, 21) Source(174, 41) + SourceIndex(0) +10>Emitted(167, 22) Source(174, 42) + SourceIndex(0) +11>Emitted(167, 24) Source(174, 44) + SourceIndex(0) +12>Emitted(167, 25) Source(174, 45) + SourceIndex(0) +13>Emitted(167, 26) Source(174, 46) + SourceIndex(0) +14>Emitted(167, 27) Source(174, 47) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^^ 4 > ^^^ @@ -2918,7 +3023,7 @@ sourceFile:contextualTyping.ts 7 > ^ 8 > ^^ 9 > ^ -10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +10> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var @@ -2929,69 +3034,69 @@ sourceFile:contextualTyping.ts 7 > n 8 > , 9 > s -1->Emitted(157, 1) Source(175, 1) + SourceIndex(0) -2 >Emitted(157, 5) Source(175, 5) + SourceIndex(0) -3 >Emitted(157, 11) Source(175, 11) + SourceIndex(0) -4 >Emitted(157, 14) Source(175, 52) + SourceIndex(0) -5 >Emitted(157, 15) Source(175, 53) + SourceIndex(0) -6 >Emitted(157, 25) Source(175, 62) + SourceIndex(0) -7 >Emitted(157, 26) Source(175, 63) + SourceIndex(0) -8 >Emitted(157, 28) Source(175, 65) + SourceIndex(0) -9 >Emitted(157, 29) Source(175, 66) + SourceIndex(0) +1->Emitted(168, 1) Source(175, 1) + SourceIndex(0) +2 >Emitted(168, 5) Source(175, 5) + SourceIndex(0) +3 >Emitted(168, 11) Source(175, 11) + SourceIndex(0) +4 >Emitted(168, 14) Source(175, 52) + SourceIndex(0) +5 >Emitted(168, 15) Source(175, 53) + SourceIndex(0) +6 >Emitted(168, 25) Source(175, 62) + SourceIndex(0) +7 >Emitted(168, 26) Source(175, 63) + SourceIndex(0) +8 >Emitted(168, 28) Source(175, 65) + SourceIndex(0) +9 >Emitted(168, 29) Source(175, 66) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > ; -1->Emitted(158, 5) Source(175, 70) + SourceIndex(0) -2 >Emitted(158, 11) Source(175, 76) + SourceIndex(0) -3 >Emitted(158, 12) Source(175, 77) + SourceIndex(0) -4 >Emitted(158, 13) Source(175, 78) + SourceIndex(0) -5 >Emitted(158, 14) Source(175, 79) + SourceIndex(0) +1->Emitted(169, 5) Source(175, 70) + SourceIndex(0) +2 >Emitted(169, 11) Source(175, 76) + SourceIndex(0) +3 >Emitted(169, 12) Source(175, 77) + SourceIndex(0) +4 >Emitted(169, 13) Source(175, 78) + SourceIndex(0) +5 >Emitted(169, 14) Source(175, 79) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} 3 > ] 4 > ; -1->Emitted(159, 1) Source(175, 80) + SourceIndex(0) -2 >Emitted(159, 2) Source(175, 81) + SourceIndex(0) -3 >Emitted(159, 3) Source(175, 82) + SourceIndex(0) -4 >Emitted(159, 4) Source(175, 83) + SourceIndex(0) +1->Emitted(170, 1) Source(175, 80) + SourceIndex(0) +2 >Emitted(170, 2) Source(175, 81) + SourceIndex(0) +3 >Emitted(170, 3) Source(175, 82) + SourceIndex(0) +4 >Emitted(170, 4) Source(175, 83) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^^ 4 > ^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c12t12 4 > = -1->Emitted(160, 1) Source(176, 1) + SourceIndex(0) -2 >Emitted(160, 5) Source(176, 5) + SourceIndex(0) -3 >Emitted(160, 11) Source(176, 11) + SourceIndex(0) -4 >Emitted(160, 14) Source(176, 21) + SourceIndex(0) +1->Emitted(171, 1) Source(176, 1) + SourceIndex(0) +2 >Emitted(171, 5) Source(176, 5) + SourceIndex(0) +3 >Emitted(171, 11) Source(176, 11) + SourceIndex(0) +4 >Emitted(171, 14) Source(176, 21) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^ 3 > ^^ 4 > ^ 5 > ^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > foo @@ -2999,48 +3104,48 @@ sourceFile:contextualTyping.ts 4 > ( 5 > {} 6 > ) -1->Emitted(161, 5) Source(177, 5) + SourceIndex(0) -2 >Emitted(161, 8) Source(177, 8) + SourceIndex(0) -3 >Emitted(161, 10) Source(177, 16) + SourceIndex(0) -4 >Emitted(161, 11) Source(177, 17) + SourceIndex(0) -5 >Emitted(161, 13) Source(177, 19) + SourceIndex(0) -6 >Emitted(161, 14) Source(177, 20) + SourceIndex(0) +1->Emitted(172, 5) Source(177, 5) + SourceIndex(0) +2 >Emitted(172, 8) Source(177, 8) + SourceIndex(0) +3 >Emitted(172, 10) Source(177, 16) + SourceIndex(0) +4 >Emitted(172, 11) Source(177, 17) + SourceIndex(0) +5 >Emitted(172, 13) Source(177, 19) + SourceIndex(0) +6 >Emitted(172, 14) Source(177, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > -1->Emitted(162, 2) Source(178, 2) + SourceIndex(0) -2 >Emitted(162, 3) Source(178, 2) + SourceIndex(0) +1->Emitted(173, 2) Source(178, 2) + SourceIndex(0) +2 >Emitted(173, 3) Source(178, 2) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^^ 4 > ^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c12t13 4 > = 5 > ( -1->Emitted(163, 1) Source(179, 1) + SourceIndex(0) -2 >Emitted(163, 5) Source(179, 5) + SourceIndex(0) -3 >Emitted(163, 11) Source(179, 11) + SourceIndex(0) -4 >Emitted(163, 14) Source(179, 21) + SourceIndex(0) -5 >Emitted(163, 15) Source(179, 22) + SourceIndex(0) +1->Emitted(174, 1) Source(179, 1) + SourceIndex(0) +2 >Emitted(174, 5) Source(179, 5) + SourceIndex(0) +3 >Emitted(174, 11) Source(179, 11) + SourceIndex(0) +4 >Emitted(174, 14) Source(179, 21) + SourceIndex(0) +5 >Emitted(174, 15) Source(179, 22) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^^^^^^^^^^ 5 > ^ 6 > ^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > f @@ -3049,104 +3154,104 @@ sourceFile:contextualTyping.ts 5 > i 6 > , 7 > s -1->Emitted(164, 5) Source(180, 5) + SourceIndex(0) -2 >Emitted(164, 6) Source(180, 6) + SourceIndex(0) -3 >Emitted(164, 8) Source(180, 8) + SourceIndex(0) -4 >Emitted(164, 18) Source(180, 17) + SourceIndex(0) -5 >Emitted(164, 19) Source(180, 18) + SourceIndex(0) -6 >Emitted(164, 21) Source(180, 20) + SourceIndex(0) -7 >Emitted(164, 22) Source(180, 21) + SourceIndex(0) +1->Emitted(175, 5) Source(180, 5) + SourceIndex(0) +2 >Emitted(175, 6) Source(180, 6) + SourceIndex(0) +3 >Emitted(175, 8) Source(180, 8) + SourceIndex(0) +4 >Emitted(175, 18) Source(180, 17) + SourceIndex(0) +5 >Emitted(175, 19) Source(180, 18) + SourceIndex(0) +6 >Emitted(175, 21) Source(180, 20) + SourceIndex(0) +7 >Emitted(175, 22) Source(180, 21) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > 4 > s 5 > ; -1->Emitted(165, 9) Source(180, 25) + SourceIndex(0) -2 >Emitted(165, 15) Source(180, 31) + SourceIndex(0) -3 >Emitted(165, 16) Source(180, 32) + SourceIndex(0) -4 >Emitted(165, 17) Source(180, 33) + SourceIndex(0) -5 >Emitted(165, 18) Source(180, 34) + SourceIndex(0) +1->Emitted(176, 9) Source(180, 25) + SourceIndex(0) +2 >Emitted(176, 15) Source(180, 31) + SourceIndex(0) +3 >Emitted(176, 16) Source(180, 32) + SourceIndex(0) +4 >Emitted(176, 17) Source(180, 33) + SourceIndex(0) +5 >Emitted(176, 18) Source(180, 34) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 > } -1->Emitted(166, 5) Source(180, 35) + SourceIndex(0) -2 >Emitted(166, 6) Source(180, 36) + SourceIndex(0) +1->Emitted(177, 5) Source(180, 35) + SourceIndex(0) +2 >Emitted(177, 6) Source(180, 36) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > -1->Emitted(167, 2) Source(181, 2) + SourceIndex(0) -2 >Emitted(167, 3) Source(181, 3) + SourceIndex(0) -3 >Emitted(167, 4) Source(181, 3) + SourceIndex(0) +1->Emitted(178, 2) Source(181, 2) + SourceIndex(0) +2 >Emitted(178, 3) Source(181, 3) + SourceIndex(0) +3 >Emitted(178, 4) Source(181, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^^^^ 4 > ^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >var 3 > c12t14 4 > = 5 > ( -1->Emitted(168, 1) Source(182, 1) + SourceIndex(0) -2 >Emitted(168, 5) Source(182, 5) + SourceIndex(0) -3 >Emitted(168, 11) Source(182, 11) + SourceIndex(0) -4 >Emitted(168, 14) Source(182, 21) + SourceIndex(0) -5 >Emitted(168, 15) Source(182, 22) + SourceIndex(0) +1->Emitted(179, 1) Source(182, 1) + SourceIndex(0) +2 >Emitted(179, 5) Source(182, 5) + SourceIndex(0) +3 >Emitted(179, 11) Source(182, 11) + SourceIndex(0) +4 >Emitted(179, 14) Source(182, 21) + SourceIndex(0) +5 >Emitted(179, 15) Source(182, 22) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > a 3 > : 4 > [] -1->Emitted(169, 5) Source(183, 5) + SourceIndex(0) -2 >Emitted(169, 6) Source(183, 6) + SourceIndex(0) -3 >Emitted(169, 8) Source(183, 8) + SourceIndex(0) -4 >Emitted(169, 10) Source(183, 10) + SourceIndex(0) +1->Emitted(180, 5) Source(183, 5) + SourceIndex(0) +2 >Emitted(180, 6) Source(183, 6) + SourceIndex(0) +3 >Emitted(180, 8) Source(183, 8) + SourceIndex(0) +4 >Emitted(180, 10) Source(183, 10) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ) 3 > -1->Emitted(170, 2) Source(184, 2) + SourceIndex(0) -2 >Emitted(170, 3) Source(184, 3) + SourceIndex(0) -3 >Emitted(170, 4) Source(184, 3) + SourceIndex(0) +1->Emitted(181, 2) Source(184, 2) + SourceIndex(0) +2 >Emitted(181, 3) Source(184, 3) + SourceIndex(0) +3 >Emitted(181, 4) Source(184, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^^^^^ 3 > ^^^ 4 > ^ 5 > ^ 6 > ^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >// CONTEXT: Contextual typing declarations @@ -3161,22 +3266,22 @@ sourceFile:contextualTyping.ts 5 > a 6 > , 7 > b -1->Emitted(171, 1) Source(191, 1) + SourceIndex(0) -2 >Emitted(171, 10) Source(191, 10) + SourceIndex(0) -3 >Emitted(171, 13) Source(191, 13) + SourceIndex(0) -4 >Emitted(171, 14) Source(191, 14) + SourceIndex(0) -5 >Emitted(171, 15) Source(191, 15) + SourceIndex(0) -6 >Emitted(171, 17) Source(191, 16) + SourceIndex(0) -7 >Emitted(171, 18) Source(191, 17) + SourceIndex(0) +1->Emitted(182, 1) Source(191, 1) + SourceIndex(0) +2 >Emitted(182, 10) Source(191, 10) + SourceIndex(0) +3 >Emitted(182, 13) Source(191, 13) + SourceIndex(0) +4 >Emitted(182, 14) Source(191, 14) + SourceIndex(0) +5 >Emitted(182, 15) Source(191, 15) + SourceIndex(0) +6 >Emitted(182, 17) Source(191, 16) + SourceIndex(0) +7 >Emitted(182, 18) Source(191, 17) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^ 5 > ^^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { 2 > return 3 > @@ -3184,23 +3289,23 @@ sourceFile:contextualTyping.ts 5 > + 6 > b 7 > ; -1->Emitted(172, 5) Source(191, 21) + SourceIndex(0) name (EF1) -2 >Emitted(172, 11) Source(191, 27) + SourceIndex(0) name (EF1) -3 >Emitted(172, 12) Source(191, 28) + SourceIndex(0) name (EF1) -4 >Emitted(172, 13) Source(191, 29) + SourceIndex(0) name (EF1) -5 >Emitted(172, 16) Source(191, 30) + SourceIndex(0) name (EF1) -6 >Emitted(172, 17) Source(191, 31) + SourceIndex(0) name (EF1) -7 >Emitted(172, 18) Source(191, 32) + SourceIndex(0) name (EF1) +1->Emitted(183, 5) Source(191, 21) + SourceIndex(0) name (EF1) +2 >Emitted(183, 11) Source(191, 27) + SourceIndex(0) name (EF1) +3 >Emitted(183, 12) Source(191, 28) + SourceIndex(0) name (EF1) +4 >Emitted(183, 13) Source(191, 29) + SourceIndex(0) name (EF1) +5 >Emitted(183, 16) Source(191, 30) + SourceIndex(0) name (EF1) +6 >Emitted(183, 17) Source(191, 31) + SourceIndex(0) name (EF1) +7 >Emitted(183, 18) Source(191, 32) + SourceIndex(0) name (EF1) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> 2 >} -1->Emitted(173, 1) Source(191, 33) + SourceIndex(0) name (EF1) -2 >Emitted(173, 2) Source(191, 34) + SourceIndex(0) name (EF1) +1->Emitted(184, 1) Source(191, 33) + SourceIndex(0) name (EF1) +2 >Emitted(184, 2) Source(191, 34) + SourceIndex(0) name (EF1) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^^^ 4 > ^^^ @@ -3211,7 +3316,7 @@ sourceFile:contextualTyping.ts 9 > ^ 10> ^ 11> ^ -12> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +12> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -3225,26 +3330,26 @@ sourceFile:contextualTyping.ts 9 > 2 10> ) 11> ; -1->Emitted(174, 1) Source(193, 1) + SourceIndex(0) -2 >Emitted(174, 5) Source(193, 5) + SourceIndex(0) -3 >Emitted(174, 8) Source(193, 8) + SourceIndex(0) -4 >Emitted(174, 11) Source(193, 11) + SourceIndex(0) -5 >Emitted(174, 14) Source(193, 14) + SourceIndex(0) -6 >Emitted(174, 15) Source(193, 15) + SourceIndex(0) -7 >Emitted(174, 16) Source(193, 16) + SourceIndex(0) -8 >Emitted(174, 18) Source(193, 17) + SourceIndex(0) -9 >Emitted(174, 19) Source(193, 18) + SourceIndex(0) -10>Emitted(174, 20) Source(193, 19) + SourceIndex(0) -11>Emitted(174, 21) Source(193, 20) + SourceIndex(0) +1->Emitted(185, 1) Source(193, 1) + SourceIndex(0) +2 >Emitted(185, 5) Source(193, 5) + SourceIndex(0) +3 >Emitted(185, 8) Source(193, 8) + SourceIndex(0) +4 >Emitted(185, 11) Source(193, 11) + SourceIndex(0) +5 >Emitted(185, 14) Source(193, 14) + SourceIndex(0) +6 >Emitted(185, 15) Source(193, 15) + SourceIndex(0) +7 >Emitted(185, 16) Source(193, 16) + SourceIndex(0) +8 >Emitted(185, 18) Source(193, 17) + SourceIndex(0) +9 >Emitted(185, 19) Source(193, 18) + SourceIndex(0) +10>Emitted(185, 20) Source(193, 19) + SourceIndex(0) +11>Emitted(185, 21) Source(193, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^^^^^ 3 > ^^^^^ 4 > ^ 5 > ^ 6 > ^^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -3266,22 +3371,22 @@ sourceFile:contextualTyping.ts 5 > x 6 > , 7 > y -1->Emitted(175, 1) Source(207, 1) + SourceIndex(0) -2 >Emitted(175, 10) Source(207, 10) + SourceIndex(0) -3 >Emitted(175, 15) Source(207, 15) + SourceIndex(0) -4 >Emitted(175, 16) Source(207, 16) + SourceIndex(0) -5 >Emitted(175, 17) Source(207, 17) + SourceIndex(0) -6 >Emitted(175, 19) Source(207, 19) + SourceIndex(0) -7 >Emitted(175, 20) Source(207, 20) + SourceIndex(0) +1->Emitted(186, 1) Source(207, 1) + SourceIndex(0) +2 >Emitted(186, 10) Source(207, 10) + SourceIndex(0) +3 >Emitted(186, 15) Source(207, 15) + SourceIndex(0) +4 >Emitted(186, 16) Source(207, 16) + SourceIndex(0) +5 >Emitted(186, 17) Source(207, 17) + SourceIndex(0) +6 >Emitted(186, 19) Source(207, 19) + SourceIndex(0) +7 >Emitted(186, 20) Source(207, 20) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^ 3 > ^ 4 > ^ 5 > ^^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { > 2 > this @@ -3290,22 +3395,22 @@ sourceFile:contextualTyping.ts 5 > = 6 > x 7 > ; -1->Emitted(176, 5) Source(208, 5) + SourceIndex(0) name (Point) -2 >Emitted(176, 9) Source(208, 9) + SourceIndex(0) name (Point) -3 >Emitted(176, 10) Source(208, 10) + SourceIndex(0) name (Point) -4 >Emitted(176, 11) Source(208, 11) + SourceIndex(0) name (Point) -5 >Emitted(176, 14) Source(208, 14) + SourceIndex(0) name (Point) -6 >Emitted(176, 15) Source(208, 15) + SourceIndex(0) name (Point) -7 >Emitted(176, 16) Source(208, 16) + SourceIndex(0) name (Point) +1->Emitted(187, 5) Source(208, 5) + SourceIndex(0) name (Point) +2 >Emitted(187, 9) Source(208, 9) + SourceIndex(0) name (Point) +3 >Emitted(187, 10) Source(208, 10) + SourceIndex(0) name (Point) +4 >Emitted(187, 11) Source(208, 11) + SourceIndex(0) name (Point) +5 >Emitted(187, 14) Source(208, 14) + SourceIndex(0) name (Point) +6 >Emitted(187, 15) Source(208, 15) + SourceIndex(0) name (Point) +7 >Emitted(187, 16) Source(208, 16) + SourceIndex(0) name (Point) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^ 3 > ^ 4 > ^ 5 > ^^^ 6 > ^ 7 > ^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > this @@ -3314,20 +3419,20 @@ sourceFile:contextualTyping.ts 5 > = 6 > y 7 > ; -1->Emitted(177, 5) Source(209, 5) + SourceIndex(0) name (Point) -2 >Emitted(177, 9) Source(209, 9) + SourceIndex(0) name (Point) -3 >Emitted(177, 10) Source(209, 10) + SourceIndex(0) name (Point) -4 >Emitted(177, 11) Source(209, 11) + SourceIndex(0) name (Point) -5 >Emitted(177, 14) Source(209, 14) + SourceIndex(0) name (Point) -6 >Emitted(177, 15) Source(209, 15) + SourceIndex(0) name (Point) -7 >Emitted(177, 16) Source(209, 16) + SourceIndex(0) name (Point) +1->Emitted(188, 5) Source(209, 5) + SourceIndex(0) name (Point) +2 >Emitted(188, 9) Source(209, 9) + SourceIndex(0) name (Point) +3 >Emitted(188, 10) Source(209, 10) + SourceIndex(0) name (Point) +4 >Emitted(188, 11) Source(209, 11) + SourceIndex(0) name (Point) +5 >Emitted(188, 14) Source(209, 14) + SourceIndex(0) name (Point) +6 >Emitted(188, 15) Source(209, 15) + SourceIndex(0) name (Point) +7 >Emitted(188, 16) Source(209, 16) + SourceIndex(0) name (Point) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^^^^ 5 > ^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -3335,22 +3440,22 @@ sourceFile:contextualTyping.ts 3 > 4 > this 5 > ; -1->Emitted(178, 5) Source(211, 5) + SourceIndex(0) name (Point) -2 >Emitted(178, 11) Source(211, 11) + SourceIndex(0) name (Point) -3 >Emitted(178, 12) Source(211, 12) + SourceIndex(0) name (Point) -4 >Emitted(178, 16) Source(211, 16) + SourceIndex(0) name (Point) -5 >Emitted(178, 17) Source(211, 17) + SourceIndex(0) name (Point) +1->Emitted(189, 5) Source(211, 5) + SourceIndex(0) name (Point) +2 >Emitted(189, 11) Source(211, 11) + SourceIndex(0) name (Point) +3 >Emitted(189, 12) Source(211, 12) + SourceIndex(0) name (Point) +4 >Emitted(189, 16) Source(211, 16) + SourceIndex(0) name (Point) +5 >Emitted(189, 17) Source(211, 17) + SourceIndex(0) name (Point) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >} -1->Emitted(179, 1) Source(212, 1) + SourceIndex(0) name (Point) -2 >Emitted(179, 2) Source(212, 2) + SourceIndex(0) name (Point) +1->Emitted(190, 1) Source(212, 1) + SourceIndex(0) name (Point) +2 >Emitted(190, 2) Source(212, 2) + SourceIndex(0) name (Point) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^^^^^ @@ -3363,7 +3468,7 @@ sourceFile:contextualTyping.ts 11> ^ 12> ^ 13> ^ -14> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +14> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -3379,21 +3484,21 @@ sourceFile:contextualTyping.ts 11> 0 12> ) 13> ; -1->Emitted(180, 1) Source(214, 1) + SourceIndex(0) -2 >Emitted(180, 6) Source(214, 6) + SourceIndex(0) -3 >Emitted(180, 7) Source(214, 7) + SourceIndex(0) -4 >Emitted(180, 13) Source(214, 13) + SourceIndex(0) -5 >Emitted(180, 16) Source(214, 16) + SourceIndex(0) -6 >Emitted(180, 20) Source(214, 20) + SourceIndex(0) -7 >Emitted(180, 25) Source(214, 25) + SourceIndex(0) -8 >Emitted(180, 26) Source(214, 26) + SourceIndex(0) -9 >Emitted(180, 27) Source(214, 27) + SourceIndex(0) -10>Emitted(180, 29) Source(214, 29) + SourceIndex(0) -11>Emitted(180, 30) Source(214, 30) + SourceIndex(0) -12>Emitted(180, 31) Source(214, 31) + SourceIndex(0) -13>Emitted(180, 32) Source(214, 32) + SourceIndex(0) +1->Emitted(191, 1) Source(214, 1) + SourceIndex(0) +2 >Emitted(191, 6) Source(214, 6) + SourceIndex(0) +3 >Emitted(191, 7) Source(214, 7) + SourceIndex(0) +4 >Emitted(191, 13) Source(214, 13) + SourceIndex(0) +5 >Emitted(191, 16) Source(214, 16) + SourceIndex(0) +6 >Emitted(191, 20) Source(214, 20) + SourceIndex(0) +7 >Emitted(191, 25) Source(214, 25) + SourceIndex(0) +8 >Emitted(191, 26) Source(214, 26) + SourceIndex(0) +9 >Emitted(191, 27) Source(214, 27) + SourceIndex(0) +10>Emitted(191, 29) Source(214, 29) + SourceIndex(0) +11>Emitted(191, 30) Source(214, 30) + SourceIndex(0) +12>Emitted(191, 31) Source(214, 31) + SourceIndex(0) +13>Emitted(191, 32) Source(214, 32) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^^^^^^^^ @@ -3404,7 +3509,7 @@ sourceFile:contextualTyping.ts 9 > ^^ 10> ^^ 11> ^^ -12> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +12> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -3418,19 +3523,19 @@ sourceFile:contextualTyping.ts 9 > dx 10> , 11> dy -1->Emitted(181, 1) Source(216, 1) + SourceIndex(0) -2 >Emitted(181, 6) Source(216, 6) + SourceIndex(0) -3 >Emitted(181, 7) Source(216, 7) + SourceIndex(0) -4 >Emitted(181, 16) Source(216, 16) + SourceIndex(0) -5 >Emitted(181, 17) Source(216, 17) + SourceIndex(0) -6 >Emitted(181, 20) Source(216, 20) + SourceIndex(0) -7 >Emitted(181, 23) Source(216, 23) + SourceIndex(0) -8 >Emitted(181, 33) Source(216, 32) + SourceIndex(0) -9 >Emitted(181, 35) Source(216, 34) + SourceIndex(0) -10>Emitted(181, 37) Source(216, 36) + SourceIndex(0) -11>Emitted(181, 39) Source(216, 38) + SourceIndex(0) +1->Emitted(192, 1) Source(216, 1) + SourceIndex(0) +2 >Emitted(192, 6) Source(216, 6) + SourceIndex(0) +3 >Emitted(192, 7) Source(216, 7) + SourceIndex(0) +4 >Emitted(192, 16) Source(216, 16) + SourceIndex(0) +5 >Emitted(192, 17) Source(216, 17) + SourceIndex(0) +6 >Emitted(192, 20) Source(216, 20) + SourceIndex(0) +7 >Emitted(192, 23) Source(216, 23) + SourceIndex(0) +8 >Emitted(192, 33) Source(216, 32) + SourceIndex(0) +9 >Emitted(192, 35) Source(216, 34) + SourceIndex(0) +10>Emitted(192, 37) Source(216, 36) + SourceIndex(0) +11>Emitted(192, 39) Source(216, 38) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^^^^ @@ -3449,7 +3554,7 @@ sourceFile:contextualTyping.ts 17> ^^ 18> ^ 19> ^ -20> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +20> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { > 2 > return @@ -3470,44 +3575,44 @@ sourceFile:contextualTyping.ts 17> dy 18> ) 19> ; -1->Emitted(182, 5) Source(217, 5) + SourceIndex(0) -2 >Emitted(182, 11) Source(217, 11) + SourceIndex(0) -3 >Emitted(182, 12) Source(217, 12) + SourceIndex(0) -4 >Emitted(182, 16) Source(217, 16) + SourceIndex(0) -5 >Emitted(182, 21) Source(217, 21) + SourceIndex(0) -6 >Emitted(182, 22) Source(217, 22) + SourceIndex(0) -7 >Emitted(182, 26) Source(217, 26) + SourceIndex(0) -8 >Emitted(182, 27) Source(217, 27) + SourceIndex(0) -9 >Emitted(182, 28) Source(217, 28) + SourceIndex(0) -10>Emitted(182, 31) Source(217, 31) + SourceIndex(0) -11>Emitted(182, 33) Source(217, 33) + SourceIndex(0) -12>Emitted(182, 35) Source(217, 35) + SourceIndex(0) -13>Emitted(182, 39) Source(217, 39) + SourceIndex(0) -14>Emitted(182, 40) Source(217, 40) + SourceIndex(0) -15>Emitted(182, 41) Source(217, 41) + SourceIndex(0) -16>Emitted(182, 44) Source(217, 44) + SourceIndex(0) -17>Emitted(182, 46) Source(217, 46) + SourceIndex(0) -18>Emitted(182, 47) Source(217, 47) + SourceIndex(0) -19>Emitted(182, 48) Source(217, 48) + SourceIndex(0) +1->Emitted(193, 5) Source(217, 5) + SourceIndex(0) +2 >Emitted(193, 11) Source(217, 11) + SourceIndex(0) +3 >Emitted(193, 12) Source(217, 12) + SourceIndex(0) +4 >Emitted(193, 16) Source(217, 16) + SourceIndex(0) +5 >Emitted(193, 21) Source(217, 21) + SourceIndex(0) +6 >Emitted(193, 22) Source(217, 22) + SourceIndex(0) +7 >Emitted(193, 26) Source(217, 26) + SourceIndex(0) +8 >Emitted(193, 27) Source(217, 27) + SourceIndex(0) +9 >Emitted(193, 28) Source(217, 28) + SourceIndex(0) +10>Emitted(193, 31) Source(217, 31) + SourceIndex(0) +11>Emitted(193, 33) Source(217, 33) + SourceIndex(0) +12>Emitted(193, 35) Source(217, 35) + SourceIndex(0) +13>Emitted(193, 39) Source(217, 39) + SourceIndex(0) +14>Emitted(193, 40) Source(217, 40) + SourceIndex(0) +15>Emitted(193, 41) Source(217, 41) + SourceIndex(0) +16>Emitted(193, 44) Source(217, 44) + SourceIndex(0) +17>Emitted(193, 46) Source(217, 46) + SourceIndex(0) +18>Emitted(193, 47) Source(217, 47) + SourceIndex(0) +19>Emitted(193, 48) Source(217, 48) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^ 3 > ^ -4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 >} 3 > ; -1->Emitted(183, 1) Source(218, 1) + SourceIndex(0) -2 >Emitted(183, 2) Source(218, 2) + SourceIndex(0) -3 >Emitted(183, 3) Source(218, 3) + SourceIndex(0) +1->Emitted(194, 1) Source(218, 1) + SourceIndex(0) +2 >Emitted(194, 2) Source(218, 2) + SourceIndex(0) +3 >Emitted(194, 3) Source(218, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^^ 3 > ^ 4 > ^^^^^^^^^ 5 > ^^^ -6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +6 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > > @@ -3515,50 +3620,50 @@ sourceFile:contextualTyping.ts 3 > . 4 > prototype 5 > = -1->Emitted(184, 1) Source(220, 1) + SourceIndex(0) -2 >Emitted(184, 6) Source(220, 6) + SourceIndex(0) -3 >Emitted(184, 7) Source(220, 7) + SourceIndex(0) -4 >Emitted(184, 16) Source(220, 16) + SourceIndex(0) -5 >Emitted(184, 19) Source(220, 19) + SourceIndex(0) +1->Emitted(195, 1) Source(220, 1) + SourceIndex(0) +2 >Emitted(195, 6) Source(220, 6) + SourceIndex(0) +3 >Emitted(195, 7) Source(220, 7) + SourceIndex(0) +4 >Emitted(195, 16) Source(220, 16) + SourceIndex(0) +5 >Emitted(195, 19) Source(220, 19) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->{ > 2 > x 3 > : 4 > 0 -1->Emitted(185, 5) Source(221, 5) + SourceIndex(0) -2 >Emitted(185, 6) Source(221, 6) + SourceIndex(0) -3 >Emitted(185, 8) Source(221, 8) + SourceIndex(0) -4 >Emitted(185, 9) Source(221, 9) + SourceIndex(0) +1->Emitted(196, 5) Source(221, 5) + SourceIndex(0) +2 >Emitted(196, 6) Source(221, 6) + SourceIndex(0) +3 >Emitted(196, 8) Source(221, 8) + SourceIndex(0) +4 >Emitted(196, 9) Source(221, 9) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ 3 > ^^ 4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->, > 2 > y 3 > : 4 > 0 -1->Emitted(186, 5) Source(222, 5) + SourceIndex(0) -2 >Emitted(186, 6) Source(222, 6) + SourceIndex(0) -3 >Emitted(186, 8) Source(222, 8) + SourceIndex(0) -4 >Emitted(186, 9) Source(222, 9) + SourceIndex(0) +1->Emitted(197, 5) Source(222, 5) + SourceIndex(0) +2 >Emitted(197, 6) Source(222, 6) + SourceIndex(0) +3 >Emitted(197, 8) Source(222, 8) + SourceIndex(0) +4 >Emitted(197, 9) Source(222, 9) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^^^ 3 > ^^ 4 > ^^^^^^^^^^ 5 > ^^ 6 > ^^ 7 > ^^ -8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +8 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->, > 2 > add @@ -3567,15 +3672,15 @@ sourceFile:contextualTyping.ts 5 > dx 6 > , 7 > dy -1->Emitted(187, 5) Source(223, 5) + SourceIndex(0) -2 >Emitted(187, 8) Source(223, 8) + SourceIndex(0) -3 >Emitted(187, 10) Source(223, 10) + SourceIndex(0) -4 >Emitted(187, 20) Source(223, 19) + SourceIndex(0) -5 >Emitted(187, 22) Source(223, 21) + SourceIndex(0) -6 >Emitted(187, 24) Source(223, 23) + SourceIndex(0) -7 >Emitted(187, 26) Source(223, 25) + SourceIndex(0) +1->Emitted(198, 5) Source(223, 5) + SourceIndex(0) +2 >Emitted(198, 8) Source(223, 8) + SourceIndex(0) +3 >Emitted(198, 10) Source(223, 10) + SourceIndex(0) +4 >Emitted(198, 20) Source(223, 19) + SourceIndex(0) +5 >Emitted(198, 22) Source(223, 21) + SourceIndex(0) +6 >Emitted(198, 24) Source(223, 23) + SourceIndex(0) +7 >Emitted(198, 26) Source(223, 25) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^^^^^ 2 > ^^^^^^ 3 > ^ 4 > ^^^^ @@ -3594,7 +3699,7 @@ sourceFile:contextualTyping.ts 17> ^^ 18> ^ 19> ^ -20> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +20> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1->) { > 2 > return @@ -3615,51 +3720,51 @@ sourceFile:contextualTyping.ts 17> dy 18> ) 19> ; -1->Emitted(188, 9) Source(224, 9) + SourceIndex(0) -2 >Emitted(188, 15) Source(224, 15) + SourceIndex(0) -3 >Emitted(188, 16) Source(224, 16) + SourceIndex(0) -4 >Emitted(188, 20) Source(224, 20) + SourceIndex(0) -5 >Emitted(188, 25) Source(224, 25) + SourceIndex(0) -6 >Emitted(188, 26) Source(224, 26) + SourceIndex(0) -7 >Emitted(188, 30) Source(224, 30) + SourceIndex(0) -8 >Emitted(188, 31) Source(224, 31) + SourceIndex(0) -9 >Emitted(188, 32) Source(224, 32) + SourceIndex(0) -10>Emitted(188, 35) Source(224, 35) + SourceIndex(0) -11>Emitted(188, 37) Source(224, 37) + SourceIndex(0) -12>Emitted(188, 39) Source(224, 39) + SourceIndex(0) -13>Emitted(188, 43) Source(224, 43) + SourceIndex(0) -14>Emitted(188, 44) Source(224, 44) + SourceIndex(0) -15>Emitted(188, 45) Source(224, 45) + SourceIndex(0) -16>Emitted(188, 48) Source(224, 48) + SourceIndex(0) -17>Emitted(188, 50) Source(224, 50) + SourceIndex(0) -18>Emitted(188, 51) Source(224, 51) + SourceIndex(0) -19>Emitted(188, 52) Source(224, 52) + SourceIndex(0) +1->Emitted(199, 9) Source(224, 9) + SourceIndex(0) +2 >Emitted(199, 15) Source(224, 15) + SourceIndex(0) +3 >Emitted(199, 16) Source(224, 16) + SourceIndex(0) +4 >Emitted(199, 20) Source(224, 20) + SourceIndex(0) +5 >Emitted(199, 25) Source(224, 25) + SourceIndex(0) +6 >Emitted(199, 26) Source(224, 26) + SourceIndex(0) +7 >Emitted(199, 30) Source(224, 30) + SourceIndex(0) +8 >Emitted(199, 31) Source(224, 31) + SourceIndex(0) +9 >Emitted(199, 32) Source(224, 32) + SourceIndex(0) +10>Emitted(199, 35) Source(224, 35) + SourceIndex(0) +11>Emitted(199, 37) Source(224, 37) + SourceIndex(0) +12>Emitted(199, 39) Source(224, 39) + SourceIndex(0) +13>Emitted(199, 43) Source(224, 43) + SourceIndex(0) +14>Emitted(199, 44) Source(224, 44) + SourceIndex(0) +15>Emitted(199, 45) Source(224, 45) + SourceIndex(0) +16>Emitted(199, 48) Source(224, 48) + SourceIndex(0) +17>Emitted(199, 50) Source(224, 50) + SourceIndex(0) +18>Emitted(199, 51) Source(224, 51) + SourceIndex(0) +19>Emitted(199, 52) Source(224, 52) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^^^^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > 2 > } -1->Emitted(189, 5) Source(225, 5) + SourceIndex(0) -2 >Emitted(189, 6) Source(225, 6) + SourceIndex(0) +1->Emitted(200, 5) Source(225, 5) + SourceIndex(0) +2 >Emitted(200, 6) Source(225, 6) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1->^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> >} 2 > ; -1->Emitted(190, 2) Source(226, 2) + SourceIndex(0) -2 >Emitted(190, 3) Source(226, 3) + SourceIndex(0) +1->Emitted(201, 2) Source(226, 2) + SourceIndex(0) +2 >Emitted(201, 3) Source(226, 3) + SourceIndex(0) --- ->>>var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> +>>>// CONTEXT: Class property declaration\nvar C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\n// CONTEXT: Module property declaration\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\n// CONTEXT: Variable declaration\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\n// CONTEXT: Class property assignment\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\n// CONTEXT: Module property assignment\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\n// CONTEXT: Variable assignment\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\n// CONTEXT: Array index assignment\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\n// CONTEXT: Function call\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\n// CONTEXT: Return statement\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\n// CONTEXT: Newing a class\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\n// CONTEXT: Type annotated expression\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map1-> 2 >^^^^ 3 > ^ 4 > ^^^ 5 > ^^ 6 > ^ -7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +7 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1-> > >interface A { x: string; } @@ -3670,10 +3775,10 @@ sourceFile:contextualTyping.ts 4 > : B = 5 > { } 6 > ; -1->Emitted(191, 1) Source(230, 1) + SourceIndex(0) -2 >Emitted(191, 5) Source(230, 5) + SourceIndex(0) -3 >Emitted(191, 6) Source(230, 6) + SourceIndex(0) -4 >Emitted(191, 9) Source(230, 12) + SourceIndex(0) -5 >Emitted(191, 11) Source(230, 15) + SourceIndex(0) -6 >Emitted(191, 12) Source(230, 16) + SourceIndex(0) +1->Emitted(202, 1) Source(230, 1) + SourceIndex(0) +2 >Emitted(202, 5) Source(230, 5) + SourceIndex(0) +3 >Emitted(202, 6) Source(230, 6) + SourceIndex(0) +4 >Emitted(202, 9) Source(230, 12) + SourceIndex(0) +5 >Emitted(202, 11) Source(230, 15) + SourceIndex(0) +6 >Emitted(202, 12) Source(230, 16) + SourceIndex(0) --- \ No newline at end of file diff --git a/tests/baselines/reference/contextualTyping1.types b/tests/baselines/reference/contextualTyping1.types new file mode 100644 index 00000000000..a9d2f982569 --- /dev/null +++ b/tests/baselines/reference/contextualTyping1.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/contextualTyping1.ts === +var foo: {id:number;} = {id:4}; +>foo : { id: number; } +>id : number +>{id:4} : { id: number; } +>id : number + diff --git a/tests/baselines/reference/contextualTyping10.types b/tests/baselines/reference/contextualTyping10.types new file mode 100644 index 00000000000..e3a6c2bcf4a --- /dev/null +++ b/tests/baselines/reference/contextualTyping10.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/contextualTyping10.ts === +class foo { public bar:{id:number;}[] = [{id:1}, {id:2}]; } +>foo : foo +>bar : { id: number; }[] +>id : number +>[{id:1}, {id:2}] : { id: number; }[] +>{id:1} : { id: number; } +>id : number +>{id:2} : { id: number; } +>id : number + diff --git a/tests/baselines/reference/contextualTyping12.types b/tests/baselines/reference/contextualTyping12.types new file mode 100644 index 00000000000..31d4e990938 --- /dev/null +++ b/tests/baselines/reference/contextualTyping12.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/contextualTyping12.ts === +class foo { public bar:{id:number;}[] = [{id:1}, {id:2, name:"foo"}]; } +>foo : foo +>bar : { id: number; }[] +>id : number +>[{id:1}, {id:2, name:"foo"}] : { id: number; }[] +>{id:1} : { id: number; } +>id : number +>{id:2, name:"foo"} : { id: number; name: string; } +>id : number +>name : string + diff --git a/tests/baselines/reference/contextualTyping13.types b/tests/baselines/reference/contextualTyping13.types new file mode 100644 index 00000000000..5f7753970f3 --- /dev/null +++ b/tests/baselines/reference/contextualTyping13.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/contextualTyping13.ts === +var foo:(a:number)=>number = function(a){return a}; +>foo : (a: number) => number +>a : number +>function(a){return a} : (a: number) => number +>a : number +>a : number + diff --git a/tests/baselines/reference/contextualTyping14.types b/tests/baselines/reference/contextualTyping14.types new file mode 100644 index 00000000000..6602cc11cbc --- /dev/null +++ b/tests/baselines/reference/contextualTyping14.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/contextualTyping14.ts === +class foo { public bar:(a:number)=>number = function(a){return a}; } +>foo : foo +>bar : (a: number) => number +>a : number +>function(a){return a} : (a: number) => number +>a : number +>a : number + diff --git a/tests/baselines/reference/contextualTyping15.types b/tests/baselines/reference/contextualTyping15.types new file mode 100644 index 00000000000..c039504efbe --- /dev/null +++ b/tests/baselines/reference/contextualTyping15.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/contextualTyping15.ts === +class foo { public bar: { (): number; (i: number): number; } = function() { return 1 }; } +>foo : foo +>bar : { (): number; (i: number): number; } +>i : number +>function() { return 1 } : () => number + diff --git a/tests/baselines/reference/contextualTyping16.types b/tests/baselines/reference/contextualTyping16.types new file mode 100644 index 00000000000..9e11cd5bf3b --- /dev/null +++ b/tests/baselines/reference/contextualTyping16.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/contextualTyping16.ts === +var foo: {id:number;} = {id:4}; foo = {id:5}; +>foo : { id: number; } +>id : number +>{id:4} : { id: number; } +>id : number +>foo = {id:5} : { id: number; } +>foo : { id: number; } +>{id:5} : { id: number; } +>id : number + diff --git a/tests/baselines/reference/contextualTyping17.types b/tests/baselines/reference/contextualTyping17.types new file mode 100644 index 00000000000..63b18af94ab --- /dev/null +++ b/tests/baselines/reference/contextualTyping17.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/contextualTyping17.ts === +var foo: {id:number;} = {id:4}; foo = {id: 5, name:"foo"}; +>foo : { id: number; } +>id : number +>{id:4} : { id: number; } +>id : number +>foo = {id: 5, name:"foo"} : { id: number; name: string; } +>foo : { id: number; } +>{id: 5, name:"foo"} : { id: number; name: string; } +>id : number +>name : string + diff --git a/tests/baselines/reference/contextualTyping18.types b/tests/baselines/reference/contextualTyping18.types new file mode 100644 index 00000000000..0c3cd5fd963 --- /dev/null +++ b/tests/baselines/reference/contextualTyping18.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/contextualTyping18.ts === +var foo: {id:number;} = <{id:number;}>({ }); foo = {id: 5}; +>foo : { id: number; } +>id : number +><{id:number;}>({ }) : { id: number; } +>id : number +>({ }) : {} +>{ } : {} +>foo = {id: 5} : { id: number; } +>foo : { id: number; } +>{id: 5} : { id: number; } +>id : number + diff --git a/tests/baselines/reference/contextualTyping19.types b/tests/baselines/reference/contextualTyping19.types new file mode 100644 index 00000000000..6b07986e6e6 --- /dev/null +++ b/tests/baselines/reference/contextualTyping19.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/contextualTyping19.ts === +var foo:{id:number;}[] = [{id:1}]; foo = [{id:1}, {id:2}]; +>foo : { id: number; }[] +>id : number +>[{id:1}] : { id: number; }[] +>{id:1} : { id: number; } +>id : number +>foo = [{id:1}, {id:2}] : { id: number; }[] +>foo : { id: number; }[] +>[{id:1}, {id:2}] : { id: number; }[] +>{id:1} : { id: number; } +>id : number +>{id:2} : { id: number; } +>id : number + diff --git a/tests/baselines/reference/contextualTyping2.types b/tests/baselines/reference/contextualTyping2.types new file mode 100644 index 00000000000..3474a284982 --- /dev/null +++ b/tests/baselines/reference/contextualTyping2.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/contextualTyping2.ts === +var foo: {id:number;} = {id:4, name:"foo"}; +>foo : { id: number; } +>id : number +>{id:4, name:"foo"} : { id: number; name: string; } +>id : number +>name : string + diff --git a/tests/baselines/reference/contextualTyping20.types b/tests/baselines/reference/contextualTyping20.types new file mode 100644 index 00000000000..e233e745cc6 --- /dev/null +++ b/tests/baselines/reference/contextualTyping20.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/contextualTyping20.ts === +var foo:{id:number;}[] = [{id:1}]; foo = [{id:1}, {id:2, name:"foo"}]; +>foo : { id: number; }[] +>id : number +>[{id:1}] : { id: number; }[] +>{id:1} : { id: number; } +>id : number +>foo = [{id:1}, {id:2, name:"foo"}] : { id: number; }[] +>foo : { id: number; }[] +>[{id:1}, {id:2, name:"foo"}] : { id: number; }[] +>{id:1} : { id: number; } +>id : number +>{id:2, name:"foo"} : { id: number; name: string; } +>id : number +>name : string + diff --git a/tests/baselines/reference/contextualTyping22.types b/tests/baselines/reference/contextualTyping22.types new file mode 100644 index 00000000000..206dc668e8e --- /dev/null +++ b/tests/baselines/reference/contextualTyping22.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/contextualTyping22.ts === +var foo:(a:number)=>number = function(a){return a}; foo = function(b){return b}; +>foo : (a: number) => number +>a : number +>function(a){return a} : (a: number) => number +>a : number +>a : number +>foo = function(b){return b} : (b: number) => number +>foo : (a: number) => number +>function(b){return b} : (b: number) => number +>b : number +>b : number + diff --git a/tests/baselines/reference/contextualTyping23.types b/tests/baselines/reference/contextualTyping23.types new file mode 100644 index 00000000000..7e0d86920ea --- /dev/null +++ b/tests/baselines/reference/contextualTyping23.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/contextualTyping23.ts === +var foo:(a:{():number; (i:number):number; })=>number; foo = function(a){return 5}; +>foo : (a: { (): number; (i: number): number; }) => number +>a : { (): number; (i: number): number; } +>i : number +>foo = function(a){return 5} : (a: { (): number; (i: number): number; }) => number +>foo : (a: { (): number; (i: number): number; }) => number +>function(a){return 5} : (a: { (): number; (i: number): number; }) => number +>a : { (): number; (i: number): number; } + diff --git a/tests/baselines/reference/contextualTyping25.types b/tests/baselines/reference/contextualTyping25.types new file mode 100644 index 00000000000..3c6442739a2 --- /dev/null +++ b/tests/baselines/reference/contextualTyping25.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/contextualTyping25.ts === +function foo(param:{id:number;}){}; foo(<{id:number;}>({})); +>foo : (param: { id: number; }) => void +>param : { id: number; } +>id : number +>foo(<{id:number;}>({})) : void +>foo : (param: { id: number; }) => void +><{id:number;}>({}) : { id: number; } +>id : number +>({}) : {} +>{} : {} + diff --git a/tests/baselines/reference/contextualTyping26.types b/tests/baselines/reference/contextualTyping26.types new file mode 100644 index 00000000000..65a089f6082 --- /dev/null +++ b/tests/baselines/reference/contextualTyping26.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/contextualTyping26.ts === +function foo(param:{id:number;}){}; foo(<{id:number;}>({})); +>foo : (param: { id: number; }) => void +>param : { id: number; } +>id : number +>foo(<{id:number;}>({})) : void +>foo : (param: { id: number; }) => void +><{id:number;}>({}) : { id: number; } +>id : number +>({}) : {} +>{} : {} + diff --git a/tests/baselines/reference/contextualTyping27.types b/tests/baselines/reference/contextualTyping27.types new file mode 100644 index 00000000000..f668565e43d --- /dev/null +++ b/tests/baselines/reference/contextualTyping27.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/contextualTyping27.ts === +function foo(param:{id:number;}){}; foo(<{id:number;}>({})); +>foo : (param: { id: number; }) => void +>param : { id: number; } +>id : number +>foo(<{id:number;}>({})) : void +>foo : (param: { id: number; }) => void +><{id:number;}>({}) : { id: number; } +>id : number +>({}) : {} +>{} : {} + diff --git a/tests/baselines/reference/contextualTyping28.types b/tests/baselines/reference/contextualTyping28.types new file mode 100644 index 00000000000..6019fde4a6b --- /dev/null +++ b/tests/baselines/reference/contextualTyping28.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/contextualTyping28.ts === +function foo(param:number[]){}; foo([1]); +>foo : (param: number[]) => void +>param : number[] +>foo([1]) : void +>foo : (param: number[]) => void +>[1] : number[] + diff --git a/tests/baselines/reference/contextualTyping29.types b/tests/baselines/reference/contextualTyping29.types new file mode 100644 index 00000000000..9666e60e959 --- /dev/null +++ b/tests/baselines/reference/contextualTyping29.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/contextualTyping29.ts === +function foo(param:number[]){}; foo([1, 3]); +>foo : (param: number[]) => void +>param : number[] +>foo([1, 3]) : void +>foo : (param: number[]) => void +>[1, 3] : number[] + diff --git a/tests/baselines/reference/contextualTyping3.types b/tests/baselines/reference/contextualTyping3.types new file mode 100644 index 00000000000..ef00a78f5b4 --- /dev/null +++ b/tests/baselines/reference/contextualTyping3.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/contextualTyping3.ts === +class foo { public bar:{id:number;} = {id:5}; } +>foo : foo +>bar : { id: number; } +>id : number +>{id:5} : { id: number; } +>id : number + diff --git a/tests/baselines/reference/contextualTyping31.types b/tests/baselines/reference/contextualTyping31.types new file mode 100644 index 00000000000..e37bacd33f3 --- /dev/null +++ b/tests/baselines/reference/contextualTyping31.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/contextualTyping31.ts === +function foo(param:number[]){}; foo([1]); +>foo : (param: number[]) => void +>param : number[] +>foo([1]) : void +>foo : (param: number[]) => void +>[1] : number[] + diff --git a/tests/baselines/reference/contextualTyping32.types b/tests/baselines/reference/contextualTyping32.types new file mode 100644 index 00000000000..a9d41405b93 --- /dev/null +++ b/tests/baselines/reference/contextualTyping32.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/contextualTyping32.ts === +function foo(param: {():number; (i:number):number; }[]) { }; foo([function(){return 1;}, function(){return 4}]); +>foo : (param: { (): number; (i: number): number; }[]) => void +>param : { (): number; (i: number): number; }[] +>i : number +>foo([function(){return 1;}, function(){return 4}]) : void +>foo : (param: { (): number; (i: number): number; }[]) => void +>[function(){return 1;}, function(){return 4}] : { (): number; (i: number): number; }[] +>function(){return 1;} : () => number +>function(){return 4} : () => number + diff --git a/tests/baselines/reference/contextualTyping34.types b/tests/baselines/reference/contextualTyping34.types new file mode 100644 index 00000000000..dde11b7d4b1 --- /dev/null +++ b/tests/baselines/reference/contextualTyping34.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/contextualTyping34.ts === +var foo = <{ id: number;}> ({id:4}); +>foo : { id: number; } +><{ id: number;}> ({id:4}) : { id: number; } +>id : number +>({id:4}) : { id: number; } +>{id:4} : { id: number; } +>id : number + diff --git a/tests/baselines/reference/contextualTyping35.types b/tests/baselines/reference/contextualTyping35.types new file mode 100644 index 00000000000..ea07f429176 --- /dev/null +++ b/tests/baselines/reference/contextualTyping35.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/contextualTyping35.ts === +var foo = <{ id: number;}> {id:4, name: "as"}; +>foo : { id: number; } +><{ id: number;}> {id:4, name: "as"} : { id: number; } +>id : number +>{id:4, name: "as"} : { id: number; name: string; } +>id : number +>name : string + diff --git a/tests/baselines/reference/contextualTyping36.types b/tests/baselines/reference/contextualTyping36.types new file mode 100644 index 00000000000..8fb3f147f0a --- /dev/null +++ b/tests/baselines/reference/contextualTyping36.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/contextualTyping36.ts === +var foo = <{ id: number; }[]>[{ id: 4 }, <{ id: number; }>({ })]; +>foo : { id: number; }[] +><{ id: number; }[]>[{ id: 4 }, <{ id: number; }>({ })] : { id: number; }[] +>id : number +>[{ id: 4 }, <{ id: number; }>({ })] : { id: number; }[] +>{ id: 4 } : { id: number; } +>id : number +><{ id: number; }>({ }) : { id: number; } +>id : number +>({ }) : {} +>{ } : {} + diff --git a/tests/baselines/reference/contextualTyping37.types b/tests/baselines/reference/contextualTyping37.types new file mode 100644 index 00000000000..2180e74b5a1 --- /dev/null +++ b/tests/baselines/reference/contextualTyping37.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/contextualTyping37.ts === +var foo = <{ id: number; }[]>[{ foo: "s" }, { }]; +>foo : { id: number; }[] +><{ id: number; }[]>[{ foo: "s" }, { }] : { id: number; }[] +>id : number +>[{ foo: "s" }, { }] : {}[] +>{ foo: "s" } : { foo: string; } +>foo : string +>{ } : {} + diff --git a/tests/baselines/reference/contextualTyping38.types b/tests/baselines/reference/contextualTyping38.types new file mode 100644 index 00000000000..f838c0914f0 --- /dev/null +++ b/tests/baselines/reference/contextualTyping38.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/contextualTyping38.ts === +var foo = <{ (): number; }> function(a) { return a }; +>foo : () => number +><{ (): number; }> function(a) { return a } : () => number +>function(a) { return a } : (a: any) => any +>a : any +>a : any + diff --git a/tests/baselines/reference/contextualTyping4.types b/tests/baselines/reference/contextualTyping4.types new file mode 100644 index 00000000000..6af7adb86f3 --- /dev/null +++ b/tests/baselines/reference/contextualTyping4.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/contextualTyping4.ts === +class foo { public bar:{id:number;} = {id:5, name:"foo"}; } +>foo : foo +>bar : { id: number; } +>id : number +>{id:5, name:"foo"} : { id: number; name: string; } +>id : number +>name : string + diff --git a/tests/baselines/reference/contextualTyping40.types b/tests/baselines/reference/contextualTyping40.types new file mode 100644 index 00000000000..f659cdc8c92 --- /dev/null +++ b/tests/baselines/reference/contextualTyping40.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/contextualTyping40.ts === +var foo = <{():number; (i:number):number; }> function(){return 1;}; +>foo : { (): number; (i: number): number; } +><{():number; (i:number):number; }> function(){return 1;} : { (): number; (i: number): number; } +>i : number +>function(){return 1;} : () => number + diff --git a/tests/baselines/reference/contextualTyping6.types b/tests/baselines/reference/contextualTyping6.types new file mode 100644 index 00000000000..ab63159924f --- /dev/null +++ b/tests/baselines/reference/contextualTyping6.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/contextualTyping6.ts === +var foo:{id:number;}[] = [{id:1}, {id:2}]; +>foo : { id: number; }[] +>id : number +>[{id:1}, {id:2}] : { id: number; }[] +>{id:1} : { id: number; } +>id : number +>{id:2} : { id: number; } +>id : number + diff --git a/tests/baselines/reference/contextualTyping7.types b/tests/baselines/reference/contextualTyping7.types new file mode 100644 index 00000000000..3b239417e2e --- /dev/null +++ b/tests/baselines/reference/contextualTyping7.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/contextualTyping7.ts === +var foo:{id:number;}[] = [<{id:number;}>({})]; +>foo : { id: number; }[] +>id : number +>[<{id:number;}>({})] : { id: number; }[] +><{id:number;}>({}) : { id: number; } +>id : number +>({}) : {} +>{} : {} + diff --git a/tests/baselines/reference/contextualTyping8.types b/tests/baselines/reference/contextualTyping8.types new file mode 100644 index 00000000000..17ba999524c --- /dev/null +++ b/tests/baselines/reference/contextualTyping8.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/contextualTyping8.ts === +var foo:{id:number;}[] = [<{id:number;}>({})]; +>foo : { id: number; }[] +>id : number +>[<{id:number;}>({})] : { id: number; }[] +><{id:number;}>({}) : { id: number; } +>id : number +>({}) : {} +>{} : {} + diff --git a/tests/baselines/reference/contextualTyping9.types b/tests/baselines/reference/contextualTyping9.types new file mode 100644 index 00000000000..9d63203583d --- /dev/null +++ b/tests/baselines/reference/contextualTyping9.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/contextualTyping9.ts === +var foo:{id:number;}[] = [{id:1}, {id:2, name:"foo"}]; +>foo : { id: number; }[] +>id : number +>[{id:1}, {id:2, name:"foo"}] : { id: number; }[] +>{id:1} : { id: number; } +>id : number +>{id:2, name:"foo"} : { id: number; name: string; } +>id : number +>name : string + diff --git a/tests/baselines/reference/contextualTypingArrayOfLambdas.types b/tests/baselines/reference/contextualTypingArrayOfLambdas.types new file mode 100644 index 00000000000..f3bb8bab70f --- /dev/null +++ b/tests/baselines/reference/contextualTypingArrayOfLambdas.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/contextualTypingArrayOfLambdas.ts === +class A { +>A : A + + foo: string; +>foo : string +} + +class B extends A { +>B : B +>A : A + + bar: string; +>bar : string +} + +class C extends A { +>C : C +>A : A + + baz: string; +>baz : string +} + +var xs = [(x: A) => { }, (x: B) => { }, (x: C) => { }]; +>xs : { (x: A): void; }[] +>[(x: A) => { }, (x: B) => { }, (x: C) => { }] : { (x: A): void; }[] +>(x: A) => { } : (x: A) => void +>x : A +>A : A +>(x: B) => { } : (x: B) => void +>x : B +>B : B +>(x: C) => { } : (x: C) => void +>x : C +>C : C + diff --git a/tests/baselines/reference/contextualTypingOfConditionalExpression.types b/tests/baselines/reference/contextualTypingOfConditionalExpression.types new file mode 100644 index 00000000000..6c6f9b04457 --- /dev/null +++ b/tests/baselines/reference/contextualTypingOfConditionalExpression.types @@ -0,0 +1,55 @@ +=== tests/cases/compiler/contextualTypingOfConditionalExpression.ts === +var x: (a: number) => void = true ? (a) => a.toExponential() : (b) => b.toFixed(); +>x : (a: number) => void +>a : number +>true ? (a) => a.toExponential() : (b) => b.toFixed() : (a: number) => void +>(a) => a.toExponential() : (a: number) => string +>a : number +>a.toExponential() : string +>a.toExponential : (fractionDigits?: number) => string +>a : number +>toExponential : (fractionDigits?: number) => string +>(b) => b.toFixed() : (b: number) => string +>b : number +>b.toFixed() : string +>b.toFixed : (fractionDigits?: number) => string +>b : number +>toFixed : (fractionDigits?: number) => string + +class A { +>A : A + + foo: number; +>foo : number +} +class B extends A { +>B : B +>A : A + + bar: number; +>bar : number +} +class C extends A { +>C : C +>A : A + + baz: number; +>baz : number +} + +var x2: (a: A) => void = true ? (a) => a.foo : (b) => b.foo; +>x2 : (a: A) => void +>a : A +>A : A +>true ? (a) => a.foo : (b) => b.foo : (a: A) => void +>(a) => a.foo : (a: A) => number +>a : A +>a.foo : number +>a : A +>foo : number +>(b) => b.foo : (b: A) => number +>b : A +>b.foo : number +>b : A +>foo : number + diff --git a/tests/baselines/reference/contextualTypingOfGenericFunctionTypedArguments1.js b/tests/baselines/reference/contextualTypingOfGenericFunctionTypedArguments1.js index d5b27792603..b2a8bf0dba1 100644 --- a/tests/baselines/reference/contextualTypingOfGenericFunctionTypedArguments1.js +++ b/tests/baselines/reference/contextualTypingOfGenericFunctionTypedArguments1.js @@ -21,6 +21,7 @@ var r6 = _.forEach(c2, (x) => { return x.toFixed() }); //// [contextualTypingOfGenericFunctionTypedArguments1.js] var c2; var _; +// errors on all 3 lines, bug was that r5 was the only line with errors var f = function (x) { return x.toFixed(); }; diff --git a/tests/baselines/reference/contextualTypingOfLambdaReturnExpression.js b/tests/baselines/reference/contextualTypingOfLambdaReturnExpression.js index d72fd1352c0..f7e6b63ce05 100644 --- a/tests/baselines/reference/contextualTypingOfLambdaReturnExpression.js +++ b/tests/baselines/reference/contextualTypingOfLambdaReturnExpression.js @@ -9,7 +9,7 @@ callb((a) => { a.length; }); // Error, we picked the first overload and errored //// [contextualTypingOfLambdaReturnExpression.js] function callb(a) { } -callb(function (a) { return a.length; }); +callb(function (a) { return a.length; }); // Ok, we choose the second overload because the first one gave us an error when trying to resolve the lambda return type callb(function (a) { a.length; -}); +}); // Error, we picked the first overload and errored when type checking the lambda body diff --git a/tests/baselines/reference/contextualTypingOfLambdaWithMultipleSignatures.types b/tests/baselines/reference/contextualTypingOfLambdaWithMultipleSignatures.types new file mode 100644 index 00000000000..485c7159b77 --- /dev/null +++ b/tests/baselines/reference/contextualTypingOfLambdaWithMultipleSignatures.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/contextualTypingOfLambdaWithMultipleSignatures.ts === +interface Foo { +>Foo : Foo + + getFoo(n: number): void; +>getFoo : { (n: number): void; (s: string): void; } +>n : number + + getFoo(s: string): void; +>getFoo : { (n: number): void; (s: string): void; } +>s : string +} + +var foo: Foo; +>foo : Foo +>Foo : Foo + +foo.getFoo = bar => { }; +>foo.getFoo = bar => { } : (bar: any) => void +>foo.getFoo : { (n: number): void; (s: string): void; } +>foo : Foo +>getFoo : { (n: number): void; (s: string): void; } +>bar => { } : (bar: any) => void +>bar : any + diff --git a/tests/baselines/reference/contextualTypingOfLambdaWithMultipleSignatures2.types b/tests/baselines/reference/contextualTypingOfLambdaWithMultipleSignatures2.types new file mode 100644 index 00000000000..1b7f328b5f1 --- /dev/null +++ b/tests/baselines/reference/contextualTypingOfLambdaWithMultipleSignatures2.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/contextualTypingOfLambdaWithMultipleSignatures2.ts === +var f: { +>f : { (x: string): string; (x: number): string; } + + (x: string): string; +>x : string + + (x: number): string +>x : number + +}; + +f = (a) => { return a.asdf } +>f = (a) => { return a.asdf } : (a: any) => any +>f : { (x: string): string; (x: number): string; } +>(a) => { return a.asdf } : (a: any) => any +>a : any +>a.asdf : any +>a : any +>asdf : any + diff --git a/tests/baselines/reference/contextualTypingOfObjectLiterals.js b/tests/baselines/reference/contextualTypingOfObjectLiterals.js index 6311b242bca..2d585284f50 100644 --- a/tests/baselines/reference/contextualTypingOfObjectLiterals.js +++ b/tests/baselines/reference/contextualTypingOfObjectLiterals.js @@ -13,10 +13,10 @@ f(obj2); // Error - indexer doesn't match //// [contextualTypingOfObjectLiterals.js] var obj1; var obj2 = { x: "" }; -obj1 = {}; -obj1 = obj2; +obj1 = {}; // Ok +obj1 = obj2; // Error - indexer doesn't match function f(x) { } -f({}); -f(obj1); -f(obj2); +f({}); // Ok +f(obj1); // Ok +f(obj2); // Error - indexer doesn't match diff --git a/tests/baselines/reference/contextualTypingOfObjectLiterals2.js b/tests/baselines/reference/contextualTypingOfObjectLiterals2.js index 52cbaa48d77..ce8abe35810 100644 --- a/tests/baselines/reference/contextualTypingOfObjectLiterals2.js +++ b/tests/baselines/reference/contextualTypingOfObjectLiterals2.js @@ -8,4 +8,4 @@ f2({ foo: s => s.hmm }) // 's' should be 'string', so this should be an error //// [contextualTypingOfObjectLiterals2.js] function f2(args) { } -f2({ foo: function (s) { return s.hmm; } }); +f2({ foo: function (s) { return s.hmm; } }); // 's' should be 'string', so this should be an error diff --git a/tests/baselines/reference/contextualTypingTwoInstancesOfSameTypeParameter.types b/tests/baselines/reference/contextualTypingTwoInstancesOfSameTypeParameter.types new file mode 100644 index 00000000000..0e5c25a9282 --- /dev/null +++ b/tests/baselines/reference/contextualTypingTwoInstancesOfSameTypeParameter.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/contextualTypingTwoInstancesOfSameTypeParameter.ts === +function f6(x: (a: T) => T) { +>f6 : (x: (a: T) => T) => any +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T + + return null; +} +f6(x => f6(y => x = y)); +>f6(x => f6(y => x = y)) : any +>f6 : (x: (a: T) => T) => any +>x => f6(y => x = y) : (x: {}) => any +>x : {} +>f6(y => x = y) : any +>f6 : (x: (a: T) => T) => any +>y => x = y : (y: {}) => {} +>y : {} +>x = y : {} +>x : {} +>y : {} + diff --git a/tests/baselines/reference/contextualTypingWithFixedTypeParameters1.js b/tests/baselines/reference/contextualTypingWithFixedTypeParameters1.js index fd9317cec94..cf7274db8a0 100644 --- a/tests/baselines/reference/contextualTypingWithFixedTypeParameters1.js +++ b/tests/baselines/reference/contextualTypingWithFixedTypeParameters1.js @@ -5,5 +5,5 @@ var r9 = f10('', () => (a => a.foo), 1); // now a should be any //// [contextualTypingWithFixedTypeParameters1.js] var f10; -f10('', function () { return function (a) { return a.foo; }; }, ''); -var r9 = f10('', function () { return (function (a) { return a.foo; }); }, 1); +f10('', function () { return function (a) { return a.foo; }; }, ''); // a is string, fixed by first parameter +var r9 = f10('', function () { return (function (a) { return a.foo; }); }, 1); // now a should be any diff --git a/tests/baselines/reference/contextualTypingWithGenericAndNonGenericSignature.js b/tests/baselines/reference/contextualTypingWithGenericAndNonGenericSignature.js index 8e69f08601e..f548b6daaad 100644 --- a/tests/baselines/reference/contextualTypingWithGenericAndNonGenericSignature.js +++ b/tests/baselines/reference/contextualTypingWithGenericAndNonGenericSignature.js @@ -17,6 +17,7 @@ f3 = (x, y) => { return x } //// [contextualTypingWithGenericAndNonGenericSignature.js] +//• If e is a FunctionExpression or ArrowFunctionExpression with no type parameters and no parameter or return type annotations, and T is a function type with EXACTLY ONE non - generic call signature, then any inferences made for type parameters referenced by the parameters of T’s call signature are fixed(section 4.12.2) and e is processed with the contextual type T, as described in section 4.9.3. var f2; f2 = function (x, y) { return x; diff --git a/tests/baselines/reference/contextualTypingWithGenericAndNonGenericSignature.types b/tests/baselines/reference/contextualTypingWithGenericAndNonGenericSignature.types new file mode 100644 index 00000000000..ca6c5b35f3d --- /dev/null +++ b/tests/baselines/reference/contextualTypingWithGenericAndNonGenericSignature.types @@ -0,0 +1,55 @@ +=== tests/cases/compiler/contextualTypingWithGenericAndNonGenericSignature.ts === +//• If e is a FunctionExpression or ArrowFunctionExpression with no type parameters and no parameter or return type annotations, and T is a function type with EXACTLY ONE non - generic call signature, then any inferences made for type parameters referenced by the parameters of T’s call signature are fixed(section 4.12.2) and e is processed with the contextual type T, as described in section 4.9.3. + +var f2: { +>f2 : { (x: string, y: number): string; (x: T, y: U): T; } + + (x: string, y: number): string; +>x : string +>y : number + + (x: T, y: U): T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + +}; + +f2 = (x, y) => { return x } +>f2 = (x, y) => { return x } : (x: any, y: any) => any +>f2 : { (x: string, y: number): string; (x: T, y: U): T; } +>(x, y) => { return x } : (x: any, y: any) => any +>x : any +>y : any +>x : any + +var f3: { +>f3 : { (x: T, y: U): T; (x: string, y: number): string; } + + (x: T, y: U): T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + + (x: string, y: number): string; +>x : string +>y : number + +}; + +f3 = (x, y) => { return x } +>f3 = (x, y) => { return x } : (x: any, y: any) => any +>f3 : { (x: T, y: U): T; (x: string, y: number): string; } +>(x, y) => { return x } : (x: any, y: any) => any +>x : any +>y : any +>x : any + diff --git a/tests/baselines/reference/contextualTypingWithGenericSignature.js b/tests/baselines/reference/contextualTypingWithGenericSignature.js index 8eb51fe6b99..a1417e90b43 100644 --- a/tests/baselines/reference/contextualTypingWithGenericSignature.js +++ b/tests/baselines/reference/contextualTypingWithGenericSignature.js @@ -8,6 +8,7 @@ var f2: { f2 = (x, y) => { return x } //// [contextualTypingWithGenericSignature.js] +// If e is a FunctionExpression or ArrowFunctionExpression with no type parameters and no parameter or return type annotations, and T is a function type with EXACTLY ONE non - generic call signature, then any inferences made for type parameters referenced by the parameters of T’s call signature are fixed(section 4.12.2) and e is processed with the contextual type T, as described in section 4.9.3. var f2; f2 = function (x, y) { return x; diff --git a/tests/baselines/reference/contextualTypingWithGenericSignature.types b/tests/baselines/reference/contextualTypingWithGenericSignature.types new file mode 100644 index 00000000000..68c5f3c422d --- /dev/null +++ b/tests/baselines/reference/contextualTypingWithGenericSignature.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/contextualTypingWithGenericSignature.ts === +// If e is a FunctionExpression or ArrowFunctionExpression with no type parameters and no parameter or return type annotations, and T is a function type with EXACTLY ONE non - generic call signature, then any inferences made for type parameters referenced by the parameters of T’s call signature are fixed(section 4.12.2) and e is processed with the contextual type T, as described in section 4.9.3. + +var f2: { +>f2 : (x: T, y: U) => T + + (x: T, y: U): T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + +}; + +f2 = (x, y) => { return x } +>f2 = (x, y) => { return x } : (x: any, y: any) => any +>f2 : (x: T, y: U) => T +>(x, y) => { return x } : (x: any, y: any) => any +>x : any +>y : any +>x : any + diff --git a/tests/baselines/reference/contextuallyTypingOrOperator.types b/tests/baselines/reference/contextuallyTypingOrOperator.types new file mode 100644 index 00000000000..ee1ac4b0bba --- /dev/null +++ b/tests/baselines/reference/contextuallyTypingOrOperator.types @@ -0,0 +1,54 @@ +=== tests/cases/compiler/contextuallyTypingOrOperator.ts === +var v: { a: (_: string) => number } = { a: s => s.length } || { a: s => 1 }; +>v : { a: (_: string) => number; } +>a : (_: string) => number +>_ : string +>{ a: s => s.length } || { a: s => 1 } : { a: (_: string) => number; } +>{ a: s => s.length } : { a: (s: string) => number; } +>a : (s: string) => number +>s => s.length : (s: string) => number +>s : string +>s.length : number +>s : string +>length : number +>{ a: s => 1 } : { a: (s: string) => number; } +>a : (s: string) => number +>s => 1 : (s: string) => number +>s : string + +var v2 = (s: string) => s.length || function (s) { s.length }; +>v2 : (s: string) => {} +>(s: string) => s.length || function (s) { s.length } : (s: string) => {} +>s : string +>s.length || function (s) { s.length } : {} +>s.length : number +>s : string +>length : number +>function (s) { s.length } : (s: any) => void +>s : any +>s.length : any +>s : any +>length : any + +var v3 = (s: string) => s.length || function (s: number) { return 1 }; +>v3 : (s: string) => {} +>(s: string) => s.length || function (s: number) { return 1 } : (s: string) => {} +>s : string +>s.length || function (s: number) { return 1 } : {} +>s.length : number +>s : string +>length : number +>function (s: number) { return 1 } : (s: number) => number +>s : number + +var v4 = (s: number) => 1 || function (s: string) { return s.length }; +>v4 : (s: number) => {} +>(s: number) => 1 || function (s: string) { return s.length } : (s: number) => {} +>s : number +>1 || function (s: string) { return s.length } : {} +>function (s: string) { return s.length } : (s: string) => number +>s : string +>s.length : number +>s : string +>length : number + diff --git a/tests/baselines/reference/contextuallyTypingOrOperator2.types b/tests/baselines/reference/contextuallyTypingOrOperator2.types new file mode 100644 index 00000000000..57c9992436d --- /dev/null +++ b/tests/baselines/reference/contextuallyTypingOrOperator2.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/contextuallyTypingOrOperator2.ts === +var v: { a: (_: string) => number } = { a: s => s.length } || { a: s => 1 }; +>v : { a: (_: string) => number; } +>a : (_: string) => number +>_ : string +>{ a: s => s.length } || { a: s => 1 } : { a: (_: string) => number; } +>{ a: s => s.length } : { a: (s: string) => number; } +>a : (s: string) => number +>s => s.length : (s: string) => number +>s : string +>s.length : number +>s : string +>length : number +>{ a: s => 1 } : { a: (s: string) => number; } +>a : (s: string) => number +>s => 1 : (s: string) => number +>s : string + +var v2 = (s: string) => s.length || function (s) { s.aaa }; +>v2 : (s: string) => {} +>(s: string) => s.length || function (s) { s.aaa } : (s: string) => {} +>s : string +>s.length || function (s) { s.aaa } : {} +>s.length : number +>s : string +>length : number +>function (s) { s.aaa } : (s: any) => void +>s : any +>s.aaa : any +>s : any +>aaa : any + diff --git a/tests/baselines/reference/continueInIterationStatement1.js b/tests/baselines/reference/continueInIterationStatement1.js new file mode 100644 index 00000000000..e1c787ae7ea --- /dev/null +++ b/tests/baselines/reference/continueInIterationStatement1.js @@ -0,0 +1,9 @@ +//// [continueInIterationStatement1.ts] +while (true) { + continue; +} + +//// [continueInIterationStatement1.js] +while (true) { + continue; +} diff --git a/tests/baselines/reference/continueInIterationStatement1.types b/tests/baselines/reference/continueInIterationStatement1.types new file mode 100644 index 00000000000..210de69f6bb --- /dev/null +++ b/tests/baselines/reference/continueInIterationStatement1.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/continueInIterationStatement1.ts === +while (true) { +No type information for this code. continue; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/continueInIterationStatement2.js b/tests/baselines/reference/continueInIterationStatement2.js new file mode 100644 index 00000000000..d7ff84895f6 --- /dev/null +++ b/tests/baselines/reference/continueInIterationStatement2.js @@ -0,0 +1,10 @@ +//// [continueInIterationStatement2.ts] +do { + continue; +} +while (true); + +//// [continueInIterationStatement2.js] +do { + continue; +} while (true); diff --git a/tests/baselines/reference/continueInIterationStatement2.types b/tests/baselines/reference/continueInIterationStatement2.types new file mode 100644 index 00000000000..5cb4b62f39a --- /dev/null +++ b/tests/baselines/reference/continueInIterationStatement2.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/continueInIterationStatement2.ts === +do { +No type information for this code. continue; +No type information for this code.} +No type information for this code.while (true); +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/continueInIterationStatement3.js b/tests/baselines/reference/continueInIterationStatement3.js new file mode 100644 index 00000000000..90619118ac5 --- /dev/null +++ b/tests/baselines/reference/continueInIterationStatement3.js @@ -0,0 +1,9 @@ +//// [continueInIterationStatement3.ts] +for (;;) { + continue; +} + +//// [continueInIterationStatement3.js] +for (;;) { + continue; +} diff --git a/tests/baselines/reference/continueInIterationStatement3.types b/tests/baselines/reference/continueInIterationStatement3.types new file mode 100644 index 00000000000..f4df3a295fb --- /dev/null +++ b/tests/baselines/reference/continueInIterationStatement3.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/continueInIterationStatement3.ts === +for (;;) { +No type information for this code. continue; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/continueInIterationStatement4.errors.txt b/tests/baselines/reference/continueInIterationStatement4.errors.txt new file mode 100644 index 00000000000..c0f4388cf79 --- /dev/null +++ b/tests/baselines/reference/continueInIterationStatement4.errors.txt @@ -0,0 +1,6 @@ +==== tests/cases/compiler/continueInIterationStatement4.ts (1 errors) ==== + for (var i in something) { + ~~~~~~~~~ +!!! Cannot find name 'something'. + continue; + } \ No newline at end of file diff --git a/tests/baselines/reference/continueInIterationStatement4.js b/tests/baselines/reference/continueInIterationStatement4.js new file mode 100644 index 00000000000..e72ab3ed9ab --- /dev/null +++ b/tests/baselines/reference/continueInIterationStatement4.js @@ -0,0 +1,9 @@ +//// [continueInIterationStatement4.ts] +for (var i in something) { + continue; +} + +//// [continueInIterationStatement4.js] +for (var i in something) { + continue; +} diff --git a/tests/baselines/reference/continueLabel.js b/tests/baselines/reference/continueLabel.js new file mode 100644 index 00000000000..390566353eb --- /dev/null +++ b/tests/baselines/reference/continueLabel.js @@ -0,0 +1,9 @@ +//// [continueLabel.ts] +label1: for(var i = 0; i < 1; i++) { + continue label1; +} + +//// [continueLabel.js] +label1: for (var i = 0; i < 1; i++) { + continue label1; +} diff --git a/tests/baselines/reference/continueLabel.types b/tests/baselines/reference/continueLabel.types new file mode 100644 index 00000000000..79c5381f08a --- /dev/null +++ b/tests/baselines/reference/continueLabel.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/continueLabel.ts === +label1: for(var i = 0; i < 1; i++) { +>i : number +>i < 1 : boolean +>i : number +>i++ : number +>i : number + + continue label1; +} diff --git a/tests/baselines/reference/continueNotInIterationStatement1.errors.txt b/tests/baselines/reference/continueNotInIterationStatement1.errors.txt new file mode 100644 index 00000000000..5f7d543a0aa --- /dev/null +++ b/tests/baselines/reference/continueNotInIterationStatement1.errors.txt @@ -0,0 +1,4 @@ +==== tests/cases/compiler/continueNotInIterationStatement1.ts (1 errors) ==== + continue; + ~~~~~~~~~ +!!! A 'continue' statement can only be used within an enclosing iteration statement. \ No newline at end of file diff --git a/tests/baselines/reference/continueNotInIterationStatement2.errors.txt b/tests/baselines/reference/continueNotInIterationStatement2.errors.txt new file mode 100644 index 00000000000..0bfc41d7f72 --- /dev/null +++ b/tests/baselines/reference/continueNotInIterationStatement2.errors.txt @@ -0,0 +1,8 @@ +==== tests/cases/compiler/continueNotInIterationStatement2.ts (1 errors) ==== + while (true) { + function f() { + continue; + ~~~~~~~~~ +!!! Jump target cannot cross function boundary. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/continueNotInIterationStatement3.errors.txt b/tests/baselines/reference/continueNotInIterationStatement3.errors.txt new file mode 100644 index 00000000000..d8627b4fc3a --- /dev/null +++ b/tests/baselines/reference/continueNotInIterationStatement3.errors.txt @@ -0,0 +1,7 @@ +==== tests/cases/compiler/continueNotInIterationStatement3.ts (1 errors) ==== + switch (0) { + default: + continue; + ~~~~~~~~~ +!!! A 'continue' statement can only be used within an enclosing iteration statement. + } \ No newline at end of file diff --git a/tests/baselines/reference/continueNotInIterationStatement4.errors.txt b/tests/baselines/reference/continueNotInIterationStatement4.errors.txt new file mode 100644 index 00000000000..91e7b26b578 --- /dev/null +++ b/tests/baselines/reference/continueNotInIterationStatement4.errors.txt @@ -0,0 +1,10 @@ +==== tests/cases/compiler/continueNotInIterationStatement4.ts (1 errors) ==== + TWO: + while (true){ + var x = () => { + continue TWO; + ~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/continueTarget1.errors.txt b/tests/baselines/reference/continueTarget1.errors.txt new file mode 100644 index 00000000000..1b93d9fc707 --- /dev/null +++ b/tests/baselines/reference/continueTarget1.errors.txt @@ -0,0 +1,5 @@ +==== tests/cases/compiler/continueTarget1.ts (1 errors) ==== + target: + continue target; + ~~~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. \ No newline at end of file diff --git a/tests/baselines/reference/continueTarget2.js b/tests/baselines/reference/continueTarget2.js new file mode 100644 index 00000000000..eb3b4118f7f --- /dev/null +++ b/tests/baselines/reference/continueTarget2.js @@ -0,0 +1,10 @@ +//// [continueTarget2.ts] +target: +while (true) { + continue target; +} + +//// [continueTarget2.js] +target: while (true) { + continue target; +} diff --git a/tests/baselines/reference/continueTarget2.types b/tests/baselines/reference/continueTarget2.types new file mode 100644 index 00000000000..16f45c402cd --- /dev/null +++ b/tests/baselines/reference/continueTarget2.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/continueTarget2.ts === +target: +No type information for this code.while (true) { +No type information for this code. continue target; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/continueTarget3.js b/tests/baselines/reference/continueTarget3.js new file mode 100644 index 00000000000..052b7b593c3 --- /dev/null +++ b/tests/baselines/reference/continueTarget3.js @@ -0,0 +1,11 @@ +//// [continueTarget3.ts] +target1: +target2: +while (true) { + continue target1; +} + +//// [continueTarget3.js] +target1: target2: while (true) { + continue target1; +} diff --git a/tests/baselines/reference/continueTarget3.types b/tests/baselines/reference/continueTarget3.types new file mode 100644 index 00000000000..a1b930f2f5a --- /dev/null +++ b/tests/baselines/reference/continueTarget3.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/continueTarget3.ts === +target1: +No type information for this code.target2: +No type information for this code.while (true) { +No type information for this code. continue target1; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/continueTarget4.js b/tests/baselines/reference/continueTarget4.js new file mode 100644 index 00000000000..0f6211f9202 --- /dev/null +++ b/tests/baselines/reference/continueTarget4.js @@ -0,0 +1,11 @@ +//// [continueTarget4.ts] +target1: +target2: +while (true) { + continue target2; +} + +//// [continueTarget4.js] +target1: target2: while (true) { + continue target2; +} diff --git a/tests/baselines/reference/continueTarget4.types b/tests/baselines/reference/continueTarget4.types new file mode 100644 index 00000000000..ea1989a3e4d --- /dev/null +++ b/tests/baselines/reference/continueTarget4.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/continueTarget4.ts === +target1: +No type information for this code.target2: +No type information for this code.while (true) { +No type information for this code. continue target2; +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/continueTarget5.errors.txt b/tests/baselines/reference/continueTarget5.errors.txt new file mode 100644 index 00000000000..aa156707aa5 --- /dev/null +++ b/tests/baselines/reference/continueTarget5.errors.txt @@ -0,0 +1,11 @@ +==== tests/cases/compiler/continueTarget5.ts (1 errors) ==== + target: + while (true) { + function f() { + while (true) { + continue target; + ~~~~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/continueTarget6.errors.txt b/tests/baselines/reference/continueTarget6.errors.txt new file mode 100644 index 00000000000..2177e50523d --- /dev/null +++ b/tests/baselines/reference/continueTarget6.errors.txt @@ -0,0 +1,6 @@ +==== tests/cases/compiler/continueTarget6.ts (1 errors) ==== + while (true) { + continue target; + ~~~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. + } \ No newline at end of file diff --git a/tests/baselines/reference/convertKeywords.types b/tests/baselines/reference/convertKeywords.types new file mode 100644 index 00000000000..776ef3c4416 --- /dev/null +++ b/tests/baselines/reference/convertKeywords.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/convertKeywords.ts === +var abstract; +>abstract : any + + + diff --git a/tests/baselines/reference/convertKeywordsYes.js b/tests/baselines/reference/convertKeywordsYes.js index b6572cf9cf9..deae65b54c9 100644 --- a/tests/baselines/reference/convertKeywordsYes.js +++ b/tests/baselines/reference/convertKeywordsYes.js @@ -306,6 +306,7 @@ module bigModule { } //// [convertKeywordsYes.js] +// reserved ES5 future in strict mode var constructor = 0; var any = 0; var boolean = 0; diff --git a/tests/baselines/reference/convertKeywordsYes.types b/tests/baselines/reference/convertKeywordsYes.types new file mode 100644 index 00000000000..af2e0766181 --- /dev/null +++ b/tests/baselines/reference/convertKeywordsYes.types @@ -0,0 +1,879 @@ +=== tests/cases/compiler/convertKeywordsYes.ts === +// reserved ES5 future in strict mode + +var constructor = 0; +>constructor : number + +var any = 0; +>any : number + +var boolean = 0; +>boolean : number + +var implements = 0; +>implements : number + +var interface = 0; +>interface : number + +var let = 0; +>let : number + +var module = 0; +>module : number + +var number = 0; +>number : number + +var package = 0; +>package : number + +var private = 0; +>private : number + +var protected = 0; +>protected : number + +var public = 0; +>public : number + +var set = 0; +>set : number + +var static = 0; +>static : number + +var string = 0; +>string : number + +var get = 0; +>get : number + +var yield = 0; +>yield : number + +var declare = 0; +>declare : number + +function bigGeneric< +>bigGeneric : (c: constructor, a: any, b2: boolean, i: implements, i2: interface, l: let, m: module, n: number, p: package, p2: private, p3: protected, p4: public, s: set, s2: static, s3: string, g: get, y: yield, d: declare) => void + + constructor, +>constructor : constructor + + implements , +>implements : implements + + interface , +>interface : interface + + let, +>let : let + + module , +>module : module + + package, +>package : package + + private , +>private : private + + protected, +>protected : protected + + public , +>public : public + + set , +>set : set + + static , +>static : static + + get , +>get : get + + yield, +>yield : yield + + declare +>declare : declare + + >(c: constructor, +>c : constructor +>constructor : constructor + + a: any, +>a : any + + b2: boolean, +>b2 : boolean + + i: implements , +>i : implements +>implements : implements + + i2: interface , +>i2 : interface +>interface : interface + + l: let, +>l : let +>let : let + + m: module , +>m : module +>module : module + + n: number, +>n : number + + p: package, +>p : package +>package : package + + p2: private , +>p2 : private +>private : private + + p3: protected, +>p3 : protected +>protected : protected + + p4: public , +>p4 : public +>public : public + + s: set , +>s : set +>set : set + + s2: static , +>s2 : static +>static : static + + s3: string, +>s3 : string + + g: get , +>g : get +>get : get + + y: yield, +>y : yield +>yield : yield + + d: declare ) { } +>d : declare +>declare : declare + +var bigObject = { +>bigObject : { constructor: number; any: number; boolean: number; implements: number; interface: number; let: number; module: number; number: number; package: number; private: number; protected: number; public: number; set: number; static: number; string: number; get: number; yield: number; break: number; case: number; catch: number; class: number; continue: number; const: number; debugger: number; declare: number; default: number; delete: number; do: number; else: number; enum: number; export: number; extends: number; false: number; finally: number; for: number; function: number; if: number; import: number; in: number; instanceof: number; new: number; null: number; return: number; super: number; switch: number; this: number; throw: number; true: number; try: number; typeof: number; var: number; void: number; while: number; with: number; } +>{ constructor: 0, any: 0, boolean: 0, implements: 0, interface: 0, let: 0, module: 0, number: 0, package: 0, private: 0, protected: 0, public: 0, set: 0, static: 0, string: 0, get: 0, yield: 0, break: 0, case: 0, catch: 0, class: 0, continue: 0, const: 0, debugger: 0, declare: 0, default: 0, delete: 0, do: 0, else: 0, enum: 0, export: 0, extends: 0, false: 0, finally: 0, for: 0, function: 0, if: 0, import: 0, in: 0, instanceof: 0, new: 0, null: 0, return: 0, super: 0, switch: 0, this: 0, throw: 0, true: 0, try: 0, typeof: 0, var: 0, void: 0, while: 0, with: 0,} : { constructor: number; any: number; boolean: number; implements: number; interface: number; let: number; module: number; number: number; package: number; private: number; protected: number; public: number; set: number; static: number; string: number; get: number; yield: number; break: number; case: number; catch: number; class: number; continue: number; const: number; debugger: number; declare: number; default: number; delete: number; do: number; else: number; enum: number; export: number; extends: number; false: number; finally: number; for: number; function: number; if: number; import: number; in: number; instanceof: number; new: number; null: number; return: number; super: number; switch: number; this: number; throw: number; true: number; try: number; typeof: number; var: number; void: number; while: number; with: number; } + + constructor: 0, +>constructor : number + + any: 0, +>any : number + + boolean: 0, +>boolean : number + + implements: 0, +>implements : number + + interface: 0, +>interface : number + + let: 0, +>let : number + + module: 0, +>module : number + + number: 0, +>number : number + + package: 0, +>package : number + + private: 0, +>private : number + + protected: 0, +>protected : number + + public: 0, +>public : number + + set: 0, +>set : number + + static: 0, +>static : number + + string: 0, +>string : number + + get: 0, +>get : number + + yield: 0, +>yield : number + + break: 0, +>break : number + + case: 0, +>case : number + + catch: 0, +>catch : number + + class: 0, +>class : number + + continue: 0, +>continue : number + + const: 0, +>const : number + + debugger: 0, +>debugger : number + + declare: 0, +>declare : number + + default: 0, +>default : number + + delete: 0, +>delete : number + + do: 0, +>do : number + + else: 0, +>else : number + + enum: 0, +>enum : number + + export: 0, +>export : number + + extends: 0, +>extends : number + + false: 0, +>false : number + + finally: 0, +>finally : number + + for: 0, +>for : number + + function: 0, +>function : number + + if: 0, +>if : number + + import: 0, +>import : number + + in: 0, +>in : number + + instanceof: 0, +>instanceof : number + + new: 0, +>new : number + + null: 0, +>null : number + + return: 0, +>return : number + + super: 0, +>super : number + + switch: 0, +>switch : number + + this: 0, +>this : number + + throw: 0, +>throw : number + + true: 0, +>true : number + + try: 0, +>try : number + + typeof: 0, +>typeof : number + + var: 0, +>var : number + + void: 0, +>void : number + + while: 0, +>while : number + + with: 0, +>with : number + +}; + +interface bigInterface { +>bigInterface : bigInterface + + constructor; +>constructor : any + + any; +>any : any + + boolean; +>boolean : any + + implements; +>implements : any + + interface; +>interface : any + + let; +>let : any + + module; +>module : any + + number; +>number : any + + package; +>package : any + + private; +>private : any + + protected; +>protected : any + + public; +>public : any + + set; +>set : any + + static; +>static : any + + string; +>string : any + + get; +>get : any + + yield; +>yield : any + + break; +>break : any + + case; +>case : any + + catch; +>catch : any + + class; +>class : any + + continue; +>continue : any + + const; +>const : any + + debugger; +>debugger : any + + declare; +>declare : any + + default; +>default : any + + delete; +>delete : any + + do; +>do : any + + else; +>else : any + + enum; +>enum : any + + export; +>export : any + + extends; +>extends : any + + false; +>false : any + + finally; +>finally : any + + for; +>for : any + + function; +>function : any + + if; +>if : any + + import; +>import : any + + in; +>in : any + + instanceof; +>instanceof : any + + new; +>new : any + + null; +>null : any + + return; +>return : any + + super; +>super : any + + switch; +>switch : any + + this; +>this : any + + throw; +>throw : any + + true; +>true : any + + try; +>try : any + + typeof; +>typeof : any + + var; +>var : any + + void; +>void : any + + while; +>while : any + + with; +>with : any +} + +class bigClass { +>bigClass : bigClass + + public "constructor" = 0; + public any = 0; +>any : number + + public boolean = 0; +>boolean : number + + public implements = 0; +>implements : number + + public interface = 0; +>interface : number + + public let = 0; +>let : number + + public module = 0; +>module : number + + public number = 0; +>number : number + + public package = 0; +>package : number + + public private = 0; +>private : number + + public protected = 0; +>protected : number + + public public = 0; +>public : number + + public set = 0; +>set : number + + public static = 0; +>static : number + + public string = 0; +>string : number + + public get = 0; +>get : number + + public yield = 0; +>yield : number + + public break = 0; +>break : number + + public case = 0; +>case : number + + public catch = 0; +>catch : number + + public class = 0; +>class : number + + public continue = 0; +>continue : number + + public const = 0; +>const : number + + public debugger = 0; +>debugger : number + + public declare = 0; +>declare : number + + public default = 0; +>default : number + + public delete = 0; +>delete : number + + public do = 0; +>do : number + + public else = 0; +>else : number + + public enum = 0; +>enum : number + + public export = 0; +>export : number + + public extends = 0; +>extends : number + + public false = 0; +>false : number + + public finally = 0; +>finally : number + + public for = 0; +>for : number + + public function = 0; +>function : number + + public if = 0; +>if : number + + public import = 0; +>import : number + + public in = 0; +>in : number + + public instanceof = 0; +>instanceof : number + + public new = 0; +>new : number + + public null = 0; +>null : number + + public return = 0; +>return : number + + public super = 0; +>super : number + + public switch = 0; +>switch : number + + public this = 0; +>this : number + + public throw = 0; +>throw : number + + public true = 0; +>true : number + + public try = 0; +>try : number + + public typeof = 0; +>typeof : number + + public var = 0; +>var : number + + public void = 0; +>void : number + + public while = 0; +>while : number + + public with = 0; +>with : number +} + +enum bigEnum { +>bigEnum : bigEnum + + constructor, +>constructor : bigEnum + + any, +>any : bigEnum + + boolean, +>boolean : bigEnum + + implements, +>implements : bigEnum + + interface, +>interface : bigEnum + + let, +>let : bigEnum + + module, +>module : bigEnum + + number, +>number : bigEnum + + package, +>package : bigEnum + + private, +>private : bigEnum + + protected, +>protected : bigEnum + + public, +>public : bigEnum + + set, +>set : bigEnum + + static, +>static : bigEnum + + string, +>string : bigEnum + + get, +>get : bigEnum + + yield, +>yield : bigEnum + + break, +>break : bigEnum + + case, +>case : bigEnum + + catch, +>catch : bigEnum + + class, +>class : bigEnum + + continue, +>continue : bigEnum + + const, +>const : bigEnum + + debugger, +>debugger : bigEnum + + declare, +>declare : bigEnum + + default, +>default : bigEnum + + delete, +>delete : bigEnum + + do, +>do : bigEnum + + else, +>else : bigEnum + + enum, +>enum : bigEnum + + export, +>export : bigEnum + + extends, +>extends : bigEnum + + false, +>false : bigEnum + + finally, +>finally : bigEnum + + for, +>for : bigEnum + + function, +>function : bigEnum + + if, +>if : bigEnum + + import, +>import : bigEnum + + in, +>in : bigEnum + + instanceof, +>instanceof : bigEnum + + new, +>new : bigEnum + + null, +>null : bigEnum + + return, +>return : bigEnum + + super, +>super : bigEnum + + switch, +>switch : bigEnum + + this, +>this : bigEnum + + throw, +>throw : bigEnum + + true, +>true : bigEnum + + try, +>try : bigEnum + + typeof, +>typeof : bigEnum + + var, +>var : bigEnum + + void, +>void : bigEnum + + while, +>while : bigEnum + + with, +>with : bigEnum +} + +module bigModule { +>bigModule : typeof bigModule + + class constructor { } +>constructor : constructor + + class implements { } +>implements : implements + + class interface { } +>interface : interface + + class let { } +>let : let + + class module { } +>module : module + + class package { } +>package : package + + class private { } +>private : private + + class protected { } +>protected : protected + + class public { } +>public : public + + class set { } +>set : set + + class static { } +>static : static + + class get { } +>get : get + + class yield { } +>yield : yield + + class declare { } +>declare : declare +} diff --git a/tests/baselines/reference/copyrightWithNewLine1.js b/tests/baselines/reference/copyrightWithNewLine1.js index 47d0571adc5..79f158cf7d9 100644 --- a/tests/baselines/reference/copyrightWithNewLine1.js +++ b/tests/baselines/reference/copyrightWithNewLine1.js @@ -10,8 +10,12 @@ var greeter = new model.Greeter(el); greeter.start(); //// [copyrightWithNewLine1.js] +/***************************** +* (c) Copyright - Important +****************************/ define(["require", "exports", "./greeter"], function (require, exports, model) { var el = document.getElementById('content'); var greeter = new model.Greeter(el); + /** things */ greeter.start(); }); diff --git a/tests/baselines/reference/copyrightWithoutNewLine1.js b/tests/baselines/reference/copyrightWithoutNewLine1.js index f7b343cdc60..507c66fa3af 100644 --- a/tests/baselines/reference/copyrightWithoutNewLine1.js +++ b/tests/baselines/reference/copyrightWithoutNewLine1.js @@ -12,5 +12,6 @@ greeter.start(); define(["require", "exports", "./greeter"], function (require, exports, model) { var el = document.getElementById('content'); var greeter = new model.Greeter(el); + /** things */ greeter.start(); }); diff --git a/tests/baselines/reference/couldNotSelectGenericOverload.js b/tests/baselines/reference/couldNotSelectGenericOverload.js index 45b1d6d4558..45ce1c42274 100644 --- a/tests/baselines/reference/couldNotSelectGenericOverload.js +++ b/tests/baselines/reference/couldNotSelectGenericOverload.js @@ -13,9 +13,9 @@ function makeArray(items) { return items; } var b = [1, ""]; -var b1G = makeArray(1, ""); -var b2G = makeArray(b); +var b1G = makeArray(1, ""); // any, no error +var b2G = makeArray(b); // any[] function makeArray2(items) { return items; } -var b3G = makeArray2(1, ""); +var b3G = makeArray2(1, ""); // error diff --git a/tests/baselines/reference/covariance1.js b/tests/baselines/reference/covariance1.js index 4c19c9d2038..3c3891af882 100644 --- a/tests/baselines/reference/covariance1.js +++ b/tests/baselines/reference/covariance1.js @@ -31,7 +31,7 @@ var M; } M.f = f; var a; - f({ x: a }); + f({ x: a }); // ok var b; - f({ x: b }); + f({ x: b }); // ok covariant subtype })(M || (M = {})); diff --git a/tests/baselines/reference/covariance1.types b/tests/baselines/reference/covariance1.types new file mode 100644 index 00000000000..d9167095d47 --- /dev/null +++ b/tests/baselines/reference/covariance1.types @@ -0,0 +1,47 @@ +=== tests/cases/compiler/covariance1.ts === +module M { +>M : typeof M + + interface X { m1:number; } +>X : X +>m1 : number + + export class XX implements X { constructor(public m1:number) { } } +>XX : XX +>X : X +>m1 : number + + interface Y { x:X; } +>Y : Y +>x : X +>X : X + + export function f(y:Y) { } +>f : (y: Y) => void +>y : Y +>Y : Y + + var a:X; +>a : X +>X : X + + f({x:a}); // ok +>f({x:a}) : void +>f : (y: Y) => void +>{x:a} : { x: X; } +>x : X +>a : X + + var b:XX; +>b : XX +>XX : XX + + f({x:b}); // ok covariant subtype +>f({x:b}) : void +>f : (y: Y) => void +>{x:b} : { x: XX; } +>x : XX +>b : XX +} + + diff --git a/tests/baselines/reference/crashInResolveInterface.js b/tests/baselines/reference/crashInResolveInterface.js index 6feb855c46f..85b6217726a 100644 --- a/tests/baselines/reference/crashInResolveInterface.js +++ b/tests/baselines/reference/crashInResolveInterface.js @@ -22,3 +22,4 @@ interface C { var q1; var x = q1.each(function (x) { return c.log(x); }); //// [file2.js] +/// diff --git a/tests/baselines/reference/crashInResolveInterface.types b/tests/baselines/reference/crashInResolveInterface.types new file mode 100644 index 00000000000..539d50208d1 --- /dev/null +++ b/tests/baselines/reference/crashInResolveInterface.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/file2.ts === +/// +declare var c: C; +>c : C +>C : C + +interface C { +>C : C + + count(countTitle?: string): void; +>count : (countTitle?: string) => void +>countTitle : string +} +interface C { +>C : C + + log(message?: any, ...optionalParams: any[]): void; +>log : (message?: any, ...optionalParams: any[]) => void +>message : any +>optionalParams : any[] +} + +=== tests/cases/compiler/file1.ts === +interface Q { +>Q : Q +>T : T + + each(action: (item: T, index: number) => void): void; +>each : (action: (item: T, index: number) => void) => void +>action : (item: T, index: number) => void +>item : T +>T : T +>index : number +} +var q1: Q<{ a: number; }>; +>q1 : Q<{ a: number; }> +>Q : Q +>a : number + +var x = q1.each(x => c.log(x)); +>x : void +>q1.each(x => c.log(x)) : void +>q1.each : (action: (item: { a: number; }, index: number) => void) => void +>q1 : Q<{ a: number; }> +>each : (action: (item: { a: number; }, index: number) => void) => void +>x => c.log(x) : (x: { a: number; }) => void +>x : { a: number; } +>c.log(x) : void +>c.log : (message?: any, ...optionalParams: any[]) => void +>c : C +>log : (message?: any, ...optionalParams: any[]) => void +>x : { a: number; } + diff --git a/tests/baselines/reference/crashInresolveReturnStatement.types b/tests/baselines/reference/crashInresolveReturnStatement.types new file mode 100644 index 00000000000..6d31f15569b --- /dev/null +++ b/tests/baselines/reference/crashInresolveReturnStatement.types @@ -0,0 +1,42 @@ +=== tests/cases/compiler/crashInresolveReturnStatement.ts === +class WorkItemToolbar { +>WorkItemToolbar : WorkItemToolbar + + public onToolbarItemClick() { +>onToolbarItemClick : () => void + + WITDialogs.createCopyOfWorkItem(); +>WITDialogs.createCopyOfWorkItem() : void +>WITDialogs.createCopyOfWorkItem : () => void +>WITDialogs : typeof WITDialogs +>createCopyOfWorkItem : () => void + } +} +class CreateCopyOfWorkItemDialog { +>CreateCopyOfWorkItemDialog : CreateCopyOfWorkItemDialog + + public getDialogResult() { +>getDialogResult : () => any + + return null; + } +} +function createWorkItemDialog(dialogType: P0) { +>createWorkItemDialog : (dialogType: P0) => void +>P0 : P0 +>dialogType : P0 +>P0 : P0 +} +class WITDialogs { +>WITDialogs : WITDialogs + + public static createCopyOfWorkItem() { +>createCopyOfWorkItem : () => void + + createWorkItemDialog(CreateCopyOfWorkItemDialog); +>createWorkItemDialog(CreateCopyOfWorkItemDialog) : void +>createWorkItemDialog : (dialogType: P0) => void +>CreateCopyOfWorkItemDialog : typeof CreateCopyOfWorkItemDialog + } +} + diff --git a/tests/baselines/reference/customEventDetail.js b/tests/baselines/reference/customEventDetail.js index 2ad8d60b8c8..7207ecf0628 100644 --- a/tests/baselines/reference/customEventDetail.js +++ b/tests/baselines/reference/customEventDetail.js @@ -7,5 +7,6 @@ var y = x.detail.name; //// [customEventDetail.js] var x; +// valid since detail is any x.initCustomEvent('hello', true, true, { id: 12, name: 'hello' }); var y = x.detail.name; diff --git a/tests/baselines/reference/cyclicModuleImport.types b/tests/baselines/reference/cyclicModuleImport.types new file mode 100644 index 00000000000..c581dd63c6d --- /dev/null +++ b/tests/baselines/reference/cyclicModuleImport.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/cyclicModuleImport.ts === +declare module "SubModule" { + import MainModule = require('MainModule'); +>MainModule : typeof MainModule + + class SubModule { +>SubModule : SubModule + + public static StaticVar: number; +>StaticVar : number + + public InstanceVar: number; +>InstanceVar : number + + public main: MainModule; +>main : MainModule +>MainModule : MainModule + + constructor(); + } + export = SubModule; +>SubModule : SubModule +} +declare module "MainModule" { + import SubModule = require('SubModule'); +>SubModule : typeof SubModule + + class MainModule { +>MainModule : MainModule + + public SubModule: SubModule; +>SubModule : SubModule +>SubModule : SubModule + + constructor(); + } + export = MainModule; +>MainModule : MainModule +} + diff --git a/tests/baselines/reference/debugger.types b/tests/baselines/reference/debugger.types new file mode 100644 index 00000000000..8d46931bf8f --- /dev/null +++ b/tests/baselines/reference/debugger.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/debugger.ts === +debugger; + +function foo() { +>foo : () => void + + debugger; + +} diff --git a/tests/baselines/reference/debuggerEmit.types b/tests/baselines/reference/debuggerEmit.types new file mode 100644 index 00000000000..dcc28e62501 --- /dev/null +++ b/tests/baselines/reference/debuggerEmit.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/debuggerEmit.ts === +var x = function () { debugger; } +>x : () => void +>function () { debugger; } : () => void + +x(); +>x() : void +>x : () => void + diff --git a/tests/baselines/reference/declFileAccessors.js b/tests/baselines/reference/declFileAccessors.js index 28d54dcaa8c..f39cd13fdd0 100644 --- a/tests/baselines/reference/declFileAccessors.js +++ b/tests/baselines/reference/declFileAccessors.js @@ -102,32 +102,39 @@ class c2 { } //// [declFileAccessors_0.js] +/** This is comment for c1*/ var c1 = (function () { function c1() { } Object.defineProperty(c1.prototype, "p3", { + /** getter property*/ get: function () { return 10; }, - set: function (value) { + /** setter property*/ + set: function (/** this is value*/ value) { }, enumerable: true, configurable: true }); Object.defineProperty(c1.prototype, "pp3", { + /** private getter property*/ get: function () { return 10; }, - set: function (value) { + /** private setter property*/ + set: function (/** this is value*/ value) { }, enumerable: true, configurable: true }); Object.defineProperty(c1, "s3", { + /** static getter property*/ get: function () { return 10; }, - set: function (value) { + /** setter property*/ + set: function (/** this is value*/ value) { }, enumerable: true, configurable: true @@ -160,6 +167,7 @@ var c1 = (function () { configurable: true }); Object.defineProperty(c1.prototype, "onlyGetter", { + // Only getter property get: function () { return 10; }, @@ -167,6 +175,7 @@ var c1 = (function () { configurable: true }); Object.defineProperty(c1.prototype, "onlySetter", { + // Only setter property set: function (value) { }, enumerable: true, @@ -176,32 +185,39 @@ var c1 = (function () { })(); exports.c1 = c1; //// [declFileAccessors_1.js] +/** This is comment for c2 - the global class*/ var c2 = (function () { function c2() { } Object.defineProperty(c2.prototype, "p3", { + /** getter property*/ get: function () { return 10; }, - set: function (value) { + /** setter property*/ + set: function (/** this is value*/ value) { }, enumerable: true, configurable: true }); Object.defineProperty(c2.prototype, "pp3", { + /** private getter property*/ get: function () { return 10; }, - set: function (value) { + /** private setter property*/ + set: function (/** this is value*/ value) { }, enumerable: true, configurable: true }); Object.defineProperty(c2, "s3", { + /** static getter property*/ get: function () { return 10; }, - set: function (value) { + /** setter property*/ + set: function (/** this is value*/ value) { }, enumerable: true, configurable: true @@ -234,6 +250,7 @@ var c2 = (function () { configurable: true }); Object.defineProperty(c2.prototype, "onlyGetter", { + // Only getter property get: function () { return 10; }, @@ -241,6 +258,7 @@ var c2 = (function () { configurable: true }); Object.defineProperty(c2.prototype, "onlySetter", { + // Only setter property set: function (value) { }, enumerable: true, @@ -251,9 +269,16 @@ var c2 = (function () { //// [declFileAccessors_0.d.ts] +/** This is comment for c1*/ export declare class c1 { + /** getter property*/ + /** setter property*/ p3: number; + /** private getter property*/ + /** private setter property*/ private pp3; + /** static getter property*/ + /** setter property*/ static s3: number; nc_p3: number; private nc_pp3; @@ -262,9 +287,16 @@ export declare class c1 { onlySetter: number; } //// [declFileAccessors_1.d.ts] +/** This is comment for c2 - the global class*/ declare class c2 { + /** getter property*/ + /** setter property*/ p3: number; + /** private getter property*/ + /** private setter property*/ private pp3; + /** static getter property*/ + /** setter property*/ static s3: number; nc_p3: number; private nc_pp3; diff --git a/tests/baselines/reference/declFileAccessors.types b/tests/baselines/reference/declFileAccessors.types new file mode 100644 index 00000000000..2d8524a21c3 --- /dev/null +++ b/tests/baselines/reference/declFileAccessors.types @@ -0,0 +1,160 @@ +=== tests/cases/compiler/declFileAccessors_0.ts === + +/** This is comment for c1*/ +export class c1 { +>c1 : c1 + + /** getter property*/ + public get p3() { +>p3 : number + + return 10; + } + /** setter property*/ + public set p3(/** this is value*/value: number) { +>p3 : number +>value : number + } + /** private getter property*/ + private get pp3() { +>pp3 : number + + return 10; + } + /** private setter property*/ + private set pp3(/** this is value*/value: number) { +>pp3 : number +>value : number + } + /** static getter property*/ + static get s3() { +>s3 : number + + return 10; + } + /** setter property*/ + static set s3( /** this is value*/value: number) { +>s3 : number +>value : number + } + public get nc_p3() { +>nc_p3 : number + + return 10; + } + public set nc_p3(value: number) { +>nc_p3 : number +>value : number + } + private get nc_pp3() { +>nc_pp3 : number + + return 10; + } + private set nc_pp3(value: number) { +>nc_pp3 : number +>value : number + } + static get nc_s3() { +>nc_s3 : string + + return ""; + } + static set nc_s3(value: string) { +>nc_s3 : string +>value : string + } + + // Only getter property + public get onlyGetter() { +>onlyGetter : number + + return 10; + } + + // Only setter property + public set onlySetter(value: number) { +>onlySetter : number +>value : number + } +} + +=== tests/cases/compiler/declFileAccessors_1.ts === +/** This is comment for c2 - the global class*/ +class c2 { +>c2 : c2 + + /** getter property*/ + public get p3() { +>p3 : number + + return 10; + } + /** setter property*/ + public set p3(/** this is value*/value: number) { +>p3 : number +>value : number + } + /** private getter property*/ + private get pp3() { +>pp3 : number + + return 10; + } + /** private setter property*/ + private set pp3(/** this is value*/value: number) { +>pp3 : number +>value : number + } + /** static getter property*/ + static get s3() { +>s3 : number + + return 10; + } + /** setter property*/ + static set s3( /** this is value*/value: number) { +>s3 : number +>value : number + } + public get nc_p3() { +>nc_p3 : number + + return 10; + } + public set nc_p3(value: number) { +>nc_p3 : number +>value : number + } + private get nc_pp3() { +>nc_pp3 : number + + return 10; + } + private set nc_pp3(value: number) { +>nc_pp3 : number +>value : number + } + static get nc_s3() { +>nc_s3 : string + + return ""; + } + static set nc_s3(value: string) { +>nc_s3 : string +>value : string + } + + // Only getter property + public get onlyGetter() { +>onlyGetter : number + + return 10; + } + + // Only setter property + public set onlySetter(value: number) { +>onlySetter : number +>value : number + } +} diff --git a/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.js b/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.js index d8e729782f8..1a175c3483d 100644 --- a/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.js +++ b/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.js @@ -33,6 +33,6 @@ declare module "SubModule" { } } //// [declFileAmbientExternalModuleWithSingleExportedModule_1.d.ts] -/// +/// import SubModule = require('SubModule'); export declare var x: SubModule.m.m3.c; diff --git a/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.types b/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.types new file mode 100644 index 00000000000..420f1550d7a --- /dev/null +++ b/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/declFileAmbientExternalModuleWithSingleExportedModule_1.ts === +/// +import SubModule = require('SubModule'); +>SubModule : typeof SubModule + +export var x: SubModule.m.m3.c; +>x : SubModule.m.m3.c +>SubModule : unknown +>m : unknown +>m3 : unknown +>c : SubModule.m.m3.c + + +=== tests/cases/compiler/declFileAmbientExternalModuleWithSingleExportedModule_0.ts === + +declare module "SubModule" { + export module m { +>m : unknown + + export module m3 { +>m3 : unknown + + interface c { +>c : c + } + } + } +} + diff --git a/tests/baselines/reference/declFileCallSignatures.js b/tests/baselines/reference/declFileCallSignatures.js index bcf0f12cab8..2d4519b2090 100644 --- a/tests/baselines/reference/declFileCallSignatures.js +++ b/tests/baselines/reference/declFileCallSignatures.js @@ -71,10 +71,14 @@ interface IGlobalCallSignatureWithOwnTypeParametes { //// [declFileCallSignatures_0.d.ts] export interface ICallSignature { + /** This comment should appear for foo*/ (): string; } export interface ICallSignatureWithParameters { - (a: string, b: number): void; + /** This is comment for function signature*/ + (/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; } export interface ICallSignatureWithRestParameters { (a: string, ...rests: string[]): string; @@ -84,6 +88,7 @@ export interface ICallSignatureWithOverloads { (a: number): number; } export interface ICallSignatureWithTypeParameters { + /** This comment should appear for foo*/ (a: T): string; } export interface ICallSignatureWithOwnTypeParametes { @@ -91,10 +96,14 @@ export interface ICallSignatureWithOwnTypeParametes { } //// [declFileCallSignatures_1.d.ts] interface IGlobalCallSignature { + /** This comment should appear for foo*/ (): string; } interface IGlobalCallSignatureWithParameters { - (a: string, b: number): void; + /** This is comment for function signature*/ + (/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; } interface IGlobalCallSignatureWithRestParameters { (a: string, ...rests: string[]): string; @@ -104,6 +113,7 @@ interface IGlobalCallSignatureWithOverloads { (a: number): number; } interface IGlobalCallSignatureWithTypeParameters { + /** This comment should appear for foo*/ (a: T): string; } interface IGlobalCallSignatureWithOwnTypeParametes { diff --git a/tests/baselines/reference/declFileCallSignatures.types b/tests/baselines/reference/declFileCallSignatures.types new file mode 100644 index 00000000000..0fc0757aee1 --- /dev/null +++ b/tests/baselines/reference/declFileCallSignatures.types @@ -0,0 +1,117 @@ +=== tests/cases/compiler/declFileCallSignatures_0.ts === + +export interface ICallSignature { +>ICallSignature : ICallSignature + + /** This comment should appear for foo*/ + (): string; +} + +export interface ICallSignatureWithParameters { +>ICallSignatureWithParameters : ICallSignatureWithParameters + + /** This is comment for function signature*/ + (/** this is comment about a*/a: string, +>a : string + + /** this is comment for b*/ + b: number): void; +>b : number +} + +export interface ICallSignatureWithRestParameters { +>ICallSignatureWithRestParameters : ICallSignatureWithRestParameters + + (a: string, ...rests: string[]): string; +>a : string +>rests : string[] +} + +export interface ICallSignatureWithOverloads { +>ICallSignatureWithOverloads : ICallSignatureWithOverloads + + (a: string): string; +>a : string + + (a: number): number; +>a : number +} + +export interface ICallSignatureWithTypeParameters { +>ICallSignatureWithTypeParameters : ICallSignatureWithTypeParameters +>T : T + + /** This comment should appear for foo*/ + (a: T): string; +>a : T +>T : T +} + +export interface ICallSignatureWithOwnTypeParametes { +>ICallSignatureWithOwnTypeParametes : ICallSignatureWithOwnTypeParametes + + (a: T): string; +>T : T +>ICallSignature : ICallSignature +>a : T +>T : T +} + +=== tests/cases/compiler/declFileCallSignatures_1.ts === +interface IGlobalCallSignature { +>IGlobalCallSignature : IGlobalCallSignature + + /** This comment should appear for foo*/ + (): string; +} + +interface IGlobalCallSignatureWithParameters { +>IGlobalCallSignatureWithParameters : IGlobalCallSignatureWithParameters + + /** This is comment for function signature*/ + (/** this is comment about a*/a: string, +>a : string + + /** this is comment for b*/ + b: number): void; +>b : number +} + +interface IGlobalCallSignatureWithRestParameters { +>IGlobalCallSignatureWithRestParameters : IGlobalCallSignatureWithRestParameters + + (a: string, ...rests: string[]): string; +>a : string +>rests : string[] + +} + +interface IGlobalCallSignatureWithOverloads { +>IGlobalCallSignatureWithOverloads : IGlobalCallSignatureWithOverloads + + (a: string): string; +>a : string + + (a: number): number; +>a : number +} + +interface IGlobalCallSignatureWithTypeParameters { +>IGlobalCallSignatureWithTypeParameters : IGlobalCallSignatureWithTypeParameters +>T : T + + /** This comment should appear for foo*/ + (a: T): string; +>a : T +>T : T +} + +interface IGlobalCallSignatureWithOwnTypeParametes { +>IGlobalCallSignatureWithOwnTypeParametes : IGlobalCallSignatureWithOwnTypeParametes + + (a: T): string; +>T : T +>IGlobalCallSignature : IGlobalCallSignature +>a : T +>T : T +} diff --git a/tests/baselines/reference/declFileClassWithIndexSignature.types b/tests/baselines/reference/declFileClassWithIndexSignature.types new file mode 100644 index 00000000000..16aa108c3c1 --- /dev/null +++ b/tests/baselines/reference/declFileClassWithIndexSignature.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/declFileClassWithIndexSignature.ts === + +class BlockIntrinsics { +>BlockIntrinsics : BlockIntrinsics + + [s: string]: string; +>s : string +} diff --git a/tests/baselines/reference/declFileClassWithStaticMethodReturningConstructor.types b/tests/baselines/reference/declFileClassWithStaticMethodReturningConstructor.types new file mode 100644 index 00000000000..0f1b21efc9e --- /dev/null +++ b/tests/baselines/reference/declFileClassWithStaticMethodReturningConstructor.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/declFileClassWithStaticMethodReturningConstructor.ts === + +export class Enhancement { +>Enhancement : Enhancement + + public static getType() { +>getType : () => typeof Enhancement + + return this; +>this : typeof Enhancement + } +} diff --git a/tests/baselines/reference/declFileConstructSignatures.js b/tests/baselines/reference/declFileConstructSignatures.js index d59e937d47b..ae756e32eed 100644 --- a/tests/baselines/reference/declFileConstructSignatures.js +++ b/tests/baselines/reference/declFileConstructSignatures.js @@ -71,10 +71,14 @@ interface IGlobalConstructSignatureWithOwnTypeParametes { //// [declFileConstructSignatures_0.d.ts] export interface IConstructSignature { + /** This comment should appear for foo*/ new (): string; } export interface IConstructSignatureWithParameters { - new (a: string, b: number): any; + /** This is comment for function signature*/ + new (/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): any; } export interface IConstructSignatureWithRestParameters { new (a: string, ...rests: string[]): string; @@ -84,6 +88,7 @@ export interface IConstructSignatureWithOverloads { new (a: number): number; } export interface IConstructSignatureWithTypeParameters { + /** This comment should appear for foo*/ new (a: T): T; } export interface IConstructSignatureWithOwnTypeParametes { @@ -91,10 +96,14 @@ export interface IConstructSignatureWithOwnTypeParametes { } //// [declFileConstructSignatures_1.d.ts] interface IGlobalConstructSignature { + /** This comment should appear for foo*/ new (): string; } interface IGlobalConstructSignatureWithParameters { - new (a: string, b: number): any; + /** This is comment for function signature*/ + new (/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): any; } interface IGlobalConstructSignatureWithRestParameters { new (a: string, ...rests: string[]): string; @@ -104,6 +113,7 @@ interface IGlobalConstructSignatureWithOverloads { new (a: number): number; } interface IGlobalConstructSignatureWithTypeParameters { + /** This comment should appear for foo*/ new (a: T): T; } interface IGlobalConstructSignatureWithOwnTypeParametes { diff --git a/tests/baselines/reference/declFileConstructSignatures.types b/tests/baselines/reference/declFileConstructSignatures.types new file mode 100644 index 00000000000..6ee19bfdcf7 --- /dev/null +++ b/tests/baselines/reference/declFileConstructSignatures.types @@ -0,0 +1,121 @@ +=== tests/cases/compiler/declFileConstructSignatures_0.ts === + +export interface IConstructSignature { +>IConstructSignature : IConstructSignature + + /** This comment should appear for foo*/ + new (): string; +} + +export interface IConstructSignatureWithParameters { +>IConstructSignatureWithParameters : IConstructSignatureWithParameters + + /** This is comment for function signature*/ + new (/** this is comment about a*/a: string, +>a : string + + /** this is comment for b*/ + b: number); +>b : number +} + +export interface IConstructSignatureWithRestParameters { +>IConstructSignatureWithRestParameters : IConstructSignatureWithRestParameters + + new (a: string, ...rests: string[]): string; +>a : string +>rests : string[] +} + +export interface IConstructSignatureWithOverloads { +>IConstructSignatureWithOverloads : IConstructSignatureWithOverloads + + new (a: string): string; +>a : string + + new (a: number): number; +>a : number +} + +export interface IConstructSignatureWithTypeParameters { +>IConstructSignatureWithTypeParameters : IConstructSignatureWithTypeParameters +>T : T + + /** This comment should appear for foo*/ + new (a: T): T; +>a : T +>T : T +>T : T +} + +export interface IConstructSignatureWithOwnTypeParametes { +>IConstructSignatureWithOwnTypeParametes : IConstructSignatureWithOwnTypeParametes + + new (a: T): T; +>T : T +>IConstructSignature : IConstructSignature +>a : T +>T : T +>T : T +} + +=== tests/cases/compiler/declFileConstructSignatures_1.ts === +interface IGlobalConstructSignature { +>IGlobalConstructSignature : IGlobalConstructSignature + + /** This comment should appear for foo*/ + new (): string; +} + +interface IGlobalConstructSignatureWithParameters { +>IGlobalConstructSignatureWithParameters : IGlobalConstructSignatureWithParameters + + /** This is comment for function signature*/ + new (/** this is comment about a*/a: string, +>a : string + + /** this is comment for b*/ + b: number); +>b : number +} + +interface IGlobalConstructSignatureWithRestParameters { +>IGlobalConstructSignatureWithRestParameters : IGlobalConstructSignatureWithRestParameters + + new (a: string, ...rests: string[]): string; +>a : string +>rests : string[] + +} + +interface IGlobalConstructSignatureWithOverloads { +>IGlobalConstructSignatureWithOverloads : IGlobalConstructSignatureWithOverloads + + new (a: string): string; +>a : string + + new (a: number): number; +>a : number +} + +interface IGlobalConstructSignatureWithTypeParameters { +>IGlobalConstructSignatureWithTypeParameters : IGlobalConstructSignatureWithTypeParameters +>T : T + + /** This comment should appear for foo*/ + new (a: T): T; +>a : T +>T : T +>T : T +} + +interface IGlobalConstructSignatureWithOwnTypeParametes { +>IGlobalConstructSignatureWithOwnTypeParametes : IGlobalConstructSignatureWithOwnTypeParametes + + new (a: T): T; +>T : T +>IGlobalConstructSignature : IGlobalConstructSignature +>a : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/declFileConstructors.js b/tests/baselines/reference/declFileConstructors.js index 57e63d85fe2..327221debf8 100644 --- a/tests/baselines/reference/declFileConstructors.js +++ b/tests/baselines/reference/declFileConstructors.js @@ -99,13 +99,17 @@ class GlobalConstructorWithParameterInitializer { //// [declFileConstructors_0.js] var SimpleConstructor = (function () { + /** This comment should appear for foo*/ function SimpleConstructor() { } return SimpleConstructor; })(); exports.SimpleConstructor = SimpleConstructor; var ConstructorWithParameters = (function () { - function ConstructorWithParameters(a, b) { + /** This is comment for function signature*/ + function ConstructorWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; } return ConstructorWithParameters; @@ -159,12 +163,16 @@ var ConstructorWithParameterInitializer = (function () { exports.ConstructorWithParameterInitializer = ConstructorWithParameterInitializer; //// [declFileConstructors_1.js] var GlobalSimpleConstructor = (function () { + /** This comment should appear for foo*/ function GlobalSimpleConstructor() { } return GlobalSimpleConstructor; })(); var GlobalConstructorWithParameters = (function () { - function GlobalConstructorWithParameters(a, b) { + /** This is comment for function signature*/ + function GlobalConstructorWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; } return GlobalConstructorWithParameters; @@ -213,10 +221,14 @@ var GlobalConstructorWithParameterInitializer = (function () { //// [declFileConstructors_0.d.ts] export declare class SimpleConstructor { + /** This comment should appear for foo*/ constructor(); } export declare class ConstructorWithParameters { - constructor(a: string, b: number); + /** This is comment for function signature*/ + constructor(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number); } export declare class ConstructorWithRestParamters { constructor(a: string, ...rests: string[]); @@ -243,10 +255,14 @@ export declare class ConstructorWithParameterInitializer { } //// [declFileConstructors_1.d.ts] declare class GlobalSimpleConstructor { + /** This comment should appear for foo*/ constructor(); } declare class GlobalConstructorWithParameters { - constructor(a: string, b: number); + /** This is comment for function signature*/ + constructor(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number); } declare class GlobalConstructorWithRestParamters { constructor(a: string, ...rests: string[]); diff --git a/tests/baselines/reference/declFileConstructors.types b/tests/baselines/reference/declFileConstructors.types new file mode 100644 index 00000000000..723830bdeea --- /dev/null +++ b/tests/baselines/reference/declFileConstructors.types @@ -0,0 +1,176 @@ +=== tests/cases/compiler/declFileConstructors_0.ts === + +export class SimpleConstructor { +>SimpleConstructor : SimpleConstructor + + /** This comment should appear for foo*/ + constructor() { + } +} +export class ConstructorWithParameters { +>ConstructorWithParameters : ConstructorWithParameters + + /** This is comment for function signature*/ + constructor(/** this is comment about a*/a: string, +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } +} + +export class ConstructorWithRestParamters { +>ConstructorWithRestParamters : ConstructorWithRestParamters + + constructor(a: string, ...rests: string[]) { +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } +} + +export class ConstructorWithOverloads { +>ConstructorWithOverloads : ConstructorWithOverloads + + constructor(a: string); +>a : string + + constructor(a: number); +>a : number + + constructor(a: any) { +>a : any + } +} + +export class ConstructorWithPublicParameterProperty { +>ConstructorWithPublicParameterProperty : ConstructorWithPublicParameterProperty + + constructor(public x: string) { +>x : string + } +} + +export class ConstructorWithPrivateParameterProperty { +>ConstructorWithPrivateParameterProperty : ConstructorWithPrivateParameterProperty + + constructor(private x: string) { +>x : string + } +} + +export class ConstructorWithOptionalParameterProperty { +>ConstructorWithOptionalParameterProperty : ConstructorWithOptionalParameterProperty + + constructor(public x?: string) { +>x : string + } +} + +export class ConstructorWithParameterInitializer { +>ConstructorWithParameterInitializer : ConstructorWithParameterInitializer + + constructor(public x = "hello") { +>x : string + } +} + +=== tests/cases/compiler/declFileConstructors_1.ts === +class GlobalSimpleConstructor { +>GlobalSimpleConstructor : GlobalSimpleConstructor + + /** This comment should appear for foo*/ + constructor() { + } +} +class GlobalConstructorWithParameters { +>GlobalConstructorWithParameters : GlobalConstructorWithParameters + + /** This is comment for function signature*/ + constructor(/** this is comment about a*/a: string, +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } +} + +class GlobalConstructorWithRestParamters { +>GlobalConstructorWithRestParamters : GlobalConstructorWithRestParamters + + constructor(a: string, ...rests: string[]) { +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } +} + +class GlobalConstructorWithOverloads { +>GlobalConstructorWithOverloads : GlobalConstructorWithOverloads + + constructor(a: string); +>a : string + + constructor(a: number); +>a : number + + constructor(a: any) { +>a : any + } +} + +class GlobalConstructorWithPublicParameterProperty { +>GlobalConstructorWithPublicParameterProperty : GlobalConstructorWithPublicParameterProperty + + constructor(public x: string) { +>x : string + } +} + +class GlobalConstructorWithPrivateParameterProperty { +>GlobalConstructorWithPrivateParameterProperty : GlobalConstructorWithPrivateParameterProperty + + constructor(private x: string) { +>x : string + } +} + +class GlobalConstructorWithOptionalParameterProperty { +>GlobalConstructorWithOptionalParameterProperty : GlobalConstructorWithOptionalParameterProperty + + constructor(public x?: string) { +>x : string + } +} + +class GlobalConstructorWithParameterInitializer { +>GlobalConstructorWithParameterInitializer : GlobalConstructorWithParameterInitializer + + constructor(public x = "hello") { +>x : string + } +} diff --git a/tests/baselines/reference/declFileEnumUsedAsValue.types b/tests/baselines/reference/declFileEnumUsedAsValue.types new file mode 100644 index 00000000000..19aa3de4331 --- /dev/null +++ b/tests/baselines/reference/declFileEnumUsedAsValue.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/declFileEnumUsedAsValue.ts === + +enum e { +>e : e + + a, +>a : e + + b, +>b : e + + c +>c : e +} +var x = e; +>x : typeof e +>e : typeof e + diff --git a/tests/baselines/reference/declFileEnums.types b/tests/baselines/reference/declFileEnums.types new file mode 100644 index 00000000000..d4d7230e930 --- /dev/null +++ b/tests/baselines/reference/declFileEnums.types @@ -0,0 +1,78 @@ +=== tests/cases/compiler/declFileEnums.ts === + +enum e1 { +>e1 : e1 + + a, +>a : e1 + + b, +>b : e1 + + c +>c : e1 +} + +enum e2 { +>e2 : e2 + + a = 10, +>a : e2 + + b = a + 2, +>b : e2 +>a + 2 : number +>a : e2 + + c = 10, +>c : e2 +} + +enum e3 { +>e3 : e3 + + a = 10, +>a : e3 + + b = Math.PI, +>b : e3 +>Math.PI : number +>Math : Math +>PI : number + + c = a + 3 +>c : e3 +>a + 3 : number +>a : e3 +} + +enum e4 { +>e4 : e4 + + a, +>a : e4 + + b, +>b : e4 + + c, +>c : e4 + + d = 10, +>d : e4 + + e +>e : e4 +} + +enum e5 { +>e5 : e5 + + "Friday", + "Saturday", + "Sunday", + "Weekend days" +} + + + diff --git a/tests/baselines/reference/declFileExportAssignmentImportInternalModule.types b/tests/baselines/reference/declFileExportAssignmentImportInternalModule.types new file mode 100644 index 00000000000..e0bf172e584 --- /dev/null +++ b/tests/baselines/reference/declFileExportAssignmentImportInternalModule.types @@ -0,0 +1,58 @@ +=== tests/cases/compiler/declFileExportAssignmentImportInternalModule.ts === +module m3 { +>m3 : typeof m3 + + export module m2 { +>m2 : unknown + + export interface connectModule { +>connectModule : connectModule + + (res, req, next): void; +>res : any +>req : any +>next : any + } + export interface connectExport { +>connectExport : connectExport + + use: (mod: connectModule) => connectExport; +>use : (mod: connectModule) => connectExport +>mod : connectModule +>connectModule : connectModule +>connectExport : connectExport + + listen: (port: number) => void; +>listen : (port: number) => void +>port : number + } + + } + + export var server: { +>server : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } + + (): m2.connectExport; +>m2 : unknown +>connectExport : m2.connectExport + + test1: m2.connectModule; +>test1 : m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + + test2(): m2.connectModule; +>test2 : () => m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + + }; +} + +import m = m3 +>m : typeof m3 +>m3 : typeof m3 + +export = m; +>m : typeof m3 + diff --git a/tests/baselines/reference/declFileExportAssignmentOfGenericInterface.types b/tests/baselines/reference/declFileExportAssignmentOfGenericInterface.types new file mode 100644 index 00000000000..1d77f8ee7a3 --- /dev/null +++ b/tests/baselines/reference/declFileExportAssignmentOfGenericInterface.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/declFileExportAssignmentOfGenericInterface_1.ts === +import a = require('declFileExportAssignmentOfGenericInterface_0'); +>a : unknown + +export var x: a>; +>x : a> +>a : a +>a : a + +x.a; +>x.a : string +>x : a> +>a : string + +=== tests/cases/compiler/declFileExportAssignmentOfGenericInterface_0.ts === + +interface Foo { +>Foo : Foo +>T : T + + a: string; +>a : string +} +export = Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/declFileExportImportChain.types b/tests/baselines/reference/declFileExportImportChain.types new file mode 100644 index 00000000000..df71d32d4d9 --- /dev/null +++ b/tests/baselines/reference/declFileExportImportChain.types @@ -0,0 +1,43 @@ +=== tests/cases/compiler/declFileExportImportChain_d.ts === +import c = require("declFileExportImportChain_c"); +>c : typeof c + +export var x: c.b1.a.m2.c1; +>x : c.b1.a.m2.c1 +>c : unknown +>b1 : unknown +>a : unknown +>m2 : unknown +>c1 : c.b1.a.m2.c1 + +=== tests/cases/compiler/declFileExportImportChain_a.ts === + +module m1 { +>m1 : typeof m1 + + export module m2 { +>m2 : typeof m2 + + export class c1 { +>c1 : c1 + } + } +} +export = m1; +>m1 : typeof m1 + +=== tests/cases/compiler/declFileExportImportChain_b.ts === +export import a = require("declFileExportImportChain_a"); +>a : typeof a + +=== tests/cases/compiler/declFileExportImportChain_b1.ts === +import b = require("declFileExportImportChain_b"); +>b : typeof b + +export = b; +>b : typeof b + +=== tests/cases/compiler/declFileExportImportChain_c.ts === +export import b1 = require("declFileExportImportChain_b1"); +>b1 : typeof b1 + diff --git a/tests/baselines/reference/declFileExportImportChain2.types b/tests/baselines/reference/declFileExportImportChain2.types new file mode 100644 index 00000000000..a0e3f1c31a1 --- /dev/null +++ b/tests/baselines/reference/declFileExportImportChain2.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/declFileExportImportChain2_d.ts === +import c = require("declFileExportImportChain2_c"); +>c : typeof c + +export var x: c.b.m2.c1; +>x : c.b.m2.c1 +>c : unknown +>b : unknown +>m2 : unknown +>c1 : c.b.m2.c1 + +=== tests/cases/compiler/declFileExportImportChain2_a.ts === + +module m1 { +>m1 : typeof m1 + + export module m2 { +>m2 : typeof m2 + + export class c1 { +>c1 : c1 + } + } +} +export = m1; +>m1 : typeof m1 + +=== tests/cases/compiler/declFileExportImportChain2_b.ts === +import a = require("declFileExportImportChain2_a"); +>a : typeof a + +export = a; +>a : typeof a + +=== tests/cases/compiler/declFileExportImportChain2_c.ts === +export import b = require("declFileExportImportChain2_b"); +>b : typeof b + diff --git a/tests/baselines/reference/declFileForClassWithMultipleBaseClasses.types b/tests/baselines/reference/declFileForClassWithMultipleBaseClasses.types new file mode 100644 index 00000000000..0f7861d8b8e --- /dev/null +++ b/tests/baselines/reference/declFileForClassWithMultipleBaseClasses.types @@ -0,0 +1,54 @@ +=== tests/cases/compiler/declFileForClassWithMultipleBaseClasses.ts === + +class A { +>A : A + + foo() { } +>foo : () => void +} + +class B { +>B : B + + bar() { } +>bar : () => void +} + +interface I { +>I : I + + baz(); +>baz : () => any +} + +interface J { +>J : J + + bat(); +>bat : () => any +} + + +class D implements I, J { +>D : D +>I : I +>J : J + + baz() { } +>baz : () => void + + bat() { } +>bat : () => void + + foo() { } +>foo : () => void + + bar() { } +>bar : () => void +} + +interface I extends A, B { +>I : I +>A : A +>B : B +} diff --git a/tests/baselines/reference/declFileForClassWithPrivateOverloadedFunction.types b/tests/baselines/reference/declFileForClassWithPrivateOverloadedFunction.types new file mode 100644 index 00000000000..efdfde4574c --- /dev/null +++ b/tests/baselines/reference/declFileForClassWithPrivateOverloadedFunction.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/declFileForClassWithPrivateOverloadedFunction.ts === + +class C { +>C : C + + private foo(x: number); +>foo : { (x: number): any; (x: string): any; } +>x : number + + private foo(x: string); +>foo : { (x: number): any; (x: string): any; } +>x : string + + private foo(x: any) { } +>foo : { (x: number): any; (x: string): any; } +>x : any +} diff --git a/tests/baselines/reference/declFileForExportedImport.js b/tests/baselines/reference/declFileForExportedImport.js index 2934d3e7b73..0575ea7bfd0 100644 --- a/tests/baselines/reference/declFileForExportedImport.js +++ b/tests/baselines/reference/declFileForExportedImport.js @@ -14,6 +14,7 @@ var z = b.x; //// [declFileForExportedImport_0.js] exports.x; //// [declFileForExportedImport_1.js] +/// exports.a = require('declFileForExportedImport_0'); var y = exports.a.x; exports.b = exports.a; @@ -23,6 +24,6 @@ var z = exports.b.x; //// [declFileForExportedImport_0.d.ts] export declare var x: number; //// [declFileForExportedImport_1.d.ts] -/// +/// export import a = require('declFileForExportedImport_0'); export import b = a; diff --git a/tests/baselines/reference/declFileForExportedImport.types b/tests/baselines/reference/declFileForExportedImport.types new file mode 100644 index 00000000000..987f82bf5a0 --- /dev/null +++ b/tests/baselines/reference/declFileForExportedImport.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/declFileForExportedImport_1.ts === +/// +export import a = require('declFileForExportedImport_0'); +>a : typeof a + +var y = a.x; +>y : number +>a.x : number +>a : typeof a +>x : number + +export import b = a; +>b : typeof a +>a : typeof a + +var z = b.x; +>z : number +>b.x : number +>b : typeof a +>x : number + +=== tests/cases/compiler/declFileForExportedImport_0.ts === +export var x: number; +>x : number + diff --git a/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types b/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types new file mode 100644 index 00000000000..5f759fb423f --- /dev/null +++ b/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/declFileForFunctionTypeAsTypeParameter.ts === + +class X { +>X : X +>T : T +} +class C extends X<() => number> { +>C : C +>X : X +} +interface I extends X<() => number> { +>I : I +>X : X +} + + diff --git a/tests/baselines/reference/declFileForInterfaceWithOptionalFunction.types b/tests/baselines/reference/declFileForInterfaceWithOptionalFunction.types new file mode 100644 index 00000000000..fab33c939cf --- /dev/null +++ b/tests/baselines/reference/declFileForInterfaceWithOptionalFunction.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/declFileForInterfaceWithOptionalFunction.ts === + +interface I { +>I : I + + foo? (x?); +>foo : (x?: any) => any +>x : any + + foo2? (x?: number): number; +>foo2 : (x?: number) => number +>x : number +} diff --git a/tests/baselines/reference/declFileForInterfaceWithRestParams.types b/tests/baselines/reference/declFileForInterfaceWithRestParams.types new file mode 100644 index 00000000000..817e118fb6c --- /dev/null +++ b/tests/baselines/reference/declFileForInterfaceWithRestParams.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/declFileForInterfaceWithRestParams.ts === + +interface I { +>I : I + + foo(...x): typeof x; +>foo : (...x: any[]) => any[] +>x : any[] +>x : any[] + + foo2(a: number, ...x): typeof x; +>foo2 : (a: number, ...x: any[]) => any[] +>a : number +>x : any[] +>x : any[] + + foo3(b: string, ...x: string[]): typeof x; +>foo3 : (b: string, ...x: string[]) => string[] +>b : string +>x : string[] +>x : string[] +} diff --git a/tests/baselines/reference/declFileForTypeParameters.types b/tests/baselines/reference/declFileForTypeParameters.types new file mode 100644 index 00000000000..6308a0c92ba --- /dev/null +++ b/tests/baselines/reference/declFileForTypeParameters.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/declFileForTypeParameters.ts === + +class C { +>C : C +>T : T + + x: T; +>x : T +>T : T + + foo(a: T): T { +>foo : (a: T) => T +>a : T +>T : T +>T : T + + return this.x; +>this.x : T +>this : C +>x : T + } +} diff --git a/tests/baselines/reference/declFileForVarList.types b/tests/baselines/reference/declFileForVarList.types new file mode 100644 index 00000000000..6e148efa1c2 --- /dev/null +++ b/tests/baselines/reference/declFileForVarList.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/declFileForVarList.ts === + +var x, y, z = 1; +>x : any +>y : any +>z : number + +var x1 = 1, y2 = 2, z2 = 3; +>x1 : number +>y2 : number +>z2 : number + diff --git a/tests/baselines/reference/declFileFunctions.js b/tests/baselines/reference/declFileFunctions.js index 4fd45e8aa7a..da1917163e1 100644 --- a/tests/baselines/reference/declFileFunctions.js +++ b/tests/baselines/reference/declFileFunctions.js @@ -21,6 +21,11 @@ export function fooWithOverloads(a: any): any { return a; } +export function fooWithSingleOverload(a: string): string; +export function fooWithSingleOverload(a: any) { + return a; +} + /** This comment should appear for nonExportedFoo*/ function nonExportedFoo() { } @@ -60,10 +65,14 @@ function globalfooWithOverloads(a: any): any { } //// [declFileFunctions_0.js] +/** This comment should appear for foo*/ function foo() { } exports.foo = foo; -function fooWithParameters(a, b) { +/** This is comment for function signature*/ +function fooWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; } exports.fooWithParameters = fooWithParameters; @@ -79,9 +88,17 @@ function fooWithOverloads(a) { return a; } exports.fooWithOverloads = fooWithOverloads; +function fooWithSingleOverload(a) { + return a; +} +exports.fooWithSingleOverload = fooWithSingleOverload; +/** This comment should appear for nonExportedFoo*/ function nonExportedFoo() { } -function nonExportedFooWithParameters(a, b) { +/** This is comment for function signature*/ +function nonExportedFooWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; } function nonExportedFooWithRestParameters(a) { @@ -95,9 +112,13 @@ function nonExportedFooWithOverloads(a) { return a; } //// [declFileFunctions_1.js] +/** This comment should appear for foo*/ function globalfoo() { } -function globalfooWithParameters(a, b) { +/** This is comment for function signature*/ +function globalfooWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; } function globalfooWithRestParameters(a) { @@ -113,14 +134,23 @@ function globalfooWithOverloads(a) { //// [declFileFunctions_0.d.ts] +/** This comment should appear for foo*/ export declare function foo(): void; -export declare function fooWithParameters(a: string, b: number): void; +/** This is comment for function signature*/ +export declare function fooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; export declare function fooWithRestParameters(a: string, ...rests: string[]): string; export declare function fooWithOverloads(a: string): string; export declare function fooWithOverloads(a: number): number; +export declare function fooWithSingleOverload(a: string): string; //// [declFileFunctions_1.d.ts] +/** This comment should appear for foo*/ declare function globalfoo(): void; -declare function globalfooWithParameters(a: string, b: number): void; +/** This is comment for function signature*/ +declare function globalfooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; declare function globalfooWithRestParameters(a: string, ...rests: string[]): string; declare function globalfooWithOverloads(a: string): string; declare function globalfooWithOverloads(a: number): number; diff --git a/tests/baselines/reference/declFileFunctions.types b/tests/baselines/reference/declFileFunctions.types new file mode 100644 index 00000000000..bfbe658a758 --- /dev/null +++ b/tests/baselines/reference/declFileFunctions.types @@ -0,0 +1,154 @@ +=== tests/cases/compiler/declFileFunctions_0.ts === + +/** This comment should appear for foo*/ +export function foo() { +>foo : () => void +} +/** This is comment for function signature*/ +export function fooWithParameters(/** this is comment about a*/a: string, +>fooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string +} +export function fooWithRestParameters(a: string, ...rests: string[]) { +>fooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string +} + +export function fooWithOverloads(a: string): string; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + +export function fooWithOverloads(a: number): number; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + +export function fooWithOverloads(a: any): any { +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any +} + +export function fooWithSingleOverload(a: string): string; +>fooWithSingleOverload : (a: string) => string +>a : string + +export function fooWithSingleOverload(a: any) { +>fooWithSingleOverload : (a: string) => string +>a : any + + return a; +>a : any +} + +/** This comment should appear for nonExportedFoo*/ +function nonExportedFoo() { +>nonExportedFoo : () => void +} +/** This is comment for function signature*/ +function nonExportedFooWithParameters(/** this is comment about a*/a: string, +>nonExportedFooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string +} +function nonExportedFooWithRestParameters(a: string, ...rests: string[]) { +>nonExportedFooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string +} + +function nonExportedFooWithOverloads(a: string): string; +>nonExportedFooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + +function nonExportedFooWithOverloads(a: number): number; +>nonExportedFooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + +function nonExportedFooWithOverloads(a: any): any { +>nonExportedFooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any +} + +=== tests/cases/compiler/declFileFunctions_1.ts === +/** This comment should appear for foo*/ +function globalfoo() { +>globalfoo : () => void +} +/** This is comment for function signature*/ +function globalfooWithParameters(/** this is comment about a*/a: string, +>globalfooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string +} +function globalfooWithRestParameters(a: string, ...rests: string[]) { +>globalfooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string +} +function globalfooWithOverloads(a: string): string; +>globalfooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + +function globalfooWithOverloads(a: number): number; +>globalfooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + +function globalfooWithOverloads(a: any): any { +>globalfooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any +} diff --git a/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types b/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types new file mode 100644 index 00000000000..27fed37c21b --- /dev/null +++ b/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/declFileGenericClassWithGenericExtendedClass.ts === +interface IFoo { +>IFoo : IFoo + + baz: Baz; +>baz : Baz +>Baz : Baz +} +class Base { } +>Base : Base +>T : T + +class Derived extends Base { } +>Derived : Derived +>T : T +>Base : Base +>T : T + +interface IBar { +>IBar : IBar +>T : T + + derived: Derived; +>derived : Derived +>Derived : Derived +>T : T +} +class Baz implements IBar { +>Baz : Baz +>IBar : IBar +>Baz : Baz + + derived: Derived; +>derived : Derived +>Derived : Derived +>Baz : Baz +} + diff --git a/tests/baselines/reference/declFileGenericType.types b/tests/baselines/reference/declFileGenericType.types new file mode 100644 index 00000000000..284ce8f475b --- /dev/null +++ b/tests/baselines/reference/declFileGenericType.types @@ -0,0 +1,167 @@ +=== tests/cases/compiler/declFileGenericType.ts === +export module C { +>C : typeof C + + export class A{ } +>A : A +>T : T + + export class B { } +>B : B + + export function F(x: T): A { return null; } +>F : (x: T) => A +>T : T +>x : T +>T : T +>A : A +>B : B + + export function F2(x: T): C.A { return null; } +>F2 : (x: T) => A +>T : T +>x : T +>T : T +>C : unknown +>A : A +>C : unknown +>B : B + + export function F3(x: T): C.A[] { return null; } +>F3 : (x: T) => A[] +>T : T +>x : T +>T : T +>C : unknown +>A : A +>C : unknown +>B : B + + export function F4>(x: T): Array> { return null; } +>F4 : >(x: T) => A[] +>T : T +>A : A +>B : B +>x : T +>T : T +>Array : T[] +>C : unknown +>A : A +>C : unknown +>B : B + + export function F5(): T { return null; } +>F5 : () => T +>T : T +>T : T + + export function F6>(x: T): T { return null; } +>F6 : >(x: T) => T +>T : T +>A : A +>B : B +>x : T +>T : T +>T : T + + export class D{ +>D : D +>T : T + + constructor(public val: T) { } +>val : T +>T : T + + } +} + +export var a: C.A; +>a : C.A +>C : unknown +>A : C.A +>C : unknown +>B : C.B + +export var b = C.F; +>b : (x: T) => C.A +>C.F : (x: T) => C.A +>C : typeof C +>F : (x: T) => C.A + +export var c = C.F2; +>c : (x: T) => C.A +>C.F2 : (x: T) => C.A +>C : typeof C +>F2 : (x: T) => C.A + +export var d = C.F3; +>d : (x: T) => C.A[] +>C.F3 : (x: T) => C.A[] +>C : typeof C +>F3 : (x: T) => C.A[] + +export var e = C.F4; +>e : >(x: T) => C.A[] +>C.F4 : >(x: T) => C.A[] +>C : typeof C +>F4 : >(x: T) => C.A[] + +export var x = (new C.D>(new C.A())).val; +>x : C.A +>(new C.D>(new C.A())).val : C.A +>(new C.D>(new C.A())) : C.D> +>new C.D>(new C.A()) : C.D> +>C.D : typeof C.D +>C : typeof C +>D : typeof C.D +>C : unknown +>A : C.A +>C : unknown +>B : C.B +>new C.A() : C.A +>C.A : typeof C.A +>C : typeof C +>A : typeof C.A +>C : unknown +>B : C.B +>val : C.A + +export function f>() { } +>f : >() => void +>T : T +>C : unknown +>A : C.A +>C : unknown +>B : C.B + +export var g = C.F5>(); +>g : C.A +>C.F5>() : C.A +>C.F5 : () => T +>C : typeof C +>F5 : () => T +>C : unknown +>A : C.A +>C : unknown +>B : C.B + +export class h extends C.A{ } +>h : h +>C : unknown +>A : C.A +>C : unknown +>B : C.B + +export interface i extends C.A { } +>i : i +>C : unknown +>A : C.A +>C : unknown +>B : C.B + +export var j = C.F6; +>j : >(x: T) => T +>C.F6 : >(x: T) => T +>C : typeof C +>F6 : >(x: T) => T + diff --git a/tests/baselines/reference/declFileGenericType2.js b/tests/baselines/reference/declFileGenericType2.js index dd751feeaae..c2b8c2baaa3 100644 --- a/tests/baselines/reference/declFileGenericType2.js +++ b/tests/baselines/reference/declFileGenericType2.js @@ -49,6 +49,7 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; +// Module var templa; (function (templa) { (function (dom) { @@ -66,6 +67,7 @@ var templa; })(templa.dom || (templa.dom = {})); var dom = templa.dom; })(templa || (templa = {})); +// Module var templa; (function (templa) { (function (dom) { diff --git a/tests/baselines/reference/declFileGenericType2.types b/tests/baselines/reference/declFileGenericType2.types new file mode 100644 index 00000000000..a6b6546326c --- /dev/null +++ b/tests/baselines/reference/declFileGenericType2.types @@ -0,0 +1,142 @@ +=== tests/cases/compiler/declFileGenericType2.ts === + +declare module templa.mvc { +>templa : typeof templa +>mvc : typeof mvc + + interface IModel { +>IModel : IModel + } +} +declare module templa.mvc { +>templa : typeof templa +>mvc : typeof mvc + + interface IController { +>IController : IController +>ModelType : ModelType +>templa : unknown +>mvc : unknown +>IModel : IModel + } +} +declare module templa.mvc { +>templa : typeof templa +>mvc : typeof mvc + + class AbstractController implements mvc.IController { +>AbstractController : AbstractController +>ModelType : ModelType +>templa : unknown +>mvc : unknown +>IModel : IModel +>mvc : unknown +>IController : IController +>ModelType : ModelType + } +} +declare module templa.mvc.composite { +>templa : typeof templa +>mvc : typeof mvc +>composite : unknown + + interface ICompositeControllerModel extends mvc.IModel { +>ICompositeControllerModel : ICompositeControllerModel +>mvc : unknown +>IModel : IModel + + getControllers(): mvc.IController[]; +>getControllers : () => IController[] +>mvc : unknown +>IController : IController +>mvc : unknown +>IModel : IModel + } +} +module templa.dom.mvc { +>templa : typeof templa +>dom : typeof dom +>mvc : typeof mvc + + export interface IElementController extends templa.mvc.IController { +>IElementController : IElementController +>ModelType : ModelType +>templa : unknown +>mvc : unknown +>IModel : templa.mvc.IModel +>templa : unknown +>mvc : unknown +>IController : templa.mvc.IController +>ModelType : ModelType + } +} +// Module +module templa.dom.mvc { +>templa : typeof templa +>dom : typeof dom +>mvc : typeof mvc + + export class AbstractElementController extends templa.mvc.AbstractController implements IElementController { +>AbstractElementController : AbstractElementController +>ModelType : ModelType +>templa : unknown +>mvc : unknown +>IModel : templa.mvc.IModel +>templa : unknown +>mvc : unknown +>AbstractController : templa.mvc.AbstractController +>ModelType : ModelType +>IElementController : IElementController +>ModelType : ModelType + + constructor() { + super(); +>super() : void +>super : typeof templa.mvc.AbstractController + } + } +} +// Module +module templa.dom.mvc.composite { +>templa : typeof templa +>dom : typeof dom +>mvc : typeof mvc +>composite : typeof composite + + export class AbstractCompositeElementController extends templa.dom.mvc.AbstractElementController { +>AbstractCompositeElementController : AbstractCompositeElementController +>ModelType : ModelType +>templa : unknown +>mvc : unknown +>composite : unknown +>ICompositeControllerModel : templa.mvc.composite.ICompositeControllerModel +>templa : unknown +>dom : unknown +>mvc : unknown +>AbstractElementController : AbstractElementController +>ModelType : ModelType + + public _controllers: templa.mvc.IController[]; +>_controllers : templa.mvc.IController[] +>templa : unknown +>mvc : unknown +>IController : templa.mvc.IController +>templa : unknown +>mvc : unknown +>IModel : templa.mvc.IModel + + constructor() { + super(); +>super() : void +>super : typeof AbstractElementController + + this._controllers = []; +>this._controllers = [] : templa.mvc.IController[] +>this._controllers : templa.mvc.IController[] +>this : AbstractCompositeElementController +>_controllers : templa.mvc.IController[] +>[] : templa.mvc.IController[] + } + } +} + diff --git a/tests/baselines/reference/declFileImportChainInExportAssignment.types b/tests/baselines/reference/declFileImportChainInExportAssignment.types new file mode 100644 index 00000000000..8cb130c638c --- /dev/null +++ b/tests/baselines/reference/declFileImportChainInExportAssignment.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/declFileImportChainInExportAssignment.ts === +module m { +>m : typeof m + + export module c { +>c : typeof m.c + + export class c { +>c : c + } + } +} +import a = m.c; +>a : typeof a +>m : typeof m +>c : typeof a + +import b = a; +>b : typeof a +>a : typeof a + +export = b; +>b : typeof a + diff --git a/tests/baselines/reference/declFileImportModuleWithExportAssignment.js b/tests/baselines/reference/declFileImportModuleWithExportAssignment.js index c07ac176806..145d4ad3ff2 100644 --- a/tests/baselines/reference/declFileImportModuleWithExportAssignment.js +++ b/tests/baselines/reference/declFileImportModuleWithExportAssignment.js @@ -30,6 +30,7 @@ a.test1(null, null, null); var m2; module.exports = m2; //// [declFileImportModuleWithExportAssignment_1.js] +/**This is on import declaration*/ var a1 = require("declFileImportModuleWithExportAssignment_0"); exports.a = a1; exports.a.test1(null, null, null); @@ -52,6 +53,7 @@ declare var m2: { }; export = m2; //// [declFileImportModuleWithExportAssignment_1.d.ts] +/**This is on import declaration*/ import a1 = require("declFileImportModuleWithExportAssignment_0"); export declare var a: { (): a1.connectExport; diff --git a/tests/baselines/reference/declFileImportModuleWithExportAssignment.types b/tests/baselines/reference/declFileImportModuleWithExportAssignment.types new file mode 100644 index 00000000000..15201baa487 --- /dev/null +++ b/tests/baselines/reference/declFileImportModuleWithExportAssignment.types @@ -0,0 +1,64 @@ +=== tests/cases/compiler/declFileImportModuleWithExportAssignment_1.ts === +/**This is on import declaration*/ +import a1 = require("declFileImportModuleWithExportAssignment_0"); +>a1 : { (): a1.connectExport; test1: a1.connectModule; test2(): a1.connectModule; } + +export var a = a1; +>a : { (): a1.connectExport; test1: a1.connectModule; test2(): a1.connectModule; } +>a1 : { (): a1.connectExport; test1: a1.connectModule; test2(): a1.connectModule; } + +a.test1(null, null, null); +>a.test1(null, null, null) : void +>a.test1 : a1.connectModule +>a : { (): a1.connectExport; test1: a1.connectModule; test2(): a1.connectModule; } +>test1 : a1.connectModule + +=== tests/cases/compiler/declFileImportModuleWithExportAssignment_0.ts === + +module m2 { +>m2 : { (): connectExport; test1: connectModule; test2(): connectModule; } + + export interface connectModule { +>connectModule : connectModule + + (res, req, next): void; +>res : any +>req : any +>next : any + } + export interface connectExport { +>connectExport : connectExport + + use: (mod: connectModule) => connectExport; +>use : (mod: connectModule) => connectExport +>mod : connectModule +>connectModule : connectModule +>connectExport : connectExport + + listen: (port: number) => void; +>listen : (port: number) => void +>port : number + } + +} +var m2: { +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } + + (): m2.connectExport; +>m2 : unknown +>connectExport : m2.connectExport + + test1: m2.connectModule; +>test1 : m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + + test2(): m2.connectModule; +>test2 : () => m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + +}; +export = m2; +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } + diff --git a/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types b/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types new file mode 100644 index 00000000000..f5d443d0c57 --- /dev/null +++ b/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/declFileImportedTypeUseInTypeArgPosition.ts === +class List { } +>List : List +>T : T + +declare module 'mod1' { + class Foo { +>Foo : Foo + } +} + +declare module 'moo' { + import x = require('mod1'); +>x : typeof x + + export var p: List; +>p : List +>List : List +>x : unknown +>Foo : x.Foo +} + + + diff --git a/tests/baselines/reference/declFileIndexSignatures.types b/tests/baselines/reference/declFileIndexSignatures.types new file mode 100644 index 00000000000..c971fb4aeb0 --- /dev/null +++ b/tests/baselines/reference/declFileIndexSignatures.types @@ -0,0 +1,66 @@ +=== tests/cases/compiler/declFileIndexSignatures_0.ts === + +export interface IStringIndexSignature { +>IStringIndexSignature : IStringIndexSignature + + [s: string]: string; +>s : string +} +export interface INumberIndexSignature { +>INumberIndexSignature : INumberIndexSignature + + [n: number]: number; +>n : number +} + +export interface IBothIndexSignature { +>IBothIndexSignature : IBothIndexSignature + + [s: string]: any; +>s : string + + [n: number]: number; +>n : number +} + +export interface IIndexSignatureWithTypeParameter { +>IIndexSignatureWithTypeParameter : IIndexSignatureWithTypeParameter +>T : T + + [a: string]: T; +>a : string +>T : T +} + +=== tests/cases/compiler/declFileIndexSignatures_1.ts === +interface IGlobalStringIndexSignature { +>IGlobalStringIndexSignature : IGlobalStringIndexSignature + + [s: string]: string; +>s : string +} +interface IGlobalNumberIndexSignature { +>IGlobalNumberIndexSignature : IGlobalNumberIndexSignature + + [n: number]: number; +>n : number +} + +interface IGlobalBothIndexSignature { +>IGlobalBothIndexSignature : IGlobalBothIndexSignature + + [s: string]: any; +>s : string + + [n: number]: number; +>n : number +} + +interface IGlobalIndexSignatureWithTypeParameter { +>IGlobalIndexSignatureWithTypeParameter : IGlobalIndexSignatureWithTypeParameter +>T : T + + [a: string]: T; +>a : string +>T : T +} diff --git a/tests/baselines/reference/declFileInternalAliases.js b/tests/baselines/reference/declFileInternalAliases.js index c465644fcde..2ebe48ce782 100644 --- a/tests/baselines/reference/declFileInternalAliases.js +++ b/tests/baselines/reference/declFileInternalAliases.js @@ -25,12 +25,12 @@ var m; var m1; (function (m1) { var x = m.c; - m1.d = new x(); + m1.d = new x(); // emit the type as m.c })(m1 || (m1 = {})); var m2; (function (m2) { m2.x = m.c; - m2.d = new m2.x(); + m2.d = new m2.x(); // emit the type as x })(m2 || (m2 = {})); diff --git a/tests/baselines/reference/declFileInternalAliases.types b/tests/baselines/reference/declFileInternalAliases.types new file mode 100644 index 00000000000..6dbc8db5c38 --- /dev/null +++ b/tests/baselines/reference/declFileInternalAliases.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/declFileInternalAliases.ts === +module m { +>m : typeof m + + export class c { +>c : c + } +} +module m1 { +>m1 : typeof m1 + + import x = m.c; +>x : typeof x +>m : typeof m +>c : x + + export var d = new x(); // emit the type as m.c +>d : x +>new x() : x +>x : typeof x +} +module m2 { +>m2 : typeof m2 + + export import x = m.c; +>x : typeof x +>m : typeof m +>c : x + + export var d = new x(); // emit the type as x +>d : x +>new x() : x +>x : typeof x +} diff --git a/tests/baselines/reference/declFileMethods.js b/tests/baselines/reference/declFileMethods.js index f9a6f50864b..2b82a4b71b5 100644 --- a/tests/baselines/reference/declFileMethods.js +++ b/tests/baselines/reference/declFileMethods.js @@ -194,9 +194,13 @@ interface I2 { var c1 = (function () { function c1() { } + /** This comment should appear for foo*/ c1.prototype.foo = function () { }; - c1.prototype.fooWithParameters = function (a, b) { + /** This is comment for function signature*/ + c1.prototype.fooWithParameters = function (/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; }; c1.prototype.fooWithRestParameters = function (a) { @@ -209,9 +213,13 @@ var c1 = (function () { c1.prototype.fooWithOverloads = function (a) { return a; }; + /** This comment should appear for privateFoo*/ c1.prototype.privateFoo = function () { }; - c1.prototype.privateFooWithParameters = function (a, b) { + /** This is comment for function signature*/ + c1.prototype.privateFooWithParameters = function (/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; }; c1.prototype.privateFooWithRestParameters = function (a) { @@ -224,9 +232,13 @@ var c1 = (function () { c1.prototype.privateFooWithOverloads = function (a) { return a; }; + /** This comment should appear for static foo*/ c1.staticFoo = function () { }; - c1.staticFooWithParameters = function (a, b) { + /** This is comment for function signature*/ + c1.staticFooWithParameters = function (/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; }; c1.staticFooWithRestParameters = function (a) { @@ -239,9 +251,13 @@ var c1 = (function () { c1.staticFooWithOverloads = function (a) { return a; }; + /** This comment should appear for privateStaticFoo*/ c1.privateStaticFoo = function () { }; - c1.privateStaticFooWithParameters = function (a, b) { + /** This is comment for function signature*/ + c1.privateStaticFooWithParameters = function (/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; }; c1.privateStaticFooWithRestParameters = function (a) { @@ -261,9 +277,13 @@ exports.c1 = c1; var c2 = (function () { function c2() { } + /** This comment should appear for foo*/ c2.prototype.foo = function () { }; - c2.prototype.fooWithParameters = function (a, b) { + /** This is comment for function signature*/ + c2.prototype.fooWithParameters = function (/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; }; c2.prototype.fooWithRestParameters = function (a) { @@ -276,9 +296,13 @@ var c2 = (function () { c2.prototype.fooWithOverloads = function (a) { return a; }; + /** This comment should appear for privateFoo*/ c2.prototype.privateFoo = function () { }; - c2.prototype.privateFooWithParameters = function (a, b) { + /** This is comment for function signature*/ + c2.prototype.privateFooWithParameters = function (/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; }; c2.prototype.privateFooWithRestParameters = function (a) { @@ -291,9 +315,13 @@ var c2 = (function () { c2.prototype.privateFooWithOverloads = function (a) { return a; }; + /** This comment should appear for static foo*/ c2.staticFoo = function () { }; - c2.staticFooWithParameters = function (a, b) { + /** This is comment for function signature*/ + c2.staticFooWithParameters = function (/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; }; c2.staticFooWithRestParameters = function (a) { @@ -306,9 +334,13 @@ var c2 = (function () { c2.staticFooWithOverloads = function (a) { return a; }; + /** This comment should appear for privateStaticFoo*/ c2.privateStaticFoo = function () { }; - c2.privateStaticFooWithParameters = function (a, b) { + /** This is comment for function signature*/ + c2.privateStaticFooWithParameters = function (/** this is comment about a*/ a, + /** this is comment for b*/ + b) { var d = a; }; c2.privateStaticFooWithRestParameters = function (a) { @@ -327,60 +359,100 @@ var c2 = (function () { //// [declFileMethods_0.d.ts] export declare class c1 { + /** This comment should appear for foo*/ foo(): void; - fooWithParameters(a: string, b: number): void; + /** This is comment for function signature*/ + fooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; fooWithRestParameters(a: string, ...rests: string[]): string; fooWithOverloads(a: string): string; fooWithOverloads(a: number): number; + /** This comment should appear for privateFoo*/ private privateFoo(); - private privateFooWithParameters(a, b); + /** This is comment for function signature*/ + private privateFooWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b); private privateFooWithRestParameters(a, ...rests); private privateFooWithOverloads(a); private privateFooWithOverloads(a); + /** This comment should appear for static foo*/ static staticFoo(): void; - static staticFooWithParameters(a: string, b: number): void; + /** This is comment for function signature*/ + static staticFooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; static staticFooWithRestParameters(a: string, ...rests: string[]): string; static staticFooWithOverloads(a: string): string; static staticFooWithOverloads(a: number): number; + /** This comment should appear for privateStaticFoo*/ private static privateStaticFoo(); - private static privateStaticFooWithParameters(a, b); + /** This is comment for function signature*/ + private static privateStaticFooWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b); private static privateStaticFooWithRestParameters(a, ...rests); private static privateStaticFooWithOverloads(a); private static privateStaticFooWithOverloads(a); } export interface I1 { + /** This comment should appear for foo*/ foo(): string; - fooWithParameters(a: string, b: number): void; + /** This is comment for function signature*/ + fooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; fooWithRestParameters(a: string, ...rests: string[]): string; fooWithOverloads(a: string): string; fooWithOverloads(a: number): number; } //// [declFileMethods_1.d.ts] declare class c2 { + /** This comment should appear for foo*/ foo(): void; - fooWithParameters(a: string, b: number): void; + /** This is comment for function signature*/ + fooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; fooWithRestParameters(a: string, ...rests: string[]): string; fooWithOverloads(a: string): string; fooWithOverloads(a: number): number; + /** This comment should appear for privateFoo*/ private privateFoo(); - private privateFooWithParameters(a, b); + /** This is comment for function signature*/ + private privateFooWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b); private privateFooWithRestParameters(a, ...rests); private privateFooWithOverloads(a); private privateFooWithOverloads(a); + /** This comment should appear for static foo*/ static staticFoo(): void; - static staticFooWithParameters(a: string, b: number): void; + /** This is comment for function signature*/ + static staticFooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; static staticFooWithRestParameters(a: string, ...rests: string[]): string; static staticFooWithOverloads(a: string): string; static staticFooWithOverloads(a: number): number; + /** This comment should appear for privateStaticFoo*/ private static privateStaticFoo(); - private static privateStaticFooWithParameters(a, b); + /** This is comment for function signature*/ + private static privateStaticFooWithParameters(/** this is comment about a*/ a, + /** this is comment for b*/ + b); private static privateStaticFooWithRestParameters(a, ...rests); private static privateStaticFooWithOverloads(a); private static privateStaticFooWithOverloads(a); } interface I2 { + /** This comment should appear for foo*/ foo(): string; - fooWithParameters(a: string, b: number): void; + /** This is comment for function signature*/ + fooWithParameters(/** this is comment about a*/ a: string, + /** this is comment for b*/ + b: number): void; fooWithRestParameters(a: string, ...rests: string[]): string; fooWithOverloads(a: string): string; fooWithOverloads(a: number): number; diff --git a/tests/baselines/reference/declFileMethods.types b/tests/baselines/reference/declFileMethods.types new file mode 100644 index 00000000000..6432540f5a4 --- /dev/null +++ b/tests/baselines/reference/declFileMethods.types @@ -0,0 +1,447 @@ +=== tests/cases/compiler/declFileMethods_0.ts === + +export class c1 { +>c1 : c1 + + /** This comment should appear for foo*/ + public foo() { +>foo : () => void + } + /** This is comment for function signature*/ + public fooWithParameters(/** this is comment about a*/a: string, +>fooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } + public fooWithRestParameters(a: string, ...rests: string[]) { +>fooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } + + public fooWithOverloads(a: string): string; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + public fooWithOverloads(a: number): number; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + + public fooWithOverloads(a: any): any { +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any + } + + + /** This comment should appear for privateFoo*/ + private privateFoo() { +>privateFoo : () => void + } + /** This is comment for function signature*/ + private privateFooWithParameters(/** this is comment about a*/a: string, +>privateFooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } + private privateFooWithRestParameters(a: string, ...rests: string[]) { +>privateFooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } + private privateFooWithOverloads(a: string): string; +>privateFooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + private privateFooWithOverloads(a: number): number; +>privateFooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + + private privateFooWithOverloads(a: any): any { +>privateFooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any + } + + + /** This comment should appear for static foo*/ + static staticFoo() { +>staticFoo : () => void + } + /** This is comment for function signature*/ + static staticFooWithParameters(/** this is comment about a*/a: string, +>staticFooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } + static staticFooWithRestParameters(a: string, ...rests: string[]) { +>staticFooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } + static staticFooWithOverloads(a: string): string; +>staticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + static staticFooWithOverloads(a: number): number; +>staticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + + static staticFooWithOverloads(a: any): any { +>staticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any + } + + + /** This comment should appear for privateStaticFoo*/ + private static privateStaticFoo() { +>privateStaticFoo : () => void + } + /** This is comment for function signature*/ + private static privateStaticFooWithParameters(/** this is comment about a*/a: string, +>privateStaticFooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } + private static privateStaticFooWithRestParameters(a: string, ...rests: string[]) { +>privateStaticFooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } + private static privateStaticFooWithOverloads(a: string): string; +>privateStaticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + private static privateStaticFooWithOverloads(a: number): number; +>privateStaticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + + private static privateStaticFooWithOverloads(a: any): any { +>privateStaticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any + } +} + +export interface I1 { +>I1 : I1 + + /** This comment should appear for foo*/ + foo(): string; +>foo : () => string + + /** This is comment for function signature*/ + fooWithParameters(/** this is comment about a*/a: string, +>fooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number): void; +>b : number + + fooWithRestParameters(a: string, ...rests: string[]): string; +>fooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + fooWithOverloads(a: string): string; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + fooWithOverloads(a: number): number; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : number +} + +=== tests/cases/compiler/declFileMethods_1.ts === +class c2 { +>c2 : c2 + + /** This comment should appear for foo*/ + public foo() { +>foo : () => void + } + /** This is comment for function signature*/ + public fooWithParameters(/** this is comment about a*/a: string, +>fooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } + public fooWithRestParameters(a: string, ...rests: string[]) { +>fooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } + + public fooWithOverloads(a: string): string; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + public fooWithOverloads(a: number): number; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + + public fooWithOverloads(a: any): any { +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any + } + + + /** This comment should appear for privateFoo*/ + private privateFoo() { +>privateFoo : () => void + } + /** This is comment for function signature*/ + private privateFooWithParameters(/** this is comment about a*/a: string, +>privateFooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } + private privateFooWithRestParameters(a: string, ...rests: string[]) { +>privateFooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } + private privateFooWithOverloads(a: string): string; +>privateFooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + private privateFooWithOverloads(a: number): number; +>privateFooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + + private privateFooWithOverloads(a: any): any { +>privateFooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any + } + + + /** This comment should appear for static foo*/ + static staticFoo() { +>staticFoo : () => void + } + /** This is comment for function signature*/ + static staticFooWithParameters(/** this is comment about a*/a: string, +>staticFooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } + static staticFooWithRestParameters(a: string, ...rests: string[]) { +>staticFooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } + static staticFooWithOverloads(a: string): string; +>staticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + static staticFooWithOverloads(a: number): number; +>staticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + + static staticFooWithOverloads(a: any): any { +>staticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any + } + + + /** This comment should appear for privateStaticFoo*/ + private static privateStaticFoo() { +>privateStaticFoo : () => void + } + /** This is comment for function signature*/ + private static privateStaticFooWithParameters(/** this is comment about a*/a: string, +>privateStaticFooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number) { +>b : number + + var d = a; +>d : string +>a : string + } + private static privateStaticFooWithRestParameters(a: string, ...rests: string[]) { +>privateStaticFooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + return a + rests.join(""); +>a + rests.join("") : string +>a : string +>rests.join("") : string +>rests.join : (separator?: string) => string +>rests : string[] +>join : (separator?: string) => string + } + private static privateStaticFooWithOverloads(a: string): string; +>privateStaticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + private static privateStaticFooWithOverloads(a: number): number; +>privateStaticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : number + + private static privateStaticFooWithOverloads(a: any): any { +>privateStaticFooWithOverloads : { (a: string): string; (a: number): number; } +>a : any + + return a; +>a : any + } +} + +interface I2 { +>I2 : I2 + + /** This comment should appear for foo*/ + foo(): string; +>foo : () => string + + /** This is comment for function signature*/ + fooWithParameters(/** this is comment about a*/a: string, +>fooWithParameters : (a: string, b: number) => void +>a : string + + /** this is comment for b*/ + b: number): void; +>b : number + + fooWithRestParameters(a: string, ...rests: string[]): string; +>fooWithRestParameters : (a: string, ...rests: string[]) => string +>a : string +>rests : string[] + + fooWithOverloads(a: string): string; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : string + + fooWithOverloads(a: number): number; +>fooWithOverloads : { (a: string): string; (a: number): number; } +>a : number +} + diff --git a/tests/baselines/reference/declFileModuleAssignmentInObjectLiteralProperty.types b/tests/baselines/reference/declFileModuleAssignmentInObjectLiteralProperty.types new file mode 100644 index 00000000000..6fd697b7ea2 --- /dev/null +++ b/tests/baselines/reference/declFileModuleAssignmentInObjectLiteralProperty.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/declFileModuleAssignmentInObjectLiteralProperty.ts === + +module m1 { +>m1 : typeof m1 + + export class c { +>c : c + } +} +var d = { +>d : { m1: { m: typeof m1; }; m2: { c: typeof m1.c; }; } +>{ m1: { m: m1 }, m2: { c: m1.c },} : { m1: { m: typeof m1; }; m2: { c: typeof m1.c; }; } + + m1: { m: m1 }, +>m1 : { m: typeof m1; } +>{ m: m1 } : { m: typeof m1; } +>m : typeof m1 +>m1 : typeof m1 + + m2: { c: m1.c }, +>m2 : { c: typeof m1.c; } +>{ c: m1.c } : { c: typeof m1.c; } +>c : typeof m1.c +>m1.c : typeof m1.c +>m1 : typeof m1 +>c : typeof m1.c + +}; diff --git a/tests/baselines/reference/declFileModuleContinuation.types b/tests/baselines/reference/declFileModuleContinuation.types new file mode 100644 index 00000000000..671d9e6923c --- /dev/null +++ b/tests/baselines/reference/declFileModuleContinuation.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/declFileModuleContinuation.ts === +module A.C { +>A : typeof A +>C : unknown + + export interface Z { +>Z : Z + } +} + +module A.B.C { +>A : typeof A +>B : typeof B +>C : typeof C + + export class W implements A.C.Z { +>W : W +>A : unknown +>C : unknown +>Z : A.C.Z + } +} diff --git a/tests/baselines/reference/declFileModuleWithPropertyOfTypeModule.types b/tests/baselines/reference/declFileModuleWithPropertyOfTypeModule.types new file mode 100644 index 00000000000..ecdc4396df4 --- /dev/null +++ b/tests/baselines/reference/declFileModuleWithPropertyOfTypeModule.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/declFileModuleWithPropertyOfTypeModule.ts === + +module m { +>m : typeof m + + export class c { +>c : c + } + + export var a = m; +>a : typeof m +>m : typeof m +} diff --git a/tests/baselines/reference/declFileOptionalInterfaceMethod.types b/tests/baselines/reference/declFileOptionalInterfaceMethod.types new file mode 100644 index 00000000000..c42c14f4fe5 --- /dev/null +++ b/tests/baselines/reference/declFileOptionalInterfaceMethod.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/declFileOptionalInterfaceMethod.ts === +interface X { +>X : X + + f? (); +>f : () => any +>T : T +} + diff --git a/tests/baselines/reference/declFileRegressionTests.js b/tests/baselines/reference/declFileRegressionTests.js index a2e287a4875..f8d0edbe48a 100644 --- a/tests/baselines/reference/declFileRegressionTests.js +++ b/tests/baselines/reference/declFileRegressionTests.js @@ -6,6 +6,8 @@ var n = { w: null, x: '', y: () => { }, z: 32 }; //// [declFileRegressionTests.js] +// 'null' not converted to 'any' in d.ts +// function types not piped through correctly var n = { w: null, x: '', y: function () { }, z: 32 }; diff --git a/tests/baselines/reference/declFileRegressionTests.types b/tests/baselines/reference/declFileRegressionTests.types new file mode 100644 index 00000000000..f230d93f0dd --- /dev/null +++ b/tests/baselines/reference/declFileRegressionTests.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/declFileRegressionTests.ts === +// 'null' not converted to 'any' in d.ts +// function types not piped through correctly +var n = { w: null, x: '', y: () => { }, z: 32 }; +>n : { w: any; x: string; y: () => void; z: number; } +>{ w: null, x: '', y: () => { }, z: 32 } : { w: null; x: string; y: () => void; z: number; } +>w : any +>x : string +>y : () => void +>() => { } : () => void +>z : number + + diff --git a/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.types b/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.types new file mode 100644 index 00000000000..ecb7c002089 --- /dev/null +++ b/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/declFileRestParametersOfFunctionAndFunctionType.ts === + +function f1(...args) { } +>f1 : (...args: any[]) => void +>args : any[] + +function f2(x: (...args) => void) { } +>f2 : (x: (...args: any[]) => void) => void +>x : (...args: any[]) => void +>args : any[] + +function f3(x: { (...args): void }) { } +>f3 : (x: (...args: any[]) => void) => void +>x : (...args: any[]) => void +>args : any[] + +function f4 void>() { } +>f4 : void>() => void +>T : T +>args : any[] + +function f5() { } +>f5 : void>() => void +>T : T +>args : any[] + +var f6 = () => { return [10]; } +>f6 : () => any[] +>() => { return [10]; } : () => any[] +>[10] : any[] +>10 : any + + + diff --git a/tests/baselines/reference/declFileTypeofClass.types b/tests/baselines/reference/declFileTypeofClass.types new file mode 100644 index 00000000000..119ad9bb7d4 --- /dev/null +++ b/tests/baselines/reference/declFileTypeofClass.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/declFileTypeofClass.ts === + +class c { +>c : c + + static x : string; +>x : string + + private static y: number; +>y : number + + private x3: string; +>x3 : string + + public y3: number; +>y3 : number +} + +var x: c; +>x : c +>c : c + +var y = c; +>y : typeof c +>c : typeof c + +var z: typeof c; +>z : typeof c +>c : typeof c + +class genericC +>genericC : genericC +>T : T +{ +} +var genericX = genericC; +>genericX : typeof genericC +>genericC : typeof genericC + diff --git a/tests/baselines/reference/declFileTypeofEnum.types b/tests/baselines/reference/declFileTypeofEnum.types new file mode 100644 index 00000000000..1c900a453b7 --- /dev/null +++ b/tests/baselines/reference/declFileTypeofEnum.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/declFileTypeofEnum.ts === + +enum days { +>days : days + + monday, +>monday : days + + tuesday, +>tuesday : days + + wednesday, +>wednesday : days + + thursday, +>thursday : days + + friday, +>friday : days + + saturday, +>saturday : days + + sunday +>sunday : days +} + +var weekendDay = days.saturday; +>weekendDay : days +>days.saturday : days +>days : typeof days +>saturday : days + +var daysOfMonth = days; +>daysOfMonth : typeof days +>days : typeof days + +var daysOfYear: typeof days; +>daysOfYear : typeof days +>days : typeof days + diff --git a/tests/baselines/reference/declFileTypeofFunction.js b/tests/baselines/reference/declFileTypeofFunction.js index f488d418f6d..67475c557d3 100644 --- a/tests/baselines/reference/declFileTypeofFunction.js +++ b/tests/baselines/reference/declFileTypeofFunction.js @@ -68,7 +68,7 @@ declare function f(n: typeof f): string; declare function f(n: typeof g): string; declare function g(n: typeof g): number; declare function g(n: typeof f): number; -declare var b: any; +declare var b: () => any; declare function b1(): typeof b1; declare function foo(): typeof foo; declare var foo1: typeof foo; diff --git a/tests/baselines/reference/declFileTypeofFunction.types b/tests/baselines/reference/declFileTypeofFunction.types new file mode 100644 index 00000000000..5f1cc26168f --- /dev/null +++ b/tests/baselines/reference/declFileTypeofFunction.types @@ -0,0 +1,84 @@ +=== tests/cases/compiler/declFileTypeofFunction.ts === + +function f(n: typeof f): string; +>f : { (n: typeof f): string; (n: { (n: typeof g): number; (n: typeof f): number; }): string; } +>n : { (n: typeof f): string; (n: { (n: typeof g): number; (n: typeof f): number; }): string; } +>f : { (n: typeof f): string; (n: { (n: typeof g): number; (n: typeof f): number; }): string; } + +function f(n: typeof g): string; +>f : { (n: typeof f): string; (n: { (n: typeof g): number; (n: typeof f): number; }): string; } +>n : { (n: typeof g): number; (n: { (n: typeof f): string; (n: typeof g): string; }): number; } +>g : { (n: typeof g): number; (n: { (n: typeof f): string; (n: typeof g): string; }): number; } + +function f() { return undefined; } +>f : { (n: typeof f): string; (n: { (n: typeof g): number; (n: typeof f): number; }): string; } +>undefined : undefined + +function g(n: typeof g): number; +>g : { (n: typeof g): number; (n: { (n: typeof f): string; (n: typeof g): string; }): number; } +>n : { (n: typeof g): number; (n: { (n: typeof f): string; (n: typeof g): string; }): number; } +>g : { (n: typeof g): number; (n: { (n: typeof f): string; (n: typeof g): string; }): number; } + +function g(n: typeof f): number; +>g : { (n: typeof g): number; (n: { (n: typeof f): string; (n: typeof g): string; }): number; } +>n : { (n: typeof f): string; (n: { (n: typeof g): number; (n: typeof f): number; }): string; } +>f : { (n: typeof f): string; (n: { (n: typeof g): number; (n: typeof f): number; }): string; } + +function g() { return undefined; } +>g : { (n: typeof g): number; (n: { (n: typeof f): string; (n: typeof g): string; }): number; } +>undefined : undefined + +var b: () => typeof b; +>b : () => any +>b : () => any + +function b1() { +>b1 : () => typeof b1 + + return b1; +>b1 : () => typeof b1 +} + +function foo(): typeof foo { +>foo : () => typeof foo +>foo : () => typeof foo + + return null; +} +var foo1: typeof foo; +>foo1 : () => typeof foo +>foo : () => typeof foo + +var foo2 = foo; +>foo2 : () => typeof foo +>foo : () => typeof foo + +var foo3 = function () { +>foo3 : any +>function () { return foo3;} : () => any + + return foo3; +>foo3 : any +} +var x = () => { +>x : any +>() => { return x;} : () => any + + return x; +>x : any +} + +function foo5(x: number) { +>foo5 : (x: number) => (x: number) => number +>x : number + + function bar(x: number) { +>bar : (x: number) => number +>x : number + + return x; +>x : number + } + return bar; +>bar : (x: number) => number +} diff --git a/tests/baselines/reference/declFileTypeofInAnonymousType.types b/tests/baselines/reference/declFileTypeofInAnonymousType.types new file mode 100644 index 00000000000..39ea7383ca4 --- /dev/null +++ b/tests/baselines/reference/declFileTypeofInAnonymousType.types @@ -0,0 +1,83 @@ +=== tests/cases/compiler/declFileTypeofInAnonymousType.ts === + +module m1 { +>m1 : typeof m1 + + export class c { +>c : c + } + export enum e { +>e : e + + weekday, +>weekday : e + + weekend, +>weekend : e + + holiday +>holiday : e + } +} +var a: { c: m1.c; }; +>a : { c: m1.c; } +>c : m1.c +>m1 : unknown +>c : m1.c + +var b = { +>b : { c: typeof m1.c; m1: typeof m1; } +>{ c: m1.c, m1: m1} : { c: typeof m1.c; m1: typeof m1; } + + c: m1.c, +>c : typeof m1.c +>m1.c : typeof m1.c +>m1 : typeof m1 +>c : typeof m1.c + + m1: m1 +>m1 : typeof m1 +>m1 : typeof m1 + +}; +var c = { m1: m1 }; +>c : { m1: typeof m1; } +>{ m1: m1 } : { m1: typeof m1; } +>m1 : typeof m1 +>m1 : typeof m1 + +var d = { +>d : { m: { mod: typeof m1; }; mc: { cl: typeof m1.c; }; me: { en: typeof m1.e; }; mh: m1.e; } +>{ m: { mod: m1 }, mc: { cl: m1.c }, me: { en: m1.e }, mh: m1.e.holiday} : { m: { mod: typeof m1; }; mc: { cl: typeof m1.c; }; me: { en: typeof m1.e; }; mh: m1.e; } + + m: { mod: m1 }, +>m : { mod: typeof m1; } +>{ mod: m1 } : { mod: typeof m1; } +>mod : typeof m1 +>m1 : typeof m1 + + mc: { cl: m1.c }, +>mc : { cl: typeof m1.c; } +>{ cl: m1.c } : { cl: typeof m1.c; } +>cl : typeof m1.c +>m1.c : typeof m1.c +>m1 : typeof m1 +>c : typeof m1.c + + me: { en: m1.e }, +>me : { en: typeof m1.e; } +>{ en: m1.e } : { en: typeof m1.e; } +>en : typeof m1.e +>m1.e : typeof m1.e +>m1 : typeof m1 +>e : typeof m1.e + + mh: m1.e.holiday +>mh : m1.e +>m1.e.holiday : m1.e +>m1.e : typeof m1.e +>m1 : typeof m1 +>e : typeof m1.e +>holiday : m1.e + +}; diff --git a/tests/baselines/reference/declFileTypeofModule.types b/tests/baselines/reference/declFileTypeofModule.types new file mode 100644 index 00000000000..ef4238bf2c5 --- /dev/null +++ b/tests/baselines/reference/declFileTypeofModule.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/declFileTypeofModule.ts === + +module m1 { +>m1 : typeof m1 + + export var c: string; +>c : string +} +var m1_1 = m1; +>m1_1 : typeof m1 +>m1 : typeof m1 + +var m1_2: typeof m1; +>m1_2 : typeof m1 +>m1 : typeof m1 + +module m2 { +>m2 : typeof m2 + + export var d: typeof m2; +>d : typeof m2 +>m2 : typeof m2 +} + +var m2_1 = m2; +>m2_1 : typeof m2 +>m2 : typeof m2 + +var m2_2: typeof m2; +>m2_2 : typeof m2 +>m2 : typeof m2 + diff --git a/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types b/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types new file mode 100644 index 00000000000..34d263ef6bb --- /dev/null +++ b/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/declFileWithClassNameConflictingWithClassReferredByExtendsClause.ts === + +declare module A.B.Base { +>A : typeof A +>B : typeof B +>Base : typeof Base + + export class W { +>W : W + + id: number; +>id : number + } +} +module X.Y.base { +>X : typeof X +>Y : typeof Y +>base : typeof base + + export class W extends A.B.Base.W { +>W : W +>A : unknown +>B : unknown +>Base : unknown +>W : A.B.Base.W + + name: string; +>name : string + } +} + +module X.Y.base.Z { +>X : typeof X +>Y : typeof Y +>base : typeof base +>Z : typeof Z + + export class W extends X.Y.base.W { +>W : W +>TValue : TValue +>X : unknown +>Y : unknown +>base : unknown +>W : base.W + + value: boolean; +>value : boolean + } +} + diff --git a/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types b/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types new file mode 100644 index 00000000000..4dae0d42c53 --- /dev/null +++ b/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/declFileWithExtendsClauseThatHasItsContainerNameConflict.ts === + +declare module A.B.C { +>A : typeof A +>B : typeof B +>C : typeof C + + class B { +>B : B + } +} + +module A.B { +>A : typeof A +>B : typeof B + + export class EventManager { +>EventManager : EventManager + + id: number; +>id : number + + } +} + +module A.B.C { +>A : typeof A +>B : typeof B +>C : typeof C + + export class ContextMenu extends EventManager { +>ContextMenu : ContextMenu +>EventManager : EventManager + + name: string; +>name : string + } +} diff --git a/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause1.types b/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause1.types new file mode 100644 index 00000000000..8c5c4169cb4 --- /dev/null +++ b/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause1.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/declFileWithInternalModuleNameConflictsInExtendsClause1.ts === + +module X.A.C { +>X : typeof X +>A : typeof A +>C : unknown + + export interface Z { +>Z : Z + } +} +module X.A.B.C { +>X : typeof X +>A : typeof A +>B : typeof B +>C : typeof C + + module A { +>A : unknown + } + export class W implements X.A.C.Z { // This needs to be refered as X.A.C.Z as A has conflict +>W : W +>X : unknown +>A : unknown +>C : unknown +>Z : X.A.C.Z + } +} diff --git a/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause2.types b/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause2.types new file mode 100644 index 00000000000..11afd69d94c --- /dev/null +++ b/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause2.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/declFileWithInternalModuleNameConflictsInExtendsClause2.ts === + +module X.A.C { +>X : typeof X +>A : typeof A +>C : unknown + + export interface Z { +>Z : Z + } +} +module X.A.B.C { +>X : typeof X +>A : typeof A +>B : typeof B +>C : typeof C + + export class W implements A.C.Z { // This can refer to it as A.C.Z +>W : W +>A : unknown +>C : unknown +>Z : A.C.Z + } +} + +module X.A.B.C { +>X : typeof X +>A : typeof A +>B : typeof B +>C : typeof C + + module A { +>A : unknown + } +} diff --git a/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause3.types b/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause3.types new file mode 100644 index 00000000000..0b17b2ce78a --- /dev/null +++ b/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause3.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/declFileWithInternalModuleNameConflictsInExtendsClause3.ts === + +module X.A.C { +>X : typeof X +>A : typeof A +>C : unknown + + export interface Z { +>Z : Z + } +} +module X.A.B.C { +>X : typeof X +>A : typeof A +>B : typeof B +>C : typeof C + + export class W implements X.A.C.Z { // This needs to be refered as X.A.C.Z as A has conflict +>W : W +>X : unknown +>A : unknown +>C : unknown +>Z : X.A.C.Z + } +} + +module X.A.B.C { +>X : typeof X +>A : typeof A +>B : typeof B +>C : typeof C + + export module A { +>A : unknown + } +} diff --git a/tests/baselines/reference/declInput-2.js b/tests/baselines/reference/declInput-2.js index 011167d9a35..3ba5ae11bf6 100644 --- a/tests/baselines/reference/declInput-2.js +++ b/tests/baselines/reference/declInput-2.js @@ -46,7 +46,7 @@ var M; }; D.prototype.m252 = function () { return null; - }; + }; // don't generate D.prototype.m26 = function (i) { }; D.prototype.m262 = function (i) { diff --git a/tests/baselines/reference/declInput3.types b/tests/baselines/reference/declInput3.types new file mode 100644 index 00000000000..4147396b26d --- /dev/null +++ b/tests/baselines/reference/declInput3.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/declInput3.ts === +interface bar2 { +>bar2 : bar2 + +} + +class bar { +>bar : bar + + public f() { return ''; } +>f : () => string + + public g() { return {a: null, b: undefined, c: void 4 }; } +>g : () => { a: bar; b: any; c: any; } +>{a: null, b: undefined, c: void 4 } : { a: bar; b: undefined; c: undefined; } +>a : bar +>null : bar +>bar : bar +>b : any +>undefined : undefined +>c : any +>void 4 : undefined + + public h(x = 4, y = null, z = '') { x++; } +>h : (x?: number, y?: any, z?: string) => void +>x : number +>y : any +>z : string +>x++ : number +>x : number +} + diff --git a/tests/baselines/reference/declInput4.types b/tests/baselines/reference/declInput4.types new file mode 100644 index 00000000000..7f5c5a81197 --- /dev/null +++ b/tests/baselines/reference/declInput4.types @@ -0,0 +1,47 @@ +=== tests/cases/compiler/declInput4.ts === +module M { +>M : typeof M + + class C { } +>C : C + + export class E {} +>E : E + + export interface I1 {} +>I1 : I1 + + interface I2 {} +>I2 : I2 + + export class D { +>D : D + + public m1: number; +>m1 : number + + public m2: string; +>m2 : string + + public m23: E; +>m23 : E +>E : E + + public m24: I1; +>m24 : I1 +>I1 : I1 + + public m232(): E { return null;} +>m232 : () => E +>E : E + + public m242(): I1 { return null; } +>m242 : () => I1 +>I1 : I1 + + public m26(i:I1) {} +>m26 : (i: I1) => void +>i : I1 +>I1 : I1 + } +} diff --git a/tests/baselines/reference/declarationEmit_array-types-from-generic-array-usage.types b/tests/baselines/reference/declarationEmit_array-types-from-generic-array-usage.types new file mode 100644 index 00000000000..63f35d0f263 --- /dev/null +++ b/tests/baselines/reference/declarationEmit_array-types-from-generic-array-usage.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/declarationEmit_array-types-from-generic-array-usage.ts === +interface A extends Array { } +>A : A +>Array : T[] + diff --git a/tests/baselines/reference/declarationEmit_nameConflicts.js b/tests/baselines/reference/declarationEmit_nameConflicts.js index 941029774f4..bbb7826707b 100644 --- a/tests/baselines/reference/declarationEmit_nameConflicts.js +++ b/tests/baselines/reference/declarationEmit_nameConflicts.js @@ -104,11 +104,11 @@ var M = exports.M; })(P.N || (P.N = {})); var N = P.N; P.im = M.P.f; - P.a = M.a; - P.b = M.b; - P.c = M.c; - P.g = M.c.g; - P.d = M.d; + P.a = M.a; // emitted incorrectly as typeof f + P.b = M.b; // ok + P.c = M.c; // ok + P.g = M.c.g; // ok + P.d = M.d; // emitted incorrectly as typeof im })(M.P || (M.P = {})); var P = M.P; })(exports.M || (exports.M = {})); diff --git a/tests/baselines/reference/declarationEmit_nameConflicts.types b/tests/baselines/reference/declarationEmit_nameConflicts.types new file mode 100644 index 00000000000..f07a7fbb2ab --- /dev/null +++ b/tests/baselines/reference/declarationEmit_nameConflicts.types @@ -0,0 +1,148 @@ +=== tests/cases/compiler/declarationEmit_nameConflicts_0.ts === +import im = require('declarationEmit_nameConflicts_1'); +>im : typeof im + +export module M { +>M : typeof M + + export function f() { } +>f : () => void + + export class C { } +>C : C + + export module N { +>N : typeof N + + export function g() { }; +>g : () => void + + export interface I { } +>I : I + } + + export import a = M.f; +>a : () => void +>M : typeof M +>f : () => void + + export import b = M.C; +>b : typeof C +>M : typeof M +>C : C + + export import c = N; +>c : typeof N +>N : typeof N + + export import d = im; +>d : typeof d +>im : typeof d +} + +export module M.P { +>M : typeof M +>P : typeof P + + export function f() { } +>f : () => void + + export class C { } +>C : C + + export module N { +>N : typeof N + + export function g() { }; +>g : () => void + + export interface I { } +>I : I + } + export import im = M.P.f; +>im : () => void +>M : typeof M +>P : typeof P +>f : () => void + + export var a = M.a; // emitted incorrectly as typeof f +>a : () => void +>M.a : () => void +>M : typeof M +>a : () => void + + export var b = M.b; // ok +>b : typeof M.C +>M.b : typeof M.C +>M : typeof M +>b : typeof M.C + + export var c = M.c; // ok +>c : typeof M.N +>M.c : typeof M.N +>M : typeof M +>c : typeof M.N + + export var g = M.c.g; // ok +>g : () => void +>M.c.g : () => void +>M.c : typeof M.N +>M : typeof M +>c : typeof M.N +>g : () => void + + export var d = M.d; // emitted incorrectly as typeof im +>d : typeof M.d +>M.d : typeof M.d +>M : typeof M +>d : typeof M.d +} + +export module M.Q { +>M : typeof M +>Q : typeof Q + + export function f() { } +>f : () => void + + export class C { } +>C : C + + export module N { +>N : typeof N + + export function g() { }; +>g : () => void + + export interface I { } +>I : I + } + export interface b extends M.b { } // ok +>b : b +>M : unknown +>b : M.C + + export interface I extends M.c.I { } // ok +>I : I +>M : unknown +>c : unknown +>I : M.c.I + + export module c { +>c : unknown + + export interface I extends M.c.I { } // ok +>I : I +>M : unknown +>c : unknown +>I : M.c.I + } +} +=== tests/cases/compiler/declarationEmit_nameConflicts_1.ts === +module f { export class c { } } +>f : typeof f +>c : c + +export = f; +>f : typeof f + diff --git a/tests/baselines/reference/declarationEmit_nameConflicts2.js b/tests/baselines/reference/declarationEmit_nameConflicts2.js index 79d73add32d..7b8e1ce17c9 100644 --- a/tests/baselines/reference/declarationEmit_nameConflicts2.js +++ b/tests/baselines/reference/declarationEmit_nameConflicts2.js @@ -46,10 +46,10 @@ var X; (function (Y) { (function (base) { (function (Z) { - Z.f = X.Y.base.f; - Z.C = X.Y.base.C; - Z.M = X.Y.base.M; - Z.E = X.Y.base.E; + Z.f = X.Y.base.f; // Should be base.f + Z.C = X.Y.base.C; // Should be base.C + Z.M = X.Y.base.M; // Should be base.M + Z.E = X.Y.base.E; // Should be base.E })(base.Z || (base.Z = {})); var Z = base.Z; })(Y.base || (Y.base = {})); diff --git a/tests/baselines/reference/declarationEmit_nameConflicts2.types b/tests/baselines/reference/declarationEmit_nameConflicts2.types new file mode 100644 index 00000000000..026cfed0989 --- /dev/null +++ b/tests/baselines/reference/declarationEmit_nameConflicts2.types @@ -0,0 +1,68 @@ +=== tests/cases/compiler/declarationEmit_nameConflicts2.ts === +module X.Y.base { +>X : typeof X +>Y : typeof Y +>base : typeof base + + export function f() { } +>f : () => void + + export class C { } +>C : C + + export module M { +>M : typeof M + + export var v; +>v : any + } + export enum E { } +>E : E +} + +module X.Y.base.Z { +>X : typeof X +>Y : typeof Y +>base : typeof base +>Z : typeof Z + + export var f = X.Y.base.f; // Should be base.f +>f : () => void +>X.Y.base.f : () => void +>X.Y.base : typeof base +>X.Y : typeof Y +>X : typeof X +>Y : typeof Y +>base : typeof base +>f : () => void + + export var C = X.Y.base.C; // Should be base.C +>C : typeof base.C +>X.Y.base.C : typeof base.C +>X.Y.base : typeof base +>X.Y : typeof Y +>X : typeof X +>Y : typeof Y +>base : typeof base +>C : typeof base.C + + export var M = X.Y.base.M; // Should be base.M +>M : typeof base.M +>X.Y.base.M : typeof base.M +>X.Y.base : typeof base +>X.Y : typeof Y +>X : typeof X +>Y : typeof Y +>base : typeof base +>M : typeof base.M + + export var E = X.Y.base.E; // Should be base.E +>E : typeof base.E +>X.Y.base.E : typeof base.E +>X.Y.base : typeof base +>X.Y : typeof Y +>X : typeof X +>Y : typeof Y +>base : typeof base +>E : typeof base.E +} diff --git a/tests/baselines/reference/declarationEmit_nameConflicts3.js b/tests/baselines/reference/declarationEmit_nameConflicts3.js index daa5bac83d7..a8dc1217ef4 100644 --- a/tests/baselines/reference/declarationEmit_nameConflicts3.js +++ b/tests/baselines/reference/declarationEmit_nameConflicts3.js @@ -77,10 +77,10 @@ var M; D[D["f"] = 0] = "f"; })(P.D || (P.D = {})); var D = P.D; - P.v; - P.w = M.D.f; - P.x = M.C.f; - P.x = M.E.f; + P.v; // ok + P.w = M.D.f; // error, should be typeof M.D.f + P.x = M.C.f; // error, should be typeof M.C.f + P.x = M.E.f; // error, should be typeof M.E.f })(M.P || (M.P = {})); var P = M.P; })(M || (M = {})); diff --git a/tests/baselines/reference/declarationEmit_nameConflicts3.types b/tests/baselines/reference/declarationEmit_nameConflicts3.types new file mode 100644 index 00000000000..50fd6ecdd1b --- /dev/null +++ b/tests/baselines/reference/declarationEmit_nameConflicts3.types @@ -0,0 +1,76 @@ +=== tests/cases/compiler/declarationEmit_nameConflicts3.ts === +module M { +>M : typeof M + + export interface D { } +>D : D + + export module D { +>D : typeof D + + export function f() { } +>f : () => void + } + export module C { +>C : typeof C + + export function f() { } +>f : () => void + } + export module E { +>E : typeof E + + export function f() { } +>f : () => void + } +} + +module M.P { +>M : typeof M +>P : typeof P + + export class C { +>C : C + + static f() { } +>f : () => void + } + export class E extends C { } +>E : E +>C : C + + export enum D { +>D : D + + f +>f : D + } + export var v: M.D; // ok +>v : M.D +>M : unknown +>D : M.D + + export var w = M.D.f; // error, should be typeof M.D.f +>w : () => void +>M.D.f : () => void +>M.D : typeof M.D +>M : typeof M +>D : typeof M.D +>f : () => void + + export var x = M.C.f; // error, should be typeof M.C.f +>x : () => void +>M.C.f : () => void +>M.C : typeof M.C +>M : typeof M +>C : typeof M.C +>f : () => void + + export var x = M.E.f; // error, should be typeof M.E.f +>x : () => void +>M.E.f : () => void +>M.E : typeof M.E +>M : typeof M +>E : typeof M.E +>f : () => void +} diff --git a/tests/baselines/reference/declarationEmit_nameConflictsWithAlias.js b/tests/baselines/reference/declarationEmit_nameConflictsWithAlias.js index 32ac2d47290..a5b2f397bf8 100644 --- a/tests/baselines/reference/declarationEmit_nameConflictsWithAlias.js +++ b/tests/baselines/reference/declarationEmit_nameConflictsWithAlias.js @@ -8,7 +8,7 @@ export module M { //// [declarationEmit_nameConflictsWithAlias.js] (function (M) { - M.w; + M.w; // Gets emitted as C.I, which is the wrong interface })(exports.M || (exports.M = {})); var M = exports.M; diff --git a/tests/baselines/reference/declarationEmit_nameConflictsWithAlias.types b/tests/baselines/reference/declarationEmit_nameConflictsWithAlias.types new file mode 100644 index 00000000000..50c45a44a19 --- /dev/null +++ b/tests/baselines/reference/declarationEmit_nameConflictsWithAlias.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/declarationEmit_nameConflictsWithAlias.ts === +export module C { export interface I { } } +>C : unknown +>I : I + +export import v = C; +>v : unknown +>C : unknown + +export module M { +>M : typeof M + + export module C { export interface I { } } +>C : unknown +>I : I + + export var w: v.I; // Gets emitted as C.I, which is the wrong interface +>w : v.I +>v : unknown +>I : v.I +} diff --git a/tests/baselines/reference/declareDottedExtend.types b/tests/baselines/reference/declareDottedExtend.types new file mode 100644 index 00000000000..5efcea51b26 --- /dev/null +++ b/tests/baselines/reference/declareDottedExtend.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/declareDottedExtend.ts === +declare module A.B +>A : typeof A +>B : typeof B +{ + export class C{ } +>C : C +} + +import ab = A.B; +>ab : typeof ab +>A : typeof A +>B : typeof ab + +class D extends ab.C{ } +>D : D +>ab : unknown +>C : ab.C + +class E extends A.B.C{ } +>E : E +>A : unknown +>B : unknown +>C : ab.C + diff --git a/tests/baselines/reference/declareDottedModuleName.types b/tests/baselines/reference/declareDottedModuleName.types new file mode 100644 index 00000000000..8ccd2298847 --- /dev/null +++ b/tests/baselines/reference/declareDottedModuleName.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/declareDottedModuleName.ts === +module M { +>M : unknown + + module P.Q { } // This shouldnt be emitted +>P : unknown +>Q : unknown +} + +module M { +>M : unknown + + export module R.S { } //This should be emitted +>R : unknown +>S : unknown +} + +module T.U { // This needs to be emitted +>T : unknown +>U : unknown +} diff --git a/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types b/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types new file mode 100644 index 00000000000..70718471d50 --- /dev/null +++ b/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/declareExternalModuleWithExportAssignedFundule.ts === +declare module "express" { + + export = express; +>express : typeof express + + function express(): express.ExpressServer; +>express : typeof express +>express : unknown +>ExpressServer : express.ExpressServer + + module express { +>express : typeof express + + export interface ExpressServer { +>ExpressServer : ExpressServer + + enable(name: string): ExpressServer; +>enable : (name: string) => ExpressServer +>name : string +>ExpressServer : ExpressServer + + post(path: RegExp, handler: (req: Function) => void ): void; +>post : (path: RegExp, handler: (req: Function) => void) => void +>path : RegExp +>RegExp : RegExp +>handler : (req: Function) => void +>req : Function +>Function : Function + + } + + export class ExpressServerRequest { +>ExpressServerRequest : ExpressServerRequest + + } + + } + +} + diff --git a/tests/baselines/reference/declareFileExportAssignment.types b/tests/baselines/reference/declareFileExportAssignment.types new file mode 100644 index 00000000000..f30586b07e3 --- /dev/null +++ b/tests/baselines/reference/declareFileExportAssignment.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/declareFileExportAssignment.ts === +module m2 { +>m2 : { (): connectExport; test1: connectModule; test2(): connectModule; } + + export interface connectModule { +>connectModule : connectModule + + (res, req, next): void; +>res : any +>req : any +>next : any + } + export interface connectExport { +>connectExport : connectExport + + use: (mod: connectModule) => connectExport; +>use : (mod: connectModule) => connectExport +>mod : connectModule +>connectModule : connectModule +>connectExport : connectExport + + listen: (port: number) => void; +>listen : (port: number) => void +>port : number + } + +} + +var m2: { +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } + + (): m2.connectExport; +>m2 : unknown +>connectExport : m2.connectExport + + test1: m2.connectModule; +>test1 : m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + + test2(): m2.connectModule; +>test2 : () => m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + +}; + +export = m2; +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } + diff --git a/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types b/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types new file mode 100644 index 00000000000..675dc38c869 --- /dev/null +++ b/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/declareFileExportAssignmentWithVarFromVariableStatement.ts === +module m2 { +>m2 : { (): connectExport; test1: connectModule; test2(): connectModule; } + + export interface connectModule { +>connectModule : connectModule + + (res, req, next): void; +>res : any +>req : any +>next : any + } + export interface connectExport { +>connectExport : connectExport + + use: (mod: connectModule) => connectExport; +>use : (mod: connectModule) => connectExport +>mod : connectModule +>connectModule : connectModule +>connectExport : connectExport + + listen: (port: number) => void; +>listen : (port: number) => void +>port : number + } + +} + +var x = 10, m2: { +>x : number +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } + + (): m2.connectExport; +>m2 : unknown +>connectExport : m2.connectExport + + test1: m2.connectModule; +>test1 : m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + + test2(): m2.connectModule; +>test2 : () => m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + +}; + +export = m2; +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } + diff --git a/tests/baselines/reference/declaredExternalModule.types b/tests/baselines/reference/declaredExternalModule.types new file mode 100644 index 00000000000..5ce504e7f4b --- /dev/null +++ b/tests/baselines/reference/declaredExternalModule.types @@ -0,0 +1,45 @@ +=== tests/cases/compiler/declaredExternalModule.ts === +declare module 'connect' { + + interface connectModule { +>connectModule : connectModule + + (res, req, next): void; +>res : any +>req : any +>next : any + + } + + interface connectExport { +>connectExport : connectExport + + use: (mod: connectModule) => connectExport; +>use : (mod: connectModule) => connectExport +>mod : connectModule +>connectModule : connectModule +>connectExport : connectExport + + listen: (port: number) => void; +>listen : (port: number) => void +>port : number + + } + + var server: { +>server : { (): connectExport; test1: connectModule; test2(): connectModule; } + + (): connectExport; +>connectExport : connectExport + + test1: connectModule; // No error +>test1 : connectModule +>connectModule : connectModule + + test2(): connectModule; // ERROR: Return type of method from exported interface has or is using private type ''connect'.connectModule'. +>test2 : () => connectModule +>connectModule : connectModule + + }; +} + diff --git a/tests/baselines/reference/declaredExternalModuleWithExportAssignment.types b/tests/baselines/reference/declaredExternalModuleWithExportAssignment.types new file mode 100644 index 00000000000..e550e8ee13d --- /dev/null +++ b/tests/baselines/reference/declaredExternalModuleWithExportAssignment.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/declaredExternalModuleWithExportAssignment.ts === +declare module 'connect' { + interface connectModule { +>connectModule : connectModule + + (res, req, next): void; +>res : any +>req : any +>next : any + } + + interface connectExport { +>connectExport : connectExport + + use: (mod: connectModule) => connectExport; +>use : (mod: connectModule) => connectExport +>mod : connectModule +>connectModule : connectModule +>connectExport : connectExport + + listen: (port: number) => void; +>listen : (port: number) => void +>port : number + } + + var server: { +>server : { (): connectExport; test1: connectModule; test2(): connectModule; } + + (): connectExport; +>connectExport : connectExport + + test1: connectModule; +>test1 : connectModule +>connectModule : connectModule + + test2(): connectModule; +>test2 : () => connectModule +>connectModule : connectModule + + }; + export = server; +>server : { (): connectExport; test1: connectModule; test2(): connectModule; } +} + diff --git a/tests/baselines/reference/decrementAndIncrementOperators.js b/tests/baselines/reference/decrementAndIncrementOperators.js index c5a1c6d8d14..5e9b9472a35 100644 --- a/tests/baselines/reference/decrementAndIncrementOperators.js +++ b/tests/baselines/reference/decrementAndIncrementOperators.js @@ -40,6 +40,7 @@ x[x++]++; //// [decrementAndIncrementOperators.js] var x = 0; +// errors 1++; (1)++; (1)--; @@ -53,6 +54,7 @@ var x = 0; (x + x)--; ++(x + x); --(x + x); +//OK x++; x--; ++x; diff --git a/tests/baselines/reference/decrementOperatorWithAnyOtherType.js b/tests/baselines/reference/decrementOperatorWithAnyOtherType.js index 2b6216a7851..34ea154daa6 100644 --- a/tests/baselines/reference/decrementOperatorWithAnyOtherType.js +++ b/tests/baselines/reference/decrementOperatorWithAnyOtherType.js @@ -49,6 +49,7 @@ objA.a--; M.n--; //// [decrementOperatorWithAnyOtherType.js] +// -- operator on any type var ANY; var ANY1; var ANY2 = ["", ""]; @@ -63,10 +64,12 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// any type var var ResultIsNumber1 = --ANY; var ResultIsNumber2 = --ANY1; var ResultIsNumber3 = ANY1--; var ResultIsNumber4 = ANY1--; +// expressions var ResultIsNumber5 = --ANY2[0]; var ResultIsNumber6 = --obj.x; var ResultIsNumber7 = --obj.y; @@ -77,6 +80,7 @@ var ResultIsNumber10 = obj.x--; var ResultIsNumber11 = obj.y--; var ResultIsNumber12 = objA.a--; var ResultIsNumber13 = M.n--; +// miss assignment opertors --ANY; --ANY1; --ANY2[0]; diff --git a/tests/baselines/reference/decrementOperatorWithAnyOtherType.types b/tests/baselines/reference/decrementOperatorWithAnyOtherType.types new file mode 100644 index 00000000000..1a4aea0d507 --- /dev/null +++ b/tests/baselines/reference/decrementOperatorWithAnyOtherType.types @@ -0,0 +1,191 @@ +=== tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithAnyOtherType.ts === +// -- operator on any type + +var ANY: any; +>ANY : any + +var ANY1; +>ANY1 : any + +var ANY2: any[] = ["", ""]; +>ANY2 : any[] +>["", ""] : any[] + +var obj = {x:1,y:null}; +>obj : { x: number; y: any; } +>{x:1,y:null} : { x: number; y: null; } +>x : number +>y : any + +class A { +>A : A + + public a: any; +>a : any +} +module M { +>M : typeof M + + export var n: any; +>n : any +} +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// any type var +var ResultIsNumber1 = --ANY; +>ResultIsNumber1 : number +>--ANY : number +>ANY : any + +var ResultIsNumber2 = --ANY1; +>ResultIsNumber2 : number +>--ANY1 : number +>ANY1 : any + +var ResultIsNumber3 = ANY1--; +>ResultIsNumber3 : number +>ANY1-- : number +>ANY1 : any + +var ResultIsNumber4 = ANY1--; +>ResultIsNumber4 : number +>ANY1-- : number +>ANY1 : any + +// expressions +var ResultIsNumber5 = --ANY2[0]; +>ResultIsNumber5 : number +>--ANY2[0] : number +>ANY2[0] : any +>ANY2 : any[] + +var ResultIsNumber6 = --obj.x; +>ResultIsNumber6 : number +>--obj.x : number +>obj.x : number +>obj : { x: number; y: any; } +>x : number + +var ResultIsNumber7 = --obj.y; +>ResultIsNumber7 : number +>--obj.y : number +>obj.y : any +>obj : { x: number; y: any; } +>y : any + +var ResultIsNumber8 = --objA.a; +>ResultIsNumber8 : number +>--objA.a : number +>objA.a : any +>objA : A +>a : any + +var ResultIsNumber = --M.n; +>ResultIsNumber : number +>--M.n : number +>M.n : any +>M : typeof M +>n : any + +var ResultIsNumber9 = ANY2[0]--; +>ResultIsNumber9 : number +>ANY2[0]-- : number +>ANY2[0] : any +>ANY2 : any[] + +var ResultIsNumber10 = obj.x--; +>ResultIsNumber10 : number +>obj.x-- : number +>obj.x : number +>obj : { x: number; y: any; } +>x : number + +var ResultIsNumber11 = obj.y--; +>ResultIsNumber11 : number +>obj.y-- : number +>obj.y : any +>obj : { x: number; y: any; } +>y : any + +var ResultIsNumber12 = objA.a--; +>ResultIsNumber12 : number +>objA.a-- : number +>objA.a : any +>objA : A +>a : any + +var ResultIsNumber13 = M.n--; +>ResultIsNumber13 : number +>M.n-- : number +>M.n : any +>M : typeof M +>n : any + +// miss assignment opertors +--ANY; +>--ANY : number +>ANY : any + +--ANY1; +>--ANY1 : number +>ANY1 : any + +--ANY2[0]; +>--ANY2[0] : number +>ANY2[0] : any +>ANY2 : any[] + +--ANY, --ANY1; +>--ANY, --ANY1 : number +>--ANY : number +>ANY : any +>--ANY1 : number +>ANY1 : any + +--objA.a; +>--objA.a : number +>objA.a : any +>objA : A +>a : any + +--M.n; +>--M.n : number +>M.n : any +>M : typeof M +>n : any + +ANY--; +>ANY-- : number +>ANY : any + +ANY1--; +>ANY1-- : number +>ANY1 : any + +ANY2[0]--; +>ANY2[0]-- : number +>ANY2[0] : any +>ANY2 : any[] + +ANY--, ANY1--; +>ANY--, ANY1-- : number +>ANY-- : number +>ANY : any +>ANY1-- : number +>ANY1 : any + +objA.a--; +>objA.a-- : number +>objA.a : any +>objA : A +>a : any + +M.n--; +>M.n-- : number +>M.n : any +>M : typeof M +>n : any + diff --git a/tests/baselines/reference/decrementOperatorWithAnyOtherTypeInvalidOperations.js b/tests/baselines/reference/decrementOperatorWithAnyOtherTypeInvalidOperations.js index 30dce46eba3..6006f1bcf26 100644 --- a/tests/baselines/reference/decrementOperatorWithAnyOtherTypeInvalidOperations.js +++ b/tests/baselines/reference/decrementOperatorWithAnyOtherTypeInvalidOperations.js @@ -73,6 +73,7 @@ ANY2--; ++ANY2[0]--; //// [decrementOperatorWithAnyOtherTypeInvalidOperations.js] +// -- operator on any type var ANY1; var ANY2 = ["", ""]; var obj; @@ -96,6 +97,7 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// any type var var ResultIsNumber1 = --ANY2; var ResultIsNumber2 = --A; var ResultIsNumber3 = --M; @@ -106,12 +108,14 @@ var ResultIsNumber7 = A--; var ResultIsNumber8 = M--; var ResultIsNumber9 = obj--; var ResultIsNumber10 = obj1--; +// any type literal var ResultIsNumber11 = --{}; var ResultIsNumber12 = --null; var ResultIsNumber13 = --undefined; var ResultIsNumber14 = null--; var ResultIsNumber15 = {}--; var ResultIsNumber16 = undefined--; +// any type expressions var ResultIsNumber17 = --foo(); var ResultIsNumber18 = --A.foo(); var ResultIsNumber19 = --(null + undefined); @@ -126,6 +130,7 @@ var ResultIsNumber27 = (null + null)--; var ResultIsNumber28 = (undefined + undefined)--; var ResultIsNumber29 = obj1.x--; var ResultIsNumber30 = obj1.y--; +// miss assignment operators --ANY2; ANY2--; --ANY1--; diff --git a/tests/baselines/reference/decrementOperatorWithEnumType.js b/tests/baselines/reference/decrementOperatorWithEnumType.js index 993fe2487bb..8c22fd18928 100644 --- a/tests/baselines/reference/decrementOperatorWithEnumType.js +++ b/tests/baselines/reference/decrementOperatorWithEnumType.js @@ -13,6 +13,7 @@ var ResultIsNumber2 = ENUM1[1]--; ENUM1[1]--; //// [decrementOperatorWithEnumType.js] +// -- operator on enum type var ENUM1; (function (ENUM1) { ENUM1[ENUM1["1"] = 0] = "1"; @@ -20,7 +21,9 @@ var ENUM1; ENUM1[ENUM1[""] = 2] = ""; })(ENUM1 || (ENUM1 = {})); ; +// expression var ResultIsNumber1 = --ENUM1[1]; var ResultIsNumber2 = ENUM1[1]--; +// miss assignment operator --ENUM1[1]; ENUM1[1]--; diff --git a/tests/baselines/reference/decrementOperatorWithEnumType.types b/tests/baselines/reference/decrementOperatorWithEnumType.types new file mode 100644 index 00000000000..fc670ddc6f7 --- /dev/null +++ b/tests/baselines/reference/decrementOperatorWithEnumType.types @@ -0,0 +1,30 @@ +=== tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts === +// -- operator on enum type + +enum ENUM1 { 1, 2, "" }; +>ENUM1 : ENUM1 + +// expression +var ResultIsNumber1 = --ENUM1[1]; +>ResultIsNumber1 : number +>--ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +var ResultIsNumber2 = ENUM1[1]--; +>ResultIsNumber2 : number +>ENUM1[1]-- : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +// miss assignment operator +--ENUM1[1]; +>--ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +ENUM1[1]--; +>ENUM1[1]-- : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + diff --git a/tests/baselines/reference/decrementOperatorWithEnumTypeInvalidOperations.js b/tests/baselines/reference/decrementOperatorWithEnumTypeInvalidOperations.js index a8c552ada59..410e3c144ef 100644 --- a/tests/baselines/reference/decrementOperatorWithEnumTypeInvalidOperations.js +++ b/tests/baselines/reference/decrementOperatorWithEnumTypeInvalidOperations.js @@ -23,6 +23,7 @@ ENUM--; ENUM1--; //// [decrementOperatorWithEnumTypeInvalidOperations.js] +// -- operator on enum type var ENUM; (function (ENUM) { })(ENUM || (ENUM = {})); @@ -34,12 +35,15 @@ var ENUM1; ENUM1[ENUM1[""] = 2] = ""; })(ENUM1 || (ENUM1 = {})); ; +// enum type var var ResultIsNumber1 = --ENUM; var ResultIsNumber2 = --ENUM1; var ResultIsNumber3 = ENUM--; var ResultIsNumber4 = ENUM1--; +// enum type expressions var ResultIsNumber5 = --(ENUM[1] + ENUM[2]); var ResultIsNumber6 = (ENUM[1] + ENUM[2])--; +// miss assignment operator --ENUM; --ENUM1; ENUM--; diff --git a/tests/baselines/reference/decrementOperatorWithNumberType.js b/tests/baselines/reference/decrementOperatorWithNumberType.js index 381ad2b534f..85ed9ca548a 100644 --- a/tests/baselines/reference/decrementOperatorWithNumberType.js +++ b/tests/baselines/reference/decrementOperatorWithNumberType.js @@ -40,6 +40,7 @@ M.n--; objA.a--, M.n--; //// [decrementOperatorWithNumberType.js] +// -- operator on number type var NUMBER; var NUMBER1 = [1, 2]; var A = (function () { @@ -52,13 +53,16 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// number type var var ResultIsNumber1 = --NUMBER; var ResultIsNumber2 = NUMBER--; +// expressions var ResultIsNumber3 = --objA.a; var ResultIsNumber4 = --M.n; var ResultIsNumber5 = objA.a--; var ResultIsNumber6 = M.n--; var ResultIsNumber7 = NUMBER1[0]--; +// miss assignment operators --NUMBER; --NUMBER1[0]; --objA.a; diff --git a/tests/baselines/reference/decrementOperatorWithNumberType.types b/tests/baselines/reference/decrementOperatorWithNumberType.types new file mode 100644 index 00000000000..d619db84e46 --- /dev/null +++ b/tests/baselines/reference/decrementOperatorWithNumberType.types @@ -0,0 +1,137 @@ +=== tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithNumberType.ts === +// -- operator on number type +var NUMBER: number; +>NUMBER : number + +var NUMBER1: number[] = [1, 2]; +>NUMBER1 : number[] +>[1, 2] : number[] + +class A { +>A : A + + public a: number; +>a : number +} +module M { +>M : typeof M + + export var n: number; +>n : number +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// number type var +var ResultIsNumber1 = --NUMBER; +>ResultIsNumber1 : number +>--NUMBER : number +>NUMBER : number + +var ResultIsNumber2 = NUMBER--; +>ResultIsNumber2 : number +>NUMBER-- : number +>NUMBER : number + +// expressions +var ResultIsNumber3 = --objA.a; +>ResultIsNumber3 : number +>--objA.a : number +>objA.a : number +>objA : A +>a : number + +var ResultIsNumber4 = --M.n; +>ResultIsNumber4 : number +>--M.n : number +>M.n : number +>M : typeof M +>n : number + +var ResultIsNumber5 = objA.a--; +>ResultIsNumber5 : number +>objA.a-- : number +>objA.a : number +>objA : A +>a : number + +var ResultIsNumber6 = M.n--; +>ResultIsNumber6 : number +>M.n-- : number +>M.n : number +>M : typeof M +>n : number + +var ResultIsNumber7 = NUMBER1[0]--; +>ResultIsNumber7 : number +>NUMBER1[0]-- : number +>NUMBER1[0] : number +>NUMBER1 : number[] + +// miss assignment operators +--NUMBER; +>--NUMBER : number +>NUMBER : number + +--NUMBER1[0]; +>--NUMBER1[0] : number +>NUMBER1[0] : number +>NUMBER1 : number[] + +--objA.a; +>--objA.a : number +>objA.a : number +>objA : A +>a : number + +--M.n; +>--M.n : number +>M.n : number +>M : typeof M +>n : number + +--objA.a, M.n; +>--objA.a, M.n : number +>--objA.a : number +>objA.a : number +>objA : A +>a : number +>M.n : number +>M : typeof M +>n : number + +NUMBER--; +>NUMBER-- : number +>NUMBER : number + +NUMBER1[0]--; +>NUMBER1[0]-- : number +>NUMBER1[0] : number +>NUMBER1 : number[] + +objA.a--; +>objA.a-- : number +>objA.a : number +>objA : A +>a : number + +M.n--; +>M.n-- : number +>M.n : number +>M : typeof M +>n : number + +objA.a--, M.n--; +>objA.a--, M.n-- : number +>objA.a-- : number +>objA.a : number +>objA : A +>a : number +>M.n-- : number +>M.n : number +>M : typeof M +>n : number + diff --git a/tests/baselines/reference/decrementOperatorWithNumberTypeInvalidOperations.js b/tests/baselines/reference/decrementOperatorWithNumberTypeInvalidOperations.js index e9b2ff0e87f..8fc1c601982 100644 --- a/tests/baselines/reference/decrementOperatorWithNumberTypeInvalidOperations.js +++ b/tests/baselines/reference/decrementOperatorWithNumberTypeInvalidOperations.js @@ -47,6 +47,7 @@ NUMBER1--; foo()--; //// [decrementOperatorWithNumberTypeInvalidOperations.js] +// -- operator on number type var NUMBER; var NUMBER1 = [1, 2]; function foo() { @@ -65,8 +66,10 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +//number type var var ResultIsNumber1 = --NUMBER1; var ResultIsNumber2 = NUMBER1--; +// number type literal var ResultIsNumber3 = --1; var ResultIsNumber4 = --{ x: 1, y: 2 }; var ResultIsNumber5 = --{ x: 1, y: function (n) { @@ -77,12 +80,14 @@ var ResultIsNumber7 = { x: 1, y: 2 }--; var ResultIsNumber8 = { x: 1, y: function (n) { return n; } }--; +// number type expressions var ResultIsNumber9 = --foo(); var ResultIsNumber10 = --A.foo(); var ResultIsNumber11 = --(NUMBER + NUMBER); var ResultIsNumber12 = foo()--; var ResultIsNumber13 = A.foo()--; var ResultIsNumber14 = (NUMBER + NUMBER)--; +// miss assignment operator --1; --NUMBER1; --foo(); diff --git a/tests/baselines/reference/decrementOperatorWithUnsupportedBooleanType.js b/tests/baselines/reference/decrementOperatorWithUnsupportedBooleanType.js index cffee508431..22c86aa8450 100644 --- a/tests/baselines/reference/decrementOperatorWithUnsupportedBooleanType.js +++ b/tests/baselines/reference/decrementOperatorWithUnsupportedBooleanType.js @@ -55,6 +55,7 @@ M.n--; objA.a--, M.n--; //// [decrementOperatorWithUnsupportedBooleanType.js] +// -- operator on boolean type var BOOLEAN; function foo() { return true; @@ -72,8 +73,10 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// boolean type var var ResultIsNumber1 = --BOOLEAN; var ResultIsNumber2 = BOOLEAN--; +// boolean type literal var ResultIsNumber3 = --true; var ResultIsNumber4 = --{ x: true, y: false }; var ResultIsNumber5 = --{ x: true, y: function (n) { @@ -84,6 +87,7 @@ var ResultIsNumber7 = { x: true, y: false }--; var ResultIsNumber8 = { x: true, y: function (n) { return n; } }--; +// boolean type expressions var ResultIsNumber9 = --objA.a; var ResultIsNumber10 = --M.n; var ResultIsNumber11 = --foo(); @@ -92,6 +96,7 @@ var ResultIsNumber13 = foo()--; var ResultIsNumber14 = A.foo()--; var ResultIsNumber15 = objA.a--; var ResultIsNumber16 = M.n--; +// miss assignment operators --true; --BOOLEAN; --foo(); diff --git a/tests/baselines/reference/decrementOperatorWithUnsupportedStringType.js b/tests/baselines/reference/decrementOperatorWithUnsupportedStringType.js index 7eb26de8a67..1747b1648d6 100644 --- a/tests/baselines/reference/decrementOperatorWithUnsupportedStringType.js +++ b/tests/baselines/reference/decrementOperatorWithUnsupportedStringType.js @@ -66,6 +66,7 @@ M.n--; objA.a--, M.n--; //// [decrementOperatorWithUnsupportedStringType.js] +// -- operator on string type var STRING; var STRING1 = ["", ""]; function foo() { @@ -84,10 +85,12 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// string type var var ResultIsNumber1 = --STRING; var ResultIsNumber2 = --STRING1; var ResultIsNumber3 = STRING--; var ResultIsNumber4 = STRING1--; +// string type literal var ResultIsNumber5 = --""; var ResultIsNumber6 = --{ x: "", y: "" }; var ResultIsNumber7 = --{ x: "", y: function (s) { @@ -98,6 +101,7 @@ var ResultIsNumber9 = { x: "", y: "" }--; var ResultIsNumber10 = { x: "", y: function (s) { return s; } }--; +// string type expressions var ResultIsNumber11 = --objA.a; var ResultIsNumber12 = --M.n; var ResultIsNumber13 = --STRING1[0]; @@ -110,6 +114,7 @@ var ResultIsNumber19 = STRING1[0]--; var ResultIsNumber20 = foo()--; var ResultIsNumber21 = A.foo()--; var ResultIsNumber22 = (STRING + STRING)--; +// miss assignment operators --""; --STRING; --STRING1; diff --git a/tests/baselines/reference/defaultArgsForwardReferencing.js b/tests/baselines/reference/defaultArgsForwardReferencing.js index 5926dd7105f..4e9a5ae60e3 100644 --- a/tests/baselines/reference/defaultArgsForwardReferencing.js +++ b/tests/baselines/reference/defaultArgsForwardReferencing.js @@ -90,6 +90,7 @@ var C = (function () { }; return C; })(); +// Function expressions var x = function (a, b, c) { if (a === void 0) { a = b; } if (b === void 0) { b = c; } diff --git a/tests/baselines/reference/defaultArgsInFunctionExpressions.js b/tests/baselines/reference/defaultArgsInFunctionExpressions.js index a5872ceac7b..3f77c4430e8 100644 --- a/tests/baselines/reference/defaultArgsInFunctionExpressions.js +++ b/tests/baselines/reference/defaultArgsInFunctionExpressions.js @@ -35,24 +35,28 @@ f7().x; var f = function (a) { if (a === void 0) { a = 3; } return a; -}; +}; // Type should be (a?: number) => number var n = f(4); n = f(); var s = f(''); s = f(); +// Type check the default argument with the type annotation var f2 = function (a) { if (a === void 0) { a = 3; } return a; -}; +}; // Should error, but be of type (a: string) => string; s = f2(''); s = f2(); n = f2(); +// Contextually type the default arg with the type annotation var f3 = function (a) { if (a === void 0) { a = function (s) { return s; }; } }; +// Type check using the function's contextual type var f4 = function (a) { if (a === void 0) { a = ""; } }; +// Contextually type the default arg using the function's contextual type var f5 = function (a) { if (a === void 0) { a = function (s) { return s; }; } }; diff --git a/tests/baselines/reference/defaultBestCommonTypesHaveDecls.js b/tests/baselines/reference/defaultBestCommonTypesHaveDecls.js index 8924198b7dc..59935cc53af 100644 --- a/tests/baselines/reference/defaultBestCommonTypesHaveDecls.js +++ b/tests/baselines/reference/defaultBestCommonTypesHaveDecls.js @@ -28,4 +28,4 @@ function concat(x, y) { return null; } var result = concat(1, ""); -var elementCount = result.length; +var elementCount = result.length; // would like to get an error by now diff --git a/tests/baselines/reference/defaultIndexProps1.types b/tests/baselines/reference/defaultIndexProps1.types new file mode 100644 index 00000000000..9bb9c4a32c2 --- /dev/null +++ b/tests/baselines/reference/defaultIndexProps1.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/defaultIndexProps1.ts === +class Foo { +>Foo : Foo + + public v = "Yo"; +>v : string +} + +var f = new Foo(); +>f : Foo +>new Foo() : Foo +>Foo : typeof Foo + +var q = f["v"]; +>q : string +>f["v"] : string +>f : Foo + +var o = {v:"Yo2"}; +>o : { v: string; } +>{v:"Yo2"} : { v: string; } +>v : string + +var q2 = o["v"]; +>q2 : string +>o["v"] : string +>o : { v: string; } + diff --git a/tests/baselines/reference/defaultIndexProps2.js b/tests/baselines/reference/defaultIndexProps2.js index 67a894bf9e1..7652e591cc9 100644 --- a/tests/baselines/reference/defaultIndexProps2.js +++ b/tests/baselines/reference/defaultIndexProps2.js @@ -23,6 +23,8 @@ var Foo = (function () { return Foo; })(); var f = new Foo(); +// WScript.Echo(f[0]); var o = { v: "Yo2" }; +// WScript.Echo(o[0]); 1[0]; var q = "s"[0]; diff --git a/tests/baselines/reference/defaultIndexProps2.types b/tests/baselines/reference/defaultIndexProps2.types new file mode 100644 index 00000000000..26850bd1456 --- /dev/null +++ b/tests/baselines/reference/defaultIndexProps2.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/defaultIndexProps2.ts === +class Foo { +>Foo : Foo + + public v = "Yo"; +>v : string +} + +var f = new Foo(); +>f : Foo +>new Foo() : Foo +>Foo : typeof Foo + +// WScript.Echo(f[0]); + +var o = {v:"Yo2"}; +>o : { v: string; } +>{v:"Yo2"} : { v: string; } +>v : string + +// WScript.Echo(o[0]); + +1[0]; +>1[0] : any + +var q = "s"[0]; +>q : string +>"s"[0] : string + diff --git a/tests/baselines/reference/deleteOperatorWithAnyOtherType.js b/tests/baselines/reference/deleteOperatorWithAnyOtherType.js index 167ce961b3a..c8a84ac83ea 100644 --- a/tests/baselines/reference/deleteOperatorWithAnyOtherType.js +++ b/tests/baselines/reference/deleteOperatorWithAnyOtherType.js @@ -62,6 +62,7 @@ delete objA.a; delete M.n; //// [deleteOperatorWithAnyOtherType.js] +// delete operator on any type var ANY; var ANY1; var ANY2 = ["", ""]; @@ -86,14 +87,17 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// any type var var ResultIsBoolean1 = delete ANY1; var ResultIsBoolean2 = delete ANY2; var ResultIsBoolean3 = delete A; var ResultIsBoolean4 = delete M; var ResultIsBoolean5 = delete obj; var ResultIsBoolean6 = delete obj1; +// any type literal var ResultIsBoolean7 = delete undefined; var ResultIsBoolean8 = delete null; +// any type expressions var ResultIsBoolean9 = delete ANY2[0]; var ResultIsBoolean10 = delete obj1.x; var ResultIsBoolean11 = delete obj1.y; @@ -105,8 +109,10 @@ var ResultIsBoolean16 = delete (ANY + ANY1); var ResultIsBoolean17 = delete (null + undefined); var ResultIsBoolean18 = delete (null + null); var ResultIsBoolean19 = delete (undefined + undefined); +// multiple delete operators var ResultIsBoolean20 = delete delete ANY; var ResultIsBoolean21 = delete delete delete (ANY + ANY1); +// miss assignment operators delete ANY; delete ANY1; delete ANY2[0]; diff --git a/tests/baselines/reference/deleteOperatorWithBooleanType.js b/tests/baselines/reference/deleteOperatorWithBooleanType.js index 198e3c73b7a..cab9cba2c95 100644 --- a/tests/baselines/reference/deleteOperatorWithBooleanType.js +++ b/tests/baselines/reference/deleteOperatorWithBooleanType.js @@ -39,6 +39,7 @@ delete objA.a; delete M.n; //// [deleteOperatorWithBooleanType.js] +// delete operator on boolean type var BOOLEAN; function foo() { return true; @@ -56,14 +57,19 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// boolean type var var ResultIsBoolean1 = delete BOOLEAN; +// boolean type literal var ResultIsBoolean2 = delete true; var ResultIsBoolean3 = delete { x: true, y: false }; +// boolean type expressions var ResultIsBoolean4 = delete objA.a; var ResultIsBoolean5 = delete M.n; var ResultIsBoolean6 = delete foo(); var ResultIsBoolean7 = delete A.foo(); +// multiple delete operator var ResultIsBoolean8 = delete delete BOOLEAN; +// miss assignment operators delete true; delete BOOLEAN; delete foo(); diff --git a/tests/baselines/reference/deleteOperatorWithBooleanType.types b/tests/baselines/reference/deleteOperatorWithBooleanType.types new file mode 100644 index 00000000000..fa8c375b0a5 --- /dev/null +++ b/tests/baselines/reference/deleteOperatorWithBooleanType.types @@ -0,0 +1,112 @@ +=== tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorWithBooleanType.ts === +// delete operator on boolean type +var BOOLEAN: boolean; +>BOOLEAN : boolean + +function foo(): boolean { return true; } +>foo : () => boolean + +class A { +>A : A + + public a: boolean; +>a : boolean + + static foo() { return false; } +>foo : () => boolean +} +module M { +>M : typeof M + + export var n: boolean; +>n : boolean +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// boolean type var +var ResultIsBoolean1 = delete BOOLEAN; +>ResultIsBoolean1 : boolean +>delete BOOLEAN : boolean +>BOOLEAN : boolean + +// boolean type literal +var ResultIsBoolean2 = delete true; +>ResultIsBoolean2 : boolean +>delete true : boolean + +var ResultIsBoolean3 = delete { x: true, y: false }; +>ResultIsBoolean3 : boolean +>delete { x: true, y: false } : boolean +>{ x: true, y: false } : { x: boolean; y: boolean; } +>x : boolean +>y : boolean + +// boolean type expressions +var ResultIsBoolean4 = delete objA.a; +>ResultIsBoolean4 : boolean +>delete objA.a : boolean +>objA.a : boolean +>objA : A +>a : boolean + +var ResultIsBoolean5 = delete M.n; +>ResultIsBoolean5 : boolean +>delete M.n : boolean +>M.n : boolean +>M : typeof M +>n : boolean + +var ResultIsBoolean6 = delete foo(); +>ResultIsBoolean6 : boolean +>delete foo() : boolean +>foo() : boolean +>foo : () => boolean + +var ResultIsBoolean7 = delete A.foo(); +>ResultIsBoolean7 : boolean +>delete A.foo() : boolean +>A.foo() : boolean +>A.foo : () => boolean +>A : typeof A +>foo : () => boolean + +// multiple delete operator +var ResultIsBoolean8 = delete delete BOOLEAN; +>ResultIsBoolean8 : boolean +>delete delete BOOLEAN : boolean +>delete BOOLEAN : boolean +>BOOLEAN : boolean + +// miss assignment operators +delete true; +>delete true : boolean + +delete BOOLEAN; +>delete BOOLEAN : boolean +>BOOLEAN : boolean + +delete foo(); +>delete foo() : boolean +>foo() : boolean +>foo : () => boolean + +delete true, false; +>delete true, false : boolean +>delete true : boolean + +delete objA.a; +>delete objA.a : boolean +>objA.a : boolean +>objA : A +>a : boolean + +delete M.n; +>delete M.n : boolean +>M.n : boolean +>M : typeof M +>n : boolean + diff --git a/tests/baselines/reference/deleteOperatorWithEnumType.js b/tests/baselines/reference/deleteOperatorWithEnumType.js index fd5e1e674f6..d7fd9c95ee8 100644 --- a/tests/baselines/reference/deleteOperatorWithEnumType.js +++ b/tests/baselines/reference/deleteOperatorWithEnumType.js @@ -23,6 +23,7 @@ delete ENUM1[1]; delete ENUM, ENUM1; //// [deleteOperatorWithEnumType.js] +// delete operator on enum type var ENUM; (function (ENUM) { })(ENUM || (ENUM = {})); @@ -34,12 +35,16 @@ var ENUM1; ENUM1[ENUM1[""] = 2] = ""; })(ENUM1 || (ENUM1 = {})); ; +// enum type var var ResultIsBoolean1 = delete ENUM; var ResultIsBoolean2 = delete ENUM1; +// enum type expressions var ResultIsBoolean3 = delete ENUM1[0]; var ResultIsBoolean4 = delete (ENUM[0] + ENUM1[1]); +// multiple delete operators var ResultIsBoolean5 = delete delete ENUM; var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1[1]); +// miss assignment operators delete ENUM; delete ENUM1; delete ENUM1[1]; diff --git a/tests/baselines/reference/deleteOperatorWithEnumType.types b/tests/baselines/reference/deleteOperatorWithEnumType.types new file mode 100644 index 00000000000..d356693616f --- /dev/null +++ b/tests/baselines/reference/deleteOperatorWithEnumType.types @@ -0,0 +1,76 @@ +=== tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorWithEnumType.ts === +// delete operator on enum type + +enum ENUM { }; +>ENUM : ENUM + +enum ENUM1 { 1, 2, "" }; +>ENUM1 : ENUM1 + +// enum type var +var ResultIsBoolean1 = delete ENUM; +>ResultIsBoolean1 : boolean +>delete ENUM : boolean +>ENUM : typeof ENUM + +var ResultIsBoolean2 = delete ENUM1; +>ResultIsBoolean2 : boolean +>delete ENUM1 : boolean +>ENUM1 : typeof ENUM1 + +// enum type expressions +var ResultIsBoolean3 = delete ENUM1[0]; +>ResultIsBoolean3 : boolean +>delete ENUM1[0] : boolean +>ENUM1[0] : string +>ENUM1 : typeof ENUM1 + +var ResultIsBoolean4 = delete (ENUM[0] + ENUM1[1]); +>ResultIsBoolean4 : boolean +>delete (ENUM[0] + ENUM1[1]) : boolean +>(ENUM[0] + ENUM1[1]) : string +>ENUM[0] + ENUM1[1] : string +>ENUM[0] : string +>ENUM : typeof ENUM +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +// multiple delete operators +var ResultIsBoolean5 = delete delete ENUM; +>ResultIsBoolean5 : boolean +>delete delete ENUM : boolean +>delete ENUM : boolean +>ENUM : typeof ENUM + +var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1[1]); +>ResultIsBoolean6 : boolean +>delete delete delete (ENUM[0] + ENUM1[1]) : boolean +>delete delete (ENUM[0] + ENUM1[1]) : boolean +>delete (ENUM[0] + ENUM1[1]) : boolean +>(ENUM[0] + ENUM1[1]) : string +>ENUM[0] + ENUM1[1] : string +>ENUM[0] : string +>ENUM : typeof ENUM +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +// miss assignment operators +delete ENUM; +>delete ENUM : boolean +>ENUM : typeof ENUM + +delete ENUM1; +>delete ENUM1 : boolean +>ENUM1 : typeof ENUM1 + +delete ENUM1[1]; +>delete ENUM1[1] : boolean +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +delete ENUM, ENUM1; +>delete ENUM, ENUM1 : typeof ENUM1 +>delete ENUM : boolean +>ENUM : typeof ENUM +>ENUM1 : typeof ENUM1 + diff --git a/tests/baselines/reference/deleteOperatorWithNumberType.js b/tests/baselines/reference/deleteOperatorWithNumberType.js index 7b6cdcb962b..d19ae045805 100644 --- a/tests/baselines/reference/deleteOperatorWithNumberType.js +++ b/tests/baselines/reference/deleteOperatorWithNumberType.js @@ -46,6 +46,7 @@ delete M.n; delete objA.a, M.n; //// [deleteOperatorWithNumberType.js] +// delete operator on number type var NUMBER; var NUMBER1 = [1, 2]; function foo() { @@ -64,21 +65,26 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// number type var var ResultIsBoolean1 = delete NUMBER; var ResultIsBoolean2 = delete NUMBER1; +// number type literal var ResultIsBoolean3 = delete 1; var ResultIsBoolean4 = delete { x: 1, y: 2 }; var ResultIsBoolean5 = delete { x: 1, y: function (n) { return n; } }; +// number type expressions var ResultIsBoolean6 = delete objA.a; var ResultIsBoolean7 = delete M.n; var ResultIsBoolean8 = delete NUMBER1[0]; var ResultIsBoolean9 = delete foo(); var ResultIsBoolean10 = delete A.foo(); var ResultIsBoolean11 = delete (NUMBER + NUMBER); +// multiple delete operator var ResultIsBoolean12 = delete delete NUMBER; var ResultIsBoolean13 = delete delete delete (NUMBER + NUMBER); +// miss assignment operators delete 1; delete NUMBER; delete NUMBER1; diff --git a/tests/baselines/reference/deleteOperatorWithNumberType.types b/tests/baselines/reference/deleteOperatorWithNumberType.types new file mode 100644 index 00000000000..542efe04c34 --- /dev/null +++ b/tests/baselines/reference/deleteOperatorWithNumberType.types @@ -0,0 +1,165 @@ +=== tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorWithNumberType.ts === +// delete operator on number type +var NUMBER: number; +>NUMBER : number + +var NUMBER1: number[] = [1, 2]; +>NUMBER1 : number[] +>[1, 2] : number[] + +function foo(): number { return 1; } +>foo : () => number + +class A { +>A : A + + public a: number; +>a : number + + static foo() { return 1; } +>foo : () => number +} +module M { +>M : typeof M + + export var n: number; +>n : number +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// number type var +var ResultIsBoolean1 = delete NUMBER; +>ResultIsBoolean1 : boolean +>delete NUMBER : boolean +>NUMBER : number + +var ResultIsBoolean2 = delete NUMBER1; +>ResultIsBoolean2 : boolean +>delete NUMBER1 : boolean +>NUMBER1 : number[] + +// number type literal +var ResultIsBoolean3 = delete 1; +>ResultIsBoolean3 : boolean +>delete 1 : boolean + +var ResultIsBoolean4 = delete { x: 1, y: 2}; +>ResultIsBoolean4 : boolean +>delete { x: 1, y: 2} : boolean +>{ x: 1, y: 2} : { x: number; y: number; } +>x : number +>y : number + +var ResultIsBoolean5 = delete { x: 1, y: (n: number) => { return n; } }; +>ResultIsBoolean5 : boolean +>delete { x: 1, y: (n: number) => { return n; } } : boolean +>{ x: 1, y: (n: number) => { return n; } } : { x: number; y: (n: number) => number; } +>x : number +>y : (n: number) => number +>(n: number) => { return n; } : (n: number) => number +>n : number +>n : number + +// number type expressions +var ResultIsBoolean6 = delete objA.a; +>ResultIsBoolean6 : boolean +>delete objA.a : boolean +>objA.a : number +>objA : A +>a : number + +var ResultIsBoolean7 = delete M.n; +>ResultIsBoolean7 : boolean +>delete M.n : boolean +>M.n : number +>M : typeof M +>n : number + +var ResultIsBoolean8 = delete NUMBER1[0]; +>ResultIsBoolean8 : boolean +>delete NUMBER1[0] : boolean +>NUMBER1[0] : number +>NUMBER1 : number[] + +var ResultIsBoolean9 = delete foo(); +>ResultIsBoolean9 : boolean +>delete foo() : boolean +>foo() : number +>foo : () => number + +var ResultIsBoolean10 = delete A.foo(); +>ResultIsBoolean10 : boolean +>delete A.foo() : boolean +>A.foo() : number +>A.foo : () => number +>A : typeof A +>foo : () => number + +var ResultIsBoolean11 = delete (NUMBER + NUMBER); +>ResultIsBoolean11 : boolean +>delete (NUMBER + NUMBER) : boolean +>(NUMBER + NUMBER) : number +>NUMBER + NUMBER : number +>NUMBER : number +>NUMBER : number + +// multiple delete operator +var ResultIsBoolean12 = delete delete NUMBER; +>ResultIsBoolean12 : boolean +>delete delete NUMBER : boolean +>delete NUMBER : boolean +>NUMBER : number + +var ResultIsBoolean13 = delete delete delete (NUMBER + NUMBER); +>ResultIsBoolean13 : boolean +>delete delete delete (NUMBER + NUMBER) : boolean +>delete delete (NUMBER + NUMBER) : boolean +>delete (NUMBER + NUMBER) : boolean +>(NUMBER + NUMBER) : number +>NUMBER + NUMBER : number +>NUMBER : number +>NUMBER : number + +// miss assignment operators +delete 1; +>delete 1 : boolean + +delete NUMBER; +>delete NUMBER : boolean +>NUMBER : number + +delete NUMBER1; +>delete NUMBER1 : boolean +>NUMBER1 : number[] + +delete foo(); +>delete foo() : boolean +>foo() : number +>foo : () => number + +delete objA.a; +>delete objA.a : boolean +>objA.a : number +>objA : A +>a : number + +delete M.n; +>delete M.n : boolean +>M.n : number +>M : typeof M +>n : number + +delete objA.a, M.n; +>delete objA.a, M.n : number +>delete objA.a : boolean +>objA.a : number +>objA : A +>a : number +>M.n : number +>M : typeof M +>n : number + diff --git a/tests/baselines/reference/deleteOperatorWithStringType.js b/tests/baselines/reference/deleteOperatorWithStringType.js index 65a1ed5ef18..ad27e8f84ad 100644 --- a/tests/baselines/reference/deleteOperatorWithStringType.js +++ b/tests/baselines/reference/deleteOperatorWithStringType.js @@ -45,6 +45,7 @@ delete foo(); delete objA.a,M.n; //// [deleteOperatorWithStringType.js] +// delete operator on string type var STRING; var STRING1 = ["", "abc"]; function foo() { @@ -63,13 +64,16 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// string type var var ResultIsBoolean1 = delete STRING; var ResultIsBoolean2 = delete STRING1; +// string type literal var ResultIsBoolean3 = delete ""; var ResultIsBoolean4 = delete { x: "", y: "" }; var ResultIsBoolean5 = delete { x: "", y: function (s) { return s; } }; +// string type expressions var ResultIsBoolean6 = delete objA.a; var ResultIsBoolean7 = delete M.n; var ResultIsBoolean8 = delete STRING1[0]; @@ -77,8 +81,10 @@ var ResultIsBoolean9 = delete foo(); var ResultIsBoolean10 = delete A.foo(); var ResultIsBoolean11 = delete (STRING + STRING); var ResultIsBoolean12 = delete STRING.charAt(0); +// multiple delete operator var ResultIsBoolean13 = delete delete STRING; var ResultIsBoolean14 = delete delete delete (STRING + STRING); +// miss assignment operators delete ""; delete STRING; delete STRING1; diff --git a/tests/baselines/reference/deleteOperatorWithStringType.types b/tests/baselines/reference/deleteOperatorWithStringType.types new file mode 100644 index 00000000000..f86afc39c49 --- /dev/null +++ b/tests/baselines/reference/deleteOperatorWithStringType.types @@ -0,0 +1,161 @@ +=== tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorWithStringType.ts === +// delete operator on string type +var STRING: string; +>STRING : string + +var STRING1: string[] = ["", "abc"]; +>STRING1 : string[] +>["", "abc"] : string[] + +function foo(): string { return "abc"; } +>foo : () => string + +class A { +>A : A + + public a: string; +>a : string + + static foo() { return ""; } +>foo : () => string +} +module M { +>M : typeof M + + export var n: string; +>n : string +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// string type var +var ResultIsBoolean1 = delete STRING; +>ResultIsBoolean1 : boolean +>delete STRING : boolean +>STRING : string + +var ResultIsBoolean2 = delete STRING1; +>ResultIsBoolean2 : boolean +>delete STRING1 : boolean +>STRING1 : string[] + +// string type literal +var ResultIsBoolean3 = delete ""; +>ResultIsBoolean3 : boolean +>delete "" : boolean + +var ResultIsBoolean4 = delete { x: "", y: "" }; +>ResultIsBoolean4 : boolean +>delete { x: "", y: "" } : boolean +>{ x: "", y: "" } : { x: string; y: string; } +>x : string +>y : string + +var ResultIsBoolean5 = delete { x: "", y: (s: string) => { return s; } }; +>ResultIsBoolean5 : boolean +>delete { x: "", y: (s: string) => { return s; } } : boolean +>{ x: "", y: (s: string) => { return s; } } : { x: string; y: (s: string) => string; } +>x : string +>y : (s: string) => string +>(s: string) => { return s; } : (s: string) => string +>s : string +>s : string + +// string type expressions +var ResultIsBoolean6 = delete objA.a; +>ResultIsBoolean6 : boolean +>delete objA.a : boolean +>objA.a : string +>objA : A +>a : string + +var ResultIsBoolean7 = delete M.n; +>ResultIsBoolean7 : boolean +>delete M.n : boolean +>M.n : string +>M : typeof M +>n : string + +var ResultIsBoolean8 = delete STRING1[0]; +>ResultIsBoolean8 : boolean +>delete STRING1[0] : boolean +>STRING1[0] : string +>STRING1 : string[] + +var ResultIsBoolean9 = delete foo(); +>ResultIsBoolean9 : boolean +>delete foo() : boolean +>foo() : string +>foo : () => string + +var ResultIsBoolean10 = delete A.foo(); +>ResultIsBoolean10 : boolean +>delete A.foo() : boolean +>A.foo() : string +>A.foo : () => string +>A : typeof A +>foo : () => string + +var ResultIsBoolean11 = delete (STRING + STRING); +>ResultIsBoolean11 : boolean +>delete (STRING + STRING) : boolean +>(STRING + STRING) : string +>STRING + STRING : string +>STRING : string +>STRING : string + +var ResultIsBoolean12 = delete STRING.charAt(0); +>ResultIsBoolean12 : boolean +>delete STRING.charAt(0) : boolean +>STRING.charAt(0) : string +>STRING.charAt : (pos: number) => string +>STRING : string +>charAt : (pos: number) => string + +// multiple delete operator +var ResultIsBoolean13 = delete delete STRING; +>ResultIsBoolean13 : boolean +>delete delete STRING : boolean +>delete STRING : boolean +>STRING : string + +var ResultIsBoolean14 = delete delete delete (STRING + STRING); +>ResultIsBoolean14 : boolean +>delete delete delete (STRING + STRING) : boolean +>delete delete (STRING + STRING) : boolean +>delete (STRING + STRING) : boolean +>(STRING + STRING) : string +>STRING + STRING : string +>STRING : string +>STRING : string + +// miss assignment operators +delete ""; +>delete "" : boolean + +delete STRING; +>delete STRING : boolean +>STRING : string + +delete STRING1; +>delete STRING1 : boolean +>STRING1 : string[] + +delete foo(); +>delete foo() : boolean +>foo() : string +>foo : () => string + +delete objA.a,M.n; +>delete objA.a,M.n : string +>delete objA.a : boolean +>objA.a : string +>objA : A +>a : string +>M.n : string +>M : typeof M +>n : string + diff --git a/tests/baselines/reference/dependencyViaImportAlias.types b/tests/baselines/reference/dependencyViaImportAlias.types new file mode 100644 index 00000000000..aa4655e44f0 --- /dev/null +++ b/tests/baselines/reference/dependencyViaImportAlias.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/B.ts === +import a = require('A'); +>a : typeof a + +import A = a.A; +>A : typeof a.A +>a : typeof a +>A : a.A + +export = A; +>A : a.A + +=== tests/cases/compiler/A.ts === +export class A { +>A : A +} diff --git a/tests/baselines/reference/deprecatedBool.types b/tests/baselines/reference/deprecatedBool.types new file mode 100644 index 00000000000..d8c70d56e50 --- /dev/null +++ b/tests/baselines/reference/deprecatedBool.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/deprecatedBool.ts === +var b4: boolean; +>b4 : boolean + +var bool: boolean; +>bool : boolean + diff --git a/tests/baselines/reference/derivedClassConstructorWithoutSuperCall.js b/tests/baselines/reference/derivedClassConstructorWithoutSuperCall.js index cc23b6804a2..1c56819b200 100644 --- a/tests/baselines/reference/derivedClassConstructorWithoutSuperCall.js +++ b/tests/baselines/reference/derivedClassConstructorWithoutSuperCall.js @@ -33,6 +33,7 @@ class Derived4 extends Base2 { } //// [derivedClassConstructorWithoutSuperCall.js] +// derived class constructors must contain a super call var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -58,7 +59,7 @@ var Base2 = (function () { var Derived2 = (function (_super) { __extends(Derived2, _super); function Derived2() { - var r2 = function () { return _super.call(this); }; + var r2 = function () { return _super.call(this); }; // error for misplaced super call (nested function) } return Derived2; })(Base2); @@ -67,14 +68,14 @@ var Derived3 = (function (_super) { function Derived3() { var r = function () { _super.call(this); - }; + }; // error } return Derived3; })(Base2); var Derived4 = (function (_super) { __extends(Derived4, _super); function Derived4() { - var r = _super.call(this); + var r = _super.call(this); // ok } return Derived4; })(Base2); diff --git a/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.js b/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.js index b72f391ccfe..a942e1ee237 100644 --- a/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.js +++ b/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.js @@ -29,6 +29,7 @@ var Base = (function () { } return Base; })(); +// ok, use assignment compatibility var Derived = (function (_super) { __extends(Derived, _super); function Derived() { @@ -41,6 +42,7 @@ var Base2 = (function () { } return Base2; })(); +// ok, use assignment compatibility var Derived2 = (function (_super) { __extends(Derived2, _super); function Derived2() { diff --git a/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types b/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types new file mode 100644 index 00000000000..97940edc6e7 --- /dev/null +++ b/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/members/inheritanceAndOverriding/derivedClassOverridesIndexersWithAssignmentCompatibility.ts === +class Base { +>Base : Base + + [x: string]: Object; +>x : string +>Object : Object +} + +// ok, use assignment compatibility +class Derived extends Base { +>Derived : Derived +>Base : Base + + [x: string]: any; +>x : string +} + +class Base2 { +>Base2 : Base2 + + [x: number]: Object; +>x : number +>Object : Object +} + +// ok, use assignment compatibility +class Derived2 extends Base2 { +>Derived2 : Derived2 +>Base2 : Base2 + + [x: number]: any; +>x : number +} diff --git a/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types b/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types new file mode 100644 index 00000000000..a46c8efa408 --- /dev/null +++ b/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/classes/members/inheritanceAndOverriding/derivedClassOverridesWithoutSubtype.ts === +class Base { +>Base : Base + + x: { +>x : { foo: string; } + + foo: string; +>foo : string + } +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + x: { +>x : { foo: any; } + + foo: any; +>foo : any + } +} + +class Base2 { +>Base2 : Base2 + + static y: { +>y : { foo: string; } + + foo: string; +>foo : string + } +} + +class Derived2 extends Base2 { +>Derived2 : Derived2 +>Base2 : Base2 + + static y: { +>y : { foo: any; } + + foo: any; +>foo : any + } +} diff --git a/tests/baselines/reference/derivedClassParameterProperties.js b/tests/baselines/reference/derivedClassParameterProperties.js index cb8115c9661..0ad14313c17 100644 --- a/tests/baselines/reference/derivedClassParameterProperties.js +++ b/tests/baselines/reference/derivedClassParameterProperties.js @@ -95,6 +95,7 @@ class Derived10 extends Base2 { } //// [derivedClassParameterProperties.js] +// ordering of super calls in derived constructors matters depending on other class contents var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -110,7 +111,7 @@ var Derived = (function (_super) { __extends(Derived, _super); function Derived(y) { var a = 1; - _super.call(this); + _super.call(this); // ok } return Derived; })(Base); @@ -119,14 +120,14 @@ var Derived2 = (function (_super) { function Derived2(y) { this.y = y; var a = 1; - _super.call(this); + _super.call(this); // error } return Derived2; })(Base); var Derived3 = (function (_super) { __extends(Derived3, _super); function Derived3(y) { - _super.call(this); + _super.call(this); // ok this.y = y; var a = 1; } @@ -137,14 +138,14 @@ var Derived4 = (function (_super) { function Derived4(y) { this.a = 1; var b = 2; - _super.call(this); + _super.call(this); // error } return Derived4; })(Base); var Derived5 = (function (_super) { __extends(Derived5, _super); function Derived5(y) { - _super.call(this); + _super.call(this); // ok this.a = 1; var b = 2; } @@ -155,7 +156,7 @@ var Derived6 = (function (_super) { function Derived6(y) { this.a = 1; var b = 2; - _super.call(this); + _super.call(this); // ok } return Derived6; })(Base); @@ -165,20 +166,21 @@ var Derived7 = (function (_super) { this.a = 1; this.a = 3; this.b = 3; - _super.call(this); + _super.call(this); // error } return Derived7; })(Base); var Derived8 = (function (_super) { __extends(Derived8, _super); function Derived8(y) { - _super.call(this); + _super.call(this); // ok this.a = 1; this.a = 3; this.b = 3; } return Derived8; })(Base); +// generic cases of Derived7 and Derived8 var Base2 = (function () { function Base2() { } @@ -190,14 +192,14 @@ var Derived9 = (function (_super) { this.a = 1; this.a = 3; this.b = 3; - _super.call(this); + _super.call(this); // error } return Derived9; })(Base2); var Derived10 = (function (_super) { __extends(Derived10, _super); function Derived10(y) { - _super.call(this); + _super.call(this); // ok this.a = 1; this.a = 3; this.b = 3; diff --git a/tests/baselines/reference/derivedClassSuperCallsWithThisArg.js b/tests/baselines/reference/derivedClassSuperCallsWithThisArg.js index 0616d94cdff..7e61be1c1c9 100644 --- a/tests/baselines/reference/derivedClassSuperCallsWithThisArg.js +++ b/tests/baselines/reference/derivedClassSuperCallsWithThisArg.js @@ -43,14 +43,14 @@ var Base = (function () { var Derived = (function (_super) { __extends(Derived, _super); function Derived() { - _super.call(this, this); + _super.call(this, this); // ok } return Derived; })(Base); var Derived2 = (function (_super) { __extends(Derived2, _super); function Derived2(a) { - _super.call(this, this); + _super.call(this, this); // error this.a = a; } return Derived2; @@ -59,7 +59,7 @@ var Derived3 = (function (_super) { __extends(Derived3, _super); function Derived3(a) { var _this = this; - _super.call(this, function () { return _this; }); + _super.call(this, function () { return _this; }); // error this.a = a; } return Derived3; @@ -69,7 +69,7 @@ var Derived4 = (function (_super) { function Derived4(a) { _super.call(this, function () { return this; - }); + }); // ok this.a = a; } return Derived4; diff --git a/tests/baselines/reference/derivedClassTransitivity.js b/tests/baselines/reference/derivedClassTransitivity.js index 828e4d3d8c9..53749861549 100644 --- a/tests/baselines/reference/derivedClassTransitivity.js +++ b/tests/baselines/reference/derivedClassTransitivity.js @@ -21,6 +21,7 @@ var r = c.foo(1); var r2 = e.foo(''); //// [derivedClassTransitivity.js] +// subclassing is not transitive when you can remove required parameters and add optional parameters var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -40,7 +41,7 @@ var D = (function (_super) { _super.apply(this, arguments); } D.prototype.foo = function () { - }; + }; // ok to drop parameters return D; })(C); var E = (function (_super) { @@ -49,7 +50,7 @@ var E = (function (_super) { _super.apply(this, arguments); } E.prototype.foo = function (x) { - }; + }; // ok to add optional parameters return E; })(D); var c; diff --git a/tests/baselines/reference/derivedClassTransitivity2.js b/tests/baselines/reference/derivedClassTransitivity2.js index eaac47847b7..1b4bd58923c 100644 --- a/tests/baselines/reference/derivedClassTransitivity2.js +++ b/tests/baselines/reference/derivedClassTransitivity2.js @@ -21,6 +21,7 @@ var r = c.foo(1, 1); var r2 = e.foo(1, ''); //// [derivedClassTransitivity2.js] +// subclassing is not transitive when you can remove required parameters and add optional parameters var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -40,7 +41,7 @@ var D = (function (_super) { _super.apply(this, arguments); } D.prototype.foo = function (x) { - }; + }; // ok to drop parameters return D; })(C); var E = (function (_super) { @@ -49,7 +50,7 @@ var E = (function (_super) { _super.apply(this, arguments); } E.prototype.foo = function (x, y) { - }; + }; // ok to add optional parameters return E; })(D); var c; diff --git a/tests/baselines/reference/derivedClassTransitivity3.js b/tests/baselines/reference/derivedClassTransitivity3.js index 155f4c0cd56..3e548f5276e 100644 --- a/tests/baselines/reference/derivedClassTransitivity3.js +++ b/tests/baselines/reference/derivedClassTransitivity3.js @@ -21,6 +21,7 @@ var r = c.foo('', ''); var r2 = e.foo('', 1); //// [derivedClassTransitivity3.js] +// subclassing is not transitive when you can remove required parameters and add optional parameters var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -40,7 +41,7 @@ var D = (function (_super) { _super.apply(this, arguments); } D.prototype.foo = function (x) { - }; + }; // ok to drop parameters return D; })(C); var E = (function (_super) { @@ -49,7 +50,7 @@ var E = (function (_super) { _super.apply(this, arguments); } E.prototype.foo = function (x, y) { - }; + }; // ok to add optional parameters return E; })(D); var c; diff --git a/tests/baselines/reference/derivedClassWithoutExplicitConstructor.js b/tests/baselines/reference/derivedClassWithoutExplicitConstructor.js index 5b9068256a9..350e36b9bf7 100644 --- a/tests/baselines/reference/derivedClassWithoutExplicitConstructor.js +++ b/tests/baselines/reference/derivedClassWithoutExplicitConstructor.js @@ -48,7 +48,7 @@ var Derived = (function (_super) { } return Derived; })(Base); -var r = new Derived(); +var r = new Derived(); // error var r2 = new Derived(1); var Base2 = (function () { function Base2(x) { @@ -65,5 +65,5 @@ var D = (function (_super) { } return D; })(Base2); -var d = new D(); -var d2 = new D(new Date()); +var d = new D(); // error +var d2 = new D(new Date()); // ok diff --git a/tests/baselines/reference/derivedClassWithoutExplicitConstructor2.js b/tests/baselines/reference/derivedClassWithoutExplicitConstructor2.js index 06ca55acb3e..b0f10960578 100644 --- a/tests/baselines/reference/derivedClassWithoutExplicitConstructor2.js +++ b/tests/baselines/reference/derivedClassWithoutExplicitConstructor2.js @@ -56,7 +56,7 @@ var Derived = (function (_super) { } return Derived; })(Base); -var r = new Derived(); +var r = new Derived(); // error var r2 = new Derived(1); var r3 = new Derived(1, 2); var r4 = new Derived(1, 2, 3); @@ -75,7 +75,7 @@ var D = (function (_super) { } return D; })(Base2); -var d = new D(); -var d2 = new D(new Date()); +var d = new D(); // error +var d2 = new D(new Date()); // ok var d3 = new D(new Date(), new Date()); var d4 = new D(new Date(), new Date(), new Date()); diff --git a/tests/baselines/reference/derivedClassWithoutExplicitConstructor3.js b/tests/baselines/reference/derivedClassWithoutExplicitConstructor3.js index 798ee7445bd..618750d3321 100644 --- a/tests/baselines/reference/derivedClassWithoutExplicitConstructor3.js +++ b/tests/baselines/reference/derivedClassWithoutExplicitConstructor3.js @@ -47,6 +47,7 @@ var d2 = new D2(new Date()); // error var d3 = new D2(new Date(), new Date()); // ok //// [derivedClassWithoutExplicitConstructor3.js] +// automatic constructors with a class hieararchy of depth > 2 var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -78,8 +79,8 @@ var Derived2 = (function (_super) { } return Derived2; })(Derived); -var r = new Derived(); -var r2 = new Derived2(1); +var r = new Derived(); // error +var r2 = new Derived2(1); // error var r3 = new Derived('', ''); var Base2 = (function () { function Base2(x) { @@ -105,6 +106,6 @@ var D2 = (function (_super) { } return D2; })(D); -var d = new D2(); -var d2 = new D2(new Date()); -var d3 = new D2(new Date(), new Date()); +var d = new D2(); // error +var d2 = new D2(new Date()); // error +var d3 = new D2(new Date(), new Date()); // ok diff --git a/tests/baselines/reference/derivedClasses.types b/tests/baselines/reference/derivedClasses.types new file mode 100644 index 00000000000..ce054b99223 --- /dev/null +++ b/tests/baselines/reference/derivedClasses.types @@ -0,0 +1,91 @@ +=== tests/cases/compiler/derivedClasses.ts === +class Red extends Color { +>Red : Red +>Color : Color + + public shade() { +>shade : () => string + + var getHue = () => { return this.hue(); }; +>getHue : () => string +>() => { return this.hue(); } : () => string +>this.hue() : string +>this.hue : () => string +>this : Red +>hue : () => string + + return getHue() + " red"; +>getHue() + " red" : string +>getHue() : string +>getHue : () => string + } +} + +class Color { +>Color : Color + + public shade() { return "some shade"; } +>shade : () => string + + public hue() { return "some hue"; } +>hue : () => string +} + +class Blue extends Color { +>Blue : Blue +>Color : Color + + public shade() { +>shade : () => string + + var getHue = () => { return this.hue(); }; +>getHue : () => string +>() => { return this.hue(); } : () => string +>this.hue() : string +>this.hue : () => string +>this : Blue +>hue : () => string + + return getHue() + " blue"; +>getHue() + " blue" : string +>getHue() : string +>getHue : () => string + } +} + +var r = new Red(); +>r : Red +>new Red() : Red +>Red : typeof Red + +var b = new Blue(); +>b : Blue +>new Blue() : Blue +>Blue : typeof Blue + +r.shade(); +>r.shade() : string +>r.shade : () => string +>r : Red +>shade : () => string + +r.hue(); +>r.hue() : string +>r.hue : () => string +>r : Red +>hue : () => string + +b.shade(); +>b.shade() : string +>b.shade : () => string +>b : Blue +>shade : () => string + +b.hue(); +>b.hue() : string +>b.hue : () => string +>b : Blue +>hue : () => string + + + diff --git a/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt b/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt index 32e58ff78c4..444ee245377 100644 --- a/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt +++ b/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt @@ -7,17 +7,17 @@ interface Derived extends Base { 1: { y: number } // error ~~~~~~~~~~~~~~~~ -!!! Property '1' of type '{ y: number; }' is not assignable to numeric index type '{ x: number; y: number; }'. - ~~~~~~~~~~~~~~~~ !!! Property '1' of type '{ y: number; }' is not assignable to string index type '{ x: number; }'. + ~~~~~~~~~~~~~~~~ +!!! Property '1' of type '{ y: number; }' is not assignable to numeric index type '{ x: number; y: number; }'. } interface Derived2 extends Base { '1': { y: number } // error ~~~~~~~~~~~~~~~~~~ -!!! Property ''1'' of type '{ y: number; }' is not assignable to numeric index type '{ x: number; y: number; }'. - ~~~~~~~~~~~~~~~~~~ !!! Property ''1'' of type '{ y: number; }' is not assignable to string index type '{ x: number; }'. + ~~~~~~~~~~~~~~~~~~ +!!! Property ''1'' of type '{ y: number; }' is not assignable to numeric index type '{ x: number; y: number; }'. } interface Derived3 extends Base { diff --git a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.js b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.js index 7873bf11c3e..39e87b620d6 100644 --- a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.js +++ b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.js @@ -41,9 +41,9 @@ var Derived = (function (_super) { return null; }; Derived.prototype.bar = function () { - var r = _super.prototype.foo.call(this, { a: 1 }); - var r2 = _super.prototype.foo.call(this, { a: 1, b: 2 }); - var r3 = this.foo({ a: 1, b: 2 }); + var r = _super.prototype.foo.call(this, { a: 1 }); // { a: number } + var r2 = _super.prototype.foo.call(this, { a: 1, b: 2 }); // { a: number } + var r3 = this.foo({ a: 1, b: 2 }); // { a: number; b: number; } }; return Derived; })(Base); diff --git a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types new file mode 100644 index 00000000000..4f1ff1780dc --- /dev/null +++ b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types @@ -0,0 +1,62 @@ +=== tests/cases/conformance/classes/propertyMemberDeclarations/memberFunctionDeclarations/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.ts === +class Base { +>Base : Base + + foo(x: { a: number }): { a: number } { +>foo : (x: { a: number; }) => { a: number; } +>x : { a: number; } +>a : number +>a : number + + return null; + } +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + foo(x: { a: number; b: number }): { a: number; b: number } { +>foo : (x: { a: number; b: number; }) => { a: number; b: number; } +>x : { a: number; b: number; } +>a : number +>b : number +>a : number +>b : number + + return null; + } + + bar() { +>bar : () => void + + var r = super.foo({ a: 1 }); // { a: number } +>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 + + var r2 = super.foo({ a: 1, b: 2 }); // { a: number } +>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 +>b : number + + var r3 = this.foo({ a: 1, b: 2 }); // { a: number; b: number; } +>r3 : { a: number; b: number; } +>this.foo({ a: 1, b: 2 }) : { a: number; b: number; } +>this.foo : (x: { a: number; b: number; }) => { a: number; b: number; } +>this : Derived +>foo : (x: { a: number; b: number; }) => { a: number; b: number; } +>{ a: 1, b: 2 } : { a: number; b: number; } +>a : number +>b : number + } +} diff --git a/tests/baselines/reference/derivedTypeCallingBaseImplWithOptionalParams.js b/tests/baselines/reference/derivedTypeCallingBaseImplWithOptionalParams.js index fc82f7f2872..7bf7444a0e5 100644 --- a/tests/baselines/reference/derivedTypeCallingBaseImplWithOptionalParams.js +++ b/tests/baselines/reference/derivedTypeCallingBaseImplWithOptionalParams.js @@ -22,6 +22,6 @@ var MyClass = (function () { return MyClass; })(); var x = new MyClass(); -x.myMethod(); +x.myMethod(); // should be valid, but MyClass has no implementation to handle it. var y = new MyClass(); -y.myMethod(); +y.myMethod(); // error diff --git a/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types b/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types new file mode 100644 index 00000000000..9821ff91123 --- /dev/null +++ b/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types @@ -0,0 +1,55 @@ +=== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/derivedTypeDoesNotRequireExtendsClause.ts === +class Base { +>Base : Base + + foo: string; +>foo : string +} + +class Derived { +>Derived : Derived + + foo: string; +>foo : string + + bar: number; +>bar : number +} + +class Derived2 extends Base { +>Derived2 : Derived2 +>Base : Base + + bar: string; +>bar : string +} + +var b: Base; +>b : Base +>Base : Base + +var d1: Derived; +>d1 : Derived +>Derived : Derived + +var d2: Derived2; +>d2 : Derived2 +>Derived2 : Derived2 + +b = d1; +>b = d1 : Derived +>b : Base +>d1 : Derived + +b = d2; +>b = d2 : Derived2 +>b : Base +>d2 : Derived2 + +var r: Base[] = [d1, d2]; +>r : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived +>d2 : Derived2 + diff --git a/tests/baselines/reference/detachedCommentAtStartOfConstructor1.js b/tests/baselines/reference/detachedCommentAtStartOfConstructor1.js new file mode 100644 index 00000000000..13312aea362 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfConstructor1.js @@ -0,0 +1,23 @@ +//// [detachedCommentAtStartOfConstructor1.ts] +class TestFile { + public message: string; + public name; + constructor(message: string) { + /// Test summary + /// + var getMessage = () => message + this.name; + this.message = getMessage(); + } +} + +//// [detachedCommentAtStartOfConstructor1.js] +var TestFile = (function () { + function TestFile(message) { + var _this = this; + /// Test summary + /// + var getMessage = function () { return message + _this.name; }; + this.message = getMessage(); + } + return TestFile; +})(); diff --git a/tests/baselines/reference/detachedCommentAtStartOfConstructor1.types b/tests/baselines/reference/detachedCommentAtStartOfConstructor1.types new file mode 100644 index 00000000000..392821de751 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfConstructor1.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/detachedCommentAtStartOfConstructor1.ts === +class TestFile { +>TestFile : TestFile + + public message: string; +>message : string + + public name; +>name : any + + constructor(message: string) { +>message : string + + /// Test summary + /// + var getMessage = () => message + this.name; +>getMessage : () => string +>() => message + this.name : () => string +>message + this.name : string +>message : string +>this.name : any +>this : TestFile +>name : any + + this.message = getMessage(); +>this.message = getMessage() : string +>this.message : string +>this : TestFile +>message : string +>getMessage() : string +>getMessage : () => string + } +} diff --git a/tests/baselines/reference/detachedCommentAtStartOfConstructor2.js b/tests/baselines/reference/detachedCommentAtStartOfConstructor2.js new file mode 100644 index 00000000000..754b432c7c5 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfConstructor2.js @@ -0,0 +1,24 @@ +//// [detachedCommentAtStartOfConstructor2.ts] +class TestFile { + public message: string; + public name: string; + constructor(message: string) { + /// Test summary + /// + + var getMessage = () => message + this.name; + this.message = getMessage(); + } +} + +//// [detachedCommentAtStartOfConstructor2.js] +var TestFile = (function () { + function TestFile(message) { + /// Test summary + /// + var _this = this; + var getMessage = function () { return message + _this.name; }; + this.message = getMessage(); + } + return TestFile; +})(); diff --git a/tests/baselines/reference/detachedCommentAtStartOfConstructor2.types b/tests/baselines/reference/detachedCommentAtStartOfConstructor2.types new file mode 100644 index 00000000000..b413cd557a5 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfConstructor2.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/detachedCommentAtStartOfConstructor2.ts === +class TestFile { +>TestFile : TestFile + + public message: string; +>message : string + + public name: string; +>name : string + + constructor(message: string) { +>message : string + + /// Test summary + /// + + var getMessage = () => message + this.name; +>getMessage : () => string +>() => message + this.name : () => string +>message + this.name : string +>message : string +>this.name : string +>this : TestFile +>name : string + + this.message = getMessage(); +>this.message = getMessage() : string +>this.message : string +>this : TestFile +>message : string +>getMessage() : string +>getMessage : () => string + } +} diff --git a/tests/baselines/reference/detachedCommentAtStartOfFunctionBody1.js b/tests/baselines/reference/detachedCommentAtStartOfFunctionBody1.js index 19838179d5b..3bbea65541f 100644 --- a/tests/baselines/reference/detachedCommentAtStartOfFunctionBody1.js +++ b/tests/baselines/reference/detachedCommentAtStartOfFunctionBody1.js @@ -14,6 +14,9 @@ var TestFile = (function () { } TestFile.prototype.foo = function (message) { var _this = this; + /// Test summary + /// + /// return function () { return message + _this.name; }; }; return TestFile; diff --git a/tests/baselines/reference/detachedCommentAtStartOfFunctionBody2.js b/tests/baselines/reference/detachedCommentAtStartOfFunctionBody2.js index 7a640e6fd46..2a0ac0a4f0a 100644 --- a/tests/baselines/reference/detachedCommentAtStartOfFunctionBody2.js +++ b/tests/baselines/reference/detachedCommentAtStartOfFunctionBody2.js @@ -14,6 +14,9 @@ var TestFile = (function () { function TestFile() { } TestFile.prototype.foo = function (message) { + /// Test summary + /// + /// var _this = this; return function () { return message + _this.name; }; }; diff --git a/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction1.js b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction1.js new file mode 100644 index 00000000000..2505e3f6082 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction1.js @@ -0,0 +1,31 @@ +//// [detachedCommentAtStartOfLambdaFunction1.ts] +class TestFile { + name: string; + foo(message: string): () => string { + return (...x: string[]) => + /// Test summary + /// + /// + message + this.name; + } +} + +//// [detachedCommentAtStartOfLambdaFunction1.js] +var TestFile = (function () { + function TestFile() { + } + TestFile.prototype.foo = function (message) { + var _this = this; + return function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + /// Test summary + /// + /// + return message + _this.name; + }; + }; + return TestFile; +})(); diff --git a/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction1.types b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction1.types new file mode 100644 index 00000000000..016a123c5c1 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction1.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/detachedCommentAtStartOfLambdaFunction1.ts === +class TestFile { +>TestFile : TestFile + + name: string; +>name : string + + foo(message: string): () => string { +>foo : (message: string) => () => string +>message : string + + return (...x: string[]) => +>(...x: string[]) => /// Test summary /// /// message + this.name : (...x: string[]) => string +>x : string[] + + /// Test summary + /// + /// + message + this.name; +>message + this.name : string +>message : string +>this.name : string +>this : TestFile +>name : string + } +} diff --git a/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction2.js b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction2.js new file mode 100644 index 00000000000..53f6d08eaf5 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction2.js @@ -0,0 +1,32 @@ +//// [detachedCommentAtStartOfLambdaFunction2.ts] +class TestFile { + name: string; + foo(message: string): () => string { + return (...x: string[]) => + /// Test summary + /// + /// + + message + this.name; + } +} + +//// [detachedCommentAtStartOfLambdaFunction2.js] +var TestFile = (function () { + function TestFile() { + } + TestFile.prototype.foo = function (message) { + var _this = this; + return function () { + /// Test summary + /// + /// + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + return message + _this.name; + }; + }; + return TestFile; +})(); diff --git a/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction2.types b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction2.types new file mode 100644 index 00000000000..2199a4490b5 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction2.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/detachedCommentAtStartOfLambdaFunction2.ts === +class TestFile { +>TestFile : TestFile + + name: string; +>name : string + + foo(message: string): () => string { +>foo : (message: string) => () => string +>message : string + + return (...x: string[]) => +>(...x: string[]) => /// Test summary /// /// message + this.name : (...x: string[]) => string +>x : string[] + + /// Test summary + /// + /// + + message + this.name; +>message + this.name : string +>message : string +>this.name : string +>this : TestFile +>name : string + } +} diff --git a/tests/baselines/reference/doNotWidenAtObjectLiteralPropertyAssignment.js b/tests/baselines/reference/doNotWidenAtObjectLiteralPropertyAssignment.js index 07fa97fae79..b259f321f14 100644 --- a/tests/baselines/reference/doNotWidenAtObjectLiteralPropertyAssignment.js +++ b/tests/baselines/reference/doNotWidenAtObjectLiteralPropertyAssignment.js @@ -12,4 +12,4 @@ var test: IIntervalTreeNode[] = [{ interval: { begin: 0 }, children: null }]; // //// [doNotWidenAtObjectLiteralPropertyAssignment.js] -var test = [{ interval: { begin: 0 }, children: null }]; +var test = [{ interval: { begin: 0 }, children: null }]; // was error here because best common type is {} diff --git a/tests/baselines/reference/doNotWidenAtObjectLiteralPropertyAssignment.types b/tests/baselines/reference/doNotWidenAtObjectLiteralPropertyAssignment.types new file mode 100644 index 00000000000..24eafce8cde --- /dev/null +++ b/tests/baselines/reference/doNotWidenAtObjectLiteralPropertyAssignment.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/doNotWidenAtObjectLiteralPropertyAssignment.ts === +interface ITestEventInterval { +>ITestEventInterval : ITestEventInterval + + begin: number; +>begin : number +} + +interface IIntervalTreeNode { +>IIntervalTreeNode : IIntervalTreeNode + + interval: ITestEventInterval; +>interval : ITestEventInterval +>ITestEventInterval : ITestEventInterval + + children?: IIntervalTreeNode[]; +>children : IIntervalTreeNode[] +>IIntervalTreeNode : IIntervalTreeNode +} + +var test: IIntervalTreeNode[] = [{ interval: { begin: 0 }, children: null }]; // was error here because best common type is {} +>test : IIntervalTreeNode[] +>IIntervalTreeNode : IIntervalTreeNode +>[{ interval: { begin: 0 }, children: null }] : IIntervalTreeNode[] +>{ interval: { begin: 0 }, children: null } : { interval: { begin: number; }; children: null; } +>interval : { begin: number; } +>{ begin: 0 } : { begin: number; } +>begin : number +>children : any + diff --git a/tests/baselines/reference/doWhileBreakStatements.types b/tests/baselines/reference/doWhileBreakStatements.types new file mode 100644 index 00000000000..c32adda7f4b --- /dev/null +++ b/tests/baselines/reference/doWhileBreakStatements.types @@ -0,0 +1,42 @@ +=== tests/cases/conformance/statements/breakStatements/doWhileBreakStatements.ts === +do { + break; +} while(true) + +ONE: +do { + break ONE; +} +while (true) + +TWO: +THREE: +do { + break THREE; +}while (true) + +FOUR: +do { + FIVE: + do { + break FOUR; + }while (true) +}while (true) + +do { + SIX: + do break SIX; while(true) +}while (true) + +SEVEN: +do do do break SEVEN; while (true) while (true) while (true) + +EIGHT: +do{ + var fn = function () { } +>fn : () => void +>function () { } : () => void + + break EIGHT; +}while(true) + diff --git a/tests/baselines/reference/doWhileContinueStatements.types b/tests/baselines/reference/doWhileContinueStatements.types new file mode 100644 index 00000000000..398a8508e31 --- /dev/null +++ b/tests/baselines/reference/doWhileContinueStatements.types @@ -0,0 +1,42 @@ +=== tests/cases/conformance/statements/continueStatements/doWhileContinueStatements.ts === +do { + continue; +} while(true) + +ONE: +do { + continue ONE; +} +while (true) + +TWO: +THREE: +do { + continue THREE; +}while (true) + +FOUR: +do { + FIVE: + do { + continue FOUR; + }while (true) +}while (true) + +do { + SIX: + do continue SIX; while(true) +}while (true) + +SEVEN: +do do do continue SEVEN; while (true) while (true) while (true) + +EIGHT: +do{ + var fn = function () { } +>fn : () => void +>function () { } : () => void + + continue EIGHT; +}while(true) + diff --git a/tests/baselines/reference/doWhileLoop.types b/tests/baselines/reference/doWhileLoop.types new file mode 100644 index 00000000000..93f17659c64 --- /dev/null +++ b/tests/baselines/reference/doWhileLoop.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/doWhileLoop.ts === +do { } while (false); +var n; +>n : any + diff --git a/tests/baselines/reference/dottedModuleName2.types b/tests/baselines/reference/dottedModuleName2.types new file mode 100644 index 00000000000..e5a9806dd11 --- /dev/null +++ b/tests/baselines/reference/dottedModuleName2.types @@ -0,0 +1,76 @@ +=== tests/cases/compiler/dottedModuleName2.ts === +module A.B { +>A : typeof A +>B : typeof B + + export var x = 1; +>x : number + +} + + + +module AA { export module B { +>AA : typeof AA +>B : typeof B + + export var x = 1; +>x : number + +} } + + + +var tmpOK = AA.B.x; +>tmpOK : number +>AA.B.x : number +>AA.B : typeof AA.B +>AA : typeof AA +>B : typeof AA.B +>x : number + +var tmpError = A.B.x; +>tmpError : number +>A.B.x : number +>A.B : typeof A.B +>A : typeof A +>B : typeof A.B +>x : number + + +module A.B.C +>A : typeof A +>B : typeof B +>C : typeof C + +{ + + export var x = 1; +>x : number + +} + + + +module M +>M : unknown + +{ + + import X1 = A; +>X1 : typeof X1 +>A : typeof X1 + + import X2 = A.B; +>X2 : typeof X1.B +>A : typeof X1 +>B : typeof X1.B + + import X3 = A.B.C; +>X3 : typeof X2.C +>A : typeof X1 +>B : typeof X1.B +>C : typeof X2.C + +} + diff --git a/tests/baselines/reference/dottedSymbolResolution1.js b/tests/baselines/reference/dottedSymbolResolution1.js index 369d9336d9f..d5bdb6006d5 100644 --- a/tests/baselines/reference/dottedSymbolResolution1.js +++ b/tests/baselines/reference/dottedSymbolResolution1.js @@ -39,6 +39,6 @@ function each(collection, callback) { function _setBarAndText() { var x, $; each(x.find(" "), function () { - var $this = $(''), thisBar = $this.find(".fx-usagebars-calloutbar-this"); + var $this = $(''), thisBar = $this.find(".fx-usagebars-calloutbar-this"); // bug lead to 'could not find dotted symbol' here }); } diff --git a/tests/baselines/reference/dottedSymbolResolution1.types b/tests/baselines/reference/dottedSymbolResolution1.types new file mode 100644 index 00000000000..776b9704e73 --- /dev/null +++ b/tests/baselines/reference/dottedSymbolResolution1.types @@ -0,0 +1,86 @@ +=== tests/cases/compiler/dottedSymbolResolution1.ts === +interface JQuery { +>JQuery : JQuery + + find(selector: string): JQuery; +>find : (selector: string) => JQuery +>selector : string +>JQuery : JQuery +} + +interface JQueryStatic { +>JQueryStatic : JQueryStatic + + (selector: string): JQuery; +>selector : string +>JQuery : JQuery + + (object: JQuery): JQuery; +>object : JQuery +>JQuery : JQuery +>JQuery : JQuery +} + +class Base { foo() { } } +>Base : Base +>foo : () => void + +function each(collection: string, callback: (indexInArray: any, valueOfElement: any) => any): any; +>each : { (collection: string, callback: (indexInArray: any, valueOfElement: any) => any): any; (collection: JQuery, callback: (indexInArray: number, valueOfElement: Base) => any): any; } +>collection : string +>callback : (indexInArray: any, valueOfElement: any) => any +>indexInArray : any +>valueOfElement : any + +function each(collection: JQuery, callback: (indexInArray: number, valueOfElement: Base) => any): any; +>each : { (collection: string, callback: (indexInArray: any, valueOfElement: any) => any): any; (collection: JQuery, callback: (indexInArray: number, valueOfElement: Base) => any): any; } +>collection : JQuery +>JQuery : JQuery +>callback : (indexInArray: number, valueOfElement: Base) => any +>indexInArray : number +>valueOfElement : Base +>Base : Base + +function each(collection: any, callback: (indexInArray: any, valueOfElement: any) => any): any { +>each : { (collection: string, callback: (indexInArray: any, valueOfElement: any) => any): any; (collection: JQuery, callback: (indexInArray: number, valueOfElement: Base) => any): any; } +>collection : any +>callback : (indexInArray: any, valueOfElement: any) => any +>indexInArray : any +>valueOfElement : any + + return null; +} + +function _setBarAndText(): void { +>_setBarAndText : () => void + + var x: JQuery, $: JQueryStatic +>x : JQuery +>JQuery : JQuery +>$ : JQueryStatic +>JQueryStatic : JQueryStatic + + each(x.find(" "), function () { +>each(x.find(" "), function () { var $this: JQuery = $(''), thisBar = $this.find(".fx-usagebars-calloutbar-this"); // bug lead to 'could not find dotted symbol' here } ) : any +>each : { (collection: string, callback: (indexInArray: any, valueOfElement: any) => any): any; (collection: JQuery, callback: (indexInArray: number, valueOfElement: Base) => any): any; } +>x.find(" ") : JQuery +>x.find : (selector: string) => JQuery +>x : JQuery +>find : (selector: string) => JQuery +>function () { var $this: JQuery = $(''), thisBar = $this.find(".fx-usagebars-calloutbar-this"); // bug lead to 'could not find dotted symbol' here } : () => void + + var $this: JQuery = $(''), +>$this : JQuery +>JQuery : JQuery +>$('') : JQuery +>$ : JQueryStatic + + thisBar = $this.find(".fx-usagebars-calloutbar-this"); // bug lead to 'could not find dotted symbol' here +>thisBar : JQuery +>$this.find(".fx-usagebars-calloutbar-this") : JQuery +>$this.find : (selector: string) => JQuery +>$this : JQuery +>find : (selector: string) => JQuery + + } ); +} diff --git a/tests/baselines/reference/duplicateAnonymousInners1.js b/tests/baselines/reference/duplicateAnonymousInners1.js index 58b6aa476c9..c8cb35afb2e 100644 --- a/tests/baselines/reference/duplicateAnonymousInners1.js +++ b/tests/baselines/reference/duplicateAnonymousInners1.js @@ -38,10 +38,12 @@ var Foo; } return Inner; })(); + // Inner should show up in intellisense Foo.Outer = 0; })(Foo || (Foo = {})); var Foo; (function (Foo) { + // Should not be an error var Helper = (function () { function Helper() { } diff --git a/tests/baselines/reference/duplicateAnonymousInners1.types b/tests/baselines/reference/duplicateAnonymousInners1.types new file mode 100644 index 00000000000..7c63fb4163b --- /dev/null +++ b/tests/baselines/reference/duplicateAnonymousInners1.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/duplicateAnonymousInners1.ts === +module Foo { +>Foo : typeof Foo + + class Helper { +>Helper : Helper + + } + + class Inner {} +>Inner : Inner + + // Inner should show up in intellisense + + export var Outer=0; +>Outer : number +} + + +module Foo { +>Foo : typeof Foo + + // Should not be an error + class Helper { +>Helper : Helper + + } + + // Inner should not show up in intellisense + // Outer should show up in intellisense + +} + diff --git a/tests/baselines/reference/duplicateAnonymousModuleClasses.js b/tests/baselines/reference/duplicateAnonymousModuleClasses.js index 0d973b1ed35..f55a3ca8664 100644 --- a/tests/baselines/reference/duplicateAnonymousModuleClasses.js +++ b/tests/baselines/reference/duplicateAnonymousModuleClasses.js @@ -67,6 +67,7 @@ var F; })(F || (F = {})); var F; (function (F) { + // Should not be an error var Helper = (function () { function Helper() { } @@ -83,6 +84,7 @@ var Foo; })(Foo || (Foo = {})); var Foo; (function (Foo) { + // Should not be an error var Helper = (function () { function Helper() { } @@ -101,6 +103,7 @@ var Gar; })(Foo || (Foo = {})); var Foo; (function (Foo) { + // Should not be an error var Helper = (function () { function Helper() { } diff --git a/tests/baselines/reference/duplicateAnonymousModuleClasses.types b/tests/baselines/reference/duplicateAnonymousModuleClasses.types new file mode 100644 index 00000000000..eebe5f721d9 --- /dev/null +++ b/tests/baselines/reference/duplicateAnonymousModuleClasses.types @@ -0,0 +1,71 @@ +=== tests/cases/compiler/duplicateAnonymousModuleClasses.ts === +module F { +>F : typeof F + + class Helper { +>Helper : Helper + + } + +} + + +module F { +>F : typeof F + + // Should not be an error + class Helper { +>Helper : Helper + + } + +} + +module Foo { +>Foo : typeof Foo + + class Helper { +>Helper : Helper + + } + +} + + +module Foo { +>Foo : typeof Foo + + // Should not be an error + class Helper { +>Helper : Helper + + } + +} + +module Gar { +>Gar : typeof Gar + + module Foo { +>Foo : typeof Foo + + class Helper { +>Helper : Helper + + } + + } + + + module Foo { +>Foo : typeof Foo + + // Should not be an error + class Helper { +>Helper : Helper + + } + + } +} + diff --git a/tests/baselines/reference/duplicateConstructSignature.types b/tests/baselines/reference/duplicateConstructSignature.types new file mode 100644 index 00000000000..5c33f09f8d6 --- /dev/null +++ b/tests/baselines/reference/duplicateConstructSignature.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/duplicateConstructSignature.ts === +interface I { +>I : I + + (): number; + (): string; +} diff --git a/tests/baselines/reference/duplicateConstructSignature2.types b/tests/baselines/reference/duplicateConstructSignature2.types new file mode 100644 index 00000000000..94628665963 --- /dev/null +++ b/tests/baselines/reference/duplicateConstructSignature2.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/duplicateConstructSignature2.ts === +interface I { +>I : I +>T : T + + (x: T): number; +>x : T +>T : T + + (x: T): string; +>x : T +>T : T +} diff --git a/tests/baselines/reference/duplicateConstructorOverloadSignature.types b/tests/baselines/reference/duplicateConstructorOverloadSignature.types new file mode 100644 index 00000000000..45df269706a --- /dev/null +++ b/tests/baselines/reference/duplicateConstructorOverloadSignature.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/duplicateConstructorOverloadSignature.ts === +class C { +>C : C + + constructor(x: number); +>x : number + + constructor(x: number); +>x : number + + constructor(x: any) { } +>x : any +} diff --git a/tests/baselines/reference/duplicateConstructorOverloadSignature2.types b/tests/baselines/reference/duplicateConstructorOverloadSignature2.types new file mode 100644 index 00000000000..780774e2545 --- /dev/null +++ b/tests/baselines/reference/duplicateConstructorOverloadSignature2.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/duplicateConstructorOverloadSignature2.ts === +class C { +>C : C +>T : T + + constructor(x: T); +>x : T +>T : T + + constructor(x: T); +>x : T +>T : T + + constructor(x: any) { } +>x : any +} diff --git a/tests/baselines/reference/duplicateIdentifierInCatchBlock.js b/tests/baselines/reference/duplicateIdentifierInCatchBlock.js index b961fa64df6..6d43b888f48 100644 --- a/tests/baselines/reference/duplicateIdentifierInCatchBlock.js +++ b/tests/baselines/reference/duplicateIdentifierInCatchBlock.js @@ -37,9 +37,9 @@ try { catch (e) { var x; function x() { - } + } // error function e() { - } - var p; + } // error var p; + var p; // error } diff --git a/tests/baselines/reference/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.types b/tests/baselines/reference/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.types new file mode 100644 index 00000000000..61cc569b965 --- /dev/null +++ b/tests/baselines/reference/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.types @@ -0,0 +1,3 @@ +=== tests/cases/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/duplicateIdentifiersAcrossContainerBoundaries.js b/tests/baselines/reference/duplicateIdentifiersAcrossContainerBoundaries.js index c2529b2e037..eaef5d09bdd 100644 --- a/tests/baselines/reference/duplicateIdentifiersAcrossContainerBoundaries.js +++ b/tests/baselines/reference/duplicateIdentifiersAcrossContainerBoundaries.js @@ -60,7 +60,7 @@ var M; } return I; })(); - M.I = I; + M.I = I; // error })(M || (M = {})); var M; (function (M) { @@ -75,7 +75,7 @@ var M; } return f; })(); - M.f = f; + M.f = f; // error })(M || (M = {})); var M; (function (M) { @@ -89,7 +89,7 @@ var M; } return g; })(); - M.g = g; + M.g = g; // no error })(M || (M = {})); var M; (function (M) { @@ -103,7 +103,7 @@ var M; var M; (function (M) { function C() { - } + } // no error })(M || (M = {})); var M; (function (M) { @@ -111,7 +111,7 @@ var M; })(M || (M = {})); var M; (function (M) { - M.v = 3; + M.v = 3; // error for redeclaring var in a different parent })(M || (M = {})); var Foo = (function () { function Foo() { @@ -120,7 +120,7 @@ var Foo = (function () { })(); var Foo; (function (Foo) { - Foo.x; + Foo.x; // error for redeclaring var in a different parent })(Foo || (Foo = {})); var N; (function (N) { diff --git a/tests/baselines/reference/duplicateLabel1.errors.txt b/tests/baselines/reference/duplicateLabel1.errors.txt new file mode 100644 index 00000000000..7503b9b278f --- /dev/null +++ b/tests/baselines/reference/duplicateLabel1.errors.txt @@ -0,0 +1,7 @@ +==== tests/cases/compiler/duplicateLabel1.ts (1 errors) ==== + target: + target: + ~~~~~~ +!!! Duplicate label 'target' + while (true) { + } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateLabel2.errors.txt b/tests/baselines/reference/duplicateLabel2.errors.txt new file mode 100644 index 00000000000..da40c01d528 --- /dev/null +++ b/tests/baselines/reference/duplicateLabel2.errors.txt @@ -0,0 +1,9 @@ +==== tests/cases/compiler/duplicateLabel2.ts (1 errors) ==== + target: + while (true) { + target: + ~~~~~~ +!!! Duplicate label 'target' + while (true) { + } + } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateLabel3.js b/tests/baselines/reference/duplicateLabel3.js new file mode 100644 index 00000000000..37e9619e8f6 --- /dev/null +++ b/tests/baselines/reference/duplicateLabel3.js @@ -0,0 +1,17 @@ +//// [duplicateLabel3.ts] +target: +while (true) { + function f() { + target: + while (true) { + } + } +} + +//// [duplicateLabel3.js] +target: while (true) { + function f() { + target: while (true) { + } + } +} diff --git a/tests/baselines/reference/duplicateLabel3.types b/tests/baselines/reference/duplicateLabel3.types new file mode 100644 index 00000000000..d4a26fa22a0 --- /dev/null +++ b/tests/baselines/reference/duplicateLabel3.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/duplicateLabel3.ts === +target: +while (true) { + function f() { +>f : () => void + + target: + while (true) { + } + } +} diff --git a/tests/baselines/reference/duplicateLabel4.js b/tests/baselines/reference/duplicateLabel4.js new file mode 100644 index 00000000000..22d072d38d7 --- /dev/null +++ b/tests/baselines/reference/duplicateLabel4.js @@ -0,0 +1,14 @@ +//// [duplicateLabel4.ts] +target: +while (true) { +} + +target: +while (true) { +} + +//// [duplicateLabel4.js] +target: while (true) { +} +target: while (true) { +} diff --git a/tests/baselines/reference/duplicateLabel4.types b/tests/baselines/reference/duplicateLabel4.types new file mode 100644 index 00000000000..c671abcef35 --- /dev/null +++ b/tests/baselines/reference/duplicateLabel4.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/duplicateLabel4.ts === +target: +No type information for this code.while (true) { +No type information for this code.} +No type information for this code. +No type information for this code.target: +No type information for this code.while (true) { +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/duplicateLocalVariable1.js b/tests/baselines/reference/duplicateLocalVariable1.js index f6c4813cecd..cace580eea1 100644 --- a/tests/baselines/reference/duplicateLocalVariable1.js +++ b/tests/baselines/reference/duplicateLocalVariable1.js @@ -344,6 +344,8 @@ export var tests: TestRunner = (function () { })(); //// [duplicateLocalVariable1.js] +//import FileManager = require('filemanager'); +//import App = require('app'); var TestFileDir = ".\\TempTestFiles"; var TestCase = (function () { function TestCase(name, test, errorMessageRegEx) { @@ -407,6 +409,7 @@ var TestRunner = (function () { exports.TestRunner = TestRunner; exports.tests = (function () { var testRunner = new TestRunner(); + // First 3 are for simple harness validation testRunner.addTest(new TestCase("Basic test", function () { return true; })); @@ -424,12 +427,14 @@ exports.tests = (function () { testRunner.addTest(new TestCase("Test array compare false", function () { return !TestRunner.arrayCompare([3, 2, 3], [1, 2, 3]); })); + // File detection tests testRunner.addTest(new TestCase("Check file exists", function () { return FileManager.DirectoryManager.fileExists(TestFileDir + "\\Test.txt"); })); testRunner.addTest(new TestCase("Check file doesn't exist", function () { return !FileManager.DirectoryManager.fileExists(TestFileDir + "\\Test2.txt"); })); + // File pattern matching tests testRunner.addTest(new TestCase("Check text file match", function () { return (FileManager.FileBuffer.isTextFile("C:\\somedir\\readme.txt") && FileManager.FileBuffer.isTextFile("C:\\spaces path\\myapp.str") && FileManager.FileBuffer.isTextFile("C:\\somedir\\code.js")); })); @@ -439,6 +444,7 @@ exports.tests = (function () { testRunner.addTest(new TestCase("Check binary file doesn't match", function () { return (!FileManager.FileBuffer.isTextFile("C:\\somedir\\app.exe") && !FileManager.FileBuffer.isTextFile("C:\\somedir\\my lib.dll")); })); + // Command-line parameter tests testRunner.addTest(new TestCase("Check App defaults", function () { var app = new App.App([]); return (app.fixLines === false && app.recurse === true && app.lineEndings === "CRLF" && app.matchPattern === undefined && app.rootDirectory === ".\\" && app.encodings[0] === "ascii" && app.encodings[1] === "utf8nobom"); @@ -447,6 +453,7 @@ exports.tests = (function () { var app = new App.App(["-dir=C:\\test dir", "-lineEndings=LF", "-encodings=utf16be,ascii", "-recurse=false", "-fixlines"]); return (app.fixLines === true && app.lineEndings === "LF" && app.recurse === false && app.matchPattern === undefined && app.rootDirectory === "C:\\test dir" && app.encodings[0] === "utf16be" && app.encodings[1] === "ascii" && app.encodings.length === 2); })); + // File BOM detection tests testRunner.addTest(new TestCase("Check encoding detection no BOM", function () { var fb = new FileManager.FileBuffer(TestFileDir + "\\noBOM.txt"); return fb.bom === 'none' && fb.encoding === 'utf8'; @@ -471,6 +478,7 @@ exports.tests = (function () { var fb = new FileManager.FileBuffer(TestFileDir + "\\0bytefile.txt"); return fb.bom === 'none' && fb.encoding === 'utf8'; })); + // UTF8 encoding tests testRunner.addTest(new TestCase("Check byte reader", function () { var fb = new FileManager.FileBuffer(TestFileDir + "\\UTF8BOM.txt"); var chars = []; @@ -502,6 +510,7 @@ exports.tests = (function () { var expected = [0xEF, 0xBB, 0xBF, 0x54, 0xC3, 0xA8, 0xE1, 0xB4, 0xA3, 0xE2, 0x80, 0xA0, 0x0D, 0x0A]; return TestRunner.arrayCompare(bytes, expected); })); + // Test reading and writing files testRunner.addTest(new TestCase("Check saving a file", function () { var filename = TestFileDir + "\\tmpUTF16LE.txt"; var fb = new FileManager.FileBuffer(14); @@ -535,6 +544,7 @@ exports.tests = (function () { fb.writeByte(5, 200); return true; }, "write beyond buffer length")); + // Non-BMP unicode char tests testRunner.addTest(new TestCase("Read non-BMP utf16 chars", function () { var savedFile = new FileManager.FileBuffer(TestFileDir + "\\utf16leNonBmp.txt"); if (savedFile.encoding !== 'utf16le') { @@ -610,12 +620,14 @@ exports.tests = (function () { var fb = new FileManager.FileBuffer(filename); return true; }, "Trail surrogate has an invalid value")); + // Count of CRs & LFs testRunner.addTest(new TestCase("Count character occurrences", function () { var filename = TestFileDir + "\\charCountASCII.txt"; var fb = new FileManager.FileBuffer(filename); var result = (fb.countCR === 5 && fb.countLF === 4 && fb.countCRLF === 5 && fb.countHT === 3); return result; })); + // Control characters in text testRunner.addTest(new TestCase("Test file with control character", function () { var filename = TestFileDir + "\\controlChar.txt"; var fb = new FileManager.FileBuffer(filename); diff --git a/tests/baselines/reference/duplicateNumericIndexers.js b/tests/baselines/reference/duplicateNumericIndexers.js index 670c0329511..4329e9019fb 100644 --- a/tests/baselines/reference/duplicateNumericIndexers.js +++ b/tests/baselines/reference/duplicateNumericIndexers.js @@ -34,6 +34,7 @@ var a: { //// [duplicateNumericIndexers.js] +// it is an error to have duplicate index signatures of the same kind in a type var C = (function () { function C() { } diff --git a/tests/baselines/reference/duplicateOverloadInTypeAugmentation1.types b/tests/baselines/reference/duplicateOverloadInTypeAugmentation1.types new file mode 100644 index 00000000000..bc7214eb6b9 --- /dev/null +++ b/tests/baselines/reference/duplicateOverloadInTypeAugmentation1.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/duplicateOverloadInTypeAugmentation1.ts === +interface Array { +>Array : T[] +>T : T + + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, +>reduce : { (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; } +>callbackfn : (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T +>previousValue : T +>T : T +>currentValue : T +>T : T +>currentIndex : number +>array : T[] +>T : T +>T : T + + initialValue?: T): T; +>initialValue : T +>T : T +>T : T + + reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, +>reduce : { (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; } +>U : U +>callbackfn : (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U +>previousValue : U +>U : U +>currentValue : T +>T : T +>currentIndex : number +>array : T[] +>T : T +>U : U + + initialValue: U): U; +>initialValue : U +>U : U +>U : U +} +var a: Array; +>a : string[] +>Array : T[] + +var r5 = a.reduce((x, y) => x + y); +>r5 : string +>a.reduce((x, y) => x + y) : string +>a.reduce : { (callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string, initialValue?: string): string; (callbackfn: (previousValue: U, currentValue: string, currentIndex: number, array: string[]) => U, initialValue: U): U; (callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string, initialValue?: string): string; (callbackfn: (previousValue: U, currentValue: string, currentIndex: number, array: string[]) => U, initialValue: U): U; } +>a : string[] +>reduce : { (callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string, initialValue?: string): string; (callbackfn: (previousValue: U, currentValue: string, currentIndex: number, array: string[]) => U, initialValue: U): U; (callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string, initialValue?: string): string; (callbackfn: (previousValue: U, currentValue: string, currentIndex: number, array: string[]) => U, initialValue: U): U; } +>(x, y) => x + y : (x: string, y: string) => string +>x : string +>y : string +>x + y : string +>x : string +>y : string + diff --git a/tests/baselines/reference/duplicatePropertyNames.js b/tests/baselines/reference/duplicatePropertyNames.js index afe584c6803..c5da2a1f39f 100644 --- a/tests/baselines/reference/duplicatePropertyNames.js +++ b/tests/baselines/reference/duplicatePropertyNames.js @@ -49,6 +49,7 @@ var b = { //// [duplicatePropertyNames.js] +// duplicate property names are an error in all types var C = (function () { function C() { this.baz = function () { diff --git a/tests/baselines/reference/duplicateStringIndexers.js b/tests/baselines/reference/duplicateStringIndexers.js index 6937530c576..e4f8b7c9f3c 100644 --- a/tests/baselines/reference/duplicateStringIndexers.js +++ b/tests/baselines/reference/duplicateStringIndexers.js @@ -35,6 +35,7 @@ module test { //// [duplicateStringIndexers.js] +// it is an error to have duplicate index signatures of the same kind in a type var test; (function (test) { var C = (function () { diff --git a/tests/baselines/reference/duplicateSymbolsExportMatching.errors.txt b/tests/baselines/reference/duplicateSymbolsExportMatching.errors.txt index c6d3b03e9fb..a42b1c0b8b1 100644 --- a/tests/baselines/reference/duplicateSymbolsExportMatching.errors.txt +++ b/tests/baselines/reference/duplicateSymbolsExportMatching.errors.txt @@ -69,9 +69,9 @@ module M { module F { ~ -!!! A module declaration cannot be located prior to a class or function with which it is merged - ~ !!! Individual declarations in merged declaration F must be all exported or all local. + ~ +!!! A module declaration cannot be located prior to a class or function with which it is merged var t; } export function F() { } // Only one error for duplicate identifier (don't consider visibility) diff --git a/tests/baselines/reference/duplicateSymbolsExportMatching.js b/tests/baselines/reference/duplicateSymbolsExportMatching.js index a6ec9e73aeb..43a610c7d33 100644 --- a/tests/baselines/reference/duplicateSymbolsExportMatching.js +++ b/tests/baselines/reference/duplicateSymbolsExportMatching.js @@ -67,6 +67,7 @@ export interface D { } //// [duplicateSymbolsExportMatching.js] define(["require", "exports"], function (require, exports) { + // Should report error only once for instantiated module var M; (function (M) { var inst; @@ -78,12 +79,13 @@ define(["require", "exports"], function (require, exports) { })(M.inst || (M.inst = {})); var inst = M.inst; })(M || (M = {})); + // Variables of the same / different type var M2; (function (M2) { var v; - M2.v; + M2.v; // one error (visibility) var w; - M2.w; + M2.w; // two errors (visibility and type mismatch) })(M2 || (M2 = {})); var M; (function (M) { @@ -93,7 +95,7 @@ define(["require", "exports"], function (require, exports) { })(F || (F = {})); function F() { } - M.F = F; + M.F = F; // Only one error for duplicate identifier (don't consider visibility) })(M || (M = {})); var M; (function (M) { diff --git a/tests/baselines/reference/duplicateVarAndImport.js b/tests/baselines/reference/duplicateVarAndImport.js index 245ed733a44..38148c6ce53 100644 --- a/tests/baselines/reference/duplicateVarAndImport.js +++ b/tests/baselines/reference/duplicateVarAndImport.js @@ -6,4 +6,5 @@ module M { } import a = M; //// [duplicateVarAndImport.js] +// no error since module is not instantiated var a; diff --git a/tests/baselines/reference/duplicateVarAndImport.types b/tests/baselines/reference/duplicateVarAndImport.types new file mode 100644 index 00000000000..10db2738dde --- /dev/null +++ b/tests/baselines/reference/duplicateVarAndImport.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/duplicateVarAndImport.ts === +// no error since module is not instantiated + +var a; +>a : any + +module M { } +>M : unknown + +import a = M; +>a : any +>M : unknown + diff --git a/tests/baselines/reference/duplicateVarAndImport2.js b/tests/baselines/reference/duplicateVarAndImport2.js index b0c05f254a6..42d500d588a 100644 --- a/tests/baselines/reference/duplicateVarAndImport2.js +++ b/tests/baselines/reference/duplicateVarAndImport2.js @@ -5,6 +5,7 @@ module M { export var x = 1; } import a = M; //// [duplicateVarAndImport2.js] +// error since module is instantiated var a; var M; (function (M) { diff --git a/tests/baselines/reference/duplicateVariableDeclaration1.types b/tests/baselines/reference/duplicateVariableDeclaration1.types new file mode 100644 index 00000000000..0da31840cfd --- /dev/null +++ b/tests/baselines/reference/duplicateVariableDeclaration1.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/duplicateVariableDeclaration1.ts === +var v +>v : any + +var v +>v : any + diff --git a/tests/baselines/reference/duplicateVariablesByScope.js b/tests/baselines/reference/duplicateVariablesByScope.js index 38bd7a0181e..d87fd966f32 100644 --- a/tests/baselines/reference/duplicateVariablesByScope.js +++ b/tests/baselines/reference/duplicateVariablesByScope.js @@ -32,6 +32,7 @@ class C { } //// [duplicateVariablesByScope.js] +// duplicate local variables are only reported at global scope var M; (function (M) { for (var j = 0; j < 10; j++) { diff --git a/tests/baselines/reference/duplicateVariablesByScope.types b/tests/baselines/reference/duplicateVariablesByScope.types new file mode 100644 index 00000000000..ec20d665ad8 --- /dev/null +++ b/tests/baselines/reference/duplicateVariablesByScope.types @@ -0,0 +1,60 @@ +=== tests/cases/compiler/duplicateVariablesByScope.ts === +// duplicate local variables are only reported at global scope + +module M { +>M : typeof M + + for (var j = 0; j < 10; j++) { +>j : number +>j < 10 : boolean +>j : number +>j++ : number +>j : number + } + + for (var j = 0; j < 10; j++) { +>j : number +>j < 10 : boolean +>j : number +>j++ : number +>j : number + } +} + +function foo() { +>foo : () => void + + var x = 2; +>x : number + + var x = 1; +>x : number + + if (true) { + var result = 1; +>result : number + } + else { + var result = 2; +>result : number + } +} + +class C { +>C : C + + foo() { +>foo : () => void + + try { + var x = 1; +>x : number + } + catch (e) { +>e : any + + var x = 2; +>x : number + } + } +} diff --git a/tests/baselines/reference/duplicateVariablesWithAny.js b/tests/baselines/reference/duplicateVariablesWithAny.js index 44b52ed04d1..9742b1bef57 100644 --- a/tests/baselines/reference/duplicateVariablesWithAny.js +++ b/tests/baselines/reference/duplicateVariablesWithAny.js @@ -18,16 +18,17 @@ var z: any; var z; // ok //// [duplicateVariablesWithAny.js] +// They should have to be the same even when one of the types is 'any' var x; -var x = 2; +var x = 2; //error var y = ""; -var y; +var y; //error var N; (function (N) { var x; - var x = 2; + var x = 2; //error var y = ""; - var y; + var y; //error })(N || (N = {})); var z; -var z; +var z; // ok diff --git a/tests/baselines/reference/dynamicModuleTypecheckError.js b/tests/baselines/reference/dynamicModuleTypecheckError.js index 065eee59a5e..1a9e058971e 100644 --- a/tests/baselines/reference/dynamicModuleTypecheckError.js +++ b/tests/baselines/reference/dynamicModuleTypecheckError.js @@ -11,5 +11,5 @@ for(var i = 0; i < 30; i++) { //// [dynamicModuleTypecheckError.js] exports.x = 1; for (var i = 0; i < 30; i++) { - exports.x = i * 1000; + exports.x = i * 1000; // should not be an error here } diff --git a/tests/baselines/reference/dynamicModuleTypecheckError.types b/tests/baselines/reference/dynamicModuleTypecheckError.types new file mode 100644 index 00000000000..c7d213d1661 --- /dev/null +++ b/tests/baselines/reference/dynamicModuleTypecheckError.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/dynamicModuleTypecheckError.ts === +export var x = 1; +>x : number + +for(var i = 0; i < 30; i++) { +>i : number +>i < 30 : boolean +>i : number +>i++ : number +>i : number + + x = i * 1000; // should not be an error here +>x = i * 1000 : number +>x : number +>i * 1000 : number +>i : number + +} + diff --git a/tests/baselines/reference/emitBOM.js b/tests/baselines/reference/emitBOM.js index c1616f6386d..f243e715991 100644 --- a/tests/baselines/reference/emitBOM.js +++ b/tests/baselines/reference/emitBOM.js @@ -4,7 +4,8 @@ var x; //// [emitBOM.js] -var x; +// JS and d.ts output should have a BOM but not the sourcemap +var x; //# sourceMappingURL=emitBOM.js.map //// [emitBOM.d.ts] diff --git a/tests/baselines/reference/emitBOM.js.map b/tests/baselines/reference/emitBOM.js.map index 46a584bf79d..af5fd260813 100644 --- a/tests/baselines/reference/emitBOM.js.map +++ b/tests/baselines/reference/emitBOM.js.map @@ -1,2 +1,2 @@ //// [emitBOM.js.map] -{"version":3,"file":"emitBOM.js","sourceRoot":"","sources":["emitBOM.ts"],"names":[],"mappings":"AAEA,IAAI,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"emitBOM.js","sourceRoot":"","sources":["emitBOM.ts"],"names":[],"mappings":"AAEA,AADA,6DAA6D;IACzD,CAAC,CAAC"} \ No newline at end of file diff --git a/tests/baselines/reference/emitBOM.sourcemap.txt b/tests/baselines/reference/emitBOM.sourcemap.txt index 19dd3247a7b..cd49155d24f 100644 --- a/tests/baselines/reference/emitBOM.sourcemap.txt +++ b/tests/baselines/reference/emitBOM.sourcemap.txt @@ -8,21 +8,30 @@ sources: emitBOM.ts emittedFile:tests/cases/compiler/emitBOM.js sourceFile:emitBOM.ts ------------------------------------------------------------------- ->>>var x; +>>>// JS and d.ts output should have a BOM but not the sourcemap 1 > -2 >^^^^ -3 > ^ -4 > ^ -5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1 > >// JS and d.ts output should have a BOM but not the sourcemap > -2 >var -3 > x -4 > ; +2 > +3 >// JS and d.ts output should have a BOM but not the sourcemap 1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) -2 >Emitted(1, 5) Source(3, 5) + SourceIndex(0) -3 >Emitted(1, 6) Source(3, 6) + SourceIndex(0) -4 >Emitted(1, 7) Source(3, 7) + SourceIndex(0) +2 >Emitted(1, 1) Source(2, 1) + SourceIndex(0) +3 >Emitted(1, 62) Source(2, 62) + SourceIndex(0) +--- +>>>var x; +1 >^^^^ +2 > ^ +3 > ^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > + >var +2 > x +3 > ; +1 >Emitted(2, 5) Source(3, 5) + SourceIndex(0) +2 >Emitted(2, 6) Source(3, 6) + SourceIndex(0) +3 >Emitted(2, 7) Source(3, 7) + SourceIndex(0) --- >>>//# sourceMappingURL=emitBOM.js.map \ No newline at end of file diff --git a/tests/baselines/reference/emitBOM.types b/tests/baselines/reference/emitBOM.types new file mode 100644 index 00000000000..b38fd19c8f4 --- /dev/null +++ b/tests/baselines/reference/emitBOM.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/emitBOM.ts === + +// JS and d.ts output should have a BOM but not the sourcemap +var x; +>x : any + diff --git a/tests/baselines/reference/emitCommentsOnlyFile.types b/tests/baselines/reference/emitCommentsOnlyFile.types new file mode 100644 index 00000000000..38b23eb128d --- /dev/null +++ b/tests/baselines/reference/emitCommentsOnlyFile.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/emitCommentsOnlyFile.ts === + +No type information for this code./** +No type information for this code.* @name Foo +No type information for this code.* @class +No type information for this code.*/ +No type information for this code./**#@+ +No type information for this code.* @memberOf Foo# +No type information for this code.* @field +No type information for this code.*/ +No type information for this code./** +No type information for this code.* @name bar +No type information for this code.* @type Object[] +No type information for this code.*/ +No type information for this code./**#@-*/ +No type information for this code./** +No type information for this code.* @name Foo2 +No type information for this code.* @class +No type information for this code.*/ +No type information for this code./**#@+ +No type information for this code.* @memberOf Foo2# +No type information for this code.* @field +No type information for this code.*/ +No type information for this code./** +No type information for this code.* @name bar +No type information for this code.* @type Object[] +No type information for this code.*/ +No type information for this code./**#@-*/ +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/emitMemberAccessExpression.js b/tests/baselines/reference/emitMemberAccessExpression.js index 260ce49c599..9488bbac5f0 100644 --- a/tests/baselines/reference/emitMemberAccessExpression.js +++ b/tests/baselines/reference/emitMemberAccessExpression.js @@ -25,6 +25,7 @@ module Microsoft.PeopleAtWork.Model { } //// [emitMemberAccessExpression_file2.js] +/// "use strict"; var Microsoft; (function (Microsoft) { @@ -45,8 +46,11 @@ var Microsoft; var PeopleAtWork = Microsoft.PeopleAtWork; })(Microsoft || (Microsoft = {})); //// [emitMemberAccessExpression_file1.js] +/// "use strict"; //// [emitMemberAccessExpression_file3.js] +/// +/// var Microsoft; (function (Microsoft) { (function (PeopleAtWork) { diff --git a/tests/baselines/reference/emitMemberAccessExpression.types b/tests/baselines/reference/emitMemberAccessExpression.types new file mode 100644 index 00000000000..9f7c98332e9 --- /dev/null +++ b/tests/baselines/reference/emitMemberAccessExpression.types @@ -0,0 +1,43 @@ +=== tests/cases/compiler/emitMemberAccessExpression_file3.ts === +/// +/// +declare var OData: any; +>OData : any + +module Microsoft.PeopleAtWork.Model { +>Microsoft : typeof Microsoft +>PeopleAtWork : typeof PeopleAtWork +>Model : typeof Model + + export class KnockoutExtentions { +>KnockoutExtentions : KnockoutExtentions + } +} +=== tests/cases/compiler/emitMemberAccessExpression_file1.ts === +/// +No type information for this code."use strict"; +No type information for this code. +No type information for this code.=== tests/cases/compiler/emitMemberAccessExpression_file2.ts === +/// +"use strict"; +module Microsoft.PeopleAtWork.Model { +>Microsoft : typeof Microsoft +>PeopleAtWork : typeof PeopleAtWork +>Model : typeof Model + + export class _Person { +>_Person : _Person + + public populate(raw: any) { +>populate : (raw: any) => void +>raw : any + + var res = Model.KnockoutExtentions; +>res : typeof KnockoutExtentions +>Model.KnockoutExtentions : typeof KnockoutExtentions +>Model : typeof Model +>KnockoutExtentions : typeof KnockoutExtentions + } + } +} + diff --git a/tests/baselines/reference/emitPostComments.types b/tests/baselines/reference/emitPostComments.types new file mode 100644 index 00000000000..4173e584031 --- /dev/null +++ b/tests/baselines/reference/emitPostComments.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/emitPostComments.ts === + +var y = 10; +>y : number + +/** +* @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 4b70720cd5e..5a79a430175 100644 --- a/tests/baselines/reference/emitPreComments.js +++ b/tests/baselines/reference/emitPreComments.js @@ -31,4 +31,5 @@ var y = 10; //// [emitPreComments.js] +// This is pre comment var y = 10; diff --git a/tests/baselines/reference/emitPreComments.types b/tests/baselines/reference/emitPreComments.types new file mode 100644 index 00000000000..6ab0c7b1bf9 --- /dev/null +++ b/tests/baselines/reference/emitPreComments.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/emitPreComments.ts === + +// This is pre comment +var y = 10; +>y : number + +/** +* @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/emptyEnum.types b/tests/baselines/reference/emptyEnum.types new file mode 100644 index 00000000000..000434dcc48 --- /dev/null +++ b/tests/baselines/reference/emptyEnum.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/emptyEnum.ts === +enum E { +>E : E +} diff --git a/tests/baselines/reference/emptyExpr.types b/tests/baselines/reference/emptyExpr.types new file mode 100644 index 00000000000..a8c4a6047a2 --- /dev/null +++ b/tests/baselines/reference/emptyExpr.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/emptyExpr.ts === +[{},] +>[{},] : {}[] +>{} : {} + diff --git a/tests/baselines/reference/emptyFile-declaration.types b/tests/baselines/reference/emptyFile-declaration.types new file mode 100644 index 00000000000..496fbbb807d --- /dev/null +++ b/tests/baselines/reference/emptyFile-declaration.types @@ -0,0 +1,3 @@ +=== tests/cases/compiler/emptyFile-declaration.ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/emptyFile-souremap.types b/tests/baselines/reference/emptyFile-souremap.types new file mode 100644 index 00000000000..5c7f48cfb49 --- /dev/null +++ b/tests/baselines/reference/emptyFile-souremap.types @@ -0,0 +1,3 @@ +=== tests/cases/compiler/emptyFile-souremap.ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/emptyFile.types b/tests/baselines/reference/emptyFile.types new file mode 100644 index 00000000000..95478466b8a --- /dev/null +++ b/tests/baselines/reference/emptyFile.types @@ -0,0 +1,3 @@ +=== tests/cases/compiler/emptyFile.ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/emptyIndexer.js b/tests/baselines/reference/emptyIndexer.js index 8e3abd0cab4..df4bd1dbca3 100644 --- a/tests/baselines/reference/emptyIndexer.js +++ b/tests/baselines/reference/emptyIndexer.js @@ -14,4 +14,4 @@ var n = x[''].m(); // should not crash compiler //// [emptyIndexer.js] var x; -var n = x[''].m(); +var n = x[''].m(); // should not crash compiler diff --git a/tests/baselines/reference/emptyIndexer.types b/tests/baselines/reference/emptyIndexer.types new file mode 100644 index 00000000000..949e7370e78 --- /dev/null +++ b/tests/baselines/reference/emptyIndexer.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/emptyIndexer.ts === +interface I1 { +>I1 : I1 + + m(): number; +>m : () => number +} + +interface I2 { +>I2 : I2 + + [s:string]: I1; +>s : string +>I1 : I1 +} + + +var x: I2; +>x : I2 +>I2 : I2 + +var n = x[''].m(); // should not crash compiler +>n : number +>x[''].m() : number +>x[''].m : () => number +>x[''] : I1 +>x : I2 +>m : () => number + diff --git a/tests/baselines/reference/enumAssignability.js b/tests/baselines/reference/enumAssignability.js index 0b38e3a314a..874c177c4e6 100644 --- a/tests/baselines/reference/enumAssignability.js +++ b/tests/baselines/reference/enumAssignability.js @@ -55,6 +55,7 @@ module Others { } //// [enumAssignability.js] +// enums assignable to number, any, Object, errors unless otherwise noted var E; (function (E) { E[E["A"] = 0] = "A"; @@ -67,13 +68,13 @@ var e = 0 /* A */; var f = 0 /* B */; e = f; f = e; -e = 1; -f = 1; -var x = e; -x = f; +e = 1; // ok +f = 1; // ok +var x = e; // ok +x = f; // ok var Others; (function (Others) { - var a = e; + var a = e; // ok var C = (function () { function C() { } @@ -81,11 +82,11 @@ var Others; })(); var ac; var ai; - var b = e; + var b = e; // ok var c = e; var d = e; var ee = e; - var f = e; + var f = e; // ok var g = e; var h = e; var i = e; diff --git a/tests/baselines/reference/enumAssignabilityInInheritance.js b/tests/baselines/reference/enumAssignabilityInInheritance.js index 39457d6dcd1..bec59a3d0de 100644 --- a/tests/baselines/reference/enumAssignabilityInInheritance.js +++ b/tests/baselines/reference/enumAssignabilityInInheritance.js @@ -110,13 +110,14 @@ declare function foo17(x: E): E; var r4 = foo16(E.A); //// [enumAssignabilityInInheritance.js] +// enum is only a subtype of number, no types are subtypes of enum, all of these except the first are errors var E; (function (E) { E[E["A"] = 0] = "A"; })(E || (E = {})); -var r = foo(0 /* A */); -var r2 = foo(1); -var r3 = foo(null); +var r = foo(0 /* A */); // E +var r2 = foo(1); // number +var r3 = foo(null); // any var r4 = foo2(0 /* A */); var r4 = foo3(0 /* A */); var r4 = foo4(0 /* A */); diff --git a/tests/baselines/reference/enumAssignmentCompat.js b/tests/baselines/reference/enumAssignmentCompat.js index f7fb01ff69c..24f65bc96a9 100644 --- a/tests/baselines/reference/enumAssignmentCompat.js +++ b/tests/baselines/reference/enumAssignmentCompat.js @@ -56,14 +56,14 @@ var W; })(W || (W = {})); var x = W; var y = W; -var z = W; +var z = W; // error var a = 0 /* a */; -var b = 0 /* a */; +var b = 0 /* a */; // error var c = 0 /* a */; -var d = 3; +var d = 3; // error var e = 4; -var f = 0 /* a */; -var g = 5; +var f = 0 /* a */; // error +var g = 5; // error var h = 3; var i = 0 /* a */; i = 0 /* a */; diff --git a/tests/baselines/reference/enumAssignmentCompat2.js b/tests/baselines/reference/enumAssignmentCompat2.js index 41ac87e1587..7ded9416c11 100644 --- a/tests/baselines/reference/enumAssignmentCompat2.js +++ b/tests/baselines/reference/enumAssignmentCompat2.js @@ -55,14 +55,14 @@ var W; })(W || (W = {})); var x = W; var y = W; -var z = W; +var z = W; // error var a = 0 /* a */; -var b = 0 /* a */; +var b = 0 /* a */; // error var c = 0 /* a */; -var d = 3; +var d = 3; // error var e = 4; -var f = 0 /* a */; -var g = 5; +var f = 0 /* a */; // error +var g = 5; // error var h = 3; var i = 0 /* a */; i = 0 /* a */; diff --git a/tests/baselines/reference/enumBasics.js b/tests/baselines/reference/enumBasics.js index 3cf1ca50d95..6f1a039ca6e 100644 --- a/tests/baselines/reference/enumBasics.js +++ b/tests/baselines/reference/enumBasics.js @@ -81,61 +81,74 @@ var doPropagate = [ //// [enumBasics.js] +// Enum without initializers have first member = 0 and successive members = N + 1 var E1; (function (E1) { E1[E1["A"] = 0] = "A"; E1[E1["B"] = 1] = "B"; E1[E1["C"] = 2] = "C"; })(E1 || (E1 = {})); +// Enum type is a subtype of Number var x = 0 /* A */; +// Enum object type is anonymous with properties of the enum type and numeric indexer var e = E1; var e; var e; +// Reverse mapping of enum returns string name of property var s = E1[0 /* A */]; var s; +// Enum with only constant members var E2; (function (E2) { E2[E2["A"] = 1] = "A"; E2[E2["B"] = 2] = "B"; E2[E2["C"] = 3] = "C"; })(E2 || (E2 = {})); +// Enum with only computed members var E3; (function (E3) { E3[E3["X"] = 'foo'.length] = "X"; E3[E3["Y"] = 4 + 3] = "Y"; E3[E3["Z"] = +'foo'] = "Z"; })(E3 || (E3 = {})); +// Enum with constant members followed by computed members var E4; (function (E4) { E4[E4["X"] = 0] = "X"; E4[E4["Y"] = 1] = "Y"; E4[E4["Z"] = 'foo'.length] = "Z"; })(E4 || (E4 = {})); +// Enum with > 2 constant members with no initializer for first member, non zero initializer for second element var E5; (function (E5) { E5[E5["A"] = 0] = "A"; E5[E5["B"] = 3] = "B"; - E5[E5["C"] = 4] = "C"; + E5[E5["C"] = 4] = "C"; // 4 })(E5 || (E5 = {})); var E6; (function (E6) { E6[E6["A"] = 0] = "A"; E6[E6["B"] = 0] = "B"; - E6[E6["C"] = 1] = "C"; + E6[E6["C"] = 1] = "C"; // 1 })(E6 || (E6 = {})); +// Enum with computed member initializer of type 'any' var E7; (function (E7) { E7[E7["A"] = 'foo'['foo']] = "A"; })(E7 || (E7 = {})); +// Enum with computed member initializer of type number var E8; (function (E8) { E8[E8["B"] = 'foo'['foo']] = "B"; })(E8 || (E8 = {})); +//Enum with computed member intializer of same enum type var E9; (function (E9) { E9[E9["A"] = 0] = "A"; E9[E9["B"] = E9.A] = "B"; })(E9 || (E9 = {})); +// (refer to .js to validate) +// Enum constant members are propagated var doNotPropagate = [ E8.B, E7.A, @@ -144,6 +157,7 @@ var doNotPropagate = [ E3.Y, E3.Z ]; +// Enum computed members are not propagated var doPropagate = [ 0 /* A */, E9.B, diff --git a/tests/baselines/reference/enumBasics.types b/tests/baselines/reference/enumBasics.types new file mode 100644 index 00000000000..f775295891a --- /dev/null +++ b/tests/baselines/reference/enumBasics.types @@ -0,0 +1,217 @@ +=== tests/cases/conformance/enums/enumBasics.ts === +// Enum without initializers have first member = 0 and successive members = N + 1 +enum E1 { +>E1 : E1 + + A, +>A : E1 + + B, +>B : E1 + + C +>C : E1 +} + +// Enum type is a subtype of Number +var x: number = E1.A; +>x : number +>E1.A : E1 +>E1 : typeof E1 +>A : E1 + +// Enum object type is anonymous with properties of the enum type and numeric indexer +var e = E1; +>e : typeof E1 +>E1 : typeof E1 + +var e: { +>e : typeof E1 + + A: E1; +>A : E1 +>E1 : E1 + + B: E1; +>B : E1 +>E1 : E1 + + C: E1; +>C : E1 +>E1 : E1 + + [n: number]: string; +>n : number + +}; +var e: typeof E1; +>e : typeof E1 +>E1 : typeof E1 + +// Reverse mapping of enum returns string name of property +var s = E1[e.A]; +>s : string +>E1[e.A] : string +>E1 : typeof E1 +>e.A : E1 +>e : typeof E1 +>A : E1 + +var s: string; +>s : string + + +// Enum with only constant members +enum E2 { +>E2 : E2 + + A = 1, B = 2, C = 3 +>A : E2 +>B : E2 +>C : E2 +} + +// Enum with only computed members +enum E3 { +>E3 : E3 + + X = 'foo'.length, Y = 4 + 3, Z = +'foo' +>X : E3 +>'foo'.length : number +>length : number +>Y : E3 +>4 + 3 : number +>Z : E3 +>+'foo' : number +} + +// Enum with constant members followed by computed members +enum E4 { +>E4 : E4 + + X = 0, Y, Z = 'foo'.length +>X : E4 +>Y : E4 +>Z : E4 +>'foo'.length : number +>length : number +} + +// Enum with > 2 constant members with no initializer for first member, non zero initializer for second element +enum E5 { +>E5 : E5 + + A, +>A : E5 + + B = 3, +>B : E5 + + C // 4 +>C : E5 +} + +enum E6 { +>E6 : E6 + + A, +>A : E6 + + B = 0, +>B : E6 + + C // 1 +>C : E6 +} + +// Enum with computed member initializer of type 'any' +enum E7 { +>E7 : E7 + + A = 'foo'['foo'] +>A : E7 +>'foo'['foo'] : any +} + +// Enum with computed member initializer of type number +enum E8 { +>E8 : E8 + + B = 'foo'['foo'] +>B : E8 +>'foo'['foo'] : any +} + +//Enum with computed member intializer of same enum type +enum E9 { +>E9 : E9 + + A, +>A : E9 + + B = A +>B : E9 +>A : E9 +} + +// (refer to .js to validate) +// Enum constant members are propagated +var doNotPropagate = [ +>doNotPropagate : {}[] +>[ E8.B, E7.A, E4.Z, E3.X, E3.Y, E3.Z] : {}[] + + E8.B, E7.A, E4.Z, E3.X, E3.Y, E3.Z +>E8.B : E8 +>E8 : typeof E8 +>B : E8 +>E7.A : E7 +>E7 : typeof E7 +>A : E7 +>E4.Z : E4 +>E4 : typeof E4 +>Z : E4 +>E3.X : E3 +>E3 : typeof E3 +>X : E3 +>E3.Y : E3 +>E3 : typeof E3 +>Y : E3 +>E3.Z : E3 +>E3 : typeof E3 +>Z : E3 + +]; +// Enum computed members are not propagated +var doPropagate = [ +>doPropagate : {}[] +>[ E9.A, E9.B, E6.B, E6.C, E6.A, E5.A, E5.B, E5.C] : {}[] + + E9.A, E9.B, E6.B, E6.C, E6.A, E5.A, E5.B, E5.C +>E9.A : E9 +>E9 : typeof E9 +>A : E9 +>E9.B : E9 +>E9 : typeof E9 +>B : E9 +>E6.B : E6 +>E6 : typeof E6 +>B : E6 +>E6.C : E6 +>E6 : typeof E6 +>C : E6 +>E6.A : E6 +>E6 : typeof E6 +>A : E6 +>E5.A : E5 +>E5 : typeof E5 +>A : E5 +>E5.B : E5 +>E5 : typeof E5 +>B : E5 +>E5.C : E5 +>E5 : typeof E5 +>C : E5 + +]; + + diff --git a/tests/baselines/reference/enumBasics1.js b/tests/baselines/reference/enumBasics1.js index c8549fe4805..13b6da353b9 100644 --- a/tests/baselines/reference/enumBasics1.js +++ b/tests/baselines/reference/enumBasics1.js @@ -44,7 +44,26 @@ var E; E[E["B"] = 2] = "B"; E[E["C"] = 3] = "C"; })(E || (E = {})); -1 /* A */.A; +/* +var a: E; +var b = E["B"]; // shouldn't error + + +function foo(e: E) {} + +foo(a); // shouldn't error + + +class C { + public e: E; + + public m(): E { return this.e; } // shouldn't error +} + + +var e = E; // shouldn't error +*/ +1 /* A */.A; // should error var E2; (function (E2) { E2[E2["A"] = 0] = "A"; diff --git a/tests/baselines/reference/enumCodeGenNewLines1.types b/tests/baselines/reference/enumCodeGenNewLines1.types new file mode 100644 index 00000000000..51c09daa0ff --- /dev/null +++ b/tests/baselines/reference/enumCodeGenNewLines1.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/enumCodeGenNewLines1.ts === +enum foo { +>foo : foo + + b = 1, +>b : foo + + c = 2, +>c : foo + + d = 3 +>d : foo +} + diff --git a/tests/baselines/reference/enumDecl1.types b/tests/baselines/reference/enumDecl1.types new file mode 100644 index 00000000000..22d2b6b4d69 --- /dev/null +++ b/tests/baselines/reference/enumDecl1.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/enumDecl1.ts === + +declare module mAmbient { +>mAmbient : typeof mAmbient + + enum e { +>e : e + + x, +>x : e + + y, +>y : e + + z +>z : e + } +} + diff --git a/tests/baselines/reference/enumErrors.js b/tests/baselines/reference/enumErrors.js index 44830d14f3f..44aa2f90162 100644 --- a/tests/baselines/reference/enumErrors.js +++ b/tests/baselines/reference/enumErrors.js @@ -32,6 +32,7 @@ enum E11 { //// [enumErrors.js] +// Enum named with PredefinedTypes var any; (function (any) { })(any || (any = {})); @@ -44,6 +45,7 @@ var string; var boolean; (function (boolean) { })(boolean || (boolean = {})); +// Enum with computed member initializer of type Number var E5; (function (E5) { E5[E5["C"] = new Number(30)] = "C"; @@ -53,11 +55,14 @@ var E9; E9[E9["A"] = 0] = "A"; E9[E9["B"] = E9.A] = "B"; })(E9 || (E9 = {})); +//Enum with computed member intializer of different enum type +// Bug 707850: This should be allowed var E10; (function (E10) { E10[E10["A"] = 0 /* A */] = "A"; E10[E10["B"] = E9.B] = "B"; })(E10 || (E10 = {})); +// Enum with computed member intializer of other types var E11; (function (E11) { E11[E11["A"] = ''] = "A"; diff --git a/tests/baselines/reference/enumFromExternalModule.js b/tests/baselines/reference/enumFromExternalModule.js index 7d15d9c394b..8e92cbbbda7 100644 --- a/tests/baselines/reference/enumFromExternalModule.js +++ b/tests/baselines/reference/enumFromExternalModule.js @@ -16,5 +16,6 @@ var x = f.Mode.Open; })(exports.Mode || (exports.Mode = {})); var Mode = exports.Mode; //// [enumFromExternalModule_1.js] +/// var f = require('enumFromExternalModule_0'); var x = 0 /* Open */; diff --git a/tests/baselines/reference/enumFromExternalModule.types b/tests/baselines/reference/enumFromExternalModule.types new file mode 100644 index 00000000000..554ac17ec67 --- /dev/null +++ b/tests/baselines/reference/enumFromExternalModule.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/enumFromExternalModule_1.ts === +/// +import f = require('enumFromExternalModule_0'); +>f : typeof f + +var x = f.Mode.Open; +>x : f.Mode +>f.Mode.Open : f.Mode +>f.Mode : typeof f.Mode +>f : typeof f +>Mode : typeof f.Mode +>Open : f.Mode + +=== tests/cases/compiler/enumFromExternalModule_0.ts === +export enum Mode { Open } +>Mode : Mode +>Open : Mode + diff --git a/tests/baselines/reference/enumIdentifierLiterals.types b/tests/baselines/reference/enumIdentifierLiterals.types new file mode 100644 index 00000000000..b259e57d1dd --- /dev/null +++ b/tests/baselines/reference/enumIdentifierLiterals.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/enumIdentifierLiterals.ts === +enum Nums { +>Nums : Nums + + 1.0, + 11e-1, + 0.12e1, + "13e-1", + 0xF00D +} diff --git a/tests/baselines/reference/enumIndexer.js b/tests/baselines/reference/enumIndexer.js index b2b72441211..f9f71a3ff98 100644 --- a/tests/baselines/reference/enumIndexer.js +++ b/tests/baselines/reference/enumIndexer.js @@ -15,4 +15,4 @@ var MyEnumType; })(MyEnumType || (MyEnumType = {})); var _arr = [{ key: 'foo' }, { key: 'bar' }]; var enumValue = 0 /* foo */; -var x = _arr.map(function (o) { return MyEnumType[o.key] === enumValue; }); +var x = _arr.map(function (o) { return MyEnumType[o.key] === enumValue; }); // these are not same type diff --git a/tests/baselines/reference/enumIndexer.types b/tests/baselines/reference/enumIndexer.types new file mode 100644 index 00000000000..cbd7c3274a6 --- /dev/null +++ b/tests/baselines/reference/enumIndexer.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/enumIndexer.ts === +enum MyEnumType { +>MyEnumType : MyEnumType + + foo, bar +>foo : MyEnumType +>bar : MyEnumType +} +var _arr = [{ key: 'foo' }, { key: 'bar' }] +>_arr : { key: string; }[] +>[{ key: 'foo' }, { key: 'bar' }] : { key: string; }[] +>{ key: 'foo' } : { key: string; } +>key : string +>{ key: 'bar' } : { key: string; } +>key : string + +var enumValue = MyEnumType.foo; +>enumValue : MyEnumType +>MyEnumType.foo : MyEnumType +>MyEnumType : typeof MyEnumType +>foo : MyEnumType + +var x = _arr.map(o => MyEnumType[o.key] === enumValue); // these are not same type +>x : boolean[] +>_arr.map(o => MyEnumType[o.key] === enumValue) : boolean[] +>_arr.map : (callbackfn: (value: { key: string; }, index: number, array: { key: string; }[]) => U, thisArg?: any) => U[] +>_arr : { key: string; }[] +>map : (callbackfn: (value: { key: string; }, index: number, array: { key: string; }[]) => U, thisArg?: any) => U[] +>o => MyEnumType[o.key] === enumValue : (o: { key: string; }) => boolean +>o : { key: string; } +>MyEnumType[o.key] === enumValue : boolean +>MyEnumType[o.key] : any +>MyEnumType : typeof MyEnumType +>o.key : string +>o : { key: string; } +>key : string +>enumValue : MyEnumType + diff --git a/tests/baselines/reference/enumIsNotASubtypeOfAnythingButNumber.js b/tests/baselines/reference/enumIsNotASubtypeOfAnythingButNumber.js index a3ac71b5200..f9ac7661e3d 100644 --- a/tests/baselines/reference/enumIsNotASubtypeOfAnythingButNumber.js +++ b/tests/baselines/reference/enumIsNotASubtypeOfAnythingButNumber.js @@ -131,6 +131,7 @@ interface I20 { } //// [enumIsNotASubtypeOfAnythingButNumber.js] +// enums are only subtypes of number, any and no other types var E; (function (E) { E[E["A"] = 0] = "A"; diff --git a/tests/baselines/reference/enumMapBackIntoItself.js b/tests/baselines/reference/enumMapBackIntoItself.js index 3402e3375df..2d177731b95 100644 --- a/tests/baselines/reference/enumMapBackIntoItself.js +++ b/tests/baselines/reference/enumMapBackIntoItself.js @@ -18,4 +18,5 @@ var TShirtSize; })(TShirtSize || (TShirtSize = {})); var mySize = 2 /* Large */; var test = TShirtSize[mySize]; +// specifically checking output here, bug was that test used to be undefined at runtime test + ''; diff --git a/tests/baselines/reference/enumMapBackIntoItself.types b/tests/baselines/reference/enumMapBackIntoItself.types new file mode 100644 index 00000000000..d97dbcf85db --- /dev/null +++ b/tests/baselines/reference/enumMapBackIntoItself.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/enumMapBackIntoItself.ts === +enum TShirtSize { +>TShirtSize : TShirtSize + + Small, +>Small : TShirtSize + + Medium, +>Medium : TShirtSize + + Large +>Large : TShirtSize +} +var mySize = TShirtSize.Large; +>mySize : TShirtSize +>TShirtSize.Large : TShirtSize +>TShirtSize : typeof TShirtSize +>Large : TShirtSize + +var test = TShirtSize[mySize]; +>test : string +>TShirtSize[mySize] : string +>TShirtSize : typeof TShirtSize +>mySize : TShirtSize + +// specifically checking output here, bug was that test used to be undefined at runtime +test + '' +>test + '' : string +>test : string + diff --git a/tests/baselines/reference/enumMerging.js b/tests/baselines/reference/enumMerging.js index c92e2aad347..5e4ff368481 100644 --- a/tests/baselines/reference/enumMerging.js +++ b/tests/baselines/reference/enumMerging.js @@ -67,6 +67,8 @@ module M6 { //// [enumMerging.js] +// Enum with only constant members across 2 declarations with the same root module +// Enum with initializer in all declarations with constant members with the same root module var M1; (function (M1) { var EImpl1; @@ -95,6 +97,7 @@ var M1; var EConst1 = M1.EConst1; var x = [3 /* A */, 2 /* B */, 1 /* C */, 7 /* D */, 9 /* E */, 8 /* F */]; })(M1 || (M1 = {})); +// Enum with only computed members across 2 declarations with the same root module var M2; (function (M2) { (function (EComp2) { @@ -111,6 +114,7 @@ var M2; var EComp2 = M2.EComp2; var x = [EComp2.A, EComp2.B, EComp2.C, EComp2.D, EComp2.E, EComp2.F]; })(M2 || (M2 = {})); +// Enum with initializer in only one of two declarations with constant members with the same root module var M3; (function (M3) { var EInit; @@ -125,6 +129,7 @@ var M3; EInit[EInit["E"] = 3] = "E"; })(EInit || (EInit = {})); })(M3 || (M3 = {})); +// Enums with same name but different root module var M4; (function (M4) { (function (Color) { diff --git a/tests/baselines/reference/enumMerging.types b/tests/baselines/reference/enumMerging.types new file mode 100644 index 00000000000..c61f9e17739 --- /dev/null +++ b/tests/baselines/reference/enumMerging.types @@ -0,0 +1,204 @@ +=== tests/cases/conformance/enums/enumMerging.ts === +// Enum with only constant members across 2 declarations with the same root module +// Enum with initializer in all declarations with constant members with the same root module +module M1 { +>M1 : typeof M1 + + enum EImpl1 { +>EImpl1 : EImpl1 + + A, B, C +>A : EImpl1 +>B : EImpl1 +>C : EImpl1 + } + + enum EImpl1 { +>EImpl1 : EImpl1 + + D = 1, E, F +>D : EImpl1 +>E : EImpl1 +>F : EImpl1 + } + + export enum EConst1 { +>EConst1 : EConst1 + + A = 3, B = 2, C = 1 +>A : EConst1 +>B : EConst1 +>C : EConst1 + } + + export enum EConst1 { +>EConst1 : EConst1 + + D = 7, E = 9, F = 8 +>D : EConst1 +>E : EConst1 +>F : EConst1 + } + + var x = [EConst1.A, EConst1.B, EConst1.C, EConst1.D, EConst1.E, EConst1.F]; +>x : EConst1[] +>[EConst1.A, EConst1.B, EConst1.C, EConst1.D, EConst1.E, EConst1.F] : EConst1[] +>EConst1.A : EConst1 +>EConst1 : typeof EConst1 +>A : EConst1 +>EConst1.B : EConst1 +>EConst1 : typeof EConst1 +>B : EConst1 +>EConst1.C : EConst1 +>EConst1 : typeof EConst1 +>C : EConst1 +>EConst1.D : EConst1 +>EConst1 : typeof EConst1 +>D : EConst1 +>EConst1.E : EConst1 +>EConst1 : typeof EConst1 +>E : EConst1 +>EConst1.F : EConst1 +>EConst1 : typeof EConst1 +>F : EConst1 +} + +// Enum with only computed members across 2 declarations with the same root module +module M2 { +>M2 : typeof M2 + + export enum EComp2 { +>EComp2 : EComp2 + + A = 'foo'.length, B = 'foo'.length, C = 'foo'.length +>A : EComp2 +>'foo'.length : number +>length : number +>B : EComp2 +>'foo'.length : number +>length : number +>C : EComp2 +>'foo'.length : number +>length : number + } + + export enum EComp2 { +>EComp2 : EComp2 + + D = 'foo'.length, E = 'foo'.length, F = 'foo'.length +>D : EComp2 +>'foo'.length : number +>length : number +>E : EComp2 +>'foo'.length : number +>length : number +>F : EComp2 +>'foo'.length : number +>length : number + } + + var x = [EComp2.A, EComp2.B, EComp2.C, EComp2.D, EComp2.E, EComp2.F]; +>x : EComp2[] +>[EComp2.A, EComp2.B, EComp2.C, EComp2.D, EComp2.E, EComp2.F] : EComp2[] +>EComp2.A : EComp2 +>EComp2 : typeof EComp2 +>A : EComp2 +>EComp2.B : EComp2 +>EComp2 : typeof EComp2 +>B : EComp2 +>EComp2.C : EComp2 +>EComp2 : typeof EComp2 +>C : EComp2 +>EComp2.D : EComp2 +>EComp2 : typeof EComp2 +>D : EComp2 +>EComp2.E : EComp2 +>EComp2 : typeof EComp2 +>E : EComp2 +>EComp2.F : EComp2 +>EComp2 : typeof EComp2 +>F : EComp2 +} + +// Enum with initializer in only one of two declarations with constant members with the same root module +module M3 { +>M3 : typeof M3 + + enum EInit { +>EInit : EInit + + A, +>A : EInit + + B +>B : EInit + } + + enum EInit { +>EInit : EInit + + C = 1, D, E +>C : EInit +>D : EInit +>E : EInit + } +} + +// Enums with same name but different root module +module M4 { +>M4 : typeof M4 + + export enum Color { Red, Green, Blue } +>Color : Color +>Red : Color +>Green : Color +>Blue : Color +} +module M5 { +>M5 : typeof M5 + + export enum Color { Red, Green, Blue } +>Color : Color +>Red : Color +>Green : Color +>Blue : Color +} + +module M6.A { +>M6 : typeof M6 +>A : typeof A + + export enum Color { Red, Green, Blue } +>Color : Color +>Red : Color +>Green : Color +>Blue : Color +} +module M6 { +>M6 : typeof M6 + + export module A { +>A : typeof A + + export enum Color { Yellow = 1 } +>Color : Color +>Yellow : Color + } + var t = A.Color.Yellow; +>t : A.Color +>A.Color.Yellow : A.Color +>A.Color : typeof A.Color +>A : typeof A +>Color : typeof A.Color +>Yellow : A.Color + + t = A.Color.Red; +>t = A.Color.Red : A.Color +>t : A.Color +>A.Color.Red : A.Color +>A.Color : typeof A.Color +>A : typeof A +>Color : typeof A.Color +>Red : A.Color +} + diff --git a/tests/baselines/reference/enumMergingErrors.js b/tests/baselines/reference/enumMergingErrors.js index 8bca227f173..46855093816 100644 --- a/tests/baselines/reference/enumMergingErrors.js +++ b/tests/baselines/reference/enumMergingErrors.js @@ -43,6 +43,7 @@ module M2 { //// [enumMergingErrors.js] +// Enum with constant, computed, constant members split across 3 declarations with the same root module var M; (function (M) { (function (E1) { @@ -88,6 +89,7 @@ var M; })(M.E3 || (M.E3 = {})); var E3 = M.E3; })(M || (M = {})); +// Enum with no initializer in either declaration with constant members with the same root module var M1; (function (M1) { (function (E1) { @@ -109,6 +111,7 @@ var M1; })(M1.E1 || (M1.E1 = {})); var E1 = M1.E1; })(M1 || (M1 = {})); +// Enum with initializer in only one of three declarations with constant members with the same root module var M2; (function (M2) { (function (E1) { diff --git a/tests/baselines/reference/enumNegativeLiteral1.types b/tests/baselines/reference/enumNegativeLiteral1.types new file mode 100644 index 00000000000..329c54e276b --- /dev/null +++ b/tests/baselines/reference/enumNegativeLiteral1.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/enumNegativeLiteral1.ts === +enum E { +>E : E + + a = -5, b, c +>a : E +>-5 : number +>b : E +>c : E +} + diff --git a/tests/baselines/reference/enumNumbering1.js b/tests/baselines/reference/enumNumbering1.js index 40bf821a088..f5b09d10f40 100644 --- a/tests/baselines/reference/enumNumbering1.js +++ b/tests/baselines/reference/enumNumbering1.js @@ -15,5 +15,5 @@ var Test; Test[Test["B"] = 1] = "B"; Test[Test["C"] = Math.floor(Math.random() * 1000)] = "C"; Test[Test["D"] = 10] = "D"; - Test[Test["E"] = 11] = "E"; + Test[Test["E"] = 11] = "E"; // Error but shouldn't be })(Test || (Test = {})); diff --git a/tests/baselines/reference/enumNumbering1.types b/tests/baselines/reference/enumNumbering1.types new file mode 100644 index 00000000000..00e8eb95da9 --- /dev/null +++ b/tests/baselines/reference/enumNumbering1.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/enumNumbering1.ts === +enum Test { +>Test : Test + + A, +>A : Test + + B, +>B : Test + + C = Math.floor(Math.random() * 1000), +>C : Test +>Math.floor(Math.random() * 1000) : number +>Math.floor : (x: number) => number +>Math : Math +>floor : (x: number) => number +>Math.random() * 1000 : number +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number + + D = 10, +>D : Test + + E // Error but shouldn't be +>E : Test +} + diff --git a/tests/baselines/reference/enumOperations.types b/tests/baselines/reference/enumOperations.types new file mode 100644 index 00000000000..df36d293cf3 --- /dev/null +++ b/tests/baselines/reference/enumOperations.types @@ -0,0 +1,62 @@ +=== tests/cases/compiler/enumOperations.ts === +enum Enum { None = 0 } +>Enum : Enum +>None : Enum + +var enumType: Enum = Enum.None; +>enumType : Enum +>Enum : Enum +>Enum.None : Enum +>Enum : typeof Enum +>None : Enum + +var numberType: number = 0; +>numberType : number + +var anyType: any = 0; +>anyType : any + +enumType ^ numberType; +>enumType ^ numberType : number +>enumType : Enum +>numberType : number + +numberType ^ anyType; +>numberType ^ anyType : number +>numberType : number +>anyType : any + +enumType & anyType; +>enumType & anyType : number +>enumType : Enum +>anyType : any + +enumType | anyType; +>enumType | anyType : number +>enumType : Enum +>anyType : any + +enumType ^ anyType; +>enumType ^ anyType : number +>enumType : Enum +>anyType : any + +~anyType; +>~anyType : number +>anyType : any + +enumType <enumType <enumType : Enum +>anyType : any + +enumType >>anyType; +>enumType >>anyType : number +>enumType : Enum +>anyType : any + +enumType >>>anyType; +>enumType >>>anyType : number +>enumType : Enum +>anyType : any + diff --git a/tests/baselines/reference/enumPropertyAccess.js b/tests/baselines/reference/enumPropertyAccess.js index 156bf0d4ef2..4c2a7df3c94 100644 --- a/tests/baselines/reference/enumPropertyAccess.js +++ b/tests/baselines/reference/enumPropertyAccess.js @@ -20,10 +20,11 @@ var Colors; Colors[Colors["Red"] = 0] = "Red"; Colors[Colors["Green"] = 1] = "Green"; })(Colors || (Colors = {})); -var x = 0 /* Red */; -var p = x.Green; -x.toFixed(); +var x = 0 /* Red */; // type of 'x' should be 'Colors' +var p = x.Green; // error +x.toFixed(); // ok +// Now with generics function fill(f) { - f.Green; - f.toFixed(); + f.Green; // error + f.toFixed(); // ok } diff --git a/tests/baselines/reference/enumWithQuotedElementName1.types b/tests/baselines/reference/enumWithQuotedElementName1.types new file mode 100644 index 00000000000..135a74a5103 --- /dev/null +++ b/tests/baselines/reference/enumWithQuotedElementName1.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/enumWithQuotedElementName1.ts === +enum E { +>E : E + + 'fo"o', +} diff --git a/tests/baselines/reference/enumWithQuotedElementName2.types b/tests/baselines/reference/enumWithQuotedElementName2.types new file mode 100644 index 00000000000..ab222764f75 --- /dev/null +++ b/tests/baselines/reference/enumWithQuotedElementName2.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/enumWithQuotedElementName2.ts === +enum E { +>E : E + + "fo'o", +} diff --git a/tests/baselines/reference/enumWithUnicodeEscape1.types b/tests/baselines/reference/enumWithUnicodeEscape1.types new file mode 100644 index 00000000000..8376685ca6b --- /dev/null +++ b/tests/baselines/reference/enumWithUnicodeEscape1.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/enumWithUnicodeEscape1.ts === +enum E { +>E : E + + 'gold \u2730' +} + diff --git a/tests/baselines/reference/enumsWithMultipleDeclarations3.types b/tests/baselines/reference/enumsWithMultipleDeclarations3.types new file mode 100644 index 00000000000..2b761c780e9 --- /dev/null +++ b/tests/baselines/reference/enumsWithMultipleDeclarations3.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/enumsWithMultipleDeclarations3.ts === +module E { +>E : typeof E +} + +enum E { +>E : E + + A +>A : E +} diff --git a/tests/baselines/reference/errorForwardReferenceForwadingConstructor.js b/tests/baselines/reference/errorForwardReferenceForwadingConstructor.js index fb68bace6e0..5bfa3b38e83 100644 --- a/tests/baselines/reference/errorForwardReferenceForwadingConstructor.js +++ b/tests/baselines/reference/errorForwardReferenceForwadingConstructor.js @@ -11,6 +11,7 @@ class derived extends base { } //// [errorForwardReferenceForwadingConstructor.js] +// Error forward referencing derived class with forwarding constructor var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/errorOnContextuallyTypedReturnType.js b/tests/baselines/reference/errorOnContextuallyTypedReturnType.js index 45e92ab5099..2a49ccd2b67 100644 --- a/tests/baselines/reference/errorOnContextuallyTypedReturnType.js +++ b/tests/baselines/reference/errorOnContextuallyTypedReturnType.js @@ -5,6 +5,6 @@ var n2: () => boolean = function ():boolean { }; // expect an error here //// [errorOnContextuallyTypedReturnType.js] var n1 = function () { -}; +}; // expect an error here var n2 = function () { -}; +}; // expect an error here diff --git a/tests/baselines/reference/errorSuperCalls.errors.txt b/tests/baselines/reference/errorSuperCalls.errors.txt index c1975cccdac..7e85cc07ee7 100644 --- a/tests/baselines/reference/errorSuperCalls.errors.txt +++ b/tests/baselines/reference/errorSuperCalls.errors.txt @@ -72,7 +72,7 @@ constructor() { super(); ~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. super(); } } diff --git a/tests/baselines/reference/errorSupression1.js b/tests/baselines/reference/errorSupression1.js index 47d9811b85e..92330a6c074 100644 --- a/tests/baselines/reference/errorSupression1.js +++ b/tests/baselines/reference/errorSupression1.js @@ -18,4 +18,5 @@ var Foo = (function () { return Foo; })(); var baz = Foo.b; +// Foo.b won't bind. baz.concat("y"); diff --git a/tests/baselines/reference/es3-amd.types b/tests/baselines/reference/es3-amd.types new file mode 100644 index 00000000000..c43d29ac6dc --- /dev/null +++ b/tests/baselines/reference/es3-amd.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/es3-amd.ts === + +class A +>A : A +{ + constructor () + { + + } + + public B() +>B : () => number + { + return 42; + } +} diff --git a/tests/baselines/reference/es3-declaration-amd.types b/tests/baselines/reference/es3-declaration-amd.types new file mode 100644 index 00000000000..0ee63040166 --- /dev/null +++ b/tests/baselines/reference/es3-declaration-amd.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/es3-declaration-amd.ts === + +class A +>A : A +{ + constructor () + { + + } + + public B() +>B : () => number + { + return 42; + } +} diff --git a/tests/baselines/reference/es3-sourcemap-amd.types b/tests/baselines/reference/es3-sourcemap-amd.types new file mode 100644 index 00000000000..5301120e2df --- /dev/null +++ b/tests/baselines/reference/es3-sourcemap-amd.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/es3-sourcemap-amd.ts === + +class A +>A : A +{ + constructor () + { + + } + + public B() +>B : () => number + { + return 42; + } +} diff --git a/tests/baselines/reference/es5-amd.types b/tests/baselines/reference/es5-amd.types new file mode 100644 index 00000000000..289289d3c0b --- /dev/null +++ b/tests/baselines/reference/es5-amd.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/es5-amd.ts === + +class A +>A : A +{ + constructor () + { + + } + + public B() +>B : () => number + { + return 42; + } +} diff --git a/tests/baselines/reference/es5-declaration-amd.types b/tests/baselines/reference/es5-declaration-amd.types new file mode 100644 index 00000000000..50815e8e6bc --- /dev/null +++ b/tests/baselines/reference/es5-declaration-amd.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/es5-declaration-amd.ts === + +class A +>A : A +{ + constructor () + { + + } + + public B() +>B : () => number + { + return 42; + } +} diff --git a/tests/baselines/reference/es5-souremap-amd.types b/tests/baselines/reference/es5-souremap-amd.types new file mode 100644 index 00000000000..242e6508026 --- /dev/null +++ b/tests/baselines/reference/es5-souremap-amd.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/es5-souremap-amd.ts === + +class A +>A : A +{ + constructor () + { + + } + + public B() +>B : () => number + { + return 42; + } +} diff --git a/tests/baselines/reference/es6ClassSuperCodegenBug.types b/tests/baselines/reference/es6ClassSuperCodegenBug.types new file mode 100644 index 00000000000..7b8a4abadfe --- /dev/null +++ b/tests/baselines/reference/es6ClassSuperCodegenBug.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/es6ClassSuperCodegenBug.ts === +class A { +>A : A + + constructor(str1:string, str2:string) {} +>str1 : string +>str2 : string +} +class B extends A { +>B : B +>A : A + + constructor() { + 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/es6ClassTest4.types b/tests/baselines/reference/es6ClassTest4.types new file mode 100644 index 00000000000..53669dada73 --- /dev/null +++ b/tests/baselines/reference/es6ClassTest4.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/es6ClassTest4.ts === +declare class Point +>Point : Point +{ + x: number; +>x : number + + y: number; +>y : number + + add(dx: number, dy: number): Point; +>add : (dx: number, dy: number) => Point +>dx : number +>dy : number +>Point : Point + + mult(p: Point): Point; +>mult : (p: Point) => Point +>p : Point +>Point : Point +>Point : Point + + static origin: Point; +>origin : Point +>Point : Point + + constructor(x: number, y: number); +>x : number +>y : number +} + diff --git a/tests/baselines/reference/es6ClassTest5.types b/tests/baselines/reference/es6ClassTest5.types new file mode 100644 index 00000000000..e04be3e8c43 --- /dev/null +++ b/tests/baselines/reference/es6ClassTest5.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/es6ClassTest5.ts === +class C1T5 { +>C1T5 : C1T5 + + foo: (i: number, s: string) => number = +>foo : (i: number, s: string) => number +>i : number +>s : string + + (i) => { +>(i) => { return i; } : (i: number) => number +>i : number + + return i; +>i : number + } +} +module C2T5 {} +>C2T5 : unknown + +class bigClass { +>bigClass : bigClass + + public break = 1; +>break : number +} + diff --git a/tests/baselines/reference/es6ClassTest7.types b/tests/baselines/reference/es6ClassTest7.types new file mode 100644 index 00000000000..9ac4a65b305 --- /dev/null +++ b/tests/baselines/reference/es6ClassTest7.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/es6ClassTest7.ts === +declare module M { +>M : typeof M + + export class Foo { +>Foo : Foo + } +} + +class Bar extends M.Foo { +>Bar : Bar +>M : unknown +>Foo : M.Foo +} + diff --git a/tests/baselines/reference/es6ClassTest8.js b/tests/baselines/reference/es6ClassTest8.js index 0ce4982a38f..3c616e5e893 100644 --- a/tests/baselines/reference/es6ClassTest8.js +++ b/tests/baselines/reference/es6ClassTest8.js @@ -47,7 +47,7 @@ function f1(x) { var C = (function () { function C() { var bar = (function () { - return bar; + return bar; // 'bar' should be resolvable }); var b = f1(f1(bar)); } diff --git a/tests/baselines/reference/es6ClassTest8.types b/tests/baselines/reference/es6ClassTest8.types new file mode 100644 index 00000000000..e5133c88d7e --- /dev/null +++ b/tests/baselines/reference/es6ClassTest8.types @@ -0,0 +1,179 @@ +=== tests/cases/compiler/es6ClassTest8.ts === +function f1(x:any) {return x;} +>f1 : (x: any) => any +>x : any +>x : any + +class C { +>C : C + + constructor() { + var bar:any = (function() { +>bar : any +>(function() { return bar; // 'bar' should be resolvable }) : () => any +>function() { return bar; // 'bar' should be resolvable } : () => any + + return bar; // 'bar' should be resolvable +>bar : any + + }); + var b = f1(f1(bar)); +>b : any +>f1(f1(bar)) : any +>f1 : (x: any) => any +>f1(bar) : any +>f1 : (x: any) => any +>bar : any + } + +} + +class Vector { +>Vector : Vector + + static norm(v:Vector):Vector {return null;} +>norm : (v: Vector) => Vector +>v : Vector +>Vector : Vector +>Vector : Vector + + static minus(v1:Vector, v2:Vector):Vector {return null;} +>minus : (v1: Vector, v2: Vector) => Vector +>v1 : Vector +>Vector : Vector +>v2 : Vector +>Vector : Vector +>Vector : Vector + + static times(v1:Vector, v2:Vector):Vector {return null;} +>times : (v1: Vector, v2: Vector) => Vector +>v1 : Vector +>Vector : Vector +>v2 : Vector +>Vector : Vector +>Vector : Vector + + static cross(v1:Vector, v2:Vector):Vector {return null;} +>cross : (v1: Vector, v2: Vector) => Vector +>v1 : Vector +>Vector : Vector +>v2 : Vector +>Vector : Vector +>Vector : Vector + + constructor(public x: number, +>x : number + + public y: number, +>y : number + + public z: number) { +>z : number + } + + static dot(v1:Vector, v2:Vector):Vector {return null;} +>dot : (v1: Vector, v2: Vector) => Vector +>v1 : Vector +>Vector : Vector +>v2 : Vector +>Vector : Vector +>Vector : Vector + +} + +class Camera { +>Camera : Camera + + public forward: Vector; +>forward : Vector +>Vector : Vector + + public right: Vector; +>right : Vector +>Vector : Vector + + public up: Vector; +>up : Vector +>Vector : Vector + + constructor(public pos: Vector, lookAt: Vector) { +>pos : Vector +>Vector : Vector +>lookAt : Vector +>Vector : Vector + + var down = new Vector(0.0, -1.0, 0.0); +>down : Vector +>new Vector(0.0, -1.0, 0.0) : Vector +>Vector : typeof Vector +>-1.0 : number + + this.forward = Vector.norm(Vector.minus(lookAt,this.pos)); +>this.forward = Vector.norm(Vector.minus(lookAt,this.pos)) : Vector +>this.forward : Vector +>this : Camera +>forward : Vector +>Vector.norm(Vector.minus(lookAt,this.pos)) : Vector +>Vector.norm : (v: Vector) => Vector +>Vector : typeof Vector +>norm : (v: Vector) => Vector +>Vector.minus(lookAt,this.pos) : Vector +>Vector.minus : (v1: Vector, v2: Vector) => Vector +>Vector : typeof Vector +>minus : (v1: Vector, v2: Vector) => Vector +>lookAt : Vector +>this.pos : Vector +>this : Camera +>pos : Vector + + this.right = Vector.times(down, Vector.norm(Vector.cross(this.forward, down))); +>this.right = Vector.times(down, Vector.norm(Vector.cross(this.forward, down))) : Vector +>this.right : Vector +>this : Camera +>right : Vector +>Vector.times(down, Vector.norm(Vector.cross(this.forward, down))) : Vector +>Vector.times : (v1: Vector, v2: Vector) => Vector +>Vector : typeof Vector +>times : (v1: Vector, v2: Vector) => Vector +>down : Vector +>Vector.norm(Vector.cross(this.forward, down)) : Vector +>Vector.norm : (v: Vector) => Vector +>Vector : typeof Vector +>norm : (v: Vector) => Vector +>Vector.cross(this.forward, down) : Vector +>Vector.cross : (v1: Vector, v2: Vector) => Vector +>Vector : typeof Vector +>cross : (v1: Vector, v2: Vector) => Vector +>this.forward : Vector +>this : Camera +>forward : Vector +>down : Vector + + this.up = Vector.times(down, Vector.norm(Vector.cross(this.forward, this.right))); +>this.up = Vector.times(down, Vector.norm(Vector.cross(this.forward, this.right))) : Vector +>this.up : Vector +>this : Camera +>up : Vector +>Vector.times(down, Vector.norm(Vector.cross(this.forward, this.right))) : Vector +>Vector.times : (v1: Vector, v2: Vector) => Vector +>Vector : typeof Vector +>times : (v1: Vector, v2: Vector) => Vector +>down : Vector +>Vector.norm(Vector.cross(this.forward, this.right)) : Vector +>Vector.norm : (v: Vector) => Vector +>Vector : typeof Vector +>norm : (v: Vector) => Vector +>Vector.cross(this.forward, this.right) : Vector +>Vector.cross : (v1: Vector, v2: Vector) => Vector +>Vector : typeof Vector +>cross : (v1: Vector, v2: Vector) => Vector +>this.forward : Vector +>this : Camera +>forward : Vector +>this.right : Vector +>this : Camera +>right : Vector + } +} + + diff --git a/tests/baselines/reference/es6DeclOrdering.js b/tests/baselines/reference/es6DeclOrdering.js index 1696ba7ae93..53726e3b0bf 100644 --- a/tests/baselines/reference/es6DeclOrdering.js +++ b/tests/baselines/reference/es6DeclOrdering.js @@ -19,8 +19,9 @@ class Bar { //// [es6DeclOrdering.js] var Bar = (function () { function Bar(store) { - this._store = store; + this._store = store; // this is an error for some reason? Unresolved symbol store } + //public bar() { } Bar.prototype.foo = function () { return this._store.length; }; diff --git a/tests/baselines/reference/es6MemberScoping.js b/tests/baselines/reference/es6MemberScoping.js index 6cfdef9e743..85f76a93934 100644 --- a/tests/baselines/reference/es6MemberScoping.js +++ b/tests/baselines/reference/es6MemberScoping.js @@ -20,7 +20,7 @@ class Foo2 { //// [es6MemberScoping.js] var Foo = (function () { function Foo(store) { - this._store = store; + this._store = store; // should be an error. } Foo.prototype.foo = function () { return this._store.length; @@ -32,6 +32,6 @@ var Foo2 = (function () { } Foo2.Foo2 = function () { return 0; - }; + }; // should not be an error return Foo2; })(); diff --git a/tests/baselines/reference/escapedIdentifiers.js b/tests/baselines/reference/escapedIdentifiers.js index f68e540cee4..cabeb7f1d5d 100644 --- a/tests/baselines/reference/escapedIdentifiers.js +++ b/tests/baselines/reference/escapedIdentifiers.js @@ -120,12 +120,24 @@ l\u0061bel4: } //// [escapedIdentifiers.js] +/* + 0 .. \u0030 + 9 .. \u0039 + + A .. \u0041 + Z .. \u005a + + a .. \u0061 + z .. \u00za +*/ +// var decl var \u0061 = 1; a++; \u0061++; var b = 1; b++; \u0062++; +// modules var moduleType1; (function (moduleType1) { moduleType1.baz1; @@ -138,6 +150,7 @@ moduleType1.baz1 = 3; moduleType\u0031.baz1 = 3; moduleType2.baz2 = 3; moduleType\u0032.baz2 = 3; +// classes var classType1 = (function () { function classType1() { } @@ -164,6 +177,7 @@ var interfaceType2Object1 = { bar2: 0 }; interfaceType2Object1.bar2 = 2; var interfaceType2Object2 = { bar2: 0 }; interfaceType2Object2.bar2 = 2; +// arguments var testClass = (function () { function testClass() { } @@ -175,6 +189,7 @@ var testClass = (function () { }; return testClass; })(); +// constructors var constructorTestClass = (function () { function constructorTestClass(arg1, arg\u0032, arg\u0033, arg4) { this.arg1 = arg1; diff --git a/tests/baselines/reference/escapedIdentifiers.types b/tests/baselines/reference/escapedIdentifiers.types new file mode 100644 index 00000000000..d0b6b1f5c42 --- /dev/null +++ b/tests/baselines/reference/escapedIdentifiers.types @@ -0,0 +1,297 @@ +=== tests/cases/compiler/escapedIdentifiers.ts === +/* + 0 .. \u0030 + 9 .. \u0039 + + A .. \u0041 + Z .. \u005a + + a .. \u0061 + z .. \u00za +*/ + +// var decl +var \u0061 = 1; +>\u0061 : number + +a ++; +>a ++ : number +>a : number + +\u0061 ++; +>\u0061 ++ : number +>\u0061 : number + +var b = 1; +>b : number + +b ++; +>b ++ : number +>b : number + +\u0062 ++; +>\u0062 ++ : number +>\u0062 : number + +// modules +module moduleType1 { +>moduleType1 : typeof moduleType1 + + export var baz1: number; +>baz1 : number +} +module moduleType\u0032 { +>moduleType\u0032 : typeof moduleType\u0032 + + export var baz2: number; +>baz2 : number +} + +moduleType1.baz1 = 3; +>moduleType1.baz1 = 3 : number +>moduleType1.baz1 : number +>moduleType1 : typeof moduleType1 +>baz1 : number + +moduleType\u0031.baz1 = 3; +>moduleType\u0031.baz1 = 3 : number +>moduleType\u0031.baz1 : number +>moduleType\u0031 : typeof moduleType1 +>baz1 : number + +moduleType2.baz2 = 3; +>moduleType2.baz2 = 3 : number +>moduleType2.baz2 : number +>moduleType2 : typeof moduleType\u0032 +>baz2 : number + +moduleType\u0032.baz2 = 3; +>moduleType\u0032.baz2 = 3 : number +>moduleType\u0032.baz2 : number +>moduleType\u0032 : typeof moduleType\u0032 +>baz2 : number + +// classes + +class classType1 { +>classType1 : classType1 + + public foo1: number; +>foo1 : number +} +class classType\u0032 { +>classType\u0032 : classType\u0032 + + public foo2: number; +>foo2 : number +} + +var classType1Object1 = new classType1(); +>classType1Object1 : classType1 +>new classType1() : classType1 +>classType1 : typeof classType1 + +classType1Object1.foo1 = 2; +>classType1Object1.foo1 = 2 : number +>classType1Object1.foo1 : number +>classType1Object1 : classType1 +>foo1 : number + +var classType1Object2 = new classType\u0031(); +>classType1Object2 : classType1 +>new classType\u0031() : classType1 +>classType\u0031 : typeof classType1 + +classType1Object2.foo1 = 2; +>classType1Object2.foo1 = 2 : number +>classType1Object2.foo1 : number +>classType1Object2 : classType1 +>foo1 : number + +var classType2Object1 = new classType2(); +>classType2Object1 : classType\u0032 +>new classType2() : classType\u0032 +>classType2 : typeof classType\u0032 + +classType2Object1.foo2 = 2; +>classType2Object1.foo2 = 2 : number +>classType2Object1.foo2 : number +>classType2Object1 : classType\u0032 +>foo2 : number + +var classType2Object2 = new classType\u0032(); +>classType2Object2 : classType\u0032 +>new classType\u0032() : classType\u0032 +>classType\u0032 : typeof classType\u0032 + +classType2Object2.foo2 = 2; +>classType2Object2.foo2 = 2 : number +>classType2Object2.foo2 : number +>classType2Object2 : classType\u0032 +>foo2 : number + +// interfaces +interface interfaceType1 { +>interfaceType1 : interfaceType1 + + bar1: number; +>bar1 : number +} +interface interfaceType\u0032 { +>interfaceType\u0032 : interfaceType\u0032 + + bar2: number; +>bar2 : number +} + +var interfaceType1Object1 = { bar1: 0 }; +>interfaceType1Object1 : interfaceType1 +>{ bar1: 0 } : interfaceType1 +>interfaceType1 : interfaceType1 +>{ bar1: 0 } : { bar1: number; } +>bar1 : number + +interfaceType1Object1.bar1 = 2; +>interfaceType1Object1.bar1 = 2 : number +>interfaceType1Object1.bar1 : number +>interfaceType1Object1 : interfaceType1 +>bar1 : number + +var interfaceType1Object2 = { bar1: 0 }; +>interfaceType1Object2 : interfaceType1 +>{ bar1: 0 } : interfaceType1 +>interfaceType\u0031 : interfaceType1 +>{ bar1: 0 } : { bar1: number; } +>bar1 : number + +interfaceType1Object2.bar1 = 2; +>interfaceType1Object2.bar1 = 2 : number +>interfaceType1Object2.bar1 : number +>interfaceType1Object2 : interfaceType1 +>bar1 : number + +var interfaceType2Object1 = { bar2: 0 }; +>interfaceType2Object1 : interfaceType\u0032 +>{ bar2: 0 } : interfaceType\u0032 +>interfaceType2 : interfaceType\u0032 +>{ bar2: 0 } : { bar2: number; } +>bar2 : number + +interfaceType2Object1.bar2 = 2; +>interfaceType2Object1.bar2 = 2 : number +>interfaceType2Object1.bar2 : number +>interfaceType2Object1 : interfaceType\u0032 +>bar2 : number + +var interfaceType2Object2 = { bar2: 0 }; +>interfaceType2Object2 : interfaceType\u0032 +>{ bar2: 0 } : interfaceType\u0032 +>interfaceType\u0032 : interfaceType\u0032 +>{ bar2: 0 } : { bar2: number; } +>bar2 : number + +interfaceType2Object2.bar2 = 2; +>interfaceType2Object2.bar2 = 2 : number +>interfaceType2Object2.bar2 : number +>interfaceType2Object2 : interfaceType\u0032 +>bar2 : number + + +// arguments +class testClass { +>testClass : testClass + + public func(arg1: number, arg\u0032: string, arg\u0033: boolean, arg4: number) { +>func : (arg1: number, arg\u0032: string, arg\u0033: boolean, arg4: number) => void +>arg1 : number +>arg\u0032 : string +>arg\u0033 : boolean +>arg4 : number + + arg\u0031 = 1; +>arg\u0031 = 1 : number +>arg\u0031 : number + + arg2 = 'string'; +>arg2 = 'string' : string +>arg2 : string + + arg\u0033 = true; +>arg\u0033 = true : boolean +>arg\u0033 : boolean + + arg4 = 2; +>arg4 = 2 : number +>arg4 : number + } +} + +// constructors +class constructorTestClass { +>constructorTestClass : constructorTestClass + + constructor (public arg1: number,public arg\u0032: string,public arg\u0033: boolean,public arg4: number) { +>arg1 : number +>arg\u0032 : string +>arg\u0033 : boolean +>arg4 : number + } +} +var constructorTestObject = new constructorTestClass(1, 'string', true, 2); +>constructorTestObject : constructorTestClass +>new constructorTestClass(1, 'string', true, 2) : constructorTestClass +>constructorTestClass : typeof constructorTestClass + +constructorTestObject.arg\u0031 = 1; +>constructorTestObject.arg\u0031 = 1 : number +>constructorTestObject.arg\u0031 : number +>constructorTestObject : constructorTestClass +>arg\u0031 : number + +constructorTestObject.arg2 = 'string'; +>constructorTestObject.arg2 = 'string' : string +>constructorTestObject.arg2 : string +>constructorTestObject : constructorTestClass +>arg2 : string + +constructorTestObject.arg\u0033 = true; +>constructorTestObject.arg\u0033 = true : boolean +>constructorTestObject.arg\u0033 : boolean +>constructorTestObject : constructorTestClass +>arg\u0033 : boolean + +constructorTestObject.arg4 = 2; +>constructorTestObject.arg4 = 2 : number +>constructorTestObject.arg4 : number +>constructorTestObject : constructorTestClass +>arg4 : number + +// Lables + +l\u0061bel1: + while (false) + { + while(false) + continue label1; // it will go to next iteration of outer loop + } + +label2: + while (false) + { + while(false) + continue l\u0061bel2; // it will go to next iteration of outer loop + } + +label3: + while (false) + { + while(false) + continue label3; // it will go to next iteration of outer loop + } + +l\u0061bel4: + while (false) + { + while(false) + continue l\u0061bel4; // it will go to next iteration of outer loop + } diff --git a/tests/baselines/reference/everyTypeAssignableToAny.types b/tests/baselines/reference/everyTypeAssignableToAny.types new file mode 100644 index 00000000000..89af4f4b7c0 --- /dev/null +++ b/tests/baselines/reference/everyTypeAssignableToAny.types @@ -0,0 +1,214 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/everyTypeAssignableToAny.ts === +var a: any; +>a : any + +class C { +>C : C + + foo: string; +>foo : string +} +var ac: C; +>ac : C +>C : C + +interface I { +>I : I + + foo: string; +>foo : string +} +var ai: I; +>ai : I +>I : I + +enum E { A } +>E : E +>A : E + +var ae: E; +>ae : E +>E : E + +var b: number; +>b : number + +var c: string; +>c : string + +var d: boolean; +>d : boolean + +var e: Date; +>e : Date +>Date : Date + +var f: any; +>f : any + +var g: void; +>g : void + +var h: Object; +>h : Object +>Object : Object + +var i: {}; +>i : {} + +var j: () => {}; +>j : () => {} + +var k: Function; +>k : Function +>Function : Function + +var l: (x: number) => string; +>l : (x: number) => string +>x : number + +var m: number[]; +>m : number[] + +var n: { foo: string }; +>n : { foo: string; } +>foo : string + +var o: (x: T) => T; +>o : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var p: Number; +>p : Number +>Number : Number + +var q: String; +>q : String +>String : String + +a = b; +>a = b : number +>a : any +>b : number + +a = c; +>a = c : string +>a : any +>c : string + +a = d; +>a = d : boolean +>a : any +>d : boolean + +a = e; +>a = e : Date +>a : any +>e : Date + +a = f; +>a = f : any +>a : any +>f : any + +a = g; +>a = g : void +>a : any +>g : void + +a = h; +>a = h : Object +>a : any +>h : Object + +a = i; +>a = i : {} +>a : any +>i : {} + +a = j; +>a = j : () => {} +>a : any +>j : () => {} + +a = k; +>a = k : Function +>a : any +>k : Function + +a = l; +>a = l : (x: number) => string +>a : any +>l : (x: number) => string + +a = m; +>a = m : number[] +>a : any +>m : number[] + +a = o; +>a = o : (x: T) => T +>a : any +>o : (x: T) => T + +a = p; +>a = p : Number +>a : any +>p : Number + +a = q; +>a = q : String +>a : any +>q : String + +a = ac; +>a = ac : C +>a : any +>ac : C + +a = ai; +>a = ai : I +>a : any +>ai : I + +a = ae; +>a = ae : E +>a : any +>ae : E + +function foo(x: T, y: U, z: V) { +>foo : (x: T, y: U, z: V) => void +>T : T +>U : U +>V : V +>Date : Date +>x : T +>T : T +>y : U +>U : U +>z : V +>V : V + + a = x; +>a = x : T +>a : any +>x : T + + a = y; +>a = y : U +>a : any +>y : U + + a = z; +>a = z : V +>a : any +>z : V +} +//function foo(x: T, y: U, z: V) { +// a = x; +// a = y; +// a = z; +//} diff --git a/tests/baselines/reference/everyTypeWithAnnotationAndInitializer.types b/tests/baselines/reference/everyTypeWithAnnotationAndInitializer.types new file mode 100644 index 00000000000..54dcc67b78a --- /dev/null +++ b/tests/baselines/reference/everyTypeWithAnnotationAndInitializer.types @@ -0,0 +1,156 @@ +=== tests/cases/conformance/statements/VariableStatements/everyTypeWithAnnotationAndInitializer.ts === +interface I { +>I : I + + id: number; +>id : number +} + +class C implements I { +>C : C +>I : I + + id: number; +>id : number +} + +class D{ +>D : D +>T : T + + source: T; +>source : T +>T : T + + recurse: D; +>recurse : D +>D : D +>T : T + + wrapped: D> +>wrapped : D> +>D : D +>D : D +>T : T +} + +function F(x: string): number { return 42; } +>F : (x: string) => number +>x : string + +module M { +>M : typeof M + + export class A { +>A : A + + name: string; +>name : string + } + + export function F2(x: number): string { return x.toString(); } +>F2 : (x: number) => string +>x : number +>x.toString() : string +>x.toString : (radix?: number) => string +>x : number +>toString : (radix?: number) => string +} + +var aNumber: number = 9.9; +>aNumber : number + +var aString: string = 'this is a string'; +>aString : string + +var aDate: Date = new Date(12); +>aDate : Date +>Date : Date +>new Date(12) : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +var anObject: Object = new Object(); +>anObject : Object +>Object : Object +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + +var anAny: any = null; +>anAny : any + +var aSecondAny: any = undefined; +>aSecondAny : any +>undefined : undefined + +var aVoid: void = undefined; +>aVoid : void +>undefined : undefined + +var anInterface: I = new C(); +>anInterface : I +>I : I +>new C() : C +>C : typeof C + +var aClass: C = new C(); +>aClass : C +>C : C +>new C() : C +>C : typeof C + +var aGenericClass: D = new D(); +>aGenericClass : D +>D : D +>new D() : D +>D : typeof D + +var anObjectLiteral: I = { id: 12 }; +>anObjectLiteral : I +>I : I +>{ id: 12 } : { id: number; } +>id : number + +var anOtherObjectLiteral: { id: number } = new C(); +>anOtherObjectLiteral : { id: number; } +>id : number +>new C() : C +>C : typeof C + +var aFunction: typeof F = F; +>aFunction : (x: string) => number +>F : (x: string) => number +>F : (x: string) => number + +var anOtherFunction: (x: string) => number = F; +>anOtherFunction : (x: string) => number +>x : string +>F : (x: string) => number + +var aLambda: typeof F = (x) => 2; +>aLambda : (x: string) => number +>F : (x: string) => number +>(x) => 2 : (x: string) => number +>x : string + +var aModule: typeof M = M; +>aModule : typeof M +>M : typeof M +>M : typeof M + +var aClassInModule: M.A = new M.A(); +>aClassInModule : M.A +>M : unknown +>A : M.A +>new M.A() : M.A +>M.A : typeof M.A +>M : typeof M +>A : typeof M.A + +var aFunctionInModule: typeof M.F2 = (x) => 'this is a string'; +>aFunctionInModule : (x: number) => string +>M : typeof M +>F2 : (x: number) => string +>(x) => 'this is a string' : (x: number) => string +>x : number + + diff --git a/tests/baselines/reference/everyTypeWithInitializer.js b/tests/baselines/reference/everyTypeWithInitializer.js index 59b00b2c37c..74904a5ea30 100644 --- a/tests/baselines/reference/everyTypeWithInitializer.js +++ b/tests/baselines/reference/everyTypeWithInitializer.js @@ -91,4 +91,5 @@ var aLambda = function (x) { return 2; }; var aModule = M; var aClassInModule = new M.A(); var aFunctionInModule = M.F2; +// no initializer or annotation, so this is an 'any' var x; diff --git a/tests/baselines/reference/everyTypeWithInitializer.types b/tests/baselines/reference/everyTypeWithInitializer.types new file mode 100644 index 00000000000..3ebe8368f35 --- /dev/null +++ b/tests/baselines/reference/everyTypeWithInitializer.types @@ -0,0 +1,135 @@ +=== tests/cases/conformance/statements/VariableStatements/everyTypeWithInitializer.ts === +interface I { +>I : I + + id: number; +>id : number +} + +class C implements I { +>C : C +>I : I + + id: number; +>id : number +} + +class D{ +>D : D +>T : T + + source: T; +>source : T +>T : T + + recurse: D; +>recurse : D +>D : D +>T : T + + wrapped: D> +>wrapped : D> +>D : D +>D : D +>T : T +} + +function F(x: string): number { return 42; } +>F : (x: string) => number +>x : string + +module M { +>M : typeof M + + export class A { +>A : A + + name: string; +>name : string + } + + export function F2(x: number): string { return x.toString(); } +>F2 : (x: number) => string +>x : number +>x.toString() : string +>x.toString : (radix?: number) => string +>x : number +>toString : (radix?: number) => string +} + +var aNumber = 9.9; +>aNumber : number + +var aString = 'this is a string'; +>aString : string + +var aDate = new Date(12); +>aDate : Date +>new Date(12) : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +var anObject = new Object(); +>anObject : Object +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + +var anAny = null; +>anAny : any + +var anOtherAny = new C(); +>anOtherAny : any +> new C() : any +>new C() : C +>C : typeof C + +var anUndefined = undefined; +>anUndefined : any +>undefined : undefined + + +var aClass = new C(); +>aClass : C +>new C() : C +>C : typeof C + +var aGenericClass = new D(); +>aGenericClass : D +>new D() : D +>D : typeof D + +var anObjectLiteral = { id: 12 }; +>anObjectLiteral : { id: number; } +>{ id: 12 } : { id: number; } +>id : number + +var aFunction = F; +>aFunction : (x: string) => number +>F : (x: string) => number + +var aLambda = (x) => 2; +>aLambda : (x: any) => number +>(x) => 2 : (x: any) => number +>x : any + +var aModule = M; +>aModule : typeof M +>M : typeof M + +var aClassInModule = new M.A(); +>aClassInModule : M.A +>new M.A() : M.A +>M.A : typeof M.A +>M : typeof M +>A : typeof M.A + +var aFunctionInModule = M.F2; +>aFunctionInModule : (x: number) => string +>M.F2 : (x: number) => string +>M : typeof M +>F2 : (x: number) => string + +// no initializer or annotation, so this is an 'any' +var x; +>x : any + + diff --git a/tests/baselines/reference/exportAssignClassAndModule.types b/tests/baselines/reference/exportAssignClassAndModule.types new file mode 100644 index 00000000000..0118e6fa812 --- /dev/null +++ b/tests/baselines/reference/exportAssignClassAndModule.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/exportAssignClassAndModule_1.ts === +/// +import Foo = require('exportAssignClassAndModule_0'); +>Foo : typeof Foo + +var z: Foo.Bar; +>z : Foo.Bar +>Foo : Foo +>Bar : Foo.Bar + +var zz: Foo; +>zz : Foo +>Foo : Foo + +zz.x; +>zz.x : Foo.Bar +>zz : Foo +>x : Foo.Bar + +=== tests/cases/compiler/exportAssignClassAndModule_0.ts === +class Foo { +>Foo : Foo + + x: Foo.Bar; +>x : Foo.Bar +>Foo : Foo +>Bar : Foo.Bar +} +module Foo { +>Foo : typeof Foo + + export interface Bar { +>Bar : Bar + } +} +export = Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/exportAssignValueAndType.types b/tests/baselines/reference/exportAssignValueAndType.types new file mode 100644 index 00000000000..7d18e3c1655 --- /dev/null +++ b/tests/baselines/reference/exportAssignValueAndType.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/exportAssignValueAndType.ts === +declare module http { +>http : unknown + + export interface Server { openPort: number; } +>Server : Server +>openPort : number +} + +interface server { +>server : server + + (): http.Server; +>http : unknown +>Server : http.Server + + startTime: Date; +>startTime : Date +>Date : Date +} + +var x = 5; +>x : number + +var server = new Date(); +>server : Date +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +export = server; +>server : server + + diff --git a/tests/baselines/reference/exportAssignedTypeAsTypeAnnotation.js b/tests/baselines/reference/exportAssignedTypeAsTypeAnnotation.js index 71ca42ca9de..40a370caf41 100644 --- a/tests/baselines/reference/exportAssignedTypeAsTypeAnnotation.js +++ b/tests/baselines/reference/exportAssignedTypeAsTypeAnnotation.js @@ -19,5 +19,5 @@ define(["require", "exports"], function (require, exports) { }); //// [exportAssignedTypeAsTypeAnnotation_1.js] define(["require", "exports"], function (require, exports) { - var t2; + var t2; // should not raise a 'container type' error }); diff --git a/tests/baselines/reference/exportAssignedTypeAsTypeAnnotation.types b/tests/baselines/reference/exportAssignedTypeAsTypeAnnotation.types new file mode 100644 index 00000000000..8ac473f970a --- /dev/null +++ b/tests/baselines/reference/exportAssignedTypeAsTypeAnnotation.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/exportAssignedTypeAsTypeAnnotation_1.ts === +/// +import test = require('exportAssignedTypeAsTypeAnnotation_0'); +>test : unknown + +var t2: test; // should not raise a 'container type' error +>t2 : test +>test : test + +=== tests/cases/compiler/exportAssignedTypeAsTypeAnnotation_0.ts === + +interface x { +>x : x + + (): Date; +>Date : Date + + foo: string; +>foo : string +} +export = x; +>x : x + diff --git a/tests/baselines/reference/exportAssignmentCircularModules.types b/tests/baselines/reference/exportAssignmentCircularModules.types new file mode 100644 index 00000000000..57d5a8cccce --- /dev/null +++ b/tests/baselines/reference/exportAssignmentCircularModules.types @@ -0,0 +1,48 @@ +=== tests/cases/conformance/externalModules/foo_2.ts === +import foo0 = require("./foo_0"); +>foo0 : typeof foo0 + +module Foo { +>Foo : typeof Foo + + export var x = foo0.x; +>x : any +>foo0.x : any +>foo0 : typeof foo0 +>x : any +} +export = Foo; +>Foo : typeof Foo + +=== tests/cases/conformance/externalModules/foo_0.ts === +import foo1 = require('./foo_1'); +>foo1 : typeof foo1 + +module Foo { +>Foo : typeof Foo + + export var x = foo1.x; +>x : any +>foo1.x : any +>foo1 : typeof foo1 +>x : any +} +export = Foo; +>Foo : typeof Foo + +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo2 = require("./foo_2"); +>foo2 : typeof foo2 + +module Foo { +>Foo : typeof Foo + + export var x = foo2.x; +>x : any +>foo2.x : any +>foo2 : typeof foo2 +>x : any +} +export = Foo; +>Foo : typeof Foo + diff --git a/tests/baselines/reference/exportAssignmentClass.types b/tests/baselines/reference/exportAssignmentClass.types new file mode 100644 index 00000000000..c7c3f38d7ea --- /dev/null +++ b/tests/baselines/reference/exportAssignmentClass.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/exportAssignmentClass_B.ts === +import D = require("exportAssignmentClass_A"); +>D : typeof D + +var d = new D(); +>d : D +>new D() : D +>D : typeof D + +var x = d.p; +>x : number +>d.p : number +>d : D +>p : number + +=== tests/cases/compiler/exportAssignmentClass_A.ts === +class C { public p = 0; } +>C : C +>p : number + +export = C; +>C : C + diff --git a/tests/baselines/reference/exportAssignmentConstrainedGenericType.js b/tests/baselines/reference/exportAssignmentConstrainedGenericType.js index b7223d84f59..b62cc8251be 100644 --- a/tests/baselines/reference/exportAssignmentConstrainedGenericType.js +++ b/tests/baselines/reference/exportAssignmentConstrainedGenericType.js @@ -23,6 +23,6 @@ var Foo = (function () { module.exports = Foo; //// [foo_1.js] var foo = require("./foo_0"); -var x = new foo(true); -var y = new foo({ a: "test", b: 42 }); +var x = new foo(true); // Should error +var y = new foo({ a: "test", b: 42 }); // Should be OK var z = y.test.b; diff --git a/tests/baselines/reference/exportAssignmentEnum.types b/tests/baselines/reference/exportAssignmentEnum.types new file mode 100644 index 00000000000..9dfa34d3777 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentEnum.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/exportAssignmentEnum_B.ts === +import EnumE = require("exportAssignmentEnum_A"); +>EnumE : typeof EnumE + +var a = EnumE.A; +>a : EnumE +>EnumE.A : EnumE +>EnumE : typeof EnumE +>A : EnumE + +var b = EnumE.B; +>b : EnumE +>EnumE.B : EnumE +>EnumE : typeof EnumE +>B : EnumE + +var c = EnumE.C; +>c : EnumE +>EnumE.C : EnumE +>EnumE : typeof EnumE +>C : EnumE + +=== tests/cases/compiler/exportAssignmentEnum_A.ts === +enum E { +>E : E + + A, +>A : E + + B, +>B : E + + C, +>C : E +} + +export = E; +>E : E + diff --git a/tests/baselines/reference/exportAssignmentError.types b/tests/baselines/reference/exportAssignmentError.types new file mode 100644 index 00000000000..89e7d461fb2 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentError.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/exportAssignmentError.ts === +module M { +>M : typeof M + + export var x; +>x : any +} + +import M2 = M; +>M2 : typeof M +>M : typeof M + +export = M2; // should not error +>M2 : typeof M + diff --git a/tests/baselines/reference/exportAssignmentFunction.types b/tests/baselines/reference/exportAssignmentFunction.types new file mode 100644 index 00000000000..023a8c234d2 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentFunction.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/exportAssignmentFunction_B.ts === +import fooFunc = require("exportAssignmentFunction_A"); +>fooFunc : () => number + +var n: number = fooFunc(); +>n : number +>fooFunc() : number +>fooFunc : () => number + +=== tests/cases/compiler/exportAssignmentFunction_A.ts === +function foo() { return 0; } +>foo : () => number + +export = foo; +>foo : () => number + diff --git a/tests/baselines/reference/exportAssignmentGenericType.types b/tests/baselines/reference/exportAssignmentGenericType.types new file mode 100644 index 00000000000..241a8dac954 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentGenericType.types @@ -0,0 +1,27 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +var x = new foo(); +>x : foo +>new foo() : foo +>foo : typeof foo + +var y:number = x.test; +>y : number +>x.test : number +>x : foo +>test : number + +=== tests/cases/conformance/externalModules/foo_0.ts === +class Foo{ +>Foo : Foo +>T : T + + test: T; +>test : T +>T : T +} +export = Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/exportAssignmentInterface.types b/tests/baselines/reference/exportAssignmentInterface.types new file mode 100644 index 00000000000..f4ed92d9471 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentInterface.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/exportAssignmentInterface_B.ts === +import I1 = require("exportAssignmentInterface_A"); +>I1 : unknown + +var i: I1; +>i : I1 +>I1 : I1 + +var n: number = i.p1; +>n : number +>i.p1 : number +>i : I1 +>p1 : number + +=== tests/cases/compiler/exportAssignmentInterface_A.ts === +interface A { +>A : A + + p1: number; +>p1 : number +} + +export = A; +>A : A + diff --git a/tests/baselines/reference/exportAssignmentInternalModule.types b/tests/baselines/reference/exportAssignmentInternalModule.types new file mode 100644 index 00000000000..028507b7a04 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentInternalModule.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/exportAssignmentInternalModule_B.ts === +import modM = require("exportAssignmentInternalModule_A"); +>modM : typeof modM + +var n: number = modM.x; +>n : number +>modM.x : any +>modM : typeof modM +>x : any + +=== tests/cases/compiler/exportAssignmentInternalModule_A.ts === +module M { +>M : typeof M + + export var x; +>x : any +} + +export = M; +>M : typeof M + diff --git a/tests/baselines/reference/exportAssignmentMergedInterface.types b/tests/baselines/reference/exportAssignmentMergedInterface.types new file mode 100644 index 00000000000..d0fb5383b29 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentMergedInterface.types @@ -0,0 +1,69 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : unknown + +var x: foo; +>x : foo +>foo : foo + +x("test"); +>x("test") : void +>x : foo + +x(42); +>x(42) : number +>x : foo + +var y: string = x.b; +>y : string +>x.b : string +>x : foo +>b : string + +if(!!x.c){ } +>!!x.c : boolean +>!x.c : boolean +>x.c : boolean +>x : foo +>c : boolean + +var z = {x: 1, y: 2}; +>z : { x: number; y: number; } +>{x: 1, y: 2} : { x: number; y: number; } +>x : number +>y : number + +z = x.d; +>z = x.d : { x: number; y: number; } +>z : { x: number; y: number; } +>x.d : { x: number; y: number; } +>x : foo +>d : { x: number; y: number; } + +=== tests/cases/conformance/externalModules/foo_0.ts === +interface Foo { +>Foo : Foo + + (a: string): void; +>a : string + + b: string; +>b : string +} +interface Foo { +>Foo : Foo + + (a: number): number; +>a : number + + c: boolean; +>c : boolean + + d: {x: number; y: number}; +>d : { x: number; y: number; } +>x : number +>y : number +} +export = Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/exportAssignmentMergedModule.types b/tests/baselines/reference/exportAssignmentMergedModule.types new file mode 100644 index 00000000000..d72f173a439 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentMergedModule.types @@ -0,0 +1,62 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +var a: number = foo.a(); +>a : number +>foo.a() : number +>foo.a : () => number +>foo : typeof foo +>a : () => number + +if(!!foo.b){ +>!!foo.b : boolean +>!foo.b : boolean +>foo.b : boolean +>foo : typeof foo +>b : boolean + + foo.Test.answer = foo.c(42); +>foo.Test.answer = foo.c(42) : number +>foo.Test.answer : number +>foo.Test : typeof foo.Test +>foo : typeof foo +>Test : typeof foo.Test +>answer : number +>foo.c(42) : number +>foo.c : (a: number) => number +>foo : typeof foo +>c : (a: number) => number +} +=== tests/cases/conformance/externalModules/foo_0.ts === +module Foo { +>Foo : typeof Foo + + export function a(){ +>a : () => number + + return 5; + } + export var b = true; +>b : boolean +} +module Foo { +>Foo : typeof Foo + + export function c(a: number){ +>c : (a: number) => number +>a : number + + return a; +>a : number + } + export module Test { +>Test : typeof Test + + export var answer = 42; +>answer : number + } +} +export = Foo; +>Foo : typeof Foo + diff --git a/tests/baselines/reference/exportAssignmentOfDeclaredExternalModule.js b/tests/baselines/reference/exportAssignmentOfDeclaredExternalModule.js index 3a6f9022f77..c8ba8324ad2 100644 --- a/tests/baselines/reference/exportAssignmentOfDeclaredExternalModule.js +++ b/tests/baselines/reference/exportAssignmentOfDeclaredExternalModule.js @@ -18,8 +18,8 @@ var b = z(); // call signature - no error //// [exportAssignmentOfDeclaredExternalModule_0.js] //// [exportAssignmentOfDeclaredExternalModule_1.js] -var x = new Sammy(); -var y = Sammy(); -var z; -var a = new z(); -var b = z(); +var x = new Sammy(); // error to use as constructor as there is not constructor symbol +var y = Sammy(); // error to use interface name as call target +var z; // no error - z is of type interface Sammy from module 'M' +var a = new z(); // constructor - no error +var b = z(); // call signature - no error diff --git a/tests/baselines/reference/exportAssignmentOfGenericType1.types b/tests/baselines/reference/exportAssignmentOfGenericType1.types new file mode 100644 index 00000000000..1bf3e7454a7 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentOfGenericType1.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/exportAssignmentOfGenericType1_1.ts === +/// +import q = require("exportAssignmentOfGenericType1_0"); +>q : typeof q + +class M extends q { } +>M : M +>q : q + +var m: M; +>m : M +>M : M + +var r: string = m.foo; +>r : string +>m.foo : string +>m : M +>foo : string + +=== tests/cases/compiler/exportAssignmentOfGenericType1_0.ts === +export = T; +>T : T + +class T { foo: X; } +>T : T +>X : X +>foo : X +>X : X + diff --git a/tests/baselines/reference/exportAssignmentTopLevelClodule.types b/tests/baselines/reference/exportAssignmentTopLevelClodule.types new file mode 100644 index 00000000000..80a56cd7b5f --- /dev/null +++ b/tests/baselines/reference/exportAssignmentTopLevelClodule.types @@ -0,0 +1,32 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +if(foo.answer === 42){ +>foo.answer === 42 : boolean +>foo.answer : number +>foo : typeof foo +>answer : number + + var x = new foo(); +>x : foo +>new foo() : foo +>foo : typeof foo +} + +=== tests/cases/conformance/externalModules/foo_0.ts === +class Foo { +>Foo : Foo + + test = "test"; +>test : string +} +module Foo { +>Foo : typeof Foo + + export var answer = 42; +>answer : number +} +export = Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/exportAssignmentTopLevelEnumdule.types b/tests/baselines/reference/exportAssignmentTopLevelEnumdule.types new file mode 100644 index 00000000000..4ee49f6d20f --- /dev/null +++ b/tests/baselines/reference/exportAssignmentTopLevelEnumdule.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +var color: foo; +>color : foo +>foo : foo + +if(color === foo.green){ +>color === foo.green : boolean +>color : foo +>foo.green : foo +>foo : typeof foo +>green : foo + + color = foo.answer; +>color = foo.answer : number +>color : foo +>foo.answer : number +>foo : typeof foo +>answer : number +} + +=== tests/cases/conformance/externalModules/foo_0.ts === +enum foo { +>foo : foo + + red, green, blue +>red : foo +>green : foo +>blue : foo +} +module foo { +>foo : typeof foo + + export var answer = 42; +>answer : number +} +export = foo; +>foo : foo + diff --git a/tests/baselines/reference/exportAssignmentTopLevelFundule.types b/tests/baselines/reference/exportAssignmentTopLevelFundule.types new file mode 100644 index 00000000000..982e87e59f3 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentTopLevelFundule.types @@ -0,0 +1,31 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +if(foo.answer === 42){ +>foo.answer === 42 : boolean +>foo.answer : number +>foo : typeof foo +>answer : number + + var x = foo(); +>x : string +>foo() : string +>foo : typeof foo +} + +=== tests/cases/conformance/externalModules/foo_0.ts === +function foo() { +>foo : typeof foo + + return "test"; +} +module foo { +>foo : typeof foo + + export var answer = 42; +>answer : number +} +export = foo; +>foo : typeof foo + diff --git a/tests/baselines/reference/exportAssignmentTopLevelIdentifier.types b/tests/baselines/reference/exportAssignmentTopLevelIdentifier.types new file mode 100644 index 00000000000..09d881715dd --- /dev/null +++ b/tests/baselines/reference/exportAssignmentTopLevelIdentifier.types @@ -0,0 +1,22 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require("./foo_0"); +>foo : typeof foo + +if(foo.answer === 42){ +>foo.answer === 42 : boolean +>foo.answer : number +>foo : typeof foo +>answer : number + +} + +=== tests/cases/conformance/externalModules/foo_0.ts === +module Foo { +>Foo : typeof Foo + + export var answer = 42; +>answer : number +} +export = Foo; +>Foo : typeof Foo + diff --git a/tests/baselines/reference/exportAssignmentVariable.types b/tests/baselines/reference/exportAssignmentVariable.types new file mode 100644 index 00000000000..36f02f60a95 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentVariable.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/exportAssignmentVariable_B.ts === +import y = require("exportAssignmentVariable_A"); +>y : number + +var n: number = y; +>n : number +>y : number + +=== tests/cases/compiler/exportAssignmentVariable_A.ts === +var x = 0; +>x : number + +export = x; +>x : number + diff --git a/tests/baselines/reference/exportAssignmentWithImportStatementPrivacyError.types b/tests/baselines/reference/exportAssignmentWithImportStatementPrivacyError.types new file mode 100644 index 00000000000..7d6c7166655 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentWithImportStatementPrivacyError.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/exportAssignmentWithImportStatementPrivacyError.ts === +module m2 { +>m2 : unknown + + export interface connectModule { +>connectModule : connectModule + + (res, req, next): void; +>res : any +>req : any +>next : any + } + export interface connectExport { +>connectExport : connectExport + + use: (mod: connectModule) => connectExport; +>use : (mod: connectModule) => connectExport +>mod : connectModule +>connectModule : connectModule +>connectExport : connectExport + + listen: (port: number) => void; +>listen : (port: number) => void +>port : number + } + +} + +module M { +>M : typeof M + + export var server: { +>server : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } + + (): m2.connectExport; +>m2 : unknown +>connectExport : m2.connectExport + + test1: m2.connectModule; +>test1 : m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + + test2(): m2.connectModule; +>test2 : () => m2.connectModule +>m2 : unknown +>connectModule : m2.connectModule + + }; +} +import M22 = M; +>M22 : typeof M +>M : typeof M + +export = M; +>M : typeof M + diff --git a/tests/baselines/reference/exportAssignmentWithPrivacyError.types b/tests/baselines/reference/exportAssignmentWithPrivacyError.types new file mode 100644 index 00000000000..272849bd8c9 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentWithPrivacyError.types @@ -0,0 +1,43 @@ +=== tests/cases/compiler/exportAssignmentWithPrivacyError.ts === +interface connectmodule { +>connectmodule : connectmodule + + (res, req, next): void; +>res : any +>req : any +>next : any +} +interface connectexport { +>connectexport : connectexport + + use: (mod: connectmodule) => connectexport; +>use : (mod: connectmodule) => connectexport +>mod : connectmodule +>connectmodule : connectmodule +>connectexport : connectexport + + listen: (port: number) => void; +>listen : (port: number) => void +>port : number +} + +var server: { +>server : { (): connectexport; test1: connectmodule; test2(): connectmodule; } + + (): connectexport; +>connectexport : connectexport + + test1: connectmodule; +>test1 : connectmodule +>connectmodule : connectmodule + + test2(): connectmodule; +>test2 : () => connectmodule +>connectmodule : connectmodule + +}; + +export = server; +>server : { (): connectexport; test1: connectmodule; test2(): connectmodule; } + + diff --git a/tests/baselines/reference/exportCodeGen.js b/tests/baselines/reference/exportCodeGen.js index a35c2372280..724edf842cf 100644 --- a/tests/baselines/reference/exportCodeGen.js +++ b/tests/baselines/reference/exportCodeGen.js @@ -55,6 +55,8 @@ module F { } //// [exportCodeGen.js] +// should replace all refs to 'x' in the body, +// with fully qualified var A; (function (A) { A.x = 12; @@ -62,6 +64,7 @@ var A; return A.x < 12; } })(A || (A = {})); +// should not fully qualify 'x' var B; (function (B) { var x = 12; @@ -69,12 +72,14 @@ var B; return x < 12; } })(B || (B = {})); +// not copied, since not exported var C; (function (C) { function no() { return false; } })(C || (C = {})); +// copies, since exported var D; (function (D) { function yes() { @@ -82,6 +87,7 @@ var D; } D.yes = yes; })(D || (D = {})); +// validate all exportable statements var E; (function (E) { (function (Color) { @@ -102,6 +108,8 @@ var E; })(E.M || (E.M = {})); var M = E.M; })(E || (E = {})); +// validate all exportable statements, +// which are not exported var F; (function (F) { var Color; diff --git a/tests/baselines/reference/exportCodeGen.types b/tests/baselines/reference/exportCodeGen.types new file mode 100644 index 00000000000..89cb16fdf4c --- /dev/null +++ b/tests/baselines/reference/exportCodeGen.types @@ -0,0 +1,111 @@ +=== tests/cases/conformance/internalModules/codeGeneration/exportCodeGen.ts === + +// should replace all refs to 'x' in the body, +// with fully qualified +module A { +>A : typeof A + + export var x = 12; +>x : number + + function lt12() { +>lt12 : () => boolean + + return x < 12; +>x < 12 : boolean +>x : number + } +} + +// should not fully qualify 'x' +module B { +>B : typeof B + + var x = 12; +>x : number + + function lt12() { +>lt12 : () => boolean + + return x < 12; +>x < 12 : boolean +>x : number + } +} + +// not copied, since not exported +module C { +>C : typeof C + + function no() { +>no : () => boolean + + return false; + } +} + +// copies, since exported +module D { +>D : typeof D + + export function yes() { +>yes : () => boolean + + return true; + } +} + +// validate all exportable statements +module E { +>E : typeof E + + export enum Color { Red } +>Color : Color +>Red : Color + + export function fn() { } +>fn : () => void + + export interface I { id: number } +>I : I +>id : number + + export class C { name: string } +>C : C +>name : string + + export module M { +>M : typeof M + + export var x = 42; +>x : number + } +} + +// validate all exportable statements, +// which are not exported +module F { +>F : typeof F + + enum Color { Red } +>Color : Color +>Red : Color + + function fn() { } +>fn : () => void + + interface I { id: number } +>I : I +>id : number + + class C { name: string } +>C : C +>name : string + + module M { +>M : typeof M + + var x = 42; +>x : number + } +} diff --git a/tests/baselines/reference/exportEqualCallable.types b/tests/baselines/reference/exportEqualCallable.types new file mode 100644 index 00000000000..0a084523137 --- /dev/null +++ b/tests/baselines/reference/exportEqualCallable.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/exportEqualCallable_1.ts === +/// +import connect = require('exportEqualCallable_0'); +>connect : () => any + +connect(); +>connect() : any +>connect : () => any + +=== tests/cases/compiler/exportEqualCallable_0.ts === + +var server: { +>server : () => any + + (): any; +}; +export = server; +>server : () => any + diff --git a/tests/baselines/reference/exportEqualErrorType.js b/tests/baselines/reference/exportEqualErrorType.js index dfa6383d8de..533a2c2501c 100644 --- a/tests/baselines/reference/exportEqualErrorType.js +++ b/tests/baselines/reference/exportEqualErrorType.js @@ -28,5 +28,5 @@ define(["require", "exports"], function (require, exports) { }); //// [exportEqualErrorType_1.js] define(["require", "exports", 'exportEqualErrorType_0'], function (require, exports, connect) { - connect().use(connect.static('foo')); + connect().use(connect.static('foo')); // Error 1 The property 'static' does not exist on value of type ''. }); diff --git a/tests/baselines/reference/exportEqualMemberMissing.js b/tests/baselines/reference/exportEqualMemberMissing.js index 714fb700198..583176f12f3 100644 --- a/tests/baselines/reference/exportEqualMemberMissing.js +++ b/tests/baselines/reference/exportEqualMemberMissing.js @@ -25,5 +25,6 @@ connect().use(connect.static('foo')); // Error 1 The property 'static' does not var server; module.exports = server; //// [exportEqualMemberMissing_1.js] +/// var connect = require('exportEqualMemberMissing_0'); -connect().use(connect.static('foo')); +connect().use(connect.static('foo')); // Error 1 The property 'static' does not exist on value of type ''. diff --git a/tests/baselines/reference/exportEqualNamespaces.types b/tests/baselines/reference/exportEqualNamespaces.types new file mode 100644 index 00000000000..57ed5742b2a --- /dev/null +++ b/tests/baselines/reference/exportEqualNamespaces.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/exportEqualNamespaces.ts === +declare module server { +>server : Date + + interface Server extends Object { } +>Server : Server +>Object : Object +} + +interface server { +>server : server + + (): server.Server; +>server : server +>Server : server.Server + + startTime: Date; +>startTime : Date +>Date : Date +} + +var x = 5; +>x : number + +var server = new Date(); +>server : Date +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +export = server; +>server : server + diff --git a/tests/baselines/reference/exportImport.types b/tests/baselines/reference/exportImport.types new file mode 100644 index 00000000000..9899103d779 --- /dev/null +++ b/tests/baselines/reference/exportImport.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/consumer.ts === +import e = require('./exporter'); +>e : typeof e + +export function w(): e.w { // Should be OK +>w : () => e.w +>e : unknown +>w : e.w + + return new e.w(); +>new e.w() : e.w +>e.w : typeof e.w +>e : typeof e +>w : typeof e.w +} +=== tests/cases/compiler/w1.ts === + +export = Widget1 +>Widget1 : Widget1 + +class Widget1 { name = 'one'; } +>Widget1 : Widget1 +>name : string + +=== tests/cases/compiler/exporter.ts === +export import w = require('./w1'); +>w : typeof w + diff --git a/tests/baselines/reference/exportImportAlias.js b/tests/baselines/reference/exportImportAlias.js index e8cac426b3d..f445d7b2bc5 100644 --- a/tests/baselines/reference/exportImportAlias.js +++ b/tests/baselines/reference/exportImportAlias.js @@ -69,6 +69,7 @@ var p: { x: number; y: number; } var p: M.D.Point; //// [exportImportAlias.js] +// expect no errors here var A; (function (A) { A.x = 'hello world'; @@ -109,6 +110,7 @@ var X; })(X || (X = {})); var Z; (function (Z) { + // 'y' should be a fundule here Z.y = X.Y; })(Z || (Z = {})); var m = Z.y(); diff --git a/tests/baselines/reference/exportImportAlias.types b/tests/baselines/reference/exportImportAlias.types new file mode 100644 index 00000000000..0834d664861 --- /dev/null +++ b/tests/baselines/reference/exportImportAlias.types @@ -0,0 +1,175 @@ +=== tests/cases/conformance/internalModules/importDeclarations/exportImportAlias.ts === +// expect no errors here + +module A { +>A : typeof A + + export var x = 'hello world' +>x : string + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } + export module B { +>B : unknown + + export interface Id { +>Id : Id + + name: string; +>name : string + } + } +} + +module C { +>C : typeof C + + export import a = A; +>a : typeof a +>A : typeof a +} + +var a: string = C.a.x; +>a : string +>C.a.x : string +>C.a : typeof A +>C : typeof C +>a : typeof A +>x : string + +var b: { x: number; y: number; } = new C.a.Point(0, 0); +>b : { x: number; y: number; } +>x : number +>y : number +>new C.a.Point(0, 0) : A.Point +>C.a.Point : typeof A.Point +>C.a : typeof A +>C : typeof C +>a : typeof A +>Point : typeof A.Point + +var c: { name: string }; +>c : { name: string; } +>name : string + +var c: C.a.B.Id; +>c : { name: string; } +>C : unknown +>a : unknown +>B : unknown +>Id : A.B.Id + +module X { +>X : typeof X + + export function Y() { +>Y : typeof Y + + return 42; + } + + export module Y { +>Y : typeof Y + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } + } +} + +module Z { +>Z : typeof Z + + // 'y' should be a fundule here + export import y = X.Y; +>y : typeof y +>X : typeof X +>Y : typeof y +} + +var m: number = Z.y(); +>m : number +>Z.y() : number +>Z.y : typeof X.Y +>Z : typeof Z +>y : typeof X.Y + +var n: { x: number; y: number; } = new Z.y.Point(0, 0); +>n : { x: number; y: number; } +>x : number +>y : number +>new Z.y.Point(0, 0) : X.Y.Point +>Z.y.Point : typeof X.Y.Point +>Z.y : typeof X.Y +>Z : typeof Z +>y : typeof X.Y +>Point : typeof X.Y.Point + +module K { +>K : typeof K + + export class L { +>L : L + + constructor(public name: string) { } +>name : string + } + + export module L { +>L : typeof L + + export var y = 12; +>y : number + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + } +} + +module M { +>M : typeof M + + export import D = K.L; +>D : typeof D +>K : typeof K +>L : D +} + +var o: { name: string }; +>o : { name: string; } +>name : string + +var o = new M.D('Hello'); +>o : { name: string; } +>new M.D('Hello') : K.L +>M.D : typeof K.L +>M : typeof M +>D : typeof K.L + +var p: { x: number; y: number; } +>p : { x: number; y: number; } +>x : number +>y : number + +var p: M.D.Point; +>p : { x: number; y: number; } +>M : unknown +>D : unknown +>Point : K.L.Point + diff --git a/tests/baselines/reference/exportImportAndClodule.types b/tests/baselines/reference/exportImportAndClodule.types new file mode 100644 index 00000000000..7d233e72e77 --- /dev/null +++ b/tests/baselines/reference/exportImportAndClodule.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/exportImportAndClodule.ts === +module K { +>K : typeof K + + export class L { +>L : L + + constructor(public name: string) { } +>name : string + } + export module L { +>L : typeof L + + export var y = 12; +>y : number + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } + } +} +module M { +>M : typeof M + + export import D = K.L; +>D : typeof D +>K : typeof K +>L : D +} +var o: { name: string }; +>o : { name: string; } +>name : string + +var o = new M.D('Hello'); +>o : { name: string; } +>new M.D('Hello') : K.L +>M.D : typeof K.L +>M : typeof M +>D : typeof K.L + +var p: { x: number; y: number; } +>p : { x: number; y: number; } +>x : number +>y : number + +var p: M.D.Point; +>p : { x: number; y: number; } +>M : unknown +>D : unknown +>Point : K.L.Point + diff --git a/tests/baselines/reference/exportImportMultipleFiles.js b/tests/baselines/reference/exportImportMultipleFiles.js index f6424cb8a9b..225b605f689 100644 --- a/tests/baselines/reference/exportImportMultipleFiles.js +++ b/tests/baselines/reference/exportImportMultipleFiles.js @@ -22,9 +22,9 @@ define(["require", "exports"], function (require, exports) { //// [exportImportMultipleFiles_library.js] define(["require", "exports", "exportImportMultipleFiles_math"], function (require, exports, math) { exports.math = math; - exports.math.add(3, 4); + exports.math.add(3, 4); // OK }); //// [exportImportMultipleFiles_userCode.js] define(["require", "exports", './exportImportMultipleFiles_library'], function (require, exports, lib) { - lib.math.add(3, 4); + lib.math.add(3, 4); // Shouldnt be error }); diff --git a/tests/baselines/reference/exportImportMultipleFiles.types b/tests/baselines/reference/exportImportMultipleFiles.types new file mode 100644 index 00000000000..adafcef2dba --- /dev/null +++ b/tests/baselines/reference/exportImportMultipleFiles.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/exportImportMultipleFiles_userCode.ts === +import lib = require('./exportImportMultipleFiles_library'); +>lib : typeof lib + +lib.math.add(3, 4); // Shouldnt be error +>lib.math.add(3, 4) : any +>lib.math.add : (a: any, b: any) => any +>lib.math : typeof lib.math +>lib : typeof lib +>math : typeof lib.math +>add : (a: any, b: any) => any + +=== tests/cases/compiler/exportImportMultipleFiles_math.ts === +export function add(a, b) { return a + b; } +>add : (a: any, b: any) => any +>a : any +>b : any +>a + b : any +>a : any +>b : any + +=== tests/cases/compiler/exportImportMultipleFiles_library.ts === +export import math = require("exportImportMultipleFiles_math"); +>math : typeof math + +math.add(3, 4); // OK +>math.add(3, 4) : any +>math.add : (a: any, b: any) => any +>math : typeof math +>add : (a: any, b: any) => any + diff --git a/tests/baselines/reference/exportImportNonInstantiatedModule.types b/tests/baselines/reference/exportImportNonInstantiatedModule.types new file mode 100644 index 00000000000..d1210cba6fe --- /dev/null +++ b/tests/baselines/reference/exportImportNonInstantiatedModule.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/exportImportNonInstantiatedModule.ts === +module A { +>A : unknown + + export interface I { x: number } +>I : I +>x : number +} + +module B { +>B : typeof B + + export import A1 = A +>A1 : unknown +>A : unknown + +} + +var x: B.A1.I = { x: 1 }; +>x : A.I +>B : unknown +>A1 : unknown +>I : A.I +>{ x: 1 } : { x: number; } +>x : number + diff --git a/tests/baselines/reference/exportImportNonInstantiatedModule2.types b/tests/baselines/reference/exportImportNonInstantiatedModule2.types new file mode 100644 index 00000000000..c11eac715a9 --- /dev/null +++ b/tests/baselines/reference/exportImportNonInstantiatedModule2.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/consumer.ts === +import e = require('./exporter'); +>e : typeof e + +export function w(): e.w { // Should be OK +>w : () => e.w +>e : unknown +>w : e.w + + return {name: 'value' }; +>{name: 'value' } : { name: string; } +>name : string +} +=== tests/cases/compiler/w1.ts === + +export = Widget1 +>Widget1 : Widget1 + +interface Widget1 { name: string; } +>Widget1 : Widget1 +>name : string + +=== tests/cases/compiler/exporter.ts === +export import w = require('./w1'); +>w : unknown + diff --git a/tests/baselines/reference/exportPrivateType.js b/tests/baselines/reference/exportPrivateType.js index 0fd36aa5d8f..96acc83edb5 100644 --- a/tests/baselines/reference/exportPrivateType.js +++ b/tests/baselines/reference/exportPrivateType.js @@ -46,9 +46,10 @@ var foo; }; return C2; })(); + // None of the types are exported, so per section 10.3, should all be errors foo.e; foo.f; foo.g; foo.h; })(foo || (foo = {})); -var y = foo.g; +var y = foo.g; // Exported variable 'y' has or is using private type 'foo.C2'. diff --git a/tests/baselines/reference/exportPrivateType.types b/tests/baselines/reference/exportPrivateType.types new file mode 100644 index 00000000000..87751b273a7 --- /dev/null +++ b/tests/baselines/reference/exportPrivateType.types @@ -0,0 +1,70 @@ +=== tests/cases/compiler/exportPrivateType.ts === +module foo { +>foo : typeof foo + + class C1 { +>C1 : C1 + + x: string; +>x : string + + y: C1; +>y : C1 +>C1 : C1 + } + + class C2 { +>C2 : C2 + + test() { return true; } +>test : () => boolean + } + + interface I1 { +>I1 : I1 + + (a: string, b: string): string; +>a : string +>b : string + + (x: number, y: number): I1; +>x : number +>y : number +>I1 : I1 + } + + interface I2 { +>I2 : I2 + + x: string; +>x : string + + y: number; +>y : number + } + + // None of the types are exported, so per section 10.3, should all be errors + export var e: C1; +>e : C1 +>C1 : C1 + + export var f: I1; +>f : I1 +>I1 : I1 + + export var g: C2; +>g : C2 +>C2 : C2 + + export var h: I2; +>h : I2 +>I2 : I2 +} + +var y = foo.g; // Exported variable 'y' has or is using private type 'foo.C2'. +>y : C2 +>foo.g : C2 +>foo : typeof foo +>g : C2 + + diff --git a/tests/baselines/reference/exportVisibility.types b/tests/baselines/reference/exportVisibility.types new file mode 100644 index 00000000000..59936828275 --- /dev/null +++ b/tests/baselines/reference/exportVisibility.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/exportVisibility.ts === +export class Foo { +>Foo : Foo +} + +export var foo = new Foo(); +>foo : Foo +>new Foo() : Foo +>Foo : typeof Foo + +export function test(foo: Foo) { +>test : (foo: Foo) => boolean +>foo : Foo +>Foo : Foo + + return true; +} + diff --git a/tests/baselines/reference/exportedInterfaceInaccessibleInCallbackInModule.types b/tests/baselines/reference/exportedInterfaceInaccessibleInCallbackInModule.types new file mode 100644 index 00000000000..c93c0742ebf --- /dev/null +++ b/tests/baselines/reference/exportedInterfaceInaccessibleInCallbackInModule.types @@ -0,0 +1,42 @@ +=== tests/cases/compiler/exportedInterfaceInaccessibleInCallbackInModule.ts === +export interface ProgressCallback { +>ProgressCallback : ProgressCallback + + (progress:any):any; +>progress : any +} + +// --- Generic promise +export declare class TPromise { +>TPromise : TPromise +>V : V + + constructor(init:(complete: (value:V)=>void, error:(err:any)=>void, progress:ProgressCallback)=>void, oncancel?: any); +>init : (complete: (value: V) => void, error: (err: any) => void, progress: ProgressCallback) => void +>complete : (value: V) => void +>value : V +>V : V +>error : (err: any) => void +>err : any +>progress : ProgressCallback +>ProgressCallback : ProgressCallback +>oncancel : any + + // removing this method fixes the error squiggle..... + public then(success?: (value:V)=>TPromise, error?: (err:any)=>TPromise, progress?:ProgressCallback): TPromise; +>then : (success?: (value: V) => TPromise, error?: (err: any) => TPromise, progress?: ProgressCallback) => TPromise +>U : U +>success : (value: V) => TPromise +>value : V +>V : V +>TPromise : TPromise +>U : U +>error : (err: any) => TPromise +>err : any +>TPromise : TPromise +>U : U +>progress : ProgressCallback +>ProgressCallback : ProgressCallback +>TPromise : TPromise +>U : U +} diff --git a/tests/baselines/reference/exportedVariable1.types b/tests/baselines/reference/exportedVariable1.types new file mode 100644 index 00000000000..a02cbc5b36a --- /dev/null +++ b/tests/baselines/reference/exportedVariable1.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/exportedVariable1.ts === +export var foo = {name: "Bill"}; +>foo : { name: string; } +>{name: "Bill"} : { name: string; } +>name : string + +var upper = foo.name.toUpperCase(); +>upper : string +>foo.name.toUpperCase() : string +>foo.name.toUpperCase : () => string +>foo.name : string +>foo : { name: string; } +>name : string +>toUpperCase : () => string + diff --git a/tests/baselines/reference/extBaseClass1.types b/tests/baselines/reference/extBaseClass1.types new file mode 100644 index 00000000000..16f89ab5a20 --- /dev/null +++ b/tests/baselines/reference/extBaseClass1.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/extBaseClass1.ts === +module M { +>M : typeof M + + export class B { +>B : B + + public x=10; +>x : number + } + + export class C extends B { +>C : C +>B : B + } +} + +module M { +>M : typeof M + + export class C2 extends B { +>C2 : C2 +>B : B + } +} + +module N { +>N : typeof N + + export class C3 extends M.B { +>C3 : C3 +>M : unknown +>B : M.B + } +} + diff --git a/tests/baselines/reference/extendAndImplementTheSameBaseType.types b/tests/baselines/reference/extendAndImplementTheSameBaseType.types new file mode 100644 index 00000000000..136308b3887 --- /dev/null +++ b/tests/baselines/reference/extendAndImplementTheSameBaseType.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/extendAndImplementTheSameBaseType.ts === +class C { +>C : C + + foo: number +>foo : number + + bar() {} +>bar : () => void +} +class D extends C implements C { +>D : D +>C : C +>C : C + + baz() { } +>baz : () => void +} + +var c: C; +>c : C +>C : C + +var d: D = new D(); +>d : D +>D : D +>new D() : D +>D : typeof D + +d.bar(); +>d.bar() : void +>d.bar : () => void +>d : D +>bar : () => void + +d.baz(); +>d.baz() : void +>d.baz : () => void +>d : D +>baz : () => void + +d.foo; +>d.foo : number +>d : D +>foo : number + diff --git a/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types b/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types new file mode 100644 index 00000000000..a9ad130d474 --- /dev/null +++ b/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/extendBaseClassBeforeItsDeclared.ts === +class derived extends base { } +>derived : derived +>base : base + +class base { constructor (public n: number) { } } +>base : base +>n : number + diff --git a/tests/baselines/reference/extendBooleanInterface.types b/tests/baselines/reference/extendBooleanInterface.types new file mode 100644 index 00000000000..2d94680599a --- /dev/null +++ b/tests/baselines/reference/extendBooleanInterface.types @@ -0,0 +1,44 @@ +=== tests/cases/conformance/types/primitives/boolean/extendBooleanInterface.ts === +interface Boolean { +>Boolean : Boolean + + doStuff(): string; +>doStuff : () => string + + doOtherStuff(x: T): T; +>doOtherStuff : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} + +var x = true; +>x : boolean + +var a: string = x.doStuff(); +>a : string +>x.doStuff() : string +>x.doStuff : () => string +>x : boolean +>doStuff : () => string + +var b: string = x.doOtherStuff('hm'); +>b : string +>x.doOtherStuff('hm') : string +>x.doOtherStuff : (x: T) => T +>x : boolean +>doOtherStuff : (x: T) => T + +var c: string = x['doStuff'](); +>c : string +>x['doStuff']() : string +>x['doStuff'] : () => string +>x : boolean + +var d: string = x['doOtherStuff']('hm'); +>d : string +>x['doOtherStuff']('hm') : string +>x['doOtherStuff'] : (x: T) => T +>x : boolean + diff --git a/tests/baselines/reference/extendNonClassSymbol1.js b/tests/baselines/reference/extendNonClassSymbol1.js index cb1f6f82419..47a602aefaf 100644 --- a/tests/baselines/reference/extendNonClassSymbol1.js +++ b/tests/baselines/reference/extendNonClassSymbol1.js @@ -24,4 +24,4 @@ var C = (function (_super) { _super.apply(this, arguments); } return C; -})(x); +})(x); // error, could not find symbol xs diff --git a/tests/baselines/reference/extendNonClassSymbol2.js b/tests/baselines/reference/extendNonClassSymbol2.js index 7321df4cd88..4cb7b1787df 100644 --- a/tests/baselines/reference/extendNonClassSymbol2.js +++ b/tests/baselines/reference/extendNonClassSymbol2.js @@ -15,11 +15,11 @@ var __extends = this.__extends || function (d, b) { function Foo() { this.x = 1; } -var x = new Foo(); +var x = new Foo(); // legal, considered a constructor function var C = (function (_super) { __extends(C, _super); function C() { _super.apply(this, arguments); } return C; -})(Foo); +})(Foo); // error, could not find symbol Foo diff --git a/tests/baselines/reference/extendNumberInterface.types b/tests/baselines/reference/extendNumberInterface.types new file mode 100644 index 00000000000..f109e05be89 --- /dev/null +++ b/tests/baselines/reference/extendNumberInterface.types @@ -0,0 +1,44 @@ +=== tests/cases/conformance/types/primitives/number/extendNumberInterface.ts === +interface Number { +>Number : Number + + doStuff(): string; +>doStuff : () => string + + doOtherStuff(x:T): T; +>doOtherStuff : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} + +var x = 1; +>x : number + +var a: string = x.doStuff(); +>a : string +>x.doStuff() : string +>x.doStuff : () => string +>x : number +>doStuff : () => string + +var b: string = x.doOtherStuff('hm'); +>b : string +>x.doOtherStuff('hm') : string +>x.doOtherStuff : (x: T) => T +>x : number +>doOtherStuff : (x: T) => T + +var c: string = x['doStuff'](); +>c : string +>x['doStuff']() : string +>x['doStuff'] : () => string +>x : number + +var d: string = x['doOtherStuff']('hm'); +>d : string +>x['doOtherStuff']('hm') : string +>x['doOtherStuff'] : (x: T) => T +>x : number + diff --git a/tests/baselines/reference/extendStringInterface.types b/tests/baselines/reference/extendStringInterface.types new file mode 100644 index 00000000000..3cf9f72f5f2 --- /dev/null +++ b/tests/baselines/reference/extendStringInterface.types @@ -0,0 +1,44 @@ +=== tests/cases/conformance/types/primitives/string/extendStringInterface.ts === +interface String { +>String : String + + doStuff(): string; +>doStuff : () => string + + doOtherStuff(x:T): T; +>doOtherStuff : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} + +var x = ''; +>x : string + +var a: string = x.doStuff(); +>a : string +>x.doStuff() : string +>x.doStuff : () => string +>x : string +>doStuff : () => string + +var b: string = x.doOtherStuff('hm'); +>b : string +>x.doOtherStuff('hm') : string +>x.doOtherStuff : (x: T) => T +>x : string +>doOtherStuff : (x: T) => T + +var c: string = x['doStuff'](); +>c : string +>x['doStuff']() : string +>x['doStuff'] : () => string +>x : string + +var d: string = x['doOtherStuff']('hm'); +>d : string +>x['doOtherStuff']('hm') : string +>x['doOtherStuff'] : (x: T) => T +>x : string + diff --git a/tests/baselines/reference/extendedInterfaceGenericType.types b/tests/baselines/reference/extendedInterfaceGenericType.types new file mode 100644 index 00000000000..17fd949215a --- /dev/null +++ b/tests/baselines/reference/extendedInterfaceGenericType.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/extendedInterfaceGenericType.ts === +interface Alpha { +>Alpha : Alpha +>T : T + + takesArgOfT(arg: T): Alpha; +>takesArgOfT : (arg: T) => Alpha +>arg : T +>T : T +>Alpha : Alpha +>T : T + + makeBetaOfNumber(): Beta; +>makeBetaOfNumber : () => Beta +>Beta : Beta +} +interface Beta extends Alpha { +>Beta : Beta +>T : T +>Alpha : Alpha +>T : T +} + +var alpha: Alpha; +>alpha : Alpha +>Alpha : Alpha + +var betaOfNumber = alpha.makeBetaOfNumber(); +>betaOfNumber : Beta +>alpha.makeBetaOfNumber() : Beta +>alpha.makeBetaOfNumber : () => Beta +>alpha : Alpha +>makeBetaOfNumber : () => Beta + +betaOfNumber.takesArgOfT(5); +>betaOfNumber.takesArgOfT(5) : Alpha +>betaOfNumber.takesArgOfT : (arg: number) => Alpha +>betaOfNumber : Beta +>takesArgOfT : (arg: number) => Alpha + diff --git a/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types new file mode 100644 index 00000000000..fefa692b509 --- /dev/null +++ b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types @@ -0,0 +1,80 @@ +=== tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_main.ts === +import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("extendingClassFromAliasAndUsageInIndexer_moduleA"); +>moduleA : typeof moduleA + +import moduleB = require("extendingClassFromAliasAndUsageInIndexer_moduleB"); +>moduleB : typeof moduleB + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +var moduleATyped: IHasVisualizationModel = moduleA; +>moduleATyped : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>moduleA : typeof moduleA + +var moduleMap: { [key: string]: IHasVisualizationModel } = { +>moduleMap : { [x: string]: IHasVisualizationModel; } +>key : string +>IHasVisualizationModel : IHasVisualizationModel +>{ "moduleA": moduleA, "moduleB": moduleB} : { [x: string]: IHasVisualizationModel; "moduleA": typeof moduleA; "moduleB": typeof moduleB; } + + "moduleA": moduleA, +>moduleA : typeof moduleA + + "moduleB": moduleB +>moduleB : typeof moduleB + +}; +var moduleName: string; +>moduleName : string + +var visModel = new moduleMap[moduleName].VisualizationModel(); +>visModel : Backbone.Model +>new moduleMap[moduleName].VisualizationModel() : Backbone.Model +>moduleMap[moduleName].VisualizationModel : typeof Backbone.Model +>moduleMap[moduleName] : IHasVisualizationModel +>moduleMap : { [x: string]: IHasVisualizationModel; } +>moduleName : string +>VisualizationModel : typeof Backbone.Model + +=== tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_moduleA.ts === +import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + +=== tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_moduleB.ts === +import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // different interesting stuff here +} + diff --git a/tests/baselines/reference/externFunc.types b/tests/baselines/reference/externFunc.types new file mode 100644 index 00000000000..5aac52ac125 --- /dev/null +++ b/tests/baselines/reference/externFunc.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/externFunc.ts === +declare function parseInt(s:string):number; +>parseInt : { (s: string, radix?: number): number; (s: string): number; } +>s : string + +parseInt("2"); +>parseInt("2") : number +>parseInt : { (s: string, radix?: number): number; (s: string): number; } + diff --git a/tests/baselines/reference/externModuleClobber.types b/tests/baselines/reference/externModuleClobber.types new file mode 100644 index 00000000000..d1a7ba32651 --- /dev/null +++ b/tests/baselines/reference/externModuleClobber.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/externModuleClobber.ts === +declare module EM { +>EM : typeof EM + + export class Position { } +>Position : Position + + export class EC { +>EC : EC + + public getPosition() : EM.Position; +>getPosition : () => Position +>EM : unknown +>Position : Position + } +} + +var x:EM.Position; +>x : EM.Position +>EM : unknown +>Position : EM.Position + +var ec:EM.EC = new EM.EC(); +>ec : EM.EC +>EM : unknown +>EC : EM.EC +>new EM.EC() : EM.EC +>EM.EC : typeof EM.EC +>EM : typeof EM +>EC : typeof EM.EC + +x = ec.getPosition(); +>x = ec.getPosition() : EM.Position +>x : EM.Position +>ec.getPosition() : EM.Position +>ec.getPosition : () => EM.Position +>ec : EM.EC +>getPosition : () => EM.Position + diff --git a/tests/baselines/reference/externalModuleAssignToVar.js b/tests/baselines/reference/externalModuleAssignToVar.js index 9440fbb069c..e41719ef88a 100644 --- a/tests/baselines/reference/externalModuleAssignToVar.js +++ b/tests/baselines/reference/externalModuleAssignToVar.js @@ -56,9 +56,9 @@ define(["require", "exports"], function (require, exports) { //// [externalModuleAssignToVar_core.js] define(["require", "exports", 'externalModuleAssignToVar_core_require', 'externalModuleAssignToVar_core_require2', 'externalModuleAssignToVar_ext'], function (require, exports, ext, ext2, ext3) { var y1 = ext; - y1 = ext; + y1 = ext; // ok var y2 = ext2; - y2 = ext2; + y2 = ext2; // ok var y3 = ext3; - y3 = ext3; + y3 = ext3; // ok }); diff --git a/tests/baselines/reference/externalModuleAssignToVar.types b/tests/baselines/reference/externalModuleAssignToVar.types new file mode 100644 index 00000000000..8bcc6cdf3e6 --- /dev/null +++ b/tests/baselines/reference/externalModuleAssignToVar.types @@ -0,0 +1,64 @@ +=== tests/cases/compiler/externalModuleAssignToVar_core.ts === +/// +import ext = require('externalModuleAssignToVar_core_require'); +>ext : typeof ext + +var y1: { C: new() => ext.C; } = ext; +>y1 : { C: new () => ext.C; } +>C : new () => ext.C +>ext : unknown +>C : ext.C +>ext : typeof ext + +y1 = ext; // ok +>y1 = ext : typeof ext +>y1 : { C: new () => ext.C; } +>ext : typeof ext + +import ext2 = require('externalModuleAssignToVar_core_require2'); +>ext2 : typeof ext2 + +var y2: new() => ext2 = ext2; +>y2 : new () => ext2 +>ext2 : ext2 +>ext2 : typeof ext2 + +y2 = ext2; // ok +>y2 = ext2 : typeof ext2 +>y2 : new () => ext2 +>ext2 : typeof ext2 + +import ext3 = require('externalModuleAssignToVar_ext'); +>ext3 : typeof ext3 + +var y3: new () => ext3 = ext3; +>y3 : new () => ext3 +>ext3 : ext3 +>ext3 : typeof ext3 + +y3 = ext3; // ok +>y3 = ext3 : typeof ext3 +>y3 : new () => ext3 +>ext3 : typeof ext3 + +=== tests/cases/compiler/externalModuleAssignToVar_ext.ts === +class D { foo: string; } +>D : D +>foo : string + +export = D; +>D : D + +=== tests/cases/compiler/externalModuleAssignToVar_core_require.ts === +export class C { bar: string; } +>C : C +>bar : string + +=== tests/cases/compiler/externalModuleAssignToVar_core_require2.ts === +class C { baz: string; } +>C : C +>baz : string + +export = C; +>C : C + diff --git a/tests/baselines/reference/externalModuleExportingGenericClass.js b/tests/baselines/reference/externalModuleExportingGenericClass.js index 80e4f7bc66c..14f18ddfc04 100644 --- a/tests/baselines/reference/externalModuleExportingGenericClass.js +++ b/tests/baselines/reference/externalModuleExportingGenericClass.js @@ -24,6 +24,6 @@ var C = (function () { module.exports = C; //// [externalModuleExportingGenericClass_file1.js] var a = require('externalModuleExportingGenericClass_file0'); -var v; +var v; // this should report error var v2 = (new a()).foo; var v3 = (new a()).foo; diff --git a/tests/baselines/reference/externalModuleQualification.types b/tests/baselines/reference/externalModuleQualification.types new file mode 100644 index 00000000000..ba8fc516fb8 --- /dev/null +++ b/tests/baselines/reference/externalModuleQualification.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/externalModuleQualification.ts === +export var ID = "test"; +>ID : string + +export class DiffEditor { +>DiffEditor : DiffEditor +>A : A +>B : B +>C : C + + private previousDiffAction: NavigateAction; +>previousDiffAction : NavigateAction +>NavigateAction : NavigateAction + + constructor(id: string = ID) { +>id : string +>ID : string + } +} +class NavigateAction { +>NavigateAction : NavigateAction + + f(editor: DiffEditor) { +>f : (editor: DiffEditor) => void +>editor : DiffEditor +>DiffEditor : DiffEditor + } +} + diff --git a/tests/baselines/reference/externalModuleReferenceOfImportDeclarationWithExportModifier.types b/tests/baselines/reference/externalModuleReferenceOfImportDeclarationWithExportModifier.types new file mode 100644 index 00000000000..bb49781d477 --- /dev/null +++ b/tests/baselines/reference/externalModuleReferenceOfImportDeclarationWithExportModifier.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier_1.ts === +export import file1 = require('externalModuleReferenceOfImportDeclarationWithExportModifier_0'); +>file1 : typeof file1 + +file1.foo(); +>file1.foo() : void +>file1.foo : () => void +>file1 : typeof file1 +>foo : () => void + +=== tests/cases/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier_0.ts === +export function foo() { }; +>foo : () => void + diff --git a/tests/baselines/reference/externalModuleRefernceResolutionOrderInImportDeclaration.js b/tests/baselines/reference/externalModuleRefernceResolutionOrderInImportDeclaration.js index 72517dfcb42..edbdf6b90a5 100644 --- a/tests/baselines/reference/externalModuleRefernceResolutionOrderInImportDeclaration.js +++ b/tests/baselines/reference/externalModuleRefernceResolutionOrderInImportDeclaration.js @@ -24,6 +24,7 @@ function foo() { exports.foo = foo; ; //// [externalModuleRefernceResolutionOrderInImportDeclaration_file3.js] +/// var file1 = require('externalModuleRefernceResolutionOrderInImportDeclaration_file1'); file1.foo(); file1.bar(); diff --git a/tests/baselines/reference/externalModuleResolution.js b/tests/baselines/reference/externalModuleResolution.js index 9c2a8073706..04dc4289bb6 100644 --- a/tests/baselines/reference/externalModuleResolution.js +++ b/tests/baselines/reference/externalModuleResolution.js @@ -24,4 +24,4 @@ var M2; module.exports = M2; //// [consumer.js] var x = require('./foo'); -x.Y; +x.Y; // .ts should be picked diff --git a/tests/baselines/reference/externalModuleResolution.types b/tests/baselines/reference/externalModuleResolution.types new file mode 100644 index 00000000000..929695b2203 --- /dev/null +++ b/tests/baselines/reference/externalModuleResolution.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/consumer.ts === +import x = require('./foo'); +>x : typeof x + +x.Y // .ts should be picked +>x.Y : number +>x : typeof x +>Y : number + +=== tests/cases/compiler/foo.ts === +module M2 { +>M2 : typeof M2 + + export var Y = 1; +>Y : number +} +export = M2 +>M2 : typeof M2 + diff --git a/tests/baselines/reference/externalModuleResolution2.js b/tests/baselines/reference/externalModuleResolution2.js index e04b0691116..9d35f8e61e1 100644 --- a/tests/baselines/reference/externalModuleResolution2.js +++ b/tests/baselines/reference/externalModuleResolution2.js @@ -25,4 +25,4 @@ var M2; module.exports = M2; //// [consumer.js] var x = require('./foo'); -x.X; +x.X; // .ts should be picked diff --git a/tests/baselines/reference/externalModuleResolution2.types b/tests/baselines/reference/externalModuleResolution2.types new file mode 100644 index 00000000000..09b33fb2bee --- /dev/null +++ b/tests/baselines/reference/externalModuleResolution2.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/consumer.ts === +import x = require('./foo'); +>x : typeof x + +x.X // .ts should be picked +>x.X : number +>x : typeof x +>X : number + +=== tests/cases/compiler/foo.ts === +module M2 { +>M2 : typeof M2 + + export var X = 1; +>X : number +} +export = M2 +>M2 : typeof M2 + diff --git a/tests/baselines/reference/fatArrowSelf.types b/tests/baselines/reference/fatArrowSelf.types new file mode 100644 index 00000000000..912e0cd78a7 --- /dev/null +++ b/tests/baselines/reference/fatArrowSelf.types @@ -0,0 +1,60 @@ +=== tests/cases/compiler/fatArrowSelf.ts === +module Events { +>Events : typeof Events + + export interface ListenerCallback { +>ListenerCallback : ListenerCallback + + (value:any):void; +>value : any + } + export class EventEmitter { +>EventEmitter : EventEmitter + + public addListener(type:string, listener:ListenerCallback) { +>addListener : (type: string, listener: ListenerCallback) => void +>type : string +>listener : ListenerCallback +>ListenerCallback : ListenerCallback + } + } +} + +module Consumer { +>Consumer : typeof Consumer + + class EventEmitterConsummer { +>EventEmitterConsummer : EventEmitterConsummer + + constructor (private emitter: Events.EventEmitter) { } +>emitter : Events.EventEmitter +>Events : unknown +>EventEmitter : Events.EventEmitter + + private register() { +>register : () => void + + this.emitter.addListener('change', (e) => { +>this.emitter.addListener('change', (e) => { this.changed(); }) : void +>this.emitter.addListener : (type: string, listener: Events.ListenerCallback) => void +>this.emitter : Events.EventEmitter +>this : EventEmitterConsummer +>emitter : Events.EventEmitter +>addListener : (type: string, listener: Events.ListenerCallback) => void +>(e) => { this.changed(); } : (e: any) => void +>e : any + + this.changed(); +>this.changed() : void +>this.changed : () => void +>this : EventEmitterConsummer +>changed : () => void + + }); + } + + private changed() { +>changed : () => void + } + } +} diff --git a/tests/baselines/reference/fatArrowfunctionAsType.types b/tests/baselines/reference/fatArrowfunctionAsType.types new file mode 100644 index 00000000000..31f8c128611 --- /dev/null +++ b/tests/baselines/reference/fatArrowfunctionAsType.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/fatArrowfunctionAsType.ts === +declare var b: (x: T) => void ; +>b : (x: T) => void +>T : T +>x : T +>T : T + +var c: (x: T) => void = function (x: T) { return 42; } +>c : (x: T) => void +>T : T +>x : T +>T : T +>function (x: T) { return 42; } : (x: T) => number +>T : T +>x : T +>T : T + +b = c; +>b = c : (x: T) => void +>b : (x: T) => void +>c : (x: T) => void + diff --git a/tests/baselines/reference/fatarrowfunctions.types b/tests/baselines/reference/fatarrowfunctions.types new file mode 100644 index 00000000000..1b819b8496a --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctions.types @@ -0,0 +1,239 @@ +=== tests/cases/compiler/fatarrowfunctions.ts === + +function foo(x:any) { +>foo : (x: any) => any +>x : any + + return x(); +>x() : any +>x : any +} + + +foo((x:number,y,z)=>{return x+y+z;}); +>foo((x:number,y,z)=>{return x+y+z;}) : any +>foo : (x: any) => any +>(x:number,y,z)=>{return x+y+z;} : (x: number, y: any, z: any) => any +>x : number +>y : any +>z : any +>x+y+z : any +>x+y : any +>x : number +>y : any +>z : any + +foo((x,y,z)=>{return x+y+z;}); +>foo((x,y,z)=>{return x+y+z;}) : any +>foo : (x: any) => any +>(x,y,z)=>{return x+y+z;} : (x: any, y: any, z: any) => any +>x : any +>y : any +>z : any +>x+y+z : any +>x+y : any +>x : any +>y : any +>z : any + +foo((x,y:number,z)=>{return x+y+z;}); +>foo((x,y:number,z)=>{return x+y+z;}) : any +>foo : (x: any) => any +>(x,y:number,z)=>{return x+y+z;} : (x: any, y: number, z: any) => any +>x : any +>y : number +>z : any +>x+y+z : any +>x+y : any +>x : any +>y : number +>z : any + +foo((x,y:number,z:number)=>{return x+y+z;}); +>foo((x,y:number,z:number)=>{return x+y+z;}) : any +>foo : (x: any) => any +>(x,y:number,z:number)=>{return x+y+z;} : (x: any, y: number, z: number) => any +>x : any +>y : number +>z : number +>x+y+z : any +>x+y : any +>x : any +>y : number +>z : number + +foo((x,y,z:number)=>{return x+y+z;}); +>foo((x,y,z:number)=>{return x+y+z;}) : any +>foo : (x: any) => any +>(x,y,z:number)=>{return x+y+z;} : (x: any, y: any, z: number) => any +>x : any +>y : any +>z : number +>x+y+z : any +>x+y : any +>x : any +>y : any +>z : number + +foo(()=>{return 0;}); +>foo(()=>{return 0;}) : any +>foo : (x: any) => any +>()=>{return 0;} : () => number + +foo((x:number,y,z)=>x+y+z); +>foo((x:number,y,z)=>x+y+z) : any +>foo : (x: any) => any +>(x:number,y,z)=>x+y+z : (x: number, y: any, z: any) => any +>x : number +>y : any +>z : any +>x+y+z : any +>x+y : any +>x : number +>y : any +>z : any + +foo((x,y,z)=>x+y+z); +>foo((x,y,z)=>x+y+z) : any +>foo : (x: any) => any +>(x,y,z)=>x+y+z : (x: any, y: any, z: any) => any +>x : any +>y : any +>z : any +>x+y+z : any +>x+y : any +>x : any +>y : any +>z : any + +foo((x,y:number,z)=>{return x+y+z;}); +>foo((x,y:number,z)=>{return x+y+z;}) : any +>foo : (x: any) => any +>(x,y:number,z)=>{return x+y+z;} : (x: any, y: number, z: any) => any +>x : any +>y : number +>z : any +>x+y+z : any +>x+y : any +>x : any +>y : number +>z : any + +foo((x,y:number,z:number)=>{return x+y+z;}); +>foo((x,y:number,z:number)=>{return x+y+z;}) : any +>foo : (x: any) => any +>(x,y:number,z:number)=>{return x+y+z;} : (x: any, y: number, z: number) => any +>x : any +>y : number +>z : number +>x+y+z : any +>x+y : any +>x : any +>y : number +>z : number + +foo((x,y,z:number)=>{return x+y+z;}); +>foo((x,y,z:number)=>{return x+y+z;}) : any +>foo : (x: any) => any +>(x,y,z:number)=>{return x+y+z;} : (x: any, y: any, z: number) => any +>x : any +>y : any +>z : number +>x+y+z : any +>x+y : any +>x : any +>y : any +>z : number + +foo(()=>{return 0;}); +>foo(()=>{return 0;}) : any +>foo : (x: any) => any +>()=>{return 0;} : () => number + + +foo(((x) => x)); +>foo(((x) => x)) : any +>foo : (x: any) => any +>((x) => x) : (x: any) => any +>(x) => x : (x: any) => any +>x : any +>x : any + +foo(x => x*x); +>foo(x => x*x) : any +>foo : (x: any) => any +>x => x*x : (x: any) => number +>x : any +>x*x : number +>x : any +>x : any + +var y = x => x*x; +>y : (x: any) => number +>x => x*x : (x: any) => number +>x : any +>x*x : number +>x : any +>x : any + +var z = (x:number) => x*x; +>z : (x: number) => number +>(x:number) => x*x : (x: number) => number +>x : number +>x*x : number +>x : number +>x : number + +var w = () => 3; +>w : () => number +>() => 3 : () => number + +function ternaryTest(isWhile:boolean) { +>ternaryTest : (isWhile: boolean) => void +>isWhile : boolean + + var f = isWhile ? function (n) { return n > 0; } : function (n) { return n === 0; }; +>f : (n: any) => boolean +>isWhile ? function (n) { return n > 0; } : function (n) { return n === 0; } : (n: any) => boolean +>isWhile : boolean +>function (n) { return n > 0; } : (n: any) => boolean +>n : any +>n > 0 : boolean +>n : any +>function (n) { return n === 0; } : (n: any) => boolean +>n : any +>n === 0 : boolean +>n : any + +} + +declare function setTimeout(expression: any, msec?: number, language?: any): number; +>setTimeout : (expression: any, msec?: number, language?: any) => number +>expression : any +>msec : number +>language : any + +var messenger = { +>messenger : { message: string; start: () => void; } +>{ message: "Hello World", start: function() { setTimeout(() => { this.message.toString(); }, 3000); }} : { message: string; start: () => void; } + + message: "Hello World", +>message : string + + start: function() { +>start : () => void +>function() { setTimeout(() => { this.message.toString(); }, 3000); } : () => void + + setTimeout(() => { this.message.toString(); }, 3000); +>setTimeout(() => { this.message.toString(); }, 3000) : number +>setTimeout : (expression: any, msec?: number, language?: any) => number +>() => { this.message.toString(); } : () => void +>this.message.toString() : any +>this.message.toString : any +>this.message : any +>this : any +>message : any +>toString : any + } +}; + diff --git a/tests/baselines/reference/fatarrowfunctionsInFunctionParameterDefaults.js b/tests/baselines/reference/fatarrowfunctionsInFunctionParameterDefaults.js index 033c2231689..d73eec12bcd 100644 --- a/tests/baselines/reference/fatarrowfunctionsInFunctionParameterDefaults.js +++ b/tests/baselines/reference/fatarrowfunctionsInFunctionParameterDefaults.js @@ -14,6 +14,7 @@ function fn(x, y) { var _this = this; if (x === void 0) { x = function () { return _this; }; } if (y === void 0) { y = x(); } + // should be 4 return y; } -fn.call(4); +fn.call(4); // Should be 4 diff --git a/tests/baselines/reference/fatarrowfunctionsInFunctionParameterDefaults.types b/tests/baselines/reference/fatarrowfunctionsInFunctionParameterDefaults.types new file mode 100644 index 00000000000..cf561eb08af --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsInFunctionParameterDefaults.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/fatarrowfunctionsInFunctionParameterDefaults.ts === +function fn(x = () => this, y = x()) { +>fn : (x?: () => any, y?: any) => any +>x : () => any +>() => this : () => any +>this : any +>y : any +>x() : any +>x : () => any + + // should be 4 + return y; +>y : any + +} + +fn.call(4); // Should be 4 +>fn.call(4) : any +>fn.call : (thisArg: any, ...argArray: any[]) => any +>fn : (x?: () => any, y?: any) => any +>call : (thisArg: any, ...argArray: any[]) => any + diff --git a/tests/baselines/reference/fatarrowfunctionsInFunctions.types b/tests/baselines/reference/fatarrowfunctionsInFunctions.types new file mode 100644 index 00000000000..a8633eb1a8c --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsInFunctions.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/fatarrowfunctionsInFunctions.ts === +declare function setTimeout(expression: any, msec?: number, language?: any): number; +>setTimeout : (expression: any, msec?: number, language?: any) => number +>expression : any +>msec : number +>language : any + +var messenger = { +>messenger : { message: string; start: () => void; } +>{ message: "Hello World", start: function() { var _self = this; setTimeout(function() { _self.message.toString(); }, 3000); }} : { message: string; start: () => void; } + + message: "Hello World", +>message : string + + start: function() { +>start : () => void +>function() { var _self = this; setTimeout(function() { _self.message.toString(); }, 3000); } : () => void + + var _self = this; +>_self : any +>this : any + + setTimeout(function() { +>setTimeout(function() { _self.message.toString(); }, 3000) : number +>setTimeout : (expression: any, msec?: number, language?: any) => number +>function() { _self.message.toString(); } : () => void + + _self.message.toString(); +>_self.message.toString() : any +>_self.message.toString : any +>_self.message : any +>_self : any +>message : any +>toString : any + + }, 3000); + } +}; +messenger.start(); +>messenger.start() : void +>messenger.start : () => void +>messenger : { message: string; start: () => void; } +>start : () => void + diff --git a/tests/baselines/reference/fileReferencesWithNoExtensions.types b/tests/baselines/reference/fileReferencesWithNoExtensions.types new file mode 100644 index 00000000000..ec58e338345 --- /dev/null +++ b/tests/baselines/reference/fileReferencesWithNoExtensions.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/t.ts === +/// +/// +/// +var a = aa; // Check that a.ts is referenced +>a : number +>aa : number + +var b = bb; // Check that b.d.ts is referenced +>b : number +>bb : number + +var c = cc; // Check that c.ts has precedence over c.d.ts +>c : number +>cc : number + +=== tests/cases/compiler/a.ts === +var aa = 1; +>aa : number + +=== tests/cases/compiler/b.d.ts === +declare var bb: number; +>bb : number + +=== tests/cases/compiler/c.ts === +var cc = 1; +>cc : number + +=== tests/cases/compiler/c.d.ts === +declare var xx: number; +>xx : number + diff --git a/tests/baselines/reference/fillInMissingTypeArgsOnConstructCalls.types b/tests/baselines/reference/fillInMissingTypeArgsOnConstructCalls.types new file mode 100644 index 00000000000..496400c8235 --- /dev/null +++ b/tests/baselines/reference/fillInMissingTypeArgsOnConstructCalls.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/fillInMissingTypeArgsOnConstructCalls.ts === +class A{ +>A : A +>T : T +>Object : Object + + list: T ; +>list : T +>T : T +} +var a = new A(); +>a : A<{}> +>new A() : A<{}> +>A : typeof A + diff --git a/tests/baselines/reference/fixTypeParameterInSignatureWithRestParameters.js b/tests/baselines/reference/fixTypeParameterInSignatureWithRestParameters.js index acb30a88ffa..d8521e56a14 100644 --- a/tests/baselines/reference/fixTypeParameterInSignatureWithRestParameters.js +++ b/tests/baselines/reference/fixTypeParameterInSignatureWithRestParameters.js @@ -5,4 +5,4 @@ bar(1, ""); // Should be ok //// [fixTypeParameterInSignatureWithRestParameters.js] function bar(item1, item2) { } -bar(1, ""); +bar(1, ""); // Should be ok diff --git a/tests/baselines/reference/fixTypeParameterInSignatureWithRestParameters.types b/tests/baselines/reference/fixTypeParameterInSignatureWithRestParameters.types new file mode 100644 index 00000000000..95214571df9 --- /dev/null +++ b/tests/baselines/reference/fixTypeParameterInSignatureWithRestParameters.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/fixTypeParameterInSignatureWithRestParameters.ts === +function bar(item1: T, item2: T) { } +>bar : (item1: T, item2: T) => void +>T : T +>item1 : T +>T : T +>item2 : T +>T : T + +bar(1, ""); // Should be ok +>bar(1, "") : void +>bar : (item1: T, item2: T) => void + diff --git a/tests/baselines/reference/forBreakStatements.types b/tests/baselines/reference/forBreakStatements.types new file mode 100644 index 00000000000..dafaae9cce7 --- /dev/null +++ b/tests/baselines/reference/forBreakStatements.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/statements/breakStatements/forBreakStatements.ts === +for (; ;) { + break; +} + +ONE: +for (; ;) { + break ONE; +} + +TWO: +THREE: +for (; ;) { + break THREE; +} + +FOUR: +for (; ;) { + FIVE: + for (; ;) { + break FOUR; + } +} + +for (; ;) { + SIX: + for (; ;) break SIX; +} + +SEVEN: +for (; ;) for (; ;) for (; ;) break SEVEN; + +EIGHT: +for (; ;) { + var fn = function () { } +>fn : () => void +>function () { } : () => void + + break EIGHT; +} + diff --git a/tests/baselines/reference/forContinueStatements.types b/tests/baselines/reference/forContinueStatements.types new file mode 100644 index 00000000000..60fd7115362 --- /dev/null +++ b/tests/baselines/reference/forContinueStatements.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/statements/continueStatements/forContinueStatements.ts === +for (; ;) { + continue; +} + +ONE: +for (; ;) { + continue ONE; +} + +TWO: +THREE: +for (; ;) { + continue THREE; +} + +FOUR: +for (; ;) { + FIVE: + for (; ;) { + continue FOUR; + } +} + +for (; ;) { + SIX: + for (; ;) continue SIX; +} + +SEVEN: +for (; ;) for (; ;) for (; ;) continue SEVEN; + +EIGHT: +for (; ;) { + var fn = function () { } +>fn : () => void +>function () { } : () => void + + continue EIGHT; +} + diff --git a/tests/baselines/reference/forIn.js b/tests/baselines/reference/forIn.js index e287792ac01..28e395a9cf3 100644 --- a/tests/baselines/reference/forIn.js +++ b/tests/baselines/reference/forIn.js @@ -37,5 +37,6 @@ for (j in arr2) { var y3 = arr2[j]; } for (var l in arr) { + // error in the body k[l] = 1; } diff --git a/tests/baselines/reference/forInBreakStatements.types b/tests/baselines/reference/forInBreakStatements.types new file mode 100644 index 00000000000..8d0cf0ace3c --- /dev/null +++ b/tests/baselines/reference/forInBreakStatements.types @@ -0,0 +1,70 @@ +=== tests/cases/conformance/statements/breakStatements/forInBreakStatements.ts === +for(var x in {}) { +>x : any +>{} : {} + + break; +} + +ONE: +for(var x in {}) { +>x : any +>{} : {} + + break ONE; +} + +TWO: +THREE: +for(var x in {}) { +>x : any +>{} : {} + + break THREE; +} + +FOUR: +for(var x in {}) { +>x : any +>{} : {} + + FIVE: + for(var x in {}) { +>x : any +>{} : {} + + break FOUR; + } +} + +for(var x in {}) { +>x : any +>{} : {} + + SIX: + for(var x in {}) break SIX; +>x : any +>{} : {} +} + +SEVEN: +for (var x in {}) for (var x in {}) for (var x in {}) break SEVEN; +>x : any +>{} : {} +>x : any +>{} : {} +>x : any +>{} : {} + +EIGHT: +for (var x in {}){ +>x : any +>{} : {} + + var fn = function () { } +>fn : () => void +>function () { } : () => void + + break EIGHT; +} + diff --git a/tests/baselines/reference/forInContinueStatements.types b/tests/baselines/reference/forInContinueStatements.types new file mode 100644 index 00000000000..3751c11aaa9 --- /dev/null +++ b/tests/baselines/reference/forInContinueStatements.types @@ -0,0 +1,70 @@ +=== tests/cases/conformance/statements/continueStatements/forInContinueStatements.ts === +for(var x in {}) { +>x : any +>{} : {} + + continue; +} + +ONE: +for(var x in {}) { +>x : any +>{} : {} + + continue ONE; +} + +TWO: +THREE: +for(var x in {}) { +>x : any +>{} : {} + + continue THREE; +} + +FOUR: +for(var x in {}) { +>x : any +>{} : {} + + FIVE: + for(var x in {}) { +>x : any +>{} : {} + + continue FOUR; + } +} + +for(var x in {}) { +>x : any +>{} : {} + + SIX: + for(var x in {}) continue SIX; +>x : any +>{} : {} +} + +SEVEN: +for (var x in {}) for (var x in {}) for (var x in {}) continue SEVEN; +>x : any +>{} : {} +>x : any +>{} : {} +>x : any +>{} : {} + +EIGHT: +for (var x in {}){ +>x : any +>{} : {} + + var fn = function () { } +>fn : () => void +>function () { } : () => void + + continue EIGHT; +} + diff --git a/tests/baselines/reference/forInModule.types b/tests/baselines/reference/forInModule.types new file mode 100644 index 00000000000..7de39df3b33 --- /dev/null +++ b/tests/baselines/reference/forInModule.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/forInModule.ts === +module Foo { +>Foo : typeof Foo + + for (var i = 0; i < 1; i++) { +>i : number +>i < 1 : boolean +>i : number +>i++ : number +>i : number + + i+i; +>i+i : number +>i : number +>i : number + } +} diff --git a/tests/baselines/reference/forInStatement1.types b/tests/baselines/reference/forInStatement1.types new file mode 100644 index 00000000000..8ccacc9e2f7 --- /dev/null +++ b/tests/baselines/reference/forInStatement1.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/forInStatement1.ts === +var expr: any; +>expr : any + +for (var a in expr) { +>a : any +>expr : any +} diff --git a/tests/baselines/reference/forInStatement3.types b/tests/baselines/reference/forInStatement3.types new file mode 100644 index 00000000000..1d3803065bd --- /dev/null +++ b/tests/baselines/reference/forInStatement3.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/forInStatement3.ts === +function F() { +>F : () => void +>T : T + + var expr: T; +>expr : T +>T : T + + for (var a in expr) { +>a : any +>expr : T + } +} diff --git a/tests/baselines/reference/forInStatement5.types b/tests/baselines/reference/forInStatement5.types new file mode 100644 index 00000000000..97f894dc6bf --- /dev/null +++ b/tests/baselines/reference/forInStatement5.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/forInStatement5.ts === +var a: string; +>a : string + +var expr: any; +>expr : any + +for (a in expr) { +>a : string +>expr : any +} diff --git a/tests/baselines/reference/forInStatement6.types b/tests/baselines/reference/forInStatement6.types new file mode 100644 index 00000000000..0a882c62d8a --- /dev/null +++ b/tests/baselines/reference/forInStatement6.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/forInStatement6.ts === +var a: any; +>a : any + +var expr: any; +>expr : any + +for (a in expr) { +>a : any +>expr : any +} diff --git a/tests/baselines/reference/forStatements.types b/tests/baselines/reference/forStatements.types new file mode 100644 index 00000000000..fad702213df --- /dev/null +++ b/tests/baselines/reference/forStatements.types @@ -0,0 +1,155 @@ +=== tests/cases/conformance/statements/forStatements/forStatements.ts === +interface I { +>I : I + + id: number; +>id : number +} + +class C implements I { +>C : C +>I : I + + id: number; +>id : number +} + +class D{ +>D : D +>T : T + + source: T; +>source : T +>T : T + + recurse: D; +>recurse : D +>D : D +>T : T + + wrapped: D> +>wrapped : D> +>D : D +>D : D +>T : T +} + +function F(x: string): number { return 42; } +>F : (x: string) => number +>x : string + +module M { +>M : typeof M + + export class A { +>A : A + + name: string; +>name : string + } + + export function F2(x: number): string { return x.toString(); } +>F2 : (x: number) => string +>x : number +>x.toString() : string +>x.toString : (radix?: number) => string +>x : number +>toString : (radix?: number) => string +} + +for(var aNumber: number = 9.9;;){} +>aNumber : number + +for(var aString: string = 'this is a string';;){} +>aString : string + +for(var aDate: Date = new Date(12);;){} +>aDate : Date +>Date : Date +>new Date(12) : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +for(var anObject: Object = new Object();;){} +>anObject : Object +>Object : Object +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + +for(var anAny: any = null;;){} +>anAny : any + +for(var aSecondAny: any = undefined;;){} +>aSecondAny : any +>undefined : undefined + +for(var aVoid: void = undefined;;){} +>aVoid : void +>undefined : undefined + +for(var anInterface: I = new C();;){} +>anInterface : I +>I : I +>new C() : C +>C : typeof C + +for(var aClass: C = new C();;){} +>aClass : C +>C : C +>new C() : C +>C : typeof C + +for(var aGenericClass: D = new D();;){} +>aGenericClass : D +>D : D +>new D() : D +>D : typeof D + +for(var anObjectLiteral: I = { id: 12 };;){} +>anObjectLiteral : I +>I : I +>{ id: 12 } : { id: number; } +>id : number + +for(var anOtherObjectLiteral: { id: number } = new C();;){} +>anOtherObjectLiteral : { id: number; } +>id : number +>new C() : C +>C : typeof C + +for(var aFunction: typeof F = F;;){} +>aFunction : (x: string) => number +>F : (x: string) => number +>F : (x: string) => number + +for(var anOtherFunction: (x: string) => number = F;;){} +>anOtherFunction : (x: string) => number +>x : string +>F : (x: string) => number + +for(var aLambda: typeof F = (x) => 2;;){} +>aLambda : (x: string) => number +>F : (x: string) => number +>(x) => 2 : (x: string) => number +>x : string + +for(var aModule: typeof M = M;;){} +>aModule : typeof M +>M : typeof M +>M : typeof M + +for(var aClassInModule: M.A = new M.A();;){} +>aClassInModule : M.A +>M : unknown +>A : M.A +>new M.A() : M.A +>M.A : typeof M.A +>M : typeof M +>A : typeof M.A + +for(var aFunctionInModule: typeof M.F2 = (x) => 'this is a string';;){} +>aFunctionInModule : (x: number) => string +>M : typeof M +>F2 : (x: number) => string +>(x) => 'this is a string' : (x: number) => string +>x : number + diff --git a/tests/baselines/reference/forStatementsMultipleValidDecl.js b/tests/baselines/reference/forStatementsMultipleValidDecl.js index c7edbd93778..5cc9bf3cd7d 100644 --- a/tests/baselines/reference/forStatementsMultipleValidDecl.js +++ b/tests/baselines/reference/forStatementsMultipleValidDecl.js @@ -34,12 +34,14 @@ for (var a = new Array(); ;) { } for (var a: typeof a; ;) { } //// [forStatementsMultipleValidDecl.js] +// all expected to be valid for (var x;;) { } for (var x = 2;;) { } for (var x = undefined;;) { } +// new declaration space, making redeclaring x as a string valid function declSpace() { for (var x = 'this is a string';;) { } diff --git a/tests/baselines/reference/forStatementsMultipleValidDecl.types b/tests/baselines/reference/forStatementsMultipleValidDecl.types new file mode 100644 index 00000000000..f894eef1404 --- /dev/null +++ b/tests/baselines/reference/forStatementsMultipleValidDecl.types @@ -0,0 +1,126 @@ +=== tests/cases/conformance/statements/forStatements/forStatementsMultipleValidDecl.ts === +// all expected to be valid + +for (var x: number; ;) { } +>x : number + +for (var x = 2; ;) { } +>x : number + +for (var x = undefined; ;) { } +>x : number +>undefined : number +>undefined : undefined + +// new declaration space, making redeclaring x as a string valid +function declSpace() { +>declSpace : () => void + + for (var x = 'this is a string'; ;) { } +>x : string +} +interface Point { x: number; y: number; } +>Point : Point +>x : number +>y : number + +for (var p: Point; ;) { } +>p : Point +>Point : Point + +for (var p = { x: 1, y: 2 }; ;) { } +>p : Point +>{ x: 1, y: 2 } : { x: number; y: number; } +>x : number +>y : number + +for (var p: Point = { x: 0, y: undefined }; ;) { } +>p : Point +>Point : Point +>{ x: 0, y: undefined } : { x: number; y: undefined; } +>x : number +>y : any +>undefined : undefined + +for (var p = { x: 1, y: undefined }; ;) { } +>p : Point +>{ x: 1, y: undefined } : { x: number; y: number; } +>x : number +>y : number +>undefined : number +>undefined : undefined + +for (var p: { x: number; y: number; } = { x: 1, y: 2 }; ;) { } +>p : Point +>x : number +>y : number +>{ x: 1, y: 2 } : { x: number; y: number; } +>x : number +>y : number + +for (var p = <{ x: number; y: number; }>{ x: 0, y: undefined }; ;) { } +>p : Point +><{ x: number; y: number; }>{ x: 0, y: undefined } : { x: number; y: number; } +>x : number +>y : number +>{ x: 0, y: undefined } : { x: number; y: undefined; } +>x : number +>y : any +>undefined : undefined + +for (var p: typeof p; ;) { } +>p : Point +>p : Point + +for (var fn = function (s: string) { return 42; }; ;) { } +>fn : (s: string) => number +>function (s: string) { return 42; } : (s: string) => number +>s : string + +for (var fn = (s: string) => 3; ;) { } +>fn : (s: string) => number +>(s: string) => 3 : (s: string) => number +>s : string + +for (var fn: (s: string) => number; ;) { } +>fn : (s: string) => number +>s : string + +for (var fn: { (s: string): number }; ;) { } +>fn : (s: string) => number +>s : string + +for (var fn = <(s: string) => number> null; ;) { } +>fn : (s: string) => number +><(s: string) => number> null : (s: string) => number +>s : string + +for (var fn: typeof fn; ;) { } +>fn : (s: string) => number +>fn : (s: string) => number + +for (var a: string[]; ;) { } +>a : string[] + +for (var a = ['a', 'b']; ;) { } +>a : string[] +>['a', 'b'] : string[] + +for (var a = []; ;) { } +>a : string[] +>[] : string[] +>[] : string[] + +for (var a: string[] = []; ;) { } +>a : string[] +>[] : string[] + +for (var a = new Array(); ;) { } +>a : string[] +>new Array() : string[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } + +for (var a: typeof a; ;) { } +>a : string[] +>a : string[] + diff --git a/tests/baselines/reference/funClodule.js b/tests/baselines/reference/funClodule.js index c4b7d6e7a26..8629ed63055 100644 --- a/tests/baselines/reference/funClodule.js +++ b/tests/baselines/reference/funClodule.js @@ -32,4 +32,4 @@ var foo3 = (function () { function foo3() { } return foo3; -})(); +})(); // Should error diff --git a/tests/baselines/reference/funcdecl.types b/tests/baselines/reference/funcdecl.types new file mode 100644 index 00000000000..bbfd14bd220 --- /dev/null +++ b/tests/baselines/reference/funcdecl.types @@ -0,0 +1,161 @@ +=== tests/cases/compiler/funcdecl.ts === +function simpleFunc() { +>simpleFunc : () => string + + return "this is my simple func"; +} +var simpleFuncVar = simpleFunc; +>simpleFuncVar : () => string +>simpleFunc : () => string + +function anotherFuncNoReturn() { +>anotherFuncNoReturn : () => void +} +var anotherFuncNoReturnVar = anotherFuncNoReturn; +>anotherFuncNoReturnVar : () => void +>anotherFuncNoReturn : () => void + +function withReturn() : string{ +>withReturn : () => string + + return "Hello"; +} +var withReturnVar = withReturn; +>withReturnVar : () => string +>withReturn : () => string + +function withParams(a : string) : string{ +>withParams : (a: string) => string +>a : string + + return a; +>a : string +} +var withparamsVar = withParams; +>withparamsVar : (a: string) => string +>withParams : (a: string) => string + +function withMultiParams(a : number, b, c: Object) { +>withMultiParams : (a: number, b: any, c: Object) => number +>a : number +>b : any +>c : Object +>Object : Object + + return a; +>a : number +} +var withMultiParamsVar = withMultiParams; +>withMultiParamsVar : (a: number, b: any, c: Object) => number +>withMultiParams : (a: number, b: any, c: Object) => number + +function withOptionalParams(a?: string) { +>withOptionalParams : (a?: string) => void +>a : string +} +var withOptionalParamsVar = withOptionalParams; +>withOptionalParamsVar : (a?: string) => void +>withOptionalParams : (a?: string) => void + +function withInitializedParams(a: string, b0, b = 30, c = "string value") { +>withInitializedParams : (a: string, b0: any, b?: number, c?: string) => void +>a : string +>b0 : any +>b : number +>c : string +} +var withInitializedParamsVar = withInitializedParams; +>withInitializedParamsVar : (a: string, b0: any, b?: number, c?: string) => void +>withInitializedParams : (a: string, b0: any, b?: number, c?: string) => void + +function withOptionalInitializedParams(a: string, c: string = "hello string") { +>withOptionalInitializedParams : (a: string, c?: string) => void +>a : string +>c : string +} +var withOptionalInitializedParamsVar = withOptionalInitializedParams; +>withOptionalInitializedParamsVar : (a: string, c?: string) => void +>withOptionalInitializedParams : (a: string, c?: string) => void + +function withRestParams(a: string, ... myRestParameter : number[]) { +>withRestParams : (a: string, ...myRestParameter: number[]) => number[] +>a : string +>myRestParameter : number[] + + return myRestParameter; +>myRestParameter : number[] +} +var withRestParamsVar = withRestParams; +>withRestParamsVar : (a: string, ...myRestParameter: number[]) => number[] +>withRestParams : (a: string, ...myRestParameter: number[]) => number[] + +function overload1(n: number) : string; +>overload1 : { (n: number): string; (s: string): string; } +>n : number + +function overload1(s: string) : string; +>overload1 : { (n: number): string; (s: string): string; } +>s : string + +function overload1(ns: any) { +>overload1 : { (n: number): string; (s: string): string; } +>ns : any + + return ns.toString(); +>ns.toString() : any +>ns.toString : any +>ns : any +>toString : any +} +var withOverloadSignature = overload1; +>withOverloadSignature : { (n: number): string; (s: string): string; } +>overload1 : { (n: number): string; (s: string): string; } + +function f(n: () => void) { } +>f : (n: () => void) => void +>n : () => void + +module m2 { +>m2 : typeof m2 + + export function foo(n: () => void ) { +>foo : (n: () => void) => void +>n : () => void + } + +} + +m2.foo(() => { +>m2.foo(() => { var b = 30; return b;}) : void +>m2.foo : (n: () => void) => void +>m2 : typeof m2 +>foo : (n: () => void) => void +>() => { var b = 30; return b;} : () => number + + var b = 30; +>b : number + + return b; +>b : number + +}); + + +declare function fooAmbient(n: number): string; +>fooAmbient : (n: number) => string +>n : number + +declare function overloadAmbient(n: number): string; +>overloadAmbient : { (n: number): string; (s: string): string; } +>n : number + +declare function overloadAmbient(s: string): string; +>overloadAmbient : { (n: number): string; (s: string): string; } +>s : string + +var f2 = () => { +>f2 : () => string +>() => { return "string";} : () => string + + return "string"; +} diff --git a/tests/baselines/reference/functionArgShadowing.js b/tests/baselines/reference/functionArgShadowing.js index 8a49841de43..c74570902ed 100644 --- a/tests/baselines/reference/functionArgShadowing.js +++ b/tests/baselines/reference/functionArgShadowing.js @@ -31,7 +31,7 @@ var B = (function () { })(); function foo(x) { var x = new B(); - x.bar(); + x.bar(); // the property bar does not exist on a value of type A } var C = (function () { function C(p) { diff --git a/tests/baselines/reference/functionAssignmentError.types b/tests/baselines/reference/functionAssignmentError.types new file mode 100644 index 00000000000..63996db0e40 --- /dev/null +++ b/tests/baselines/reference/functionAssignmentError.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/functionAssignmentError.ts === +var func = function (){return "ONE";}; +>func : () => string +>function (){return "ONE";} : () => string + +func = function (){return "ONE";}; +>func = function (){return "ONE";} : () => string +>func : () => string +>function (){return "ONE";} : () => string + diff --git a/tests/baselines/reference/functionCall1.types b/tests/baselines/reference/functionCall1.types new file mode 100644 index 00000000000..1b06379860c --- /dev/null +++ b/tests/baselines/reference/functionCall1.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/functionCall1.ts === +function foo():any{return ""}; +>foo : () => any + +var x = foo(); +>x : any +>foo() : any +>foo : () => any + diff --git a/tests/baselines/reference/functionCall2.types b/tests/baselines/reference/functionCall2.types new file mode 100644 index 00000000000..92bb0f0be23 --- /dev/null +++ b/tests/baselines/reference/functionCall2.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/functionCall2.ts === +function foo():number{return 1}; +>foo : () => number + +var x = foo(); +>x : number +>foo() : number +>foo : () => number + diff --git a/tests/baselines/reference/functionCall3.types b/tests/baselines/reference/functionCall3.types new file mode 100644 index 00000000000..a9b8e46069c --- /dev/null +++ b/tests/baselines/reference/functionCall3.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/functionCall3.ts === +function foo():any[]{return [1];} +>foo : () => any[] +>[1] : any[] + +var x = foo(); +>x : any[] +>foo() : any[] +>foo : () => any[] + diff --git a/tests/baselines/reference/functionCall4.types b/tests/baselines/reference/functionCall4.types new file mode 100644 index 00000000000..37a0b980a00 --- /dev/null +++ b/tests/baselines/reference/functionCall4.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/functionCall4.ts === +function foo():any{return ""}; +>foo : () => any + +function bar():()=>any{return foo}; +>bar : () => () => any +>foo : () => any + +var x = bar(); +>x : () => any +>bar() : () => any +>bar : () => () => any + diff --git a/tests/baselines/reference/functionCall5.types b/tests/baselines/reference/functionCall5.types new file mode 100644 index 00000000000..e5578ef3c34 --- /dev/null +++ b/tests/baselines/reference/functionCall5.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/functionCall5.ts === +module m1 { export class c1 { public a; }} +>m1 : typeof m1 +>c1 : c1 +>a : any + +function foo():m1.c1{return new m1.c1();}; +>foo : () => m1.c1 +>m1 : unknown +>c1 : m1.c1 +>new m1.c1() : m1.c1 +>m1.c1 : typeof m1.c1 +>m1 : typeof m1 +>c1 : typeof m1.c1 + +var x = foo(); +>x : m1.c1 +>foo() : m1.c1 +>foo : () => m1.c1 + diff --git a/tests/baselines/reference/functionCalls.js b/tests/baselines/reference/functionCalls.js index 66ec8938c81..e7b80fffdd8 100644 --- a/tests/baselines/reference/functionCalls.js +++ b/tests/baselines/reference/functionCalls.js @@ -37,9 +37,12 @@ func(); //// [functionCalls.js] +// Invoke function call on value of type 'any' with no type arguments var anyVar; anyVar(0); anyVar(''); +// Invoke function call on value of type 'any' with type arguments +// These should be errors anyVar('hello'); anyVar(); anyVar(undefined); @@ -47,9 +50,13 @@ var subFunc; subFunc(0); subFunc(''); subFunc(); +// Invoke function call on value of a subtype of Function with no call signatures with type arguments +// These should be errors subFunc(0); subFunc(''); subFunc(); +// Invoke function call on value of type Function with no call signatures with type arguments +// These should be errors var func; func(0); func(''); diff --git a/tests/baselines/reference/functionConstraintSatisfaction.js b/tests/baselines/reference/functionConstraintSatisfaction.js index 3665c81f7c2..452080917db 100644 --- a/tests/baselines/reference/functionConstraintSatisfaction.js +++ b/tests/baselines/reference/functionConstraintSatisfaction.js @@ -62,6 +62,7 @@ function foo2(x: T, y: U) { //} //// [functionConstraintSatisfaction.js] +// satisfaction of a constraint to Function, no errors expected function foo(x) { return x; } diff --git a/tests/baselines/reference/functionConstraintSatisfaction.types b/tests/baselines/reference/functionConstraintSatisfaction.types new file mode 100644 index 00000000000..70200af6fa9 --- /dev/null +++ b/tests/baselines/reference/functionConstraintSatisfaction.types @@ -0,0 +1,256 @@ +=== tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction.ts === +// satisfaction of a constraint to Function, no errors expected + +function foo(x: T): T { return x; } +>foo : (x: T) => T +>T : T +>Function : Function +>x : T +>T : T +>T : T +>x : T + +interface I { +>I : I + + (): string; +} +var i: I; +>i : I +>I : I + +class C { +>C : C + + foo: string; +>foo : string +} + +var a: { (): string }; +>a : () => string + +var b: { new (): string }; +>b : new () => string + +var c: { (): string; (x): string }; +>c : { (): string; (x: any): string; } +>x : any + +var r = foo(new Function()); +>r : Function +>foo(new Function()) : Function +>foo : (x: T) => T +>new Function() : Function +>Function : { (...args: string[]): Function; new (...args: string[]): Function; prototype: Function; } + +var r1 = foo((x) => x); +>r1 : (x: any) => any +>foo((x) => x) : (x: any) => any +>foo : (x: T) => T +>(x) => x : (x: any) => any +>x : any +>x : any + +var r2 = foo((x: string[]) => x); +>r2 : (x: string[]) => string[] +>foo((x: string[]) => x) : (x: string[]) => string[] +>foo : (x: T) => T +>(x: string[]) => x : (x: string[]) => string[] +>x : string[] +>x : string[] + +var r3 = foo(function (x) { return x }); +>r3 : (x: any) => any +>foo(function (x) { return x }) : (x: any) => any +>foo : (x: T) => T +>function (x) { return x } : (x: any) => any +>x : any +>x : any + +var r4 = foo(function (x: string[]) { return x }); +>r4 : (x: string[]) => string[] +>foo(function (x: string[]) { return x }) : (x: string[]) => string[] +>foo : (x: T) => T +>function (x: string[]) { return x } : (x: string[]) => string[] +>x : string[] +>x : string[] + +var r5 = foo(i); +>r5 : I +>foo(i) : I +>foo : (x: T) => T +>i : I + +var r6 = foo(C); +>r6 : typeof C +>foo(C) : typeof C +>foo : (x: T) => T +>C : typeof C + +var r7 = foo(b); +>r7 : new () => string +>foo(b) : new () => string +>foo : (x: T) => T +>b : new () => string + +var r8 = foo(c); +>r8 : { (): string; (x: any): string; } +>foo(c) : { (): string; (x: any): string; } +>foo : (x: T) => T +>c : { (): string; (x: any): string; } + +interface I2 { +>I2 : I2 +>T : T + + (x: T): T; +>x : T +>T : T +>T : T +} +var i2: I2; +>i2 : I2 +>I2 : I2 + +class C2 { +>C2 : C2 +>T : T + + foo: T; +>foo : T +>T : T +} + +var a2: { (x: T): T }; +>a2 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var b2: { new (x: T): T }; +>b2 : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var c2: { (x: T): T; (x: T, y: T): T }; +>c2 : { (x: T): T; (x: T, y: T): T; } +>T : T +>x : T +>T : T +>T : T +>T : T +>x : T +>T : T +>y : T +>T : T +>T : T + +var r9 = foo((x: U) => x); +>r9 : (x: U) => U +>foo((x: U) => x) : (x: U) => U +>foo : (x: T) => T +>(x: U) => x : (x: U) => U +>U : U +>x : U +>U : U +>x : U + +var r10 = foo(function (x: U) { return x; }); +>r10 : (x: U) => U +>foo(function (x: U) { return x; }) : (x: U) => U +>foo : (x: T) => T +>function (x: U) { return x; } : (x: U) => U +>U : U +>x : U +>U : U +>x : U + +var r11 = foo((x: U) => x); +>r11 : (x: U) => U +>foo((x: U) => x) : (x: U) => U +>foo : (x: T) => T +>(x: U) => x : (x: U) => U +>U : U +>Date : Date +>x : U +>U : U +>x : U + +var r12 = foo((x: U, y: V) => x); +>r12 : (x: U, y: V) => U +>foo((x: U, y: V) => x) : (x: U, y: V) => U +>foo : (x: T) => T +>(x: U, y: V) => x : (x: U, y: V) => U +>U : U +>V : V +>x : U +>U : U +>y : V +>V : V +>x : U + +var r13 = foo(i2); +>r13 : I2 +>foo(i2) : I2 +>foo : (x: T) => T +>i2 : I2 + +var r14 = foo(C2); +>r14 : typeof C2 +>foo(C2) : typeof C2 +>foo : (x: T) => T +>C2 : typeof C2 + +var r15 = foo(b2); +>r15 : new (x: T) => T +>foo(b2) : new (x: T) => T +>foo : (x: T) => T +>b2 : new (x: T) => T + +var r16 = foo(c2); +>r16 : { (x: T): T; (x: T, y: T): T; } +>foo(c2) : { (x: T): T; (x: T, y: T): T; } +>foo : (x: T) => T +>c2 : { (x: T): T; (x: T, y: T): T; } + +interface F2 extends Function { foo: string; } +>F2 : F2 +>Function : Function +>foo : string + +var f2: F2; +>f2 : F2 +>F2 : F2 + +var r17 = foo(f2); +>r17 : F2 +>foo(f2) : F2 +>foo : (x: T) => T +>f2 : F2 + +function foo2(x: T, y: U) { +>foo2 : void, U extends () => void>(x: T, y: U) => void +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U + + foo(x); +>foo(x) : T +>foo : (x: T) => T +>x : T + + foo(y); +>foo(y) : U +>foo : (x: T) => T +>y : U +} +//function foo2(x: T, y: U) { +// foo(x); +// foo(y); +//} diff --git a/tests/baselines/reference/functionConstraintSatisfaction2.js b/tests/baselines/reference/functionConstraintSatisfaction2.js index 5def623bcb8..e204b6c0adb 100644 --- a/tests/baselines/reference/functionConstraintSatisfaction2.js +++ b/tests/baselines/reference/functionConstraintSatisfaction2.js @@ -41,6 +41,7 @@ function fff(x: T, y: U) { //// [functionConstraintSatisfaction2.js] +// satisfaction of a constraint to Function, all of these invocations are errors unless otherwise noted function foo(x) { return x; } @@ -68,7 +69,7 @@ var r = foo2(new Function()); var r2 = foo2(function (x) { return x; }); var r6 = foo2(C); var r7 = foo2(b); -var r8 = foo2(function (x) { return x; }); +var r8 = foo2(function (x) { return x; }); // no error expected var r11 = foo2(function (x, y) { return x; }); var r13 = foo2(C2); var r14 = foo2(b2); diff --git a/tests/baselines/reference/functionConstraintSatisfaction3.js b/tests/baselines/reference/functionConstraintSatisfaction3.js index d1d764f28fe..4738cecedab 100644 --- a/tests/baselines/reference/functionConstraintSatisfaction3.js +++ b/tests/baselines/reference/functionConstraintSatisfaction3.js @@ -42,6 +42,7 @@ var r12 = foo(i2); var r15 = foo(c2); //// [functionConstraintSatisfaction3.js] +// satisfaction of a constraint to Function, no errors expected function foo(x) { return x; } diff --git a/tests/baselines/reference/functionConstraintSatisfaction3.types b/tests/baselines/reference/functionConstraintSatisfaction3.types new file mode 100644 index 00000000000..04963c36519 --- /dev/null +++ b/tests/baselines/reference/functionConstraintSatisfaction3.types @@ -0,0 +1,163 @@ +=== tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction3.ts === +// satisfaction of a constraint to Function, no errors expected + +function foo string>(x: T): T { return x; } +>foo : string>(x: T) => T +>T : T +>x : string +>x : T +>T : T +>T : T +>x : T + +interface I { +>I : I + + (): string; +} +var i: I; +>i : I +>I : I + +class C { +>C : C + + foo: string; +>foo : string +} + +var a: { (): string }; +>a : () => string + +var b: { new (): string }; +>b : new () => string + +var c: { (): string; (x): string }; +>c : { (): string; (x: any): string; } +>x : any + +var r1 = foo((x) => x); +>r1 : (x: any) => any +>foo((x) => x) : (x: any) => any +>foo : string>(x: T) => T +>(x) => x : (x: any) => any +>x : any +>x : any + +var r2 = foo((x: string) => x); +>r2 : (x: string) => string +>foo((x: string) => x) : (x: string) => string +>foo : string>(x: T) => T +>(x: string) => x : (x: string) => string +>x : string +>x : string + +var r3 = foo(function (x) { return x }); +>r3 : (x: any) => any +>foo(function (x) { return x }) : (x: any) => any +>foo : string>(x: T) => T +>function (x) { return x } : (x: any) => any +>x : any +>x : any + +var r4 = foo(function (x: string) { return x }); +>r4 : (x: string) => string +>foo(function (x: string) { return x }) : (x: string) => string +>foo : string>(x: T) => T +>function (x: string) { return x } : (x: string) => string +>x : string +>x : string + +var r5 = foo(i); +>r5 : I +>foo(i) : I +>foo : string>(x: T) => T +>i : I + +var r8 = foo(c); +>r8 : { (): string; (x: any): string; } +>foo(c) : { (): string; (x: any): string; } +>foo : string>(x: T) => T +>c : { (): string; (x: any): string; } + +interface I2 { +>I2 : I2 +>T : T + + (x: T): T; +>x : T +>T : T +>T : T +} +var i2: I2; +>i2 : I2 +>I2 : I2 + +class C2 { +>C2 : C2 +>T : T + + foo: T; +>foo : T +>T : T +} + +var a2: { (x: T): T }; +>a2 : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var b2: { new (x: T): T }; +>b2 : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var c2: { (x: T): T; (x: T, y: T): T }; +>c2 : { (x: T): T; (x: T, y: T): T; } +>T : T +>x : T +>T : T +>T : T +>T : T +>x : T +>T : T +>y : T +>T : T +>T : T + +var r9 = foo(function (x: U) { return x; }); +>r9 : (x: U) => U +>foo(function (x: U) { return x; }) : (x: U) => U +>foo : string>(x: T) => T +>function (x: U) { return x; } : (x: U) => U +>U : U +>x : U +>U : U +>x : U + +var r10 = foo((x: U) => x); +>r10 : (x: U) => U +>foo((x: U) => x) : (x: U) => U +>foo : string>(x: T) => T +>(x: U) => x : (x: U) => U +>U : U +>x : U +>U : U +>x : U + +var r12 = foo(i2); +>r12 : I2 +>foo(i2) : I2 +>foo : string>(x: T) => T +>i2 : I2 + +var r15 = foo(c2); +>r15 : { (x: T): T; (x: T, y: T): T; } +>foo(c2) : { (x: T): T; (x: T, y: T): T; } +>foo : string>(x: T) => T +>c2 : { (x: T): T; (x: T, y: T): T; } + diff --git a/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.types b/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.types new file mode 100644 index 00000000000..af751fbb0e9 --- /dev/null +++ b/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/functionDeclarationWithArgumentOfTypeFunctionTypeArray.ts === +function foo(args: { (x): number }[]) { +>foo : (args: { (x: any): number; }[]) => number +>args : { (x: any): number; }[] +>x : any + + return args.length; +>args.length : number +>args : { (x: any): number; }[] +>length : number +} + diff --git a/tests/baselines/reference/functionExpressionAndLambdaMatchesFunction.types b/tests/baselines/reference/functionExpressionAndLambdaMatchesFunction.types new file mode 100644 index 00000000000..1a8fb157032 --- /dev/null +++ b/tests/baselines/reference/functionExpressionAndLambdaMatchesFunction.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/functionExpressionAndLambdaMatchesFunction.ts === +class CDoc { +>CDoc : CDoc + + constructor() { + function doSomething(a: Function) { +>doSomething : (a: Function) => void +>a : Function +>Function : Function + } + doSomething(() => undefined); +>doSomething(() => undefined) : void +>doSomething : (a: Function) => void +>() => undefined : () => any +>undefined : undefined + + doSomething(function () { }); +>doSomething(function () { }) : void +>doSomething : (a: Function) => void +>function () { } : () => void + } +} + diff --git a/tests/baselines/reference/functionExpressionReturningItself.types b/tests/baselines/reference/functionExpressionReturningItself.types new file mode 100644 index 00000000000..409f4adea2e --- /dev/null +++ b/tests/baselines/reference/functionExpressionReturningItself.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/functionExpressionReturningItself.ts === +var x = function somefn() { return somefn; }; +>x : () => any +>function somefn() { return somefn; } : () => any +>somefn : () => any +>somefn : () => any + diff --git a/tests/baselines/reference/functionExpressionShadowedByParams.js b/tests/baselines/reference/functionExpressionShadowedByParams.js index be3f6aef6ca..e2e7d501abe 100644 --- a/tests/baselines/reference/functionExpressionShadowedByParams.js +++ b/tests/baselines/reference/functionExpressionShadowedByParams.js @@ -15,12 +15,12 @@ var x = { //// [functionExpressionShadowedByParams.js] function b1(b1) { - b1.toPrecision(2); - b1(12); + b1.toPrecision(2); // should not error + b1(12); // should error } var x = { b: function b(b) { - b.toPrecision(2); - b.apply(null, null); + b.toPrecision(2); // should not error + b.apply(null, null); // should error } }; diff --git a/tests/baselines/reference/functionImplementationErrors.js b/tests/baselines/reference/functionImplementationErrors.js index 3d1f750bb4c..90e1997f396 100644 --- a/tests/baselines/reference/functionImplementationErrors.js +++ b/tests/baselines/reference/functionImplementationErrors.js @@ -45,6 +45,7 @@ undefined === function (): number { //// [functionImplementationErrors.js] +// FunctionExpression with no return type annotation with multiple return statements with unrelated types var f1 = function () { return ''; return 3; @@ -57,6 +58,7 @@ var f3 = function () { return ''; return 3; }; +// FunctionExpression with no return type annotation with return branch of number[] and other of string[] var f4 = function () { if (true) { return ['']; @@ -65,16 +67,21 @@ var f4 = function () { return [1]; } }; +// Function implemetnation with non -void return type annotation with no return function f5() { } var m; +// Function signature with parameter initializer referencing in scope local variable function f6(n) { if (n === void 0) { n = m; } var m = 4; } +// Function signature with initializer referencing other parameter to the right function f7(n, m) { if (n === void 0) { n = m; } } +// FunctionExpression with non -void return type annotation with a throw, no return, and other code +// Should be error but isn't undefined === function () { throw undefined; var x = 4; diff --git a/tests/baselines/reference/functionImplementations.js b/tests/baselines/reference/functionImplementations.js index 9693def8c54..365ee1d7c0d 100644 --- a/tests/baselines/reference/functionImplementations.js +++ b/tests/baselines/reference/functionImplementations.js @@ -131,18 +131,22 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; +// FunctionExpression with no return type annotation and no return statement returns void var v = function () { }(); +// FunctionExpression f with no return type annotation and directly references f in its body returns any var a = function f() { return f; }; var a = function f() { return f(); }; +// FunctionExpression f with no return type annotation and indirectly references f in its body returns any var a = function f() { var x = f; return x; }; +// Two mutually recursive function implementations with no return type annotations function rec1() { return rec2(); } @@ -151,6 +155,7 @@ function rec2() { } var a = rec1(); var a = rec2(); +// Two mutually recursive function implementations with return type annotation in one function rec3() { return rec4(); } @@ -160,27 +165,34 @@ function rec4() { var n; var n = rec3(); var n = rec4(); +// FunctionExpression with no return type annotation and returns a number var n = function () { return 3; }(); +// FunctionExpression with no return type annotation and returns null var nu = null; var nu = function () { return null; }(); +// FunctionExpression with no return type annotation and returns undefined var un = undefined; var un = function () { return undefined; }(); +// FunctionExpression with no return type annotation and returns a type parameter type var n = function (x) { return x; }(4); +// FunctionExpression with no return type annotation and returns a constrained type parameter type var n = function (x) { return x; }(4); +// FunctionExpression with no return type annotation with multiple return statements with identical types var n = function () { return 3; return 5; }(); +// FunctionExpression with no return type annotation with multiple return statements with subtype relation between returns var Base = (function () { function Base() { } @@ -198,33 +210,42 @@ var b = function () { return new Base(); return new Derived(); }(); +// FunctionExpression with no return type annotation with multiple return statements with one a recursive call var a = function f() { return new Base(); return new Derived(); - return f(); + return f(); // ? }(); +// FunctionExpression with non -void return type annotation with a single throw statement undefined === function () { throw undefined; }; +// Type of 'this' in function implementation is 'any' function thisFunc() { var x = this; var x; } +// Function signature with optional parameter, no type annotation and initializer has initializer's type function opt1(n) { if (n === void 0) { n = 4; } var m = n; var m; } +// Function signature with optional parameter, no type annotation and initializer has initializer's widened type function opt2(n) { if (n === void 0) { n = { x: null, y: undefined }; } var m = n; var m; } +// Function signature with initializer referencing other parameter to the left function opt3(n, m) { if (m === void 0) { m = n; } var y = m; var y; } +// Function signature with optional parameter has correct codegen +// (tested above) +// FunctionExpression with non -void return type annotation return with no expression function f6() { return; } diff --git a/tests/baselines/reference/functionImplementations.types b/tests/baselines/reference/functionImplementations.types new file mode 100644 index 00000000000..fe03fa58d98 --- /dev/null +++ b/tests/baselines/reference/functionImplementations.types @@ -0,0 +1,297 @@ +=== tests/cases/conformance/functions/functionImplementations.ts === +// FunctionExpression with no return type annotation and no return statement returns void +var v: void = function () { } (); +>v : void +>function () { } () : void +>function () { } : () => void + +// FunctionExpression f with no return type annotation and directly references f in its body returns any +var a: any = function f() { +>a : any +>function f() { return f;} : () => any +>f : () => any + + return f; +>f : () => any + +}; +var a: any = function f() { +>a : any +>function f() { return f();} : () => any +>f : () => any + + return f(); +>f() : any +>f : () => any + +}; + +// FunctionExpression f with no return type annotation and indirectly references f in its body returns any +var a: any = function f() { +>a : any +>function f() { var x = f; return x;} : () => any +>f : () => any + + var x = f; +>x : () => any +>f : () => any + + return x; +>x : () => any + +}; + +// Two mutually recursive function implementations with no return type annotations +function rec1() { +>rec1 : () => any + + return rec2(); +>rec2() : any +>rec2 : () => any +} +function rec2() { +>rec2 : () => any + + return rec1(); +>rec1() : any +>rec1 : () => any +} +var a = rec1(); +>a : any +>rec1() : any +>rec1 : () => any + +var a = rec2(); +>a : any +>rec2() : any +>rec2 : () => any + +// Two mutually recursive function implementations with return type annotation in one +function rec3(): number { +>rec3 : () => number + + return rec4(); +>rec4() : number +>rec4 : () => number +} +function rec4() { +>rec4 : () => number + + return rec3(); +>rec3() : number +>rec3 : () => number +} +var n: number; +>n : number + +var n = rec3(); +>n : number +>rec3() : number +>rec3 : () => number + +var n = rec4(); +>n : number +>rec4() : number +>rec4 : () => number + +// FunctionExpression with no return type annotation and returns a number +var n = function () { +>n : number +>function () { return 3;} () : number +>function () { return 3;} : () => number + + return 3; +} (); + +// FunctionExpression with no return type annotation and returns null +var nu = null; +>nu : any + +var nu = function () { +>nu : any +>function () { return null;} () : any +>function () { return null;} : () => any + + return null; +} (); + +// FunctionExpression with no return type annotation and returns undefined +var un = undefined; +>un : any +>undefined : undefined + +var un = function () { +>un : any +>function () { return undefined;} () : any +>function () { return undefined;} : () => any + + return undefined; +>undefined : undefined + +} (); + +// FunctionExpression with no return type annotation and returns a type parameter type +var n = function (x: T) { +>n : number +>function (x: T) { return x;} (4) : number +>function (x: T) { return x;} : (x: T) => T +>T : T +>x : T +>T : T + + return x; +>x : T + +} (4); + +// FunctionExpression with no return type annotation and returns a constrained type parameter type +var n = function (x: T) { +>n : number +>function (x: T) { return x;} (4) : number +>function (x: T) { return x;} : (x: T) => T +>T : T +>x : T +>T : T + + return x; +>x : T + +} (4); + +// FunctionExpression with no return type annotation with multiple return statements with identical types +var n = function () { +>n : number +>function () { return 3; return 5;}() : number +>function () { return 3; return 5;} : () => number + + return 3; + return 5; +}(); + +// FunctionExpression with no return type annotation with multiple return statements with subtype relation between returns +class Base { private m; } +>Base : Base +>m : any + +class Derived extends Base { private q; } +>Derived : Derived +>Base : Base +>q : any + +var b: Base; +>b : Base +>Base : Base + +var b = function () { +>b : Base +>function () { return new Base(); return new Derived();} () : Base +>function () { return new Base(); return new Derived();} : () => Base + + return new Base(); return new Derived(); +>new Base() : Base +>Base : typeof Base +>new Derived() : Derived +>Derived : typeof Derived + +} (); + +// FunctionExpression with no return type annotation with multiple return statements with one a recursive call +var a = function f() { +>a : any +>function f() { return new Base(); return new Derived(); return f(); // ?} () : any +>function f() { return new Base(); return new Derived(); return f(); // ?} : () => any +>f : () => any + + return new Base(); return new Derived(); return f(); // ? +>new Base() : Base +>Base : typeof Base +>new Derived() : Derived +>Derived : typeof Derived +>f() : any +>f : () => any + +} (); + +// FunctionExpression with non -void return type annotation with a single throw statement +undefined === function (): number { +>undefined === function (): number { throw undefined;} : boolean +>undefined : undefined +>function (): number { throw undefined;} : () => number + + throw undefined; +>undefined : undefined + +}; + +// Type of 'this' in function implementation is 'any' +function thisFunc() { +>thisFunc : () => void + + var x = this; +>x : any +>this : any + + var x: any; +>x : any +} + +// Function signature with optional parameter, no type annotation and initializer has initializer's type +function opt1(n = 4) { +>opt1 : (n?: number) => void +>n : number + + var m = n; +>m : number +>n : number + + var m: number; +>m : number +} + +// Function signature with optional parameter, no type annotation and initializer has initializer's widened type +function opt2(n = { x: null, y: undefined }) { +>opt2 : (n?: { x: any; y: any; }) => void +>n : { x: any; y: any; } +>{ x: null, y: undefined } : { x: null; y: undefined; } +>x : any +>y : any +>undefined : undefined + + var m = n; +>m : { x: any; y: any; } +>n : { x: any; y: any; } + + var m: { x: any; y: any }; +>m : { x: any; y: any; } +>x : any +>y : any +} + +// Function signature with initializer referencing other parameter to the left +function opt3(n: number, m = n) { +>opt3 : (n: number, m?: number) => void +>n : number +>m : number +>n : number + + var y = m; +>y : number +>m : number + + var y: number; +>y : number +} + +// Function signature with optional parameter has correct codegen +// (tested above) + +// FunctionExpression with non -void return type annotation return with no expression +function f6(): number { +>f6 : () => number + + return; +} + + + + diff --git a/tests/baselines/reference/functionInIfStatementInModule.types b/tests/baselines/reference/functionInIfStatementInModule.types new file mode 100644 index 00000000000..773fd9c4186 --- /dev/null +++ b/tests/baselines/reference/functionInIfStatementInModule.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/functionInIfStatementInModule.ts === + +module Midori +>Midori : typeof Midori +{ + if (false) { + function Foo(src) +>Foo : (src: any) => void +>src : any + { + } + } +} + diff --git a/tests/baselines/reference/functionLiteral.js b/tests/baselines/reference/functionLiteral.js index 8e5e382b4a6..8ee515e8f8c 100644 --- a/tests/baselines/reference/functionLiteral.js +++ b/tests/baselines/reference/functionLiteral.js @@ -14,6 +14,7 @@ var z: { new (x: number): number; }; var z: new (x: number) => number; //// [functionLiteral.js] +// basic valid forms of function literals var x = function () { return 1; }; var x; var y; diff --git a/tests/baselines/reference/functionLiteral.types b/tests/baselines/reference/functionLiteral.types new file mode 100644 index 00000000000..7a57f0b1e1b --- /dev/null +++ b/tests/baselines/reference/functionLiteral.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/types/specifyingTypes/typeLiterals/functionLiteral.ts === +// basic valid forms of function literals + +var x = () => 1; +>x : () => number +>() => 1 : () => number + +var x: { +>x : () => number + + (): number; +} + +var y: { (x: string): string; }; +>y : (x: string) => string +>x : string + +var y: (x: string) => string; +>y : (x: string) => string +>x : string + +var y2: { (x: T): T; } = (x: T) => x +>y2 : (x: T) => T +>T : T +>x : T +>T : T +>T : T +>(x: T) => x : (x: T) => T +>T : T +>x : T +>T : T +>x : T + +var z: { new (x: number): number; }; +>z : new (x: number) => number +>x : number + +var z: new (x: number) => number; +>z : new (x: number) => number +>x : number + diff --git a/tests/baselines/reference/functionLiteralForOverloads.js b/tests/baselines/reference/functionLiteralForOverloads.js index 2db12d4fb97..1a0bc874c48 100644 --- a/tests/baselines/reference/functionLiteralForOverloads.js +++ b/tests/baselines/reference/functionLiteralForOverloads.js @@ -22,6 +22,7 @@ var f4: { } = (x) => x; //// [functionLiteralForOverloads.js] +// basic uses of function literals with overloads var f = function (x) { return x; }; var f2 = function (x) { return x; }; var f3 = function (x) { return x; }; diff --git a/tests/baselines/reference/functionLiteralForOverloads.types b/tests/baselines/reference/functionLiteralForOverloads.types new file mode 100644 index 00000000000..b04238b4ce4 --- /dev/null +++ b/tests/baselines/reference/functionLiteralForOverloads.types @@ -0,0 +1,69 @@ +=== tests/cases/conformance/types/specifyingTypes/typeLiterals/functionLiteralForOverloads.ts === +// basic uses of function literals with overloads + +var f: { +>f : { (x: string): string; (x: number): number; } + + (x: string): string; +>x : string + + (x: number): number; +>x : number + +} = (x) => x; +>(x) => x : (x: any) => any +>x : any +>x : any + +var f2: { +>f2 : { (x: string): string; (x: number): number; } + + (x: string): string; +>T : T +>x : string + + (x: number): number; +>T : T +>x : number + +} = (x) => x; +>(x) => x : (x: any) => any +>x : any +>x : any + +var f3: { +>f3 : { (x: T): string; (x: T): number; } + + (x: T): string; +>T : T +>x : T +>T : T + + (x: T): number; +>T : T +>x : T +>T : T + +} = (x) => x; +>(x) => x : (x: any) => any +>x : any +>x : any + +var f4: { +>f4 : { (x: string): T; (x: number): T; } + + (x: string): T; +>T : T +>x : string +>T : T + + (x: number): T; +>T : T +>x : number +>T : T + +} = (x) => x; +>(x) => x : (x: any) => any +>x : any +>x : any + diff --git a/tests/baselines/reference/functionLiteralForOverloads2.js b/tests/baselines/reference/functionLiteralForOverloads2.js index 93e14e8c006..f374dfb4599 100644 --- a/tests/baselines/reference/functionLiteralForOverloads2.js +++ b/tests/baselines/reference/functionLiteralForOverloads2.js @@ -29,6 +29,7 @@ var f3: { } = D; //// [functionLiteralForOverloads2.js] +// basic uses of function literals with constructor overloads var C = (function () { function C(x) { } diff --git a/tests/baselines/reference/functionLiteralForOverloads2.types b/tests/baselines/reference/functionLiteralForOverloads2.types new file mode 100644 index 00000000000..428b97faff0 --- /dev/null +++ b/tests/baselines/reference/functionLiteralForOverloads2.types @@ -0,0 +1,78 @@ +=== tests/cases/conformance/types/specifyingTypes/typeLiterals/functionLiteralForOverloads2.ts === +// basic uses of function literals with constructor overloads + +class C { +>C : C + + constructor(x: string); +>x : string + + constructor(x: number); +>x : number + + constructor(x) { } +>x : any +} + +class D { +>D : D +>T : T + + constructor(x: string); +>x : string + + constructor(x: number); +>x : number + + constructor(x) { } +>x : any +} + +var f: { +>f : { new (x: string): C; new (x: number): C; } + + new(x: string): C; +>x : string +>C : C + + new(x: number): C; +>x : number +>C : C + +} = C; +>C : typeof C + +var f2: { +>f2 : { new (x: string): C; new (x: number): C; } + + new(x: string): C; +>T : T +>x : string +>C : C + + new(x: number): C; +>T : T +>x : number +>C : C + +} = C; +>C : typeof C + +var f3: { +>f3 : { new (x: string): D; new (x: number): D; } + + new(x: string): D; +>T : T +>x : string +>D : D +>T : T + + new(x: number): D; +>T : T +>x : number +>D : D +>T : T + +} = D; +>D : typeof D + diff --git a/tests/baselines/reference/functionLiterals.js b/tests/baselines/reference/functionLiterals.js index 75b210613ee..a6431aab617 100644 --- a/tests/baselines/reference/functionLiterals.js +++ b/tests/baselines/reference/functionLiterals.js @@ -58,7 +58,9 @@ c2.func5 = c2.func4; //// [functionLiterals.js] +// PropName(ParamList):ReturnType is equivalent to PropName: { (ParamList): ReturnType } var b; +// no errors b.func1 = b.func2; b.func1 = b.func3; b.func2 = b.func1; @@ -66,9 +68,12 @@ b.func2 = b.func3; b.func3 = b.func1; b.func3 = b.func2; var c; +// no errors c.func4 = c.func5; c.func5 = c.func4; +// generic versions var b2; +// no errors b2.func1 = b2.func2; b2.func1 = b2.func3; b2.func2 = b2.func1; @@ -76,5 +81,6 @@ b2.func2 = b2.func3; b2.func3 = b2.func1; b2.func3 = b2.func2; var c2; +// no errors c2.func4 = c2.func5; c2.func5 = c2.func4; diff --git a/tests/baselines/reference/functionLiterals.types b/tests/baselines/reference/functionLiterals.types new file mode 100644 index 00000000000..ebafee491ed --- /dev/null +++ b/tests/baselines/reference/functionLiterals.types @@ -0,0 +1,244 @@ +=== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/functionLiterals.ts === +// PropName(ParamList):ReturnType is equivalent to PropName: { (ParamList): ReturnType } + +var b: { +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } + + func1(x: number): number; // Method signature +>func1 : (x: number) => number +>x : number + + func2: (x: number) => number; // Function type literal +>func2 : (x: number) => number +>x : number + + func3: { (x: number): number }; // Object type literal +>func3 : (x: number) => number +>x : number +} + +// no errors +b.func1 = b.func2; +>b.func1 = b.func2 : (x: number) => number +>b.func1 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func1 : (x: number) => number +>b.func2 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func2 : (x: number) => number + +b.func1 = b.func3; +>b.func1 = b.func3 : (x: number) => number +>b.func1 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func1 : (x: number) => number +>b.func3 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func3 : (x: number) => number + +b.func2 = b.func1; +>b.func2 = b.func1 : (x: number) => number +>b.func2 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func2 : (x: number) => number +>b.func1 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func1 : (x: number) => number + +b.func2 = b.func3; +>b.func2 = b.func3 : (x: number) => number +>b.func2 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func2 : (x: number) => number +>b.func3 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func3 : (x: number) => number + +b.func3 = b.func1; +>b.func3 = b.func1 : (x: number) => number +>b.func3 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func3 : (x: number) => number +>b.func1 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func1 : (x: number) => number + +b.func3 = b.func2; +>b.func3 = b.func2 : (x: number) => number +>b.func3 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func3 : (x: number) => number +>b.func2 : (x: number) => number +>b : { func1(x: number): number; func2: (x: number) => number; func3: (x: number) => number; } +>func2 : (x: number) => number + +var c: { +>c : { func4(x: number): number; func4(s: string): string; func5: { (x: number): number; (s: string): string; }; } + + func4(x: number): number; +>func4 : { (x: number): number; (s: string): string; } +>x : number + + func4(s: string): string; +>func4 : { (x: number): number; (s: string): string; } +>s : string + + func5: { +>func5 : { (x: number): number; (s: string): string; } + + (x: number): number; +>x : number + + (s: string): string; +>s : string + + }; +}; + +// no errors +c.func4 = c.func5; +>c.func4 = c.func5 : { (x: number): number; (s: string): string; } +>c.func4 : { (x: number): number; (s: string): string; } +>c : { func4(x: number): number; func4(s: string): string; func5: { (x: number): number; (s: string): string; }; } +>func4 : { (x: number): number; (s: string): string; } +>c.func5 : { (x: number): number; (s: string): string; } +>c : { func4(x: number): number; func4(s: string): string; func5: { (x: number): number; (s: string): string; }; } +>func5 : { (x: number): number; (s: string): string; } + +c.func5 = c.func4; +>c.func5 = c.func4 : { (x: number): number; (s: string): string; } +>c.func5 : { (x: number): number; (s: string): string; } +>c : { func4(x: number): number; func4(s: string): string; func5: { (x: number): number; (s: string): string; }; } +>func5 : { (x: number): number; (s: string): string; } +>c.func4 : { (x: number): number; (s: string): string; } +>c : { func4(x: number): number; func4(s: string): string; func5: { (x: number): number; (s: string): string; }; } +>func4 : { (x: number): number; (s: string): string; } + +// generic versions +var b2: { +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } + + func1(x: T): number; // Method signature +>func1 : (x: T) => number +>T : T +>x : T +>T : T + + func2: (x: T) => number; // Function type literal +>func2 : (x: T) => number +>T : T +>x : T +>T : T + + func3: { (x: T): number }; // Object type literal +>func3 : (x: T) => number +>T : T +>x : T +>T : T +} + +// no errors +b2.func1 = b2.func2; +>b2.func1 = b2.func2 : (x: T) => number +>b2.func1 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func1 : (x: T) => number +>b2.func2 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func2 : (x: T) => number + +b2.func1 = b2.func3; +>b2.func1 = b2.func3 : (x: T) => number +>b2.func1 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func1 : (x: T) => number +>b2.func3 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func3 : (x: T) => number + +b2.func2 = b2.func1; +>b2.func2 = b2.func1 : (x: T) => number +>b2.func2 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func2 : (x: T) => number +>b2.func1 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func1 : (x: T) => number + +b2.func2 = b2.func3; +>b2.func2 = b2.func3 : (x: T) => number +>b2.func2 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func2 : (x: T) => number +>b2.func3 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func3 : (x: T) => number + +b2.func3 = b2.func1; +>b2.func3 = b2.func1 : (x: T) => number +>b2.func3 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func3 : (x: T) => number +>b2.func1 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func1 : (x: T) => number + +b2.func3 = b2.func2; +>b2.func3 = b2.func2 : (x: T) => number +>b2.func3 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func3 : (x: T) => number +>b2.func2 : (x: T) => number +>b2 : { func1(x: T): number; func2: (x: T) => number; func3: (x: T) => number; } +>func2 : (x: T) => number + +var c2: { +>c2 : { func4(x: T): number; func4(s: T): string; func5: { (x: T): number; (s: T): string; }; } + + func4(x: T): number; +>func4 : { (x: T): number; (s: T): string; } +>T : T +>x : T +>T : T + + func4(s: T): string; +>func4 : { (x: T): number; (s: T): string; } +>T : T +>s : T +>T : T + + func5: { +>func5 : { (x: T): number; (s: T): string; } + + (x: T): number; +>T : T +>x : T +>T : T + + (s: T): string; +>T : T +>s : T +>T : T + + }; +}; + +// no errors +c2.func4 = c2.func5; +>c2.func4 = c2.func5 : { (x: T): number; (s: T): string; } +>c2.func4 : { (x: T): number; (s: T): string; } +>c2 : { func4(x: T): number; func4(s: T): string; func5: { (x: T): number; (s: T): string; }; } +>func4 : { (x: T): number; (s: T): string; } +>c2.func5 : { (x: T): number; (s: T): string; } +>c2 : { func4(x: T): number; func4(s: T): string; func5: { (x: T): number; (s: T): string; }; } +>func5 : { (x: T): number; (s: T): string; } + +c2.func5 = c2.func4; +>c2.func5 = c2.func4 : { (x: T): number; (s: T): string; } +>c2.func5 : { (x: T): number; (s: T): string; } +>c2 : { func4(x: T): number; func4(s: T): string; func5: { (x: T): number; (s: T): string; }; } +>func5 : { (x: T): number; (s: T): string; } +>c2.func4 : { (x: T): number; (s: T): string; } +>c2 : { func4(x: T): number; func4(s: T): string; func5: { (x: T): number; (s: T): string; }; } +>func4 : { (x: T): number; (s: T): string; } + diff --git a/tests/baselines/reference/functionMergedWithModule.types b/tests/baselines/reference/functionMergedWithModule.types new file mode 100644 index 00000000000..d0c711ab39a --- /dev/null +++ b/tests/baselines/reference/functionMergedWithModule.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/functionMergedWithModule.ts === +function foo(title: string) { +>foo : typeof foo +>title : string + + var x = 10; +>x : number +} + +module foo.Bar { +>foo : typeof foo +>Bar : typeof Bar + + export function f() { +>f : () => void + } +} + +module foo.Baz { +>foo : typeof foo +>Baz : typeof Baz + + export function g() { +>g : () => void + + Bar.f(); +>Bar.f() : void +>Bar.f : () => void +>Bar : typeof Bar +>f : () => void + } +} diff --git a/tests/baselines/reference/functionNameConflicts.js b/tests/baselines/reference/functionNameConflicts.js index aadd4c017e4..99ede14dfde 100644 --- a/tests/baselines/reference/functionNameConflicts.js +++ b/tests/baselines/reference/functionNameConflicts.js @@ -28,6 +28,8 @@ function overrr() { //// [functionNameConflicts.js] +//Function and variable of the same name in same declaration space +//Function overload with different name from implementation signature var M; (function (M) { function fn1() { diff --git a/tests/baselines/reference/functionOnlyHasThrow.types b/tests/baselines/reference/functionOnlyHasThrow.types new file mode 100644 index 00000000000..0f76f4be39d --- /dev/null +++ b/tests/baselines/reference/functionOnlyHasThrow.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/functionOnlyHasThrow.ts === +function clone():number { +>clone : () => number + + throw new Error("To be implemented"); +>new Error("To be implemented") : Error +>Error : { (message?: string): Error; new (message?: string): Error; prototype: Error; } +} diff --git a/tests/baselines/reference/functionOverloadAmbiguity1.js b/tests/baselines/reference/functionOverloadAmbiguity1.js index 23f81f4ecdd..d53ec68c9d9 100644 --- a/tests/baselines/reference/functionOverloadAmbiguity1.js +++ b/tests/baselines/reference/functionOverloadAmbiguity1.js @@ -15,9 +15,9 @@ function callb(a) { } callb(function (a) { a.length; -}); +}); // error, chose first overload function callb2(a) { } callb2(function (a) { a.length; -}); +}); // ok, chose first overload diff --git a/tests/baselines/reference/functionOverloadErrors.js b/tests/baselines/reference/functionOverloadErrors.js index cac3674df29..623b0e6f4dc 100644 --- a/tests/baselines/reference/functionOverloadErrors.js +++ b/tests/baselines/reference/functionOverloadErrors.js @@ -142,6 +142,7 @@ function fn11() { } function fn12() { } +//Function overloads that differ by accessibility var cls = (function () { function cls() { } @@ -151,6 +152,7 @@ var cls = (function () { }; return cls; })(); +//Function overloads with differing export var M; (function (M) { function fn1() { diff --git a/tests/baselines/reference/functionOverloads10.types b/tests/baselines/reference/functionOverloads10.types new file mode 100644 index 00000000000..8ec2bc7c589 --- /dev/null +++ b/tests/baselines/reference/functionOverloads10.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/functionOverloads10.ts === +function foo(foo:string, bar:number); +>foo : { (foo: string, bar: number): any; (foo: string): any; } +>foo : string +>bar : number + +function foo(foo:string); +>foo : { (foo: string, bar: number): any; (foo: string): any; } +>foo : string + +function foo(foo:any){ } +>foo : { (foo: string, bar: number): any; (foo: string): any; } +>foo : any + diff --git a/tests/baselines/reference/functionOverloads12.types b/tests/baselines/reference/functionOverloads12.types new file mode 100644 index 00000000000..6e4c2d9189e --- /dev/null +++ b/tests/baselines/reference/functionOverloads12.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/functionOverloads12.ts === +function foo():string; +>foo : { (): string; (): number; } + +function foo():number; +>foo : { (): string; (): number; } + +function foo():any { if (true) return ""; else return 0;} +>foo : { (): string; (): number; } + diff --git a/tests/baselines/reference/functionOverloads13.types b/tests/baselines/reference/functionOverloads13.types new file mode 100644 index 00000000000..ee65bc296e7 --- /dev/null +++ b/tests/baselines/reference/functionOverloads13.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/functionOverloads13.ts === +function foo(bar:number):string; +>foo : { (bar: number): string; (bar: number): number; } +>bar : number + +function foo(bar:number):number; +>foo : { (bar: number): string; (bar: number): number; } +>bar : number + +function foo(bar?:number):any { return "" } +>foo : { (bar: number): string; (bar: number): number; } +>bar : number + diff --git a/tests/baselines/reference/functionOverloads14.types b/tests/baselines/reference/functionOverloads14.types new file mode 100644 index 00000000000..562c43965c7 --- /dev/null +++ b/tests/baselines/reference/functionOverloads14.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/functionOverloads14.ts === +function foo():{a:number;} +>foo : { (): { a: number; }; (): { a: string; }; } +>a : number + +function foo():{a:string;} +>foo : { (): { a: number; }; (): { a: string; }; } +>a : string + +function foo():{a:any;} { return {a:1} } +>foo : { (): { a: number; }; (): { a: string; }; } +>a : any +>{a:1} : { a: number; } +>a : number + diff --git a/tests/baselines/reference/functionOverloads15.types b/tests/baselines/reference/functionOverloads15.types new file mode 100644 index 00000000000..6ca5b6709cb --- /dev/null +++ b/tests/baselines/reference/functionOverloads15.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/functionOverloads15.ts === +function foo(foo:{a:string; b:number;}):string; +>foo : { (foo: { a: string; b: number; }): string; (foo: { a: string; b: number; }): number; } +>foo : { a: string; b: number; } +>a : string +>b : number + +function foo(foo:{a:string; b:number;}):number; +>foo : { (foo: { a: string; b: number; }): string; (foo: { a: string; b: number; }): number; } +>foo : { a: string; b: number; } +>a : string +>b : number + +function foo(foo:{a:string; b?:number;}):any { return "" } +>foo : { (foo: { a: string; b: number; }): string; (foo: { a: string; b: number; }): number; } +>foo : { a: string; b?: number; } +>a : string +>b : number + diff --git a/tests/baselines/reference/functionOverloads16.types b/tests/baselines/reference/functionOverloads16.types new file mode 100644 index 00000000000..6974d0dab98 --- /dev/null +++ b/tests/baselines/reference/functionOverloads16.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/functionOverloads16.ts === +function foo(foo:{a:string;}):string; +>foo : { (foo: { a: string; }): string; (foo: { a: string; }): number; } +>foo : { a: string; } +>a : string + +function foo(foo:{a:string;}):number; +>foo : { (foo: { a: string; }): string; (foo: { a: string; }): number; } +>foo : { a: string; } +>a : string + +function foo(foo:{a:string; b?:number;}):any { return "" } +>foo : { (foo: { a: string; }): string; (foo: { a: string; }): number; } +>foo : { a: string; b?: number; } +>a : string +>b : number + diff --git a/tests/baselines/reference/functionOverloads21.types b/tests/baselines/reference/functionOverloads21.types new file mode 100644 index 00000000000..dc9e28b7b57 --- /dev/null +++ b/tests/baselines/reference/functionOverloads21.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/functionOverloads21.ts === +function foo(bar:{a:number;}[]); +>foo : { (bar: { a: number; }[]): any; (bar: { a: number; b: string; }[]): any; } +>bar : { a: number; }[] +>a : number + +function foo(bar:{a:number; b:string;}[]); +>foo : { (bar: { a: number; }[]): any; (bar: { a: number; b: string; }[]): any; } +>bar : { a: number; b: string; }[] +>a : number +>b : string + +function foo(bar:{a:any; b?:string;}[]) { return 0 } +>foo : { (bar: { a: number; }[]): any; (bar: { a: number; b: string; }[]): any; } +>bar : { a: any; b?: string; }[] +>a : any +>b : string + diff --git a/tests/baselines/reference/functionOverloads23.types b/tests/baselines/reference/functionOverloads23.types new file mode 100644 index 00000000000..40b67a78c55 --- /dev/null +++ b/tests/baselines/reference/functionOverloads23.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/functionOverloads23.ts === +function foo(bar:(b:string)=>void); +>foo : { (bar: (b: string) => void): any; (bar: (a: number) => void): any; } +>bar : (b: string) => void +>b : string + +function foo(bar:(a:number)=>void); +>foo : { (bar: (b: string) => void): any; (bar: (a: number) => void): any; } +>bar : (a: number) => void +>a : number + +function foo(bar:(a?)=>void) { return 0 } +>foo : { (bar: (b: string) => void): any; (bar: (a: number) => void): any; } +>bar : (a?: any) => void +>a : any + diff --git a/tests/baselines/reference/functionOverloads24.types b/tests/baselines/reference/functionOverloads24.types new file mode 100644 index 00000000000..f6f090d904f --- /dev/null +++ b/tests/baselines/reference/functionOverloads24.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/functionOverloads24.ts === +function foo(bar:number):(b:string)=>void; +>foo : { (bar: number): (b: string) => void; (bar: string): (a: number) => void; } +>bar : number +>b : string + +function foo(bar:string):(a:number)=>void; +>foo : { (bar: number): (b: string) => void; (bar: string): (a: number) => void; } +>bar : string +>a : number + +function foo(bar:any):(a)=>void { return function(){} } +>foo : { (bar: number): (b: string) => void; (bar: string): (a: number) => void; } +>bar : any +>a : any +>function(){} : () => void + diff --git a/tests/baselines/reference/functionOverloads25.types b/tests/baselines/reference/functionOverloads25.types new file mode 100644 index 00000000000..ace77ebc9e4 --- /dev/null +++ b/tests/baselines/reference/functionOverloads25.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/functionOverloads25.ts === +function foo():string; +>foo : { (): string; (bar: string): number; } + +function foo(bar:string):number; +>foo : { (): string; (bar: string): number; } +>bar : string + +function foo(bar?:any):any{ return '' }; +>foo : { (): string; (bar: string): number; } +>bar : any + +var x = foo(); +>x : string +>foo() : string +>foo : { (): string; (bar: string): number; } + diff --git a/tests/baselines/reference/functionOverloads26.types b/tests/baselines/reference/functionOverloads26.types new file mode 100644 index 00000000000..402003d7e7b --- /dev/null +++ b/tests/baselines/reference/functionOverloads26.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/functionOverloads26.ts === +function foo():string; +>foo : { (): string; (bar: string): number; } + +function foo(bar:string):number; +>foo : { (): string; (bar: string): number; } +>bar : string + +function foo(bar?:any):any{ return '' } +>foo : { (): string; (bar: string): number; } +>bar : any + +var x = foo('baz'); +>x : number +>foo('baz') : number +>foo : { (): string; (bar: string): number; } + diff --git a/tests/baselines/reference/functionOverloads28.types b/tests/baselines/reference/functionOverloads28.types new file mode 100644 index 00000000000..034d35c64f7 --- /dev/null +++ b/tests/baselines/reference/functionOverloads28.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/functionOverloads28.ts === +function foo():string; +>foo : { (): string; (bar: string): number; } + +function foo(bar:string):number; +>foo : { (): string; (bar: string): number; } +>bar : string + +function foo(bar?:any):any{ return '' } +>foo : { (): string; (bar: string): number; } +>bar : any + +var t:any; var x = foo(t); +>t : any +>x : number +>foo(t) : number +>foo : { (): string; (bar: string): number; } +>t : any + diff --git a/tests/baselines/reference/functionOverloads30.types b/tests/baselines/reference/functionOverloads30.types new file mode 100644 index 00000000000..80d43c952d9 --- /dev/null +++ b/tests/baselines/reference/functionOverloads30.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/functionOverloads30.ts === +function foo(bar:string):string; +>foo : { (bar: string): string; (bar: number): number; } +>bar : string + +function foo(bar:number):number; +>foo : { (bar: string): string; (bar: number): number; } +>bar : number + +function foo(bar:any):any{ return bar } +>foo : { (bar: string): string; (bar: number): number; } +>bar : any +>bar : any + +var x = foo('bar'); +>x : string +>foo('bar') : string +>foo : { (bar: string): string; (bar: number): number; } + diff --git a/tests/baselines/reference/functionOverloads31.types b/tests/baselines/reference/functionOverloads31.types new file mode 100644 index 00000000000..4d7816166bc --- /dev/null +++ b/tests/baselines/reference/functionOverloads31.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/functionOverloads31.ts === +function foo(bar:string):string; +>foo : { (bar: string): string; (bar: number): number; } +>bar : string + +function foo(bar:number):number; +>foo : { (bar: string): string; (bar: number): number; } +>bar : number + +function foo(bar:any):any{ return bar } +>foo : { (bar: string): string; (bar: number): number; } +>bar : any +>bar : any + +var x = foo(5); +>x : number +>foo(5) : number +>foo : { (bar: string): string; (bar: number): number; } + diff --git a/tests/baselines/reference/functionOverloads32.types b/tests/baselines/reference/functionOverloads32.types new file mode 100644 index 00000000000..df997e5d52a --- /dev/null +++ b/tests/baselines/reference/functionOverloads32.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/functionOverloads32.ts === +function foo(bar:string):string; +>foo : { (bar: string): string; (bar: number): number; } +>bar : string + +function foo(bar:number):number; +>foo : { (bar: string): string; (bar: number): number; } +>bar : number + +function foo(bar:any):any{ return bar } +>foo : { (bar: string): string; (bar: number): number; } +>bar : any +>bar : any + +var baz:number; var x = foo(baz); +>baz : number +>x : number +>foo(baz) : number +>foo : { (bar: string): string; (bar: number): number; } +>baz : number + diff --git a/tests/baselines/reference/functionOverloads33.types b/tests/baselines/reference/functionOverloads33.types new file mode 100644 index 00000000000..0199277180d --- /dev/null +++ b/tests/baselines/reference/functionOverloads33.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/functionOverloads33.ts === +function foo(bar:string):string; +>foo : { (bar: string): string; (bar: any): number; } +>bar : string + +function foo(bar:any):number; +>foo : { (bar: string): string; (bar: any): number; } +>bar : any + +function foo(bar:any):any{ return bar } +>foo : { (bar: string): string; (bar: any): number; } +>bar : any +>bar : any + +var x = foo(5); +>x : number +>foo(5) : number +>foo : { (bar: string): string; (bar: any): number; } + diff --git a/tests/baselines/reference/functionOverloads35.types b/tests/baselines/reference/functionOverloads35.types new file mode 100644 index 00000000000..567f9512e3d --- /dev/null +++ b/tests/baselines/reference/functionOverloads35.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/functionOverloads35.ts === +function foo(bar:{a:number;}):number; +>foo : { (bar: { a: number; }): number; (bar: { a: string; }): string; } +>bar : { a: number; } +>a : number + +function foo(bar:{a:string;}):string; +>foo : { (bar: { a: number; }): number; (bar: { a: string; }): string; } +>bar : { a: string; } +>a : string + +function foo(bar:{a:any;}):any{ return bar } +>foo : { (bar: { a: number; }): number; (bar: { a: string; }): string; } +>bar : { a: any; } +>a : any +>bar : { a: any; } + +var x = foo({a:1}); +>x : number +>foo({a:1}) : number +>foo : { (bar: { a: number; }): number; (bar: { a: string; }): string; } +>{a:1} : { a: number; } +>a : number + diff --git a/tests/baselines/reference/functionOverloads36.types b/tests/baselines/reference/functionOverloads36.types new file mode 100644 index 00000000000..8118a1c113a --- /dev/null +++ b/tests/baselines/reference/functionOverloads36.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/functionOverloads36.ts === +function foo(bar:{a:number;}):number; +>foo : { (bar: { a: number; }): number; (bar: { a: string; }): string; } +>bar : { a: number; } +>a : number + +function foo(bar:{a:string;}):string; +>foo : { (bar: { a: number; }): number; (bar: { a: string; }): string; } +>bar : { a: string; } +>a : string + +function foo(bar:{a:any;}):any{ return bar } +>foo : { (bar: { a: number; }): number; (bar: { a: string; }): string; } +>bar : { a: any; } +>a : any +>bar : { a: any; } + +var x = foo({a:'foo'}); +>x : string +>foo({a:'foo'}) : string +>foo : { (bar: { a: number; }): number; (bar: { a: string; }): string; } +>{a:'foo'} : { a: string; } +>a : string + diff --git a/tests/baselines/reference/functionOverloads38.types b/tests/baselines/reference/functionOverloads38.types new file mode 100644 index 00000000000..852191ba07f --- /dev/null +++ b/tests/baselines/reference/functionOverloads38.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/functionOverloads38.ts === +function foo(bar:{a:number;}[]):string; +>foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } +>bar : { a: number; }[] +>a : number + +function foo(bar:{a:boolean;}[]):number; +>foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } +>bar : { a: boolean; }[] +>a : boolean + +function foo(bar:{a:any;}[]):any{ return bar } +>foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } +>bar : { a: any; }[] +>a : any +>bar : { a: any; }[] + +var x = foo([{a:1}]); +>x : string +>foo([{a:1}]) : string +>foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } +>[{a:1}] : { a: number; }[] +>{a:1} : { a: number; } +>a : number + diff --git a/tests/baselines/reference/functionOverloads39.types b/tests/baselines/reference/functionOverloads39.types new file mode 100644 index 00000000000..70eee2b5163 --- /dev/null +++ b/tests/baselines/reference/functionOverloads39.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/functionOverloads39.ts === +function foo(bar:{a:number;}[]):string; +>foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } +>bar : { a: number; }[] +>a : number + +function foo(bar:{a:boolean;}[]):number; +>foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } +>bar : { a: boolean; }[] +>a : boolean + +function foo(bar:{a:any;}[]):any{ return bar } +>foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } +>bar : { a: any; }[] +>a : any +>bar : { a: any; }[] + +var x = foo([{a:true}]); +>x : number +>foo([{a:true}]) : number +>foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; } +>[{a:true}] : { a: boolean; }[] +>{a:true} : { a: boolean; } +>a : boolean + diff --git a/tests/baselines/reference/functionOverloads42.types b/tests/baselines/reference/functionOverloads42.types new file mode 100644 index 00000000000..dec6a041440 --- /dev/null +++ b/tests/baselines/reference/functionOverloads42.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/functionOverloads42.ts === +function foo(bar:{a:number;}[]):string; +>foo : { (bar: { a: number; }[]): string; (bar: { a: any; }[]): number; } +>bar : { a: number; }[] +>a : number + +function foo(bar:{a:any;}[]):number; +>foo : { (bar: { a: number; }[]): string; (bar: { a: any; }[]): number; } +>bar : { a: any; }[] +>a : any + +function foo(bar:{a:any;}[]):any{ return bar } +>foo : { (bar: { a: number; }[]): string; (bar: { a: any; }[]): number; } +>bar : { a: any; }[] +>a : any +>bar : { a: any; }[] + +var x = foo([{a:'s'}]); +>x : number +>foo([{a:'s'}]) : number +>foo : { (bar: { a: number; }[]): string; (bar: { a: any; }[]): number; } +>[{a:'s'}] : { a: any; }[] +>{a:'s'} : { a: string; } +>a : string + diff --git a/tests/baselines/reference/functionOverloads6.types b/tests/baselines/reference/functionOverloads6.types new file mode 100644 index 00000000000..6e195b1ca90 --- /dev/null +++ b/tests/baselines/reference/functionOverloads6.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/functionOverloads6.ts === +class foo { +>foo : foo + + static fnOverload(); +>fnOverload : { (): any; (foo: string): any; } + + static fnOverload(foo:string); +>fnOverload : { (): any; (foo: string): any; } +>foo : string + + static fnOverload(foo?: any){ } +>fnOverload : { (): any; (foo: string): any; } +>foo : any +} + diff --git a/tests/baselines/reference/functionOverloads7.types b/tests/baselines/reference/functionOverloads7.types new file mode 100644 index 00000000000..fed669c8943 --- /dev/null +++ b/tests/baselines/reference/functionOverloads7.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/functionOverloads7.ts === +class foo { +>foo : foo + + private bar(); +>bar : { (): any; (foo: string): any; } + + private bar(foo: string); +>bar : { (): any; (foo: string): any; } +>foo : string + + private bar(foo?: any){ return "foo" } +>bar : { (): any; (foo: string): any; } +>foo : any + + public n() { +>n : () => void + + var foo = this.bar(); +>foo : any +>this.bar() : any +>this.bar : { (): any; (foo: string): any; } +>this : foo +>bar : { (): any; (foo: string): any; } + + foo = this.bar("test"); +>foo = this.bar("test") : any +>foo : any +>this.bar("test") : any +>this.bar : { (): any; (foo: string): any; } +>this : foo +>bar : { (): any; (foo: string): any; } + } +} + diff --git a/tests/baselines/reference/functionOverloads8.types b/tests/baselines/reference/functionOverloads8.types new file mode 100644 index 00000000000..e342db5d174 --- /dev/null +++ b/tests/baselines/reference/functionOverloads8.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/functionOverloads8.ts === +function foo(); +>foo : { (): any; (foo: string): any; } + +function foo(foo:string); +>foo : { (): any; (foo: string): any; } +>foo : string + +function foo(foo?:any){ return '' } +>foo : { (): any; (foo: string): any; } +>foo : any + diff --git a/tests/baselines/reference/functionOverloads9.types b/tests/baselines/reference/functionOverloads9.types new file mode 100644 index 00000000000..a844aee7df1 --- /dev/null +++ b/tests/baselines/reference/functionOverloads9.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/functionOverloads9.ts === +function foo(foo:string); +>foo : (foo: string) => any +>foo : string + +function foo(foo?:string){ return '' }; +>foo : (foo: string) => any +>foo : string + +var x = foo('foo'); +>x : any +>foo('foo') : any +>foo : (foo: string) => any + diff --git a/tests/baselines/reference/functionOverloadsOnGenericArity1.types b/tests/baselines/reference/functionOverloadsOnGenericArity1.types new file mode 100644 index 00000000000..774be93e09a --- /dev/null +++ b/tests/baselines/reference/functionOverloadsOnGenericArity1.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/functionOverloadsOnGenericArity1.ts === +// overloading on arity not allowed +interface C { +>C : C + + f(): string; +>f : { (): string; (): string; } +>T : T + + f(): string; +>f : { (): string; (): string; } +>T : T +>U : U + + (): string; +>T : T + + (): string; +>T : T +>U : U + + new (): string; +>T : T + + new (): string; +>T : T +>U : U +} + diff --git a/tests/baselines/reference/functionOverloadsOnGenericArity2.types b/tests/baselines/reference/functionOverloadsOnGenericArity2.types new file mode 100644 index 00000000000..32e4cb702ec --- /dev/null +++ b/tests/baselines/reference/functionOverloadsOnGenericArity2.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/functionOverloadsOnGenericArity2.ts === +interface I { +>I : I + + then(p: string): string; +>then : { (p: string): string; (p: string): string; (p: string): Date; } +>p : string + + then(p: string): string; +>then : { (p: string): string; (p: string): string; (p: string): Date; } +>U : U +>p : string + + then(p: string): Date; +>then : { (p: string): string; (p: string): string; (p: string): Date; } +>U : U +>T : T +>p : string +>Date : Date +} diff --git a/tests/baselines/reference/functionOverloadsRecursiveGenericReturnType.types b/tests/baselines/reference/functionOverloadsRecursiveGenericReturnType.types new file mode 100644 index 00000000000..9fe33890b55 --- /dev/null +++ b/tests/baselines/reference/functionOverloadsRecursiveGenericReturnType.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/functionOverloadsRecursiveGenericReturnType.ts === +class B{ +>B : B +>V : V + + private id: V; +>id : V +>V : V +} + +class A{ +>A : A +>U : U + + GetEnumerator: () => B; +>GetEnumerator : () => B +>B : B +>U : U +} + +function Choice(args: T[]): A; +>Choice : { (args: T[]): A; (...v_args: T[]): A; } +>T : T +>args : T[] +>T : T +>A : A +>T : T + +function Choice(...v_args: T[]): A; +>Choice : { (args: T[]): A; (...v_args: T[]): A; } +>T : T +>v_args : T[] +>T : T +>A : A +>T : T + +function Choice(...v_args: any[]): A{ +>Choice : { (args: T[]): A; (...v_args: T[]): A; } +>T : T +>v_args : any[] +>A : A +>T : T + + return new A(); +>new A() : A +>A : typeof A +>T : T +} + diff --git a/tests/baselines/reference/functionReturn.types b/tests/baselines/reference/functionReturn.types new file mode 100644 index 00000000000..0c1ee8eafc2 --- /dev/null +++ b/tests/baselines/reference/functionReturn.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/functionReturn.ts === +function f0(): void { } +>f0 : () => void + +function f1() { +>f1 : () => void + + var n: any = f0(); +>n : any +>f0() : void +>f0 : () => void +} +function f2(): any { } +>f2 : () => any + +function f3(): string { return; } +>f3 : () => string + +function f4(): string { +>f4 : () => string + + return ''; + return; +} +function f5(): string { +>f5 : () => string + + return ''; + return undefined; +>undefined : undefined +} diff --git a/tests/baselines/reference/functionReturningItself.types b/tests/baselines/reference/functionReturningItself.types new file mode 100644 index 00000000000..597202a55e2 --- /dev/null +++ b/tests/baselines/reference/functionReturningItself.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/functionReturningItself.ts === +function somefn() { +>somefn : () => typeof somefn + + return somefn; +>somefn : () => typeof somefn +} diff --git a/tests/baselines/reference/functionSignatureAssignmentCompat1.js b/tests/baselines/reference/functionSignatureAssignmentCompat1.js index 413f78ca9fa..5de1ef53c8b 100644 --- a/tests/baselines/reference/functionSignatureAssignmentCompat1.js +++ b/tests/baselines/reference/functionSignatureAssignmentCompat1.js @@ -13,6 +13,6 @@ var e: ParserFunc = parsers.readline(); // ok //// [functionSignatureAssignmentCompat1.js] var parsers; -var c = parsers.raw; -var d = parsers.readline; -var e = parsers.readline(); +var c = parsers.raw; // ok! +var d = parsers.readline; // not ok +var e = parsers.readline(); // ok diff --git a/tests/baselines/reference/functionSubtypingOfVarArgs.types b/tests/baselines/reference/functionSubtypingOfVarArgs.types new file mode 100644 index 00000000000..ebd706e94cf --- /dev/null +++ b/tests/baselines/reference/functionSubtypingOfVarArgs.types @@ -0,0 +1,42 @@ +=== tests/cases/compiler/functionSubtypingOfVarArgs.ts === +class EventBase { +>EventBase : EventBase + + private _listeners = []; +>_listeners : any[] +>[] : undefined[] + + add(listener: (...args: any[]) => void): void { +>add : (listener: (...args: any[]) => void) => void +>listener : (...args: any[]) => void +>args : any[] + + this._listeners.push(listener); +>this._listeners.push(listener) : number +>this._listeners.push : (...items: any[]) => number +>this._listeners : any[] +>this : EventBase +>_listeners : any[] +>push : (...items: any[]) => number +>listener : (...args: any[]) => void + } +} + +class StringEvent extends EventBase { // should work +>StringEvent : StringEvent +>EventBase : EventBase + + add(listener: (items: string) => void ) { // valid, items is subtype of args +>add : (listener: (items: string) => void) => void +>listener : (items: string) => void +>items : string + + 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 new file mode 100644 index 00000000000..2fef933594d --- /dev/null +++ b/tests/baselines/reference/functionSubtypingOfVarArgs2.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/functionSubtypingOfVarArgs2.ts === +class EventBase { +>EventBase : EventBase + + private _listeners: { (...args: any[]): void; }[] = []; +>_listeners : { (...args: any[]): void; }[] +>args : any[] +>[] : { (...args: any[]): void; }[] + + add(listener: (...args: any[]) => void): void { +>add : (listener: (...args: any[]) => void) => void +>listener : (...args: any[]) => void +>args : any[] + + this._listeners.push(listener); +>this._listeners.push(listener) : number +>this._listeners.push : (...items: { (...args: any[]): void; }[]) => number +>this._listeners : { (...args: any[]): void; }[] +>this : EventBase +>_listeners : { (...args: any[]): void; }[] +>push : (...items: { (...args: any[]): void; }[]) => number +>listener : (...args: any[]) => void + } +} + +class StringEvent extends EventBase { +>StringEvent : StringEvent +>EventBase : EventBase + + add(listener: (items: string, moreitems: number) => void ) { +>add : (listener: (items: string, moreitems: number) => void) => void +>listener : (items: string, moreitems: number) => void +>items : string +>moreitems : number + + 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/functionType.types b/tests/baselines/reference/functionType.types new file mode 100644 index 00000000000..4bbce7e096a --- /dev/null +++ b/tests/baselines/reference/functionType.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/functionType.ts === +function salt() {} +>salt : () => void + +salt.apply("hello", []); +>salt.apply("hello", []) : any +>salt.apply : (thisArg: any, argArray?: any) => any +>salt : () => void +>apply : (thisArg: any, argArray?: any) => any +>[] : undefined[] + +(new Function("return 5"))(); +>(new Function("return 5"))() : any +>(new Function("return 5")) : Function +>new Function("return 5") : Function +>Function : { (...args: string[]): Function; new (...args: string[]): Function; prototype: Function; } + + + diff --git a/tests/baselines/reference/functionWithAnyReturnTypeAndNoReturnExpression.js b/tests/baselines/reference/functionWithAnyReturnTypeAndNoReturnExpression.js index f3da3c81973..6bca14b063b 100644 --- a/tests/baselines/reference/functionWithAnyReturnTypeAndNoReturnExpression.js +++ b/tests/baselines/reference/functionWithAnyReturnTypeAndNoReturnExpression.js @@ -5,6 +5,7 @@ var f2: () => any = () => { }; var f3 = (): any => { }; //// [functionWithAnyReturnTypeAndNoReturnExpression.js] +// All should be allowed function f() { } var f2 = function () { diff --git a/tests/baselines/reference/functionWithAnyReturnTypeAndNoReturnExpression.types b/tests/baselines/reference/functionWithAnyReturnTypeAndNoReturnExpression.types new file mode 100644 index 00000000000..a5096d464d8 --- /dev/null +++ b/tests/baselines/reference/functionWithAnyReturnTypeAndNoReturnExpression.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/functionWithAnyReturnTypeAndNoReturnExpression.ts === +// All should be allowed +function f(): any { } +>f : () => any + +var f2: () => any = () => { }; +>f2 : () => any +>() => { } : () => void + +var f3 = (): any => { }; +>f3 : () => any +>(): any => { } : () => any + diff --git a/tests/baselines/reference/functionWithMultipleReturnStatements.js b/tests/baselines/reference/functionWithMultipleReturnStatements.js index 5ce14263a88..347a05d0f33 100644 --- a/tests/baselines/reference/functionWithMultipleReturnStatements.js +++ b/tests/baselines/reference/functionWithMultipleReturnStatements.js @@ -64,6 +64,8 @@ function f8(x: T, y: U) { //// [functionWithMultipleReturnStatements.js] +// return type of a function with multiple returns is the BCT of each return statement +// it is an error if there is no single BCT, these are error cases function f1() { if (true) { return 1; diff --git a/tests/baselines/reference/functionWithMultipleReturnStatements2.js b/tests/baselines/reference/functionWithMultipleReturnStatements2.js index aacd83b1513..396c4a8d9c0 100644 --- a/tests/baselines/reference/functionWithMultipleReturnStatements2.js +++ b/tests/baselines/reference/functionWithMultipleReturnStatements2.js @@ -92,6 +92,8 @@ function f12() { } //// [functionWithMultipleReturnStatements2.js] +// return type of a function with multiple returns is the BCT of each return statement +// no errors expected here function f1() { if (true) { return 1; @@ -134,8 +136,16 @@ function f6(x) { return null; } } +//function f7(x: T, y: U) { +// if (true) { +// return x; +// } else { +// return y; +// } +//} var a; var b; +// returns typeof a function f9() { if (true) { return a; @@ -144,6 +154,7 @@ function f9() { return b; } } +// returns typeof b function f10() { if (true) { return b; @@ -152,6 +163,7 @@ function f10() { return a; } } +// returns number => void function f11() { if (true) { return function (x) { @@ -162,6 +174,7 @@ function f11() { }; } } +// returns Object => void function f12() { if (true) { return function (x) { diff --git a/tests/baselines/reference/functionWithMultipleReturnStatements2.types b/tests/baselines/reference/functionWithMultipleReturnStatements2.types new file mode 100644 index 00000000000..706aca40c94 --- /dev/null +++ b/tests/baselines/reference/functionWithMultipleReturnStatements2.types @@ -0,0 +1,146 @@ +=== tests/cases/conformance/types/typeRelationships/bestCommonType/functionWithMultipleReturnStatements2.ts === +// return type of a function with multiple returns is the BCT of each return statement +// no errors expected here + +function f1() { +>f1 : () => number + + if (true) { + return 1; + } else { + return null; + } +} + +function f2() { +>f2 : () => number + + if (true) { + return 1; + } else if (false) { + return null; + } else { + return 2; + } +} + +function f4() { +>f4 : () => number + + try { + return 1; + } + catch (e) { +>e : any + + return undefined; +>undefined : undefined + } + finally { + return 1; + } +} + +function f5() { +>f5 : () => Object + + return 1; + return new Object(); +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +} + +function f6(x: T) { +>f6 : (x: T) => T +>T : T +>x : T +>T : T + + if (true) { + return x; +>x : T + + } else { + return null; + } +} + +//function f7(x: T, y: U) { +// if (true) { +// return x; +// } else { +// return y; +// } +//} + +var a: { x: number; y?: number }; +>a : { x: number; y?: number; } +>x : number +>y : number + +var b: { x: number; z?: number }; +>b : { x: number; z?: number; } +>x : number +>z : number + +// returns typeof a +function f9() { +>f9 : () => { x: number; y?: number; } + + if (true) { + return a; +>a : { x: number; y?: number; } + + } else { + return b; +>b : { x: number; z?: number; } + } +} + +// returns typeof b +function f10() { +>f10 : () => { x: number; z?: number; } + + if (true) { + return b; +>b : { x: number; z?: number; } + + } else { + return a; +>a : { x: number; y?: number; } + } +} + +// returns number => void +function f11() { +>f11 : () => (x: number) => void + + if (true) { + return (x: number) => { } +>(x: number) => { } : (x: number) => void +>x : number + + } else { + return (x: Object) => { } +>(x: Object) => { } : (x: Object) => void +>x : Object +>Object : Object + } +} + +// returns Object => void +function f12() { +>f12 : () => (x: Object) => void + + if (true) { + return (x: Object) => { } +>(x: Object) => { } : (x: Object) => void +>x : Object +>Object : Object + + } else { + return (x: number) => { } +>(x: number) => { } : (x: number) => void +>x : number + } +} diff --git a/tests/baselines/reference/funduleExportedClassIsUsedBeforeDeclaration.types b/tests/baselines/reference/funduleExportedClassIsUsedBeforeDeclaration.types new file mode 100644 index 00000000000..fa457680f07 --- /dev/null +++ b/tests/baselines/reference/funduleExportedClassIsUsedBeforeDeclaration.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/funduleExportedClassIsUsedBeforeDeclaration.ts === +interface A { // interface before module declaration +>A : A + + (): B.C; // uses defined below class in module +>B : unknown +>C : B.C +} +declare function B(): B.C; // function merged with module +>B : typeof B +>B : unknown +>C : B.C + +declare module B { +>B : typeof B + + export class C { // class defined in module +>C : C + } +} +new B.C(); +>new B.C() : B.C +>B.C : typeof B.C +>B : typeof B +>C : typeof B.C + diff --git a/tests/baselines/reference/funduleOfFunctionWithoutReturnTypeAnnotation.types b/tests/baselines/reference/funduleOfFunctionWithoutReturnTypeAnnotation.types new file mode 100644 index 00000000000..9284ce3e19d --- /dev/null +++ b/tests/baselines/reference/funduleOfFunctionWithoutReturnTypeAnnotation.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/funduleOfFunctionWithoutReturnTypeAnnotation.ts === +function fn() { +>fn : typeof fn + + return fn.n; +>fn.n : number +>fn : typeof fn +>n : number +} +module fn { +>fn : typeof fn + + export var n = 1; +>n : number +} + diff --git a/tests/baselines/reference/funduleUsedAcrossFileBoundary.js b/tests/baselines/reference/funduleUsedAcrossFileBoundary.js index e2fe34248d8..ef06bdbc784 100644 --- a/tests/baselines/reference/funduleUsedAcrossFileBoundary.js +++ b/tests/baselines/reference/funduleUsedAcrossFileBoundary.js @@ -17,5 +17,5 @@ function promiseWithCancellation(promise: Q.Promise) { //// [funduleUsedAcrossFileBoundary_file1.js] //// [funduleUsedAcrossFileBoundary_file2.js] function promiseWithCancellation(promise) { - var deferred = Q.defer(); + var deferred = Q.defer(); // used to be an error } diff --git a/tests/baselines/reference/funduleUsedAcrossFileBoundary.types b/tests/baselines/reference/funduleUsedAcrossFileBoundary.types new file mode 100644 index 00000000000..09fc76a257b --- /dev/null +++ b/tests/baselines/reference/funduleUsedAcrossFileBoundary.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/funduleUsedAcrossFileBoundary_file1.ts === +declare function Q(value: T): string; +>Q : typeof Q +>T : T +>value : T +>T : T + +declare module Q { +>Q : typeof Q + + interface Promise { +>Promise : Promise +>T : T + + foo: string; +>foo : string + } + export function defer(): string; +>defer : () => string +>T : T +} + +=== tests/cases/compiler/funduleUsedAcrossFileBoundary_file2.ts === +function promiseWithCancellation(promise: Q.Promise) { +>promiseWithCancellation : (promise: Q.Promise) => void +>T : T +>promise : Q.Promise +>Q : unknown +>Promise : Q.Promise +>T : T + + var deferred = Q.defer(); // used to be an error +>deferred : string +>Q.defer() : string +>Q.defer : () => string +>Q : typeof Q +>defer : () => string +>T : T +} diff --git a/tests/baselines/reference/generatedContextualTyping.types b/tests/baselines/reference/generatedContextualTyping.types new file mode 100644 index 00000000000..57b5408eabe --- /dev/null +++ b/tests/baselines/reference/generatedContextualTyping.types @@ -0,0 +1,3705 @@ +=== tests/cases/conformance/expressions/contextualTyping/generatedContextualTyping.ts === +class Base { private p; } +>Base : Base +>p : any + +class Derived1 extends Base { private m; } +>Derived1 : Derived1 +>Base : Base +>m : any + +class Derived2 extends Base { private n; } +>Derived2 : Derived2 +>Base : Base +>n : any + +interface Genric { func(n: T[]); } +>Genric : Genric +>T : T +>func : (n: T[]) => any +>n : T[] +>T : T + +var b = new Base(), d1 = new Derived1(), d2 = new Derived2(); +>b : Base +>new Base() : Base +>Base : typeof Base +>d1 : Derived1 +>new Derived1() : Derived1 +>Derived1 : typeof Derived1 +>d2 : Derived2 +>new Derived2() : Derived2 +>Derived2 : typeof Derived2 + +var x1: () => Base[] = () => [d1, d2]; +>x1 : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x2: () => Base[] = function() { return [d1, d2] }; +>x2 : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x3: () => Base[] = function named() { return [d1, d2] }; +>x3 : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x4: { (): Base[]; } = () => [d1, d2]; +>x4 : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x5: { (): Base[]; } = function() { return [d1, d2] }; +>x5 : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x6: { (): Base[]; } = function named() { return [d1, d2] }; +>x6 : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x7: Base[] = [d1, d2]; +>x7 : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x8: Array = [d1, d2]; +>x8 : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x9: { [n: number]: Base; } = [d1, d2]; +>x9 : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x10: {n: Base[]; } = { n: [d1, d2] }; +>x10 : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x11: (s: Base[]) => any = n => { var n: Base[]; return null; }; +>x11 : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x12: Genric = { func: n => { return [d1, d2]; } }; +>x12 : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x13 { member: () => Base[] = () => [d1, d2] } +>x13 : x13 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x14 { member: () => Base[] = function() { return [d1, d2] } } +>x14 : x14 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x15 { member: () => Base[] = function named() { return [d1, d2] } } +>x15 : x15 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x16 { member: { (): Base[]; } = () => [d1, d2] } +>x16 : x16 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x17 { member: { (): Base[]; } = function() { return [d1, d2] } } +>x17 : x17 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x18 { member: { (): Base[]; } = function named() { return [d1, d2] } } +>x18 : x18 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x19 { member: Base[] = [d1, d2] } +>x19 : x19 +>member : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x20 { member: Array = [d1, d2] } +>x20 : x20 +>member : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x21 { member: { [n: number]: Base; } = [d1, d2] } +>x21 : x21 +>member : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x22 { member: {n: Base[]; } = { n: [d1, d2] } } +>x22 : x22 +>member : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x23 { member: (s: Base[]) => any = n => { var n: Base[]; return null; } } +>x23 : x23 +>member : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x24 { member: Genric = { func: n => { return [d1, d2]; } } } +>x24 : x24 +>member : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x25 { private member: () => Base[] = () => [d1, d2] } +>x25 : x25 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x26 { private member: () => Base[] = function() { return [d1, d2] } } +>x26 : x26 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x27 { private member: () => Base[] = function named() { return [d1, d2] } } +>x27 : x27 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x28 { private member: { (): Base[]; } = () => [d1, d2] } +>x28 : x28 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x29 { private member: { (): Base[]; } = function() { return [d1, d2] } } +>x29 : x29 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x30 { private member: { (): Base[]; } = function named() { return [d1, d2] } } +>x30 : x30 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x31 { private member: Base[] = [d1, d2] } +>x31 : x31 +>member : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x32 { private member: Array = [d1, d2] } +>x32 : x32 +>member : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x33 { private member: { [n: number]: Base; } = [d1, d2] } +>x33 : x33 +>member : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x34 { private member: {n: Base[]; } = { n: [d1, d2] } } +>x34 : x34 +>member : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x35 { private member: (s: Base[]) => any = n => { var n: Base[]; return null; } } +>x35 : x35 +>member : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x36 { private member: Genric = { func: n => { return [d1, d2]; } } } +>x36 : x36 +>member : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x37 { public member: () => Base[] = () => [d1, d2] } +>x37 : x37 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x38 { public member: () => Base[] = function() { return [d1, d2] } } +>x38 : x38 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x39 { public member: () => Base[] = function named() { return [d1, d2] } } +>x39 : x39 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x40 { public member: { (): Base[]; } = () => [d1, d2] } +>x40 : x40 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x41 { public member: { (): Base[]; } = function() { return [d1, d2] } } +>x41 : x41 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x42 { public member: { (): Base[]; } = function named() { return [d1, d2] } } +>x42 : x42 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x43 { public member: Base[] = [d1, d2] } +>x43 : x43 +>member : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x44 { public member: Array = [d1, d2] } +>x44 : x44 +>member : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x45 { public member: { [n: number]: Base; } = [d1, d2] } +>x45 : x45 +>member : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x46 { public member: {n: Base[]; } = { n: [d1, d2] } } +>x46 : x46 +>member : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x47 { public member: (s: Base[]) => any = n => { var n: Base[]; return null; } } +>x47 : x47 +>member : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x48 { public member: Genric = { func: n => { return [d1, d2]; } } } +>x48 : x48 +>member : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x49 { static member: () => Base[] = () => [d1, d2] } +>x49 : x49 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x50 { static member: () => Base[] = function() { return [d1, d2] } } +>x50 : x50 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x51 { static member: () => Base[] = function named() { return [d1, d2] } } +>x51 : x51 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x52 { static member: { (): Base[]; } = () => [d1, d2] } +>x52 : x52 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x53 { static member: { (): Base[]; } = function() { return [d1, d2] } } +>x53 : x53 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x54 { static member: { (): Base[]; } = function named() { return [d1, d2] } } +>x54 : x54 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x55 { static member: Base[] = [d1, d2] } +>x55 : x55 +>member : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x56 { static member: Array = [d1, d2] } +>x56 : x56 +>member : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x57 { static member: { [n: number]: Base; } = [d1, d2] } +>x57 : x57 +>member : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x58 { static member: {n: Base[]; } = { n: [d1, d2] } } +>x58 : x58 +>member : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x59 { static member: (s: Base[]) => any = n => { var n: Base[]; return null; } } +>x59 : x59 +>member : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x60 { static member: Genric = { func: n => { return [d1, d2]; } } } +>x60 : x60 +>member : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x61 { private static member: () => Base[] = () => [d1, d2] } +>x61 : x61 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x62 { private static member: () => Base[] = function() { return [d1, d2] } } +>x62 : x62 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x63 { private static member: () => Base[] = function named() { return [d1, d2] } } +>x63 : x63 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x64 { private static member: { (): Base[]; } = () => [d1, d2] } +>x64 : x64 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x65 { private static member: { (): Base[]; } = function() { return [d1, d2] } } +>x65 : x65 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x66 { private static member: { (): Base[]; } = function named() { return [d1, d2] } } +>x66 : x66 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x67 { private static member: Base[] = [d1, d2] } +>x67 : x67 +>member : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x68 { private static member: Array = [d1, d2] } +>x68 : x68 +>member : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x69 { private static member: { [n: number]: Base; } = [d1, d2] } +>x69 : x69 +>member : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x70 { private static member: {n: Base[]; } = { n: [d1, d2] } } +>x70 : x70 +>member : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x71 { private static member: (s: Base[]) => any = n => { var n: Base[]; return null; } } +>x71 : x71 +>member : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x72 { private static member: Genric = { func: n => { return [d1, d2]; } } } +>x72 : x72 +>member : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x73 { public static member: () => Base[] = () => [d1, d2] } +>x73 : x73 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x74 { public static member: () => Base[] = function() { return [d1, d2] } } +>x74 : x74 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x75 { public static member: () => Base[] = function named() { return [d1, d2] } } +>x75 : x75 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x76 { public static member: { (): Base[]; } = () => [d1, d2] } +>x76 : x76 +>member : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x77 { public static member: { (): Base[]; } = function() { return [d1, d2] } } +>x77 : x77 +>member : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x78 { public static member: { (): Base[]; } = function named() { return [d1, d2] } } +>x78 : x78 +>member : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x79 { public static member: Base[] = [d1, d2] } +>x79 : x79 +>member : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x80 { public static member: Array = [d1, d2] } +>x80 : x80 +>member : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x81 { public static member: { [n: number]: Base; } = [d1, d2] } +>x81 : x81 +>member : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x82 { public static member: {n: Base[]; } = { n: [d1, d2] } } +>x82 : x82 +>member : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x83 { public static member: (s: Base[]) => any = n => { var n: Base[]; return null; } } +>x83 : x83 +>member : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x84 { public static member: Genric = { func: n => { return [d1, d2]; } } } +>x84 : x84 +>member : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x85 { constructor(parm: () => Base[] = () => [d1, d2]) { } } +>x85 : x85 +>parm : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x86 { constructor(parm: () => Base[] = function() { return [d1, d2] }) { } } +>x86 : x86 +>parm : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x87 { constructor(parm: () => Base[] = function named() { return [d1, d2] }) { } } +>x87 : x87 +>parm : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x88 { constructor(parm: { (): Base[]; } = () => [d1, d2]) { } } +>x88 : x88 +>parm : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x89 { constructor(parm: { (): Base[]; } = function() { return [d1, d2] }) { } } +>x89 : x89 +>parm : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x90 { constructor(parm: { (): Base[]; } = function named() { return [d1, d2] }) { } } +>x90 : x90 +>parm : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x91 { constructor(parm: Base[] = [d1, d2]) { } } +>x91 : x91 +>parm : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x92 { constructor(parm: Array = [d1, d2]) { } } +>x92 : x92 +>parm : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x93 { constructor(parm: { [n: number]: Base; } = [d1, d2]) { } } +>x93 : x93 +>parm : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x94 { constructor(parm: {n: Base[]; } = { n: [d1, d2] }) { } } +>x94 : x94 +>parm : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x95 { constructor(parm: (s: Base[]) => any = n => { var n: Base[]; return null; }) { } } +>x95 : x95 +>parm : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x96 { constructor(parm: Genric = { func: n => { return [d1, d2]; } }) { } } +>x96 : x96 +>parm : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x97 { constructor(public parm: () => Base[] = () => [d1, d2]) { } } +>x97 : x97 +>parm : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x98 { constructor(public parm: () => Base[] = function() { return [d1, d2] }) { } } +>x98 : x98 +>parm : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x99 { constructor(public parm: () => Base[] = function named() { return [d1, d2] }) { } } +>x99 : x99 +>parm : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x100 { constructor(public parm: { (): Base[]; } = () => [d1, d2]) { } } +>x100 : x100 +>parm : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x101 { constructor(public parm: { (): Base[]; } = function() { return [d1, d2] }) { } } +>x101 : x101 +>parm : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x102 { constructor(public parm: { (): Base[]; } = function named() { return [d1, d2] }) { } } +>x102 : x102 +>parm : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x103 { constructor(public parm: Base[] = [d1, d2]) { } } +>x103 : x103 +>parm : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x104 { constructor(public parm: Array = [d1, d2]) { } } +>x104 : x104 +>parm : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x105 { constructor(public parm: { [n: number]: Base; } = [d1, d2]) { } } +>x105 : x105 +>parm : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x106 { constructor(public parm: {n: Base[]; } = { n: [d1, d2] }) { } } +>x106 : x106 +>parm : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x107 { constructor(public parm: (s: Base[]) => any = n => { var n: Base[]; return null; }) { } } +>x107 : x107 +>parm : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x108 { constructor(public parm: Genric = { func: n => { return [d1, d2]; } }) { } } +>x108 : x108 +>parm : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +class x109 { constructor(private parm: () => Base[] = () => [d1, d2]) { } } +>x109 : x109 +>parm : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x110 { constructor(private parm: () => Base[] = function() { return [d1, d2] }) { } } +>x110 : x110 +>parm : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x111 { constructor(private parm: () => Base[] = function named() { return [d1, d2] }) { } } +>x111 : x111 +>parm : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x112 { constructor(private parm: { (): Base[]; } = () => [d1, d2]) { } } +>x112 : x112 +>parm : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x113 { constructor(private parm: { (): Base[]; } = function() { return [d1, d2] }) { } } +>x113 : x113 +>parm : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x114 { constructor(private parm: { (): Base[]; } = function named() { return [d1, d2] }) { } } +>x114 : x114 +>parm : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x115 { constructor(private parm: Base[] = [d1, d2]) { } } +>x115 : x115 +>parm : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x116 { constructor(private parm: Array = [d1, d2]) { } } +>x116 : x116 +>parm : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x117 { constructor(private parm: { [n: number]: Base; } = [d1, d2]) { } } +>x117 : x117 +>parm : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x118 { constructor(private parm: {n: Base[]; } = { n: [d1, d2] }) { } } +>x118 : x118 +>parm : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +class x119 { constructor(private parm: (s: Base[]) => any = n => { var n: Base[]; return null; }) { } } +>x119 : x119 +>parm : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +class x120 { constructor(private parm: Genric = { func: n => { return [d1, d2]; } }) { } } +>x120 : x120 +>parm : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +function x121(parm: () => Base[] = () => [d1, d2]) { } +>x121 : (parm?: () => Base[]) => void +>parm : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x122(parm: () => Base[] = function() { return [d1, d2] }) { } +>x122 : (parm?: () => Base[]) => void +>parm : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x123(parm: () => Base[] = function named() { return [d1, d2] }) { } +>x123 : (parm?: () => Base[]) => void +>parm : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x124(parm: { (): Base[]; } = () => [d1, d2]) { } +>x124 : (parm?: () => Base[]) => void +>parm : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x125(parm: { (): Base[]; } = function() { return [d1, d2] }) { } +>x125 : (parm?: () => Base[]) => void +>parm : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x126(parm: { (): Base[]; } = function named() { return [d1, d2] }) { } +>x126 : (parm?: () => Base[]) => void +>parm : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x127(parm: Base[] = [d1, d2]) { } +>x127 : (parm?: Base[]) => void +>parm : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x128(parm: Array = [d1, d2]) { } +>x128 : (parm?: Base[]) => void +>parm : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x129(parm: { [n: number]: Base; } = [d1, d2]) { } +>x129 : (parm?: { [x: number]: Base; }) => void +>parm : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x130(parm: {n: Base[]; } = { n: [d1, d2] }) { } +>x130 : (parm?: { n: Base[]; }) => void +>parm : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x131(parm: (s: Base[]) => any = n => { var n: Base[]; return null; }) { } +>x131 : (parm?: (s: Base[]) => any) => void +>parm : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +function x132(parm: Genric = { func: n => { return [d1, d2]; } }) { } +>x132 : (parm?: Genric) => void +>parm : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +function x133(): () => Base[] { return () => [d1, d2]; } +>x133 : () => () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x134(): () => Base[] { return function() { return [d1, d2] }; } +>x134 : () => () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x135(): () => Base[] { return function named() { return [d1, d2] }; } +>x135 : () => () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x136(): { (): Base[]; } { return () => [d1, d2]; } +>x136 : () => () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x137(): { (): Base[]; } { return function() { return [d1, d2] }; } +>x137 : () => () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x138(): { (): Base[]; } { return function named() { return [d1, d2] }; } +>x138 : () => () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x139(): Base[] { return [d1, d2]; } +>x139 : () => Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x140(): Array { return [d1, d2]; } +>x140 : () => Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x141(): { [n: number]: Base; } { return [d1, d2]; } +>x141 : () => { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x142(): {n: Base[]; } { return { n: [d1, d2] }; } +>x142 : () => { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x143(): (s: Base[]) => any { return n => { var n: Base[]; return null; }; } +>x143 : () => (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +function x144(): Genric { return { func: n => { return [d1, d2]; } }; } +>x144 : () => Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +function x145(): () => Base[] { return () => [d1, d2]; return () => [d1, d2]; } +>x145 : () => () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x146(): () => Base[] { return function() { return [d1, d2] }; return function() { return [d1, d2] }; } +>x146 : () => () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x147(): () => Base[] { return function named() { return [d1, d2] }; return function named() { return [d1, d2] }; } +>x147 : () => () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x148(): { (): Base[]; } { return () => [d1, d2]; return () => [d1, d2]; } +>x148 : () => () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x149(): { (): Base[]; } { return function() { return [d1, d2] }; return function() { return [d1, d2] }; } +>x149 : () => () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x150(): { (): Base[]; } { return function named() { return [d1, d2] }; return function named() { return [d1, d2] }; } +>x150 : () => () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x151(): Base[] { return [d1, d2]; return [d1, d2]; } +>x151 : () => Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x152(): Array { return [d1, d2]; return [d1, d2]; } +>x152 : () => Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x153(): { [n: number]: Base; } { return [d1, d2]; return [d1, d2]; } +>x153 : () => { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x154(): {n: Base[]; } { return { n: [d1, d2] }; return { n: [d1, d2] }; } +>x154 : () => { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x155(): (s: Base[]) => any { return n => { var n: Base[]; return null; }; return n => { var n: Base[]; return null; }; } +>x155 : () => (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +function x156(): Genric { return { func: n => { return [d1, d2]; } }; return { func: n => { return [d1, d2]; } }; } +>x156 : () => Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x157: () => () => Base[] = () => { return () => [d1, d2]; }; +>x157 : () => () => Base[] +>Base : Base +>() => { return () => [d1, d2]; } : () => () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x158: () => () => Base[] = () => { return function() { return [d1, d2] }; }; +>x158 : () => () => Base[] +>Base : Base +>() => { return function() { return [d1, d2] }; } : () => () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x159: () => () => Base[] = () => { return function named() { return [d1, d2] }; }; +>x159 : () => () => Base[] +>Base : Base +>() => { return function named() { return [d1, d2] }; } : () => () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x160: () => { (): Base[]; } = () => { return () => [d1, d2]; }; +>x160 : () => () => Base[] +>Base : Base +>() => { return () => [d1, d2]; } : () => () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x161: () => { (): Base[]; } = () => { return function() { return [d1, d2] }; }; +>x161 : () => () => Base[] +>Base : Base +>() => { return function() { return [d1, d2] }; } : () => () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x162: () => { (): Base[]; } = () => { return function named() { return [d1, d2] }; }; +>x162 : () => () => Base[] +>Base : Base +>() => { return function named() { return [d1, d2] }; } : () => () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x163: () => Base[] = () => { return [d1, d2]; }; +>x163 : () => Base[] +>Base : Base +>() => { return [d1, d2]; } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x164: () => Array = () => { return [d1, d2]; }; +>x164 : () => Base[] +>Array : T[] +>Base : Base +>() => { return [d1, d2]; } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x165: () => { [n: number]: Base; } = () => { return [d1, d2]; }; +>x165 : () => { [x: number]: Base; } +>n : number +>Base : Base +>() => { return [d1, d2]; } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x166: () => {n: Base[]; } = () => { return { n: [d1, d2] }; }; +>x166 : () => { n: Base[]; } +>n : Base[] +>Base : Base +>() => { return { n: [d1, d2] }; } : () => { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x167: () => (s: Base[]) => any = () => { return n => { var n: Base[]; return null; }; }; +>x167 : () => (s: Base[]) => any +>s : Base[] +>Base : Base +>() => { return n => { var n: Base[]; return null; }; } : () => (n: Base[]) => any +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x168: () => Genric = () => { return { func: n => { return [d1, d2]; } }; }; +>x168 : () => Genric +>Genric : Genric +>Base : Base +>() => { return { func: n => { return [d1, d2]; } }; } : () => { func: (n: Base[]) => {}[]; } +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x169: () => () => Base[] = function() { return () => [d1, d2]; }; +>x169 : () => () => Base[] +>Base : Base +>function() { return () => [d1, d2]; } : () => () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x170: () => () => Base[] = function() { return function() { return [d1, d2] }; }; +>x170 : () => () => Base[] +>Base : Base +>function() { return function() { return [d1, d2] }; } : () => () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x171: () => () => Base[] = function() { return function named() { return [d1, d2] }; }; +>x171 : () => () => Base[] +>Base : Base +>function() { return function named() { return [d1, d2] }; } : () => () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x172: () => { (): Base[]; } = function() { return () => [d1, d2]; }; +>x172 : () => () => Base[] +>Base : Base +>function() { return () => [d1, d2]; } : () => () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x173: () => { (): Base[]; } = function() { return function() { return [d1, d2] }; }; +>x173 : () => () => Base[] +>Base : Base +>function() { return function() { return [d1, d2] }; } : () => () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x174: () => { (): Base[]; } = function() { return function named() { return [d1, d2] }; }; +>x174 : () => () => Base[] +>Base : Base +>function() { return function named() { return [d1, d2] }; } : () => () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x175: () => Base[] = function() { return [d1, d2]; }; +>x175 : () => Base[] +>Base : Base +>function() { return [d1, d2]; } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x176: () => Array = function() { return [d1, d2]; }; +>x176 : () => Base[] +>Array : T[] +>Base : Base +>function() { return [d1, d2]; } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x177: () => { [n: number]: Base; } = function() { return [d1, d2]; }; +>x177 : () => { [x: number]: Base; } +>n : number +>Base : Base +>function() { return [d1, d2]; } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x178: () => {n: Base[]; } = function() { return { n: [d1, d2] }; }; +>x178 : () => { n: Base[]; } +>n : Base[] +>Base : Base +>function() { return { n: [d1, d2] }; } : () => { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x179: () => (s: Base[]) => any = function() { return n => { var n: Base[]; return null; }; }; +>x179 : () => (s: Base[]) => any +>s : Base[] +>Base : Base +>function() { return n => { var n: Base[]; return null; }; } : () => (n: Base[]) => any +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x180: () => Genric = function() { return { func: n => { return [d1, d2]; } }; }; +>x180 : () => Genric +>Genric : Genric +>Base : Base +>function() { return { func: n => { return [d1, d2]; } }; } : () => { func: (n: Base[]) => {}[]; } +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +module x181 { var t: () => Base[] = () => [d1, d2]; } +>x181 : typeof x181 +>t : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x182 { var t: () => Base[] = function() { return [d1, d2] }; } +>x182 : typeof x182 +>t : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x183 { var t: () => Base[] = function named() { return [d1, d2] }; } +>x183 : typeof x183 +>t : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x184 { var t: { (): Base[]; } = () => [d1, d2]; } +>x184 : typeof x184 +>t : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x185 { var t: { (): Base[]; } = function() { return [d1, d2] }; } +>x185 : typeof x185 +>t : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x186 { var t: { (): Base[]; } = function named() { return [d1, d2] }; } +>x186 : typeof x186 +>t : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x187 { var t: Base[] = [d1, d2]; } +>x187 : typeof x187 +>t : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x188 { var t: Array = [d1, d2]; } +>x188 : typeof x188 +>t : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x189 { var t: { [n: number]: Base; } = [d1, d2]; } +>x189 : typeof x189 +>t : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x190 { var t: {n: Base[]; } = { n: [d1, d2] }; } +>x190 : typeof x190 +>t : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x191 { var t: (s: Base[]) => any = n => { var n: Base[]; return null; }; } +>x191 : typeof x191 +>t : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +module x192 { var t: Genric = { func: n => { return [d1, d2]; } }; } +>x192 : typeof x192 +>t : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +module x193 { export var t: () => Base[] = () => [d1, d2]; } +>x193 : typeof x193 +>t : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x194 { export var t: () => Base[] = function() { return [d1, d2] }; } +>x194 : typeof x194 +>t : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x195 { export var t: () => Base[] = function named() { return [d1, d2] }; } +>x195 : typeof x195 +>t : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x196 { export var t: { (): Base[]; } = () => [d1, d2]; } +>x196 : typeof x196 +>t : () => Base[] +>Base : Base +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x197 { export var t: { (): Base[]; } = function() { return [d1, d2] }; } +>x197 : typeof x197 +>t : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x198 { export var t: { (): Base[]; } = function named() { return [d1, d2] }; } +>x198 : typeof x198 +>t : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x199 { export var t: Base[] = [d1, d2]; } +>x199 : typeof x199 +>t : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x200 { export var t: Array = [d1, d2]; } +>x200 : typeof x200 +>t : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x201 { export var t: { [n: number]: Base; } = [d1, d2]; } +>x201 : typeof x201 +>t : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x202 { export var t: {n: Base[]; } = { n: [d1, d2] }; } +>x202 : typeof x202 +>t : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +module x203 { export var t: (s: Base[]) => any = n => { var n: Base[]; return null; }; } +>x203 : typeof x203 +>t : (s: Base[]) => any +>s : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +module x204 { export var t: Genric = { func: n => { return [d1, d2]; } }; } +>x204 : typeof x204 +>t : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x206 = <() => Base[]>function() { return [d1, d2] }; +>x206 : () => Base[] +><() => Base[]>function() { return [d1, d2] } : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x207 = <() => Base[]>function named() { return [d1, d2] }; +>x207 : () => Base[] +><() => Base[]>function named() { return [d1, d2] } : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x209 = <{ (): Base[]; }>function() { return [d1, d2] }; +>x209 : () => Base[] +><{ (): Base[]; }>function() { return [d1, d2] } : () => Base[] +>Base : Base +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x210 = <{ (): Base[]; }>function named() { return [d1, d2] }; +>x210 : () => Base[] +><{ (): Base[]; }>function named() { return [d1, d2] } : () => Base[] +>Base : Base +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x211 = [d1, d2]; +>x211 : Base[] +>[d1, d2] : Base[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x212 = >[d1, d2]; +>x212 : Base[] +>>[d1, d2] : Base[] +>Array : T[] +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x213 = <{ [n: number]: Base; }>[d1, d2]; +>x213 : { [x: number]: Base; } +><{ [n: number]: Base; }>[d1, d2] : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x214 = <{n: Base[]; } >{ n: [d1, d2] }; +>x214 : { n: Base[]; } +><{n: Base[]; } >{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x216 = >{ func: n => { return [d1, d2]; } }; +>x216 : Genric +>>{ func: n => { return [d1, d2]; } } : Genric +>Genric : Genric +>Base : Base +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x217 = (<() => Base[]>undefined) || function() { return [d1, d2] }; +>x217 : () => Base[] +>(<() => Base[]>undefined) || function() { return [d1, d2] } : () => Base[] +>(<() => Base[]>undefined) : () => Base[] +><() => Base[]>undefined : () => Base[] +>Base : Base +>undefined : undefined +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x218 = (<() => Base[]>undefined) || function named() { return [d1, d2] }; +>x218 : () => Base[] +>(<() => Base[]>undefined) || function named() { return [d1, d2] } : () => Base[] +>(<() => Base[]>undefined) : () => Base[] +><() => Base[]>undefined : () => Base[] +>Base : Base +>undefined : undefined +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x219 = (<{ (): Base[]; }>undefined) || function() { return [d1, d2] }; +>x219 : () => Base[] +>(<{ (): Base[]; }>undefined) || function() { return [d1, d2] } : () => Base[] +>(<{ (): Base[]; }>undefined) : () => Base[] +><{ (): Base[]; }>undefined : () => Base[] +>Base : Base +>undefined : undefined +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x220 = (<{ (): Base[]; }>undefined) || function named() { return [d1, d2] }; +>x220 : () => Base[] +>(<{ (): Base[]; }>undefined) || function named() { return [d1, d2] } : () => Base[] +>(<{ (): Base[]; }>undefined) : () => Base[] +><{ (): Base[]; }>undefined : () => Base[] +>Base : Base +>undefined : undefined +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x221 = (undefined) || [d1, d2]; +>x221 : Base[] +>(undefined) || [d1, d2] : Base[] +>(undefined) : Base[] +>undefined : Base[] +>Base : Base +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x222 = (>undefined) || [d1, d2]; +>x222 : Base[] +>(>undefined) || [d1, d2] : Base[] +>(>undefined) : Base[] +>>undefined : Base[] +>Array : T[] +>Base : Base +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x223 = (<{ [n: number]: Base; }>undefined) || [d1, d2]; +>x223 : { [x: number]: Base; } +>(<{ [n: number]: Base; }>undefined) || [d1, d2] : { [x: number]: Base; } +>(<{ [n: number]: Base; }>undefined) : { [x: number]: Base; } +><{ [n: number]: Base; }>undefined : { [x: number]: Base; } +>n : number +>Base : Base +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x224 = (<{n: Base[]; } >undefined) || { n: [d1, d2] }; +>x224 : { n: Base[]; } +>(<{n: Base[]; } >undefined) || { n: [d1, d2] } : { n: Base[]; } +>(<{n: Base[]; } >undefined) : { n: Base[]; } +><{n: Base[]; } >undefined : { n: Base[]; } +>n : Base[] +>Base : Base +>undefined : undefined +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x225: () => Base[]; x225 = () => [d1, d2]; +>x225 : () => Base[] +>Base : Base +>x225 = () => [d1, d2] : () => Base[] +>x225 : () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x226: () => Base[]; x226 = function() { return [d1, d2] }; +>x226 : () => Base[] +>Base : Base +>x226 = function() { return [d1, d2] } : () => Base[] +>x226 : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x227: () => Base[]; x227 = function named() { return [d1, d2] }; +>x227 : () => Base[] +>Base : Base +>x227 = function named() { return [d1, d2] } : () => Base[] +>x227 : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x228: { (): Base[]; }; x228 = () => [d1, d2]; +>x228 : () => Base[] +>Base : Base +>x228 = () => [d1, d2] : () => Base[] +>x228 : () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x229: { (): Base[]; }; x229 = function() { return [d1, d2] }; +>x229 : () => Base[] +>Base : Base +>x229 = function() { return [d1, d2] } : () => Base[] +>x229 : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x230: { (): Base[]; }; x230 = function named() { return [d1, d2] }; +>x230 : () => Base[] +>Base : Base +>x230 = function named() { return [d1, d2] } : () => Base[] +>x230 : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x231: Base[]; x231 = [d1, d2]; +>x231 : Base[] +>Base : Base +>x231 = [d1, d2] : Base[] +>x231 : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x232: Array; x232 = [d1, d2]; +>x232 : Base[] +>Array : T[] +>Base : Base +>x232 = [d1, d2] : Base[] +>x232 : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x233: { [n: number]: Base; }; x233 = [d1, d2]; +>x233 : { [x: number]: Base; } +>n : number +>Base : Base +>x233 = [d1, d2] : Base[] +>x233 : { [x: number]: Base; } +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x234: {n: Base[]; } ; x234 = { n: [d1, d2] }; +>x234 : { n: Base[]; } +>n : Base[] +>Base : Base +>x234 = { n: [d1, d2] } : { n: Base[]; } +>x234 : { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x235: (s: Base[]) => any; x235 = n => { var n: Base[]; return null; }; +>x235 : (s: Base[]) => any +>s : Base[] +>Base : Base +>x235 = n => { var n: Base[]; return null; } : (n: Base[]) => any +>x235 : (s: Base[]) => any +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x236: Genric; x236 = { func: n => { return [d1, d2]; } }; +>x236 : Genric +>Genric : Genric +>Base : Base +>x236 = { func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>x236 : Genric +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x237: { n: () => Base[]; } = { n: () => [d1, d2] }; +>x237 : { n: () => Base[]; } +>n : () => Base[] +>Base : Base +>{ n: () => [d1, d2] } : { n: () => Base[]; } +>n : () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x238: { n: () => Base[]; } = { n: function() { return [d1, d2] } }; +>x238 : { n: () => Base[]; } +>n : () => Base[] +>Base : Base +>{ n: function() { return [d1, d2] } } : { n: () => Base[]; } +>n : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x239: { n: () => Base[]; } = { n: function named() { return [d1, d2] } }; +>x239 : { n: () => Base[]; } +>n : () => Base[] +>Base : Base +>{ n: function named() { return [d1, d2] } } : { n: () => Base[]; } +>n : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x240: { n: { (): Base[]; }; } = { n: () => [d1, d2] }; +>x240 : { n: () => Base[]; } +>n : () => Base[] +>Base : Base +>{ n: () => [d1, d2] } : { n: () => Base[]; } +>n : () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x241: { n: { (): Base[]; }; } = { n: function() { return [d1, d2] } }; +>x241 : { n: () => Base[]; } +>n : () => Base[] +>Base : Base +>{ n: function() { return [d1, d2] } } : { n: () => Base[]; } +>n : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x242: { n: { (): Base[]; }; } = { n: function named() { return [d1, d2] } }; +>x242 : { n: () => Base[]; } +>n : () => Base[] +>Base : Base +>{ n: function named() { return [d1, d2] } } : { n: () => Base[]; } +>n : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x243: { n: Base[]; } = { n: [d1, d2] }; +>x243 : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x244: { n: Array; } = { n: [d1, d2] }; +>x244 : { n: Base[]; } +>n : Base[] +>Array : T[] +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x245: { n: { [n: number]: Base; }; } = { n: [d1, d2] }; +>x245 : { n: { [x: number]: Base; }; } +>n : { [x: number]: Base; } +>n : number +>Base : Base +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x246: { n: {n: Base[]; } ; } = { n: { n: [d1, d2] } }; +>x246 : { n: { n: Base[]; }; } +>n : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: { n: [d1, d2] } } : { n: { n: Base[]; }; } +>n : { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x247: { n: (s: Base[]) => any; } = { n: n => { var n: Base[]; return null; } }; +>x247 : { n: (s: Base[]) => any; } +>n : (s: Base[]) => any +>s : Base[] +>Base : Base +>{ n: n => { var n: Base[]; return null; } } : { n: (n: Base[]) => any; } +>n : (n: Base[]) => any +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x248: { n: Genric; } = { n: { func: n => { return [d1, d2]; } } }; +>x248 : { n: Genric; } +>n : Genric +>Genric : Genric +>Base : Base +>{ n: { func: n => { return [d1, d2]; } } } : { n: { func: (n: Base[]) => {}[]; }; } +>n : { func: (n: Base[]) => {}[]; } +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x252: { (): Base[]; }[] = [() => [d1, d2]]; +>x252 : { (): Base[]; }[] +>Base : Base +>[() => [d1, d2]] : { (): Base[]; }[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x253: { (): Base[]; }[] = [function() { return [d1, d2] }]; +>x253 : { (): Base[]; }[] +>Base : Base +>[function() { return [d1, d2] }] : { (): Base[]; }[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x254: { (): Base[]; }[] = [function named() { return [d1, d2] }]; +>x254 : { (): Base[]; }[] +>Base : Base +>[function named() { return [d1, d2] }] : { (): Base[]; }[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x255: Base[][] = [[d1, d2]]; +>x255 : Base[][] +>Base : Base +>[[d1, d2]] : Base[][] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x256: Array[] = [[d1, d2]]; +>x256 : Base[][] +>Array : T[] +>Base : Base +>[[d1, d2]] : Base[][] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x257: { [n: number]: Base; }[] = [[d1, d2]]; +>x257 : { [x: number]: Base; }[] +>n : number +>Base : Base +>[[d1, d2]] : { [x: number]: Base; }[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x258: {n: Base[]; } [] = [{ n: [d1, d2] }]; +>x258 : { n: Base[]; }[] +>n : Base[] +>Base : Base +>[{ n: [d1, d2] }] : { n: Base[]; }[] +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x260: Genric[] = [{ func: n => { return [d1, d2]; } }]; +>x260 : Genric[] +>Genric : Genric +>Base : Base +>[{ func: n => { return [d1, d2]; } }] : Genric[] +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x261: () => Base[] = function() { return [d1, d2] } || undefined; +>x261 : () => Base[] +>Base : Base +>function() { return [d1, d2] } || undefined : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x262: () => Base[] = function named() { return [d1, d2] } || undefined; +>x262 : () => Base[] +>Base : Base +>function named() { return [d1, d2] } || undefined : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x263: { (): Base[]; } = function() { return [d1, d2] } || undefined; +>x263 : () => Base[] +>Base : Base +>function() { return [d1, d2] } || undefined : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x264: { (): Base[]; } = function named() { return [d1, d2] } || undefined; +>x264 : () => Base[] +>Base : Base +>function named() { return [d1, d2] } || undefined : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x265: Base[] = [d1, d2] || undefined; +>x265 : Base[] +>Base : Base +>[d1, d2] || undefined : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x266: Array = [d1, d2] || undefined; +>x266 : Base[] +>Array : T[] +>Base : Base +>[d1, d2] || undefined : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x267: { [n: number]: Base; } = [d1, d2] || undefined; +>x267 : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] || undefined : { [x: number]: Base; } +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x268: {n: Base[]; } = { n: [d1, d2] } || undefined; +>x268 : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } || undefined : { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x269: () => Base[] = undefined || function() { return [d1, d2] }; +>x269 : () => Base[] +>Base : Base +>undefined || function() { return [d1, d2] } : () => Base[] +>undefined : undefined +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x270: () => Base[] = undefined || function named() { return [d1, d2] }; +>x270 : () => Base[] +>Base : Base +>undefined || function named() { return [d1, d2] } : () => Base[] +>undefined : undefined +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x271: { (): Base[]; } = undefined || function() { return [d1, d2] }; +>x271 : () => Base[] +>Base : Base +>undefined || function() { return [d1, d2] } : () => Base[] +>undefined : undefined +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x272: { (): Base[]; } = undefined || function named() { return [d1, d2] }; +>x272 : () => Base[] +>Base : Base +>undefined || function named() { return [d1, d2] } : () => Base[] +>undefined : undefined +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x273: Base[] = undefined || [d1, d2]; +>x273 : Base[] +>Base : Base +>undefined || [d1, d2] : Base[] +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x274: Array = undefined || [d1, d2]; +>x274 : Base[] +>Array : T[] +>Base : Base +>undefined || [d1, d2] : Base[] +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x275: { [n: number]: Base; } = undefined || [d1, d2]; +>x275 : { [x: number]: Base; } +>n : number +>Base : Base +>undefined || [d1, d2] : { [x: number]: Base; } +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x276: {n: Base[]; } = undefined || { n: [d1, d2] }; +>x276 : { n: Base[]; } +>n : Base[] +>Base : Base +>undefined || { n: [d1, d2] } : { n: Base[]; } +>undefined : undefined +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x277: () => Base[] = function() { return [d1, d2] } || function() { return [d1, d2] }; +>x277 : () => Base[] +>Base : Base +>function() { return [d1, d2] } || function() { return [d1, d2] } : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x278: () => Base[] = function named() { return [d1, d2] } || function named() { return [d1, d2] }; +>x278 : () => Base[] +>Base : Base +>function named() { return [d1, d2] } || function named() { return [d1, d2] } : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x279: { (): Base[]; } = function() { return [d1, d2] } || function() { return [d1, d2] }; +>x279 : () => Base[] +>Base : Base +>function() { return [d1, d2] } || function() { return [d1, d2] } : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x280: { (): Base[]; } = function named() { return [d1, d2] } || function named() { return [d1, d2] }; +>x280 : () => Base[] +>Base : Base +>function named() { return [d1, d2] } || function named() { return [d1, d2] } : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x281: Base[] = [d1, d2] || [d1, d2]; +>x281 : Base[] +>Base : Base +>[d1, d2] || [d1, d2] : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x282: Array = [d1, d2] || [d1, d2]; +>x282 : Base[] +>Array : T[] +>Base : Base +>[d1, d2] || [d1, d2] : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x283: { [n: number]: Base; } = [d1, d2] || [d1, d2]; +>x283 : { [x: number]: Base; } +>n : number +>Base : Base +>[d1, d2] || [d1, d2] : { [x: number]: Base; } +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x284: {n: Base[]; } = { n: [d1, d2] } || { n: [d1, d2] }; +>x284 : { n: Base[]; } +>n : Base[] +>Base : Base +>{ n: [d1, d2] } || { n: [d1, d2] } : { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x285: () => Base[] = true ? () => [d1, d2] : () => [d1, d2]; +>x285 : () => Base[] +>Base : Base +>true ? () => [d1, d2] : () => [d1, d2] : () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x286: () => Base[] = true ? function() { return [d1, d2] } : function() { return [d1, d2] }; +>x286 : () => Base[] +>Base : Base +>true ? function() { return [d1, d2] } : function() { return [d1, d2] } : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x287: () => Base[] = true ? function named() { return [d1, d2] } : function named() { return [d1, d2] }; +>x287 : () => Base[] +>Base : Base +>true ? function named() { return [d1, d2] } : function named() { return [d1, d2] } : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x288: { (): Base[]; } = true ? () => [d1, d2] : () => [d1, d2]; +>x288 : () => Base[] +>Base : Base +>true ? () => [d1, d2] : () => [d1, d2] : () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x289: { (): Base[]; } = true ? function() { return [d1, d2] } : function() { return [d1, d2] }; +>x289 : () => Base[] +>Base : Base +>true ? function() { return [d1, d2] } : function() { return [d1, d2] } : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x290: { (): Base[]; } = true ? function named() { return [d1, d2] } : function named() { return [d1, d2] }; +>x290 : () => Base[] +>Base : Base +>true ? function named() { return [d1, d2] } : function named() { return [d1, d2] } : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x291: Base[] = true ? [d1, d2] : [d1, d2]; +>x291 : Base[] +>Base : Base +>true ? [d1, d2] : [d1, d2] : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x292: Array = true ? [d1, d2] : [d1, d2]; +>x292 : Base[] +>Array : T[] +>Base : Base +>true ? [d1, d2] : [d1, d2] : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x293: { [n: number]: Base; } = true ? [d1, d2] : [d1, d2]; +>x293 : { [x: number]: Base; } +>n : number +>Base : Base +>true ? [d1, d2] : [d1, d2] : { [x: number]: Base; } +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x294: {n: Base[]; } = true ? { n: [d1, d2] } : { n: [d1, d2] }; +>x294 : { n: Base[]; } +>n : Base[] +>Base : Base +>true ? { n: [d1, d2] } : { n: [d1, d2] } : { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x295: (s: Base[]) => any = true ? n => { var n: Base[]; return null; } : n => { var n: Base[]; return null; }; +>x295 : (s: Base[]) => any +>s : Base[] +>Base : Base +>true ? n => { var n: Base[]; return null; } : n => { var n: Base[]; return null; } : (s: Base[]) => any +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x296: Genric = true ? { func: n => { return [d1, d2]; } } : { func: n => { return [d1, d2]; } }; +>x296 : Genric +>Genric : Genric +>Base : Base +>true ? { func: n => { return [d1, d2]; } } : { func: n => { return [d1, d2]; } } : Genric +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x297: () => Base[] = true ? undefined : () => [d1, d2]; +>x297 : () => Base[] +>Base : Base +>true ? undefined : () => [d1, d2] : () => Base[] +>undefined : undefined +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x298: () => Base[] = true ? undefined : function() { return [d1, d2] }; +>x298 : () => Base[] +>Base : Base +>true ? undefined : function() { return [d1, d2] } : () => Base[] +>undefined : undefined +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x299: () => Base[] = true ? undefined : function named() { return [d1, d2] }; +>x299 : () => Base[] +>Base : Base +>true ? undefined : function named() { return [d1, d2] } : () => Base[] +>undefined : undefined +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x300: { (): Base[]; } = true ? undefined : () => [d1, d2]; +>x300 : () => Base[] +>Base : Base +>true ? undefined : () => [d1, d2] : () => Base[] +>undefined : undefined +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x301: { (): Base[]; } = true ? undefined : function() { return [d1, d2] }; +>x301 : () => Base[] +>Base : Base +>true ? undefined : function() { return [d1, d2] } : () => Base[] +>undefined : undefined +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x302: { (): Base[]; } = true ? undefined : function named() { return [d1, d2] }; +>x302 : () => Base[] +>Base : Base +>true ? undefined : function named() { return [d1, d2] } : () => Base[] +>undefined : undefined +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x303: Base[] = true ? undefined : [d1, d2]; +>x303 : Base[] +>Base : Base +>true ? undefined : [d1, d2] : Base[] +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x304: Array = true ? undefined : [d1, d2]; +>x304 : Base[] +>Array : T[] +>Base : Base +>true ? undefined : [d1, d2] : Base[] +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x305: { [n: number]: Base; } = true ? undefined : [d1, d2]; +>x305 : { [x: number]: Base; } +>n : number +>Base : Base +>true ? undefined : [d1, d2] : { [x: number]: Base; } +>undefined : undefined +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x306: {n: Base[]; } = true ? undefined : { n: [d1, d2] }; +>x306 : { n: Base[]; } +>n : Base[] +>Base : Base +>true ? undefined : { n: [d1, d2] } : { n: Base[]; } +>undefined : undefined +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x307: (s: Base[]) => any = true ? undefined : n => { var n: Base[]; return null; }; +>x307 : (s: Base[]) => any +>s : Base[] +>Base : Base +>true ? undefined : n => { var n: Base[]; return null; } : (s: Base[]) => any +>undefined : undefined +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x308: Genric = true ? undefined : { func: n => { return [d1, d2]; } }; +>x308 : Genric +>Genric : Genric +>Base : Base +>true ? undefined : { func: n => { return [d1, d2]; } } : Genric +>undefined : undefined +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x309: () => Base[] = true ? () => [d1, d2] : undefined; +>x309 : () => Base[] +>Base : Base +>true ? () => [d1, d2] : undefined : () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x310: () => Base[] = true ? function() { return [d1, d2] } : undefined; +>x310 : () => Base[] +>Base : Base +>true ? function() { return [d1, d2] } : undefined : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x311: () => Base[] = true ? function named() { return [d1, d2] } : undefined; +>x311 : () => Base[] +>Base : Base +>true ? function named() { return [d1, d2] } : undefined : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x312: { (): Base[]; } = true ? () => [d1, d2] : undefined; +>x312 : () => Base[] +>Base : Base +>true ? () => [d1, d2] : undefined : () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x313: { (): Base[]; } = true ? function() { return [d1, d2] } : undefined; +>x313 : () => Base[] +>Base : Base +>true ? function() { return [d1, d2] } : undefined : () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x314: { (): Base[]; } = true ? function named() { return [d1, d2] } : undefined; +>x314 : () => Base[] +>Base : Base +>true ? function named() { return [d1, d2] } : undefined : () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x315: Base[] = true ? [d1, d2] : undefined; +>x315 : Base[] +>Base : Base +>true ? [d1, d2] : undefined : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x316: Array = true ? [d1, d2] : undefined; +>x316 : Base[] +>Array : T[] +>Base : Base +>true ? [d1, d2] : undefined : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x317: { [n: number]: Base; } = true ? [d1, d2] : undefined; +>x317 : { [x: number]: Base; } +>n : number +>Base : Base +>true ? [d1, d2] : undefined : { [x: number]: Base; } +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x318: {n: Base[]; } = true ? { n: [d1, d2] } : undefined; +>x318 : { n: Base[]; } +>n : Base[] +>Base : Base +>true ? { n: [d1, d2] } : undefined : { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +var x319: (s: Base[]) => any = true ? n => { var n: Base[]; return null; } : undefined; +>x319 : (s: Base[]) => any +>s : Base[] +>Base : Base +>true ? n => { var n: Base[]; return null; } : undefined : (s: Base[]) => any +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base +>undefined : undefined + +var x320: Genric = true ? { func: n => { return [d1, d2]; } } : undefined; +>x320 : Genric +>Genric : Genric +>Base : Base +>true ? { func: n => { return [d1, d2]; } } : undefined : Genric +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 +>undefined : undefined + +function x321(n: () => Base[]) { }; x321(() => [d1, d2]); +>x321 : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x321(() => [d1, d2]) : void +>x321 : (n: () => Base[]) => void +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x322(n: () => Base[]) { }; x322(function() { return [d1, d2] }); +>x322 : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x322(function() { return [d1, d2] }) : void +>x322 : (n: () => Base[]) => void +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x323(n: () => Base[]) { }; x323(function named() { return [d1, d2] }); +>x323 : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x323(function named() { return [d1, d2] }) : void +>x323 : (n: () => Base[]) => void +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x324(n: { (): Base[]; }) { }; x324(() => [d1, d2]); +>x324 : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x324(() => [d1, d2]) : void +>x324 : (n: () => Base[]) => void +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x325(n: { (): Base[]; }) { }; x325(function() { return [d1, d2] }); +>x325 : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x325(function() { return [d1, d2] }) : void +>x325 : (n: () => Base[]) => void +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x326(n: { (): Base[]; }) { }; x326(function named() { return [d1, d2] }); +>x326 : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x326(function named() { return [d1, d2] }) : void +>x326 : (n: () => Base[]) => void +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x327(n: Base[]) { }; x327([d1, d2]); +>x327 : (n: Base[]) => void +>n : Base[] +>Base : Base +>x327([d1, d2]) : void +>x327 : (n: Base[]) => void +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x328(n: Array) { }; x328([d1, d2]); +>x328 : (n: Base[]) => void +>n : Base[] +>Array : T[] +>Base : Base +>x328([d1, d2]) : void +>x328 : (n: Base[]) => void +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x329(n: { [n: number]: Base; }) { }; x329([d1, d2]); +>x329 : (n: { [x: number]: Base; }) => void +>n : { [x: number]: Base; } +>n : number +>Base : Base +>x329([d1, d2]) : void +>x329 : (n: { [x: number]: Base; }) => void +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x330(n: {n: Base[]; } ) { }; x330({ n: [d1, d2] }); +>x330 : (n: { n: Base[]; }) => void +>n : { n: Base[]; } +>n : Base[] +>Base : Base +>x330({ n: [d1, d2] }) : void +>x330 : (n: { n: Base[]; }) => void +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +function x331(n: (s: Base[]) => any) { }; x331(n => { var n: Base[]; return null; }); +>x331 : (n: (s: Base[]) => any) => void +>n : (s: Base[]) => any +>s : Base[] +>Base : Base +>x331(n => { var n: Base[]; return null; }) : void +>x331 : (n: (s: Base[]) => any) => void +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +function x332(n: Genric) { }; x332({ func: n => { return [d1, d2]; } }); +>x332 : (n: Genric) => void +>n : Genric +>Genric : Genric +>Base : Base +>x332({ func: n => { return [d1, d2]; } }) : void +>x332 : (n: Genric) => void +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x333 = (n: () => Base[]) => n; x333(() => [d1, d2]); +>x333 : (n: () => Base[]) => () => Base[] +>(n: () => Base[]) => n : (n: () => Base[]) => () => Base[] +>n : () => Base[] +>Base : Base +>n : () => Base[] +>x333(() => [d1, d2]) : () => Base[] +>x333 : (n: () => Base[]) => () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x334 = (n: () => Base[]) => n; x334(function() { return [d1, d2] }); +>x334 : (n: () => Base[]) => () => Base[] +>(n: () => Base[]) => n : (n: () => Base[]) => () => Base[] +>n : () => Base[] +>Base : Base +>n : () => Base[] +>x334(function() { return [d1, d2] }) : () => Base[] +>x334 : (n: () => Base[]) => () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x335 = (n: () => Base[]) => n; x335(function named() { return [d1, d2] }); +>x335 : (n: () => Base[]) => () => Base[] +>(n: () => Base[]) => n : (n: () => Base[]) => () => Base[] +>n : () => Base[] +>Base : Base +>n : () => Base[] +>x335(function named() { return [d1, d2] }) : () => Base[] +>x335 : (n: () => Base[]) => () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x336 = (n: { (): Base[]; }) => n; x336(() => [d1, d2]); +>x336 : (n: () => Base[]) => () => Base[] +>(n: { (): Base[]; }) => n : (n: () => Base[]) => () => Base[] +>n : () => Base[] +>Base : Base +>n : () => Base[] +>x336(() => [d1, d2]) : () => Base[] +>x336 : (n: () => Base[]) => () => Base[] +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x337 = (n: { (): Base[]; }) => n; x337(function() { return [d1, d2] }); +>x337 : (n: () => Base[]) => () => Base[] +>(n: { (): Base[]; }) => n : (n: () => Base[]) => () => Base[] +>n : () => Base[] +>Base : Base +>n : () => Base[] +>x337(function() { return [d1, d2] }) : () => Base[] +>x337 : (n: () => Base[]) => () => Base[] +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x338 = (n: { (): Base[]; }) => n; x338(function named() { return [d1, d2] }); +>x338 : (n: () => Base[]) => () => Base[] +>(n: { (): Base[]; }) => n : (n: () => Base[]) => () => Base[] +>n : () => Base[] +>Base : Base +>n : () => Base[] +>x338(function named() { return [d1, d2] }) : () => Base[] +>x338 : (n: () => Base[]) => () => Base[] +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x339 = (n: Base[]) => n; x339([d1, d2]); +>x339 : (n: Base[]) => Base[] +>(n: Base[]) => n : (n: Base[]) => Base[] +>n : Base[] +>Base : Base +>n : Base[] +>x339([d1, d2]) : Base[] +>x339 : (n: Base[]) => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x340 = (n: Array) => n; x340([d1, d2]); +>x340 : (n: Base[]) => Base[] +>(n: Array) => n : (n: Base[]) => Base[] +>n : Base[] +>Array : T[] +>Base : Base +>n : Base[] +>x340([d1, d2]) : Base[] +>x340 : (n: Base[]) => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x341 = (n: { [n: number]: Base; }) => n; x341([d1, d2]); +>x341 : (n: { [x: number]: Base; }) => { [x: number]: Base; } +>(n: { [n: number]: Base; }) => n : (n: { [x: number]: Base; }) => { [x: number]: Base; } +>n : { [x: number]: Base; } +>n : number +>Base : Base +>n : { [x: number]: Base; } +>x341([d1, d2]) : { [x: number]: Base; } +>x341 : (n: { [x: number]: Base; }) => { [x: number]: Base; } +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x342 = (n: {n: Base[]; } ) => n; x342({ n: [d1, d2] }); +>x342 : (n: { n: Base[]; }) => { n: Base[]; } +>(n: {n: Base[]; } ) => n : (n: { n: Base[]; }) => { n: Base[]; } +>n : { n: Base[]; } +>n : Base[] +>Base : Base +>n : { n: Base[]; } +>x342({ n: [d1, d2] }) : { n: Base[]; } +>x342 : (n: { n: Base[]; }) => { n: Base[]; } +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x343 = (n: (s: Base[]) => any) => n; x343(n => { var n: Base[]; return null; }); +>x343 : (n: (s: Base[]) => any) => (s: Base[]) => any +>(n: (s: Base[]) => any) => n : (n: (s: Base[]) => any) => (s: Base[]) => any +>n : (s: Base[]) => any +>s : Base[] +>Base : Base +>n : (s: Base[]) => any +>x343(n => { var n: Base[]; return null; }) : (s: Base[]) => any +>x343 : (n: (s: Base[]) => any) => (s: Base[]) => any +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x344 = (n: Genric) => n; x344({ func: n => { return [d1, d2]; } }); +>x344 : (n: Genric) => Genric +>(n: Genric) => n : (n: Genric) => Genric +>n : Genric +>Genric : Genric +>Base : Base +>n : Genric +>x344({ func: n => { return [d1, d2]; } }) : Genric +>x344 : (n: Genric) => Genric +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + +var x345 = function(n: () => Base[]) { }; x345(() => [d1, d2]); +>x345 : (n: () => Base[]) => void +>function(n: () => Base[]) { } : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x345(() => [d1, d2]) : void +>x345 : (n: () => Base[]) => void +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x346 = function(n: () => Base[]) { }; x346(function() { return [d1, d2] }); +>x346 : (n: () => Base[]) => void +>function(n: () => Base[]) { } : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x346(function() { return [d1, d2] }) : void +>x346 : (n: () => Base[]) => void +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x347 = function(n: () => Base[]) { }; x347(function named() { return [d1, d2] }); +>x347 : (n: () => Base[]) => void +>function(n: () => Base[]) { } : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x347(function named() { return [d1, d2] }) : void +>x347 : (n: () => Base[]) => void +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x348 = function(n: { (): Base[]; }) { }; x348(() => [d1, d2]); +>x348 : (n: () => Base[]) => void +>function(n: { (): Base[]; }) { } : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x348(() => [d1, d2]) : void +>x348 : (n: () => Base[]) => void +>() => [d1, d2] : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x349 = function(n: { (): Base[]; }) { }; x349(function() { return [d1, d2] }); +>x349 : (n: () => Base[]) => void +>function(n: { (): Base[]; }) { } : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x349(function() { return [d1, d2] }) : void +>x349 : (n: () => Base[]) => void +>function() { return [d1, d2] } : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x350 = function(n: { (): Base[]; }) { }; x350(function named() { return [d1, d2] }); +>x350 : (n: () => Base[]) => void +>function(n: { (): Base[]; }) { } : (n: () => Base[]) => void +>n : () => Base[] +>Base : Base +>x350(function named() { return [d1, d2] }) : void +>x350 : (n: () => Base[]) => void +>function named() { return [d1, d2] } : () => Base[] +>named : () => Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x351 = function(n: Base[]) { }; x351([d1, d2]); +>x351 : (n: Base[]) => void +>function(n: Base[]) { } : (n: Base[]) => void +>n : Base[] +>Base : Base +>x351([d1, d2]) : void +>x351 : (n: Base[]) => void +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x352 = function(n: Array) { }; x352([d1, d2]); +>x352 : (n: Base[]) => void +>function(n: Array) { } : (n: Base[]) => void +>n : Base[] +>Array : T[] +>Base : Base +>x352([d1, d2]) : void +>x352 : (n: Base[]) => void +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x353 = function(n: { [n: number]: Base; }) { }; x353([d1, d2]); +>x353 : (n: { [x: number]: Base; }) => void +>function(n: { [n: number]: Base; }) { } : (n: { [x: number]: Base; }) => void +>n : { [x: number]: Base; } +>n : number +>Base : Base +>x353([d1, d2]) : void +>x353 : (n: { [x: number]: Base; }) => void +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x354 = function(n: {n: Base[]; } ) { }; x354({ n: [d1, d2] }); +>x354 : (n: { n: Base[]; }) => void +>function(n: {n: Base[]; } ) { } : (n: { n: Base[]; }) => void +>n : { n: Base[]; } +>n : Base[] +>Base : Base +>x354({ n: [d1, d2] }) : void +>x354 : (n: { n: Base[]; }) => void +>{ n: [d1, d2] } : { n: Base[]; } +>n : Base[] +>[d1, d2] : Base[] +>d1 : Derived1 +>d2 : Derived2 + +var x355 = function(n: (s: Base[]) => any) { }; x355(n => { var n: Base[]; return null; }); +>x355 : (n: (s: Base[]) => any) => void +>function(n: (s: Base[]) => any) { } : (n: (s: Base[]) => any) => void +>n : (s: Base[]) => any +>s : Base[] +>Base : Base +>x355(n => { var n: Base[]; return null; }) : void +>x355 : (n: (s: Base[]) => any) => void +>n => { var n: Base[]; return null; } : (n: Base[]) => any +>n : Base[] +>n : Base[] +>Base : Base + +var x356 = function(n: Genric) { }; x356({ func: n => { return [d1, d2]; } }); +>x356 : (n: Genric) => void +>function(n: Genric) { } : (n: Genric) => void +>n : Genric +>Genric : Genric +>Base : Base +>x356({ func: n => { return [d1, d2]; } }) : void +>x356 : (n: Genric) => void +>{ func: n => { return [d1, d2]; } } : { func: (n: Base[]) => {}[]; } +>func : (n: Base[]) => {}[] +>n => { return [d1, d2]; } : (n: Base[]) => {}[] +>n : Base[] +>[d1, d2] : {}[] +>d1 : Derived1 +>d2 : Derived2 + diff --git a/tests/baselines/reference/generativeRecursionWithTypeOf.types b/tests/baselines/reference/generativeRecursionWithTypeOf.types new file mode 100644 index 00000000000..1447c51358f --- /dev/null +++ b/tests/baselines/reference/generativeRecursionWithTypeOf.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/generativeRecursionWithTypeOf.ts === +class C { +>C : C +>T : T + + static foo(x: number) { } +>foo : (x: number) => void +>x : number + + type: T; +>type : T +>T : T +} + +module M { +>M : typeof M + + export function f(x: typeof C) { +>f : (x: typeof C) => C +>x : typeof C +>C : typeof C + + return new x(); +>new x() : C +>x : typeof C +>x : typeof C + } +} diff --git a/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName.js b/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName.js index 14be1f5907b..a7b9bf84177 100644 --- a/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName.js +++ b/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName.js @@ -44,3 +44,4 @@ module M3 { } //// [genericAndNonGenericInterfaceWithTheSameName.js] +// generic and non-generic interfaces with the same name do not merge diff --git a/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName2.js b/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName2.js index eed044a8ab9..8f8c9608ac0 100644 --- a/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName2.js +++ b/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName2.js @@ -28,3 +28,4 @@ module N { } //// [genericAndNonGenericInterfaceWithTheSameName2.js] +// generic and non-generic interfaces with the same name do not merge diff --git a/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName2.types b/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName2.types new file mode 100644 index 00000000000..b15da5e995c --- /dev/null +++ b/tests/baselines/reference/genericAndNonGenericInterfaceWithTheSameName2.types @@ -0,0 +1,54 @@ +=== tests/cases/conformance/interfaces/declarationMerging/genericAndNonGenericInterfaceWithTheSameName2.ts === +// generic and non-generic interfaces with the same name do not merge + +module M { +>M : unknown + + interface A { +>A : A +>T : T + + bar: T; +>bar : T +>T : T + } +} + +module M2 { +>M2 : unknown + + interface A { // ok +>A : A + + foo: string; +>foo : string + } +} + +module N { +>N : unknown + + module M { +>M : unknown + + interface A { +>A : A +>T : T + + bar: T; +>bar : T +>T : T + } + } + + module M2 { +>M2 : unknown + + interface A { // ok +>A : A + + foo: string; +>foo : string + } + } +} diff --git a/tests/baselines/reference/genericAndNonGenericOverload1.types b/tests/baselines/reference/genericAndNonGenericOverload1.types new file mode 100644 index 00000000000..67cc8a01f18 --- /dev/null +++ b/tests/baselines/reference/genericAndNonGenericOverload1.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/genericAndNonGenericOverload1.ts === +interface callable2 { +>callable2 : callable2 +>T : T + + (a: T): T; +>a : T +>T : T +>T : T + + (a: T): Z; +>Z : Z +>a : T +>T : T +>Z : Z +} +var c2: callable2; +>c2 : callable2 +>callable2 : callable2 + +c2(1); +>c2(1) : string +>c2 : callable2 + diff --git a/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.js b/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.js index c08994e20dc..dd06b855b68 100644 --- a/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.js +++ b/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.js @@ -21,5 +21,8 @@ _.all([true], _.identity); //// [genericArgumentCallSigAssignmentCompat.js] +// No error, Call signatures of types '(value: T) => T' and 'Underscore.Iterator<{}, boolean>' are compatible when instantiated with any. +// Ideally, we would not have a generic signature here, because it should be instantiated with {} during inferential typing _.all([true, 1, null, 'yes'], _.identity); +// Ok, because fixing makes us infer boolean for T _.all([true], _.identity); diff --git a/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.types b/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.types new file mode 100644 index 00000000000..2ac2483c405 --- /dev/null +++ b/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.types @@ -0,0 +1,67 @@ +=== tests/cases/compiler/genericArgumentCallSigAssignmentCompat.ts === +module Underscore { +>Underscore : unknown + + export interface Iterator { +>Iterator : Iterator +>T : T +>U : U + + (value: T, index: any, list: any): U; +>value : T +>T : T +>index : any +>list : any +>U : U + } + + export interface Static { +>Static : Static + + all(list: T[], iterator?: Iterator, context?: any): boolean; +>all : (list: T[], iterator?: Iterator, context?: any) => boolean +>T : T +>list : T[] +>T : T +>iterator : Iterator +>Iterator : Iterator +>T : T +>context : any + + identity(value: T): T; +>identity : (value: T) => T +>T : T +>value : T +>T : T +>T : T + } +} + +declare var _: Underscore.Static; +>_ : Underscore.Static +>Underscore : unknown +>Static : Underscore.Static + +// No error, Call signatures of types '(value: T) => T' and 'Underscore.Iterator<{}, boolean>' are compatible when instantiated with any. +// Ideally, we would not have a generic signature here, because it should be instantiated with {} during inferential typing +_.all([true, 1, null, 'yes'], _.identity); +>_.all([true, 1, null, 'yes'], _.identity) : boolean +>_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => boolean +>_ : Underscore.Static +>all : (list: T[], iterator?: Underscore.Iterator, context?: any) => boolean +>[true, 1, null, 'yes'] : {}[] +>_.identity : (value: T) => T +>_ : Underscore.Static +>identity : (value: T) => T + +// Ok, because fixing makes us infer boolean for T +_.all([true], _.identity); +>_.all([true], _.identity) : boolean +>_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => boolean +>_ : Underscore.Static +>all : (list: T[], iterator?: Underscore.Iterator, context?: any) => boolean +>[true] : boolean[] +>_.identity : (value: T) => T +>_ : Underscore.Static +>identity : (value: T) => T + diff --git a/tests/baselines/reference/genericArray0.types b/tests/baselines/reference/genericArray0.types new file mode 100644 index 00000000000..80a9d5199bd --- /dev/null +++ b/tests/baselines/reference/genericArray0.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/genericArray0.ts === + + +var x:number[]; +>x : number[] + + +var y = x; +>y : number[] +>x : number[] + +function map() { +>map : () => void +>U : U + + var ys: U[] = []; +>ys : U[] +>U : U +>[] : U[] +} + diff --git a/tests/baselines/reference/genericArray1.js b/tests/baselines/reference/genericArray1.js index b636707f04b..b0bfcd2201a 100644 --- a/tests/baselines/reference/genericArray1.js +++ b/tests/baselines/reference/genericArray1.js @@ -15,6 +15,17 @@ var lengths = ["a", "b", "c"].map(x => x.length); //// [genericArray1.js] +/* +var n: number[]; + +interface Array { +map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; +} + +interface String{ + length: number; +} +*/ var lengths = ["a", "b", "c"].map(function (x) { return x.length; }); diff --git a/tests/baselines/reference/genericArray1.types b/tests/baselines/reference/genericArray1.types new file mode 100644 index 00000000000..09dbc55771d --- /dev/null +++ b/tests/baselines/reference/genericArray1.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/genericArray1.ts === +/* +var n: number[]; + +interface Array { +map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; +} + +interface String{ + length: number; +} +*/ + +var lengths = ["a", "b", "c"].map(x => x.length); +>lengths : number[] +>["a", "b", "c"].map(x => x.length) : number[] +>["a", "b", "c"].map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>["a", "b", "c"] : string[] +>map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>x => x.length : (x: string) => number +>x : string +>x.length : number +>x : string +>length : number + diff --git a/tests/baselines/reference/genericArrayAssignmentCompatErrors.js b/tests/baselines/reference/genericArrayAssignmentCompatErrors.js index 57dac3cd6f2..8006ced4f1f 100644 --- a/tests/baselines/reference/genericArrayAssignmentCompatErrors.js +++ b/tests/baselines/reference/genericArrayAssignmentCompatErrors.js @@ -25,7 +25,7 @@ myCars3 = myCars5; var myCars = new Array(); var myCars2 = new []; var myCars3 = new Array({}); -var myCars4; +var myCars4; // error var myCars5; myCars = myCars2; myCars = myCars3; diff --git a/tests/baselines/reference/genericArrayMethods1.js b/tests/baselines/reference/genericArrayMethods1.js index c8f3e3a46c6..c7fca1ee6b7 100644 --- a/tests/baselines/reference/genericArrayMethods1.js +++ b/tests/baselines/reference/genericArrayMethods1.js @@ -3,4 +3,4 @@ var x:string[] = [0,1].slice(0); // this should be an error //// [genericArrayMethods1.js] -var x = [0, 1].slice(0); +var x = [0, 1].slice(0); // this should be an error diff --git a/tests/baselines/reference/genericArrayPropertyAssignment.js b/tests/baselines/reference/genericArrayPropertyAssignment.js index 6aaeb26d233..4539b20ad36 100644 --- a/tests/baselines/reference/genericArrayPropertyAssignment.js +++ b/tests/baselines/reference/genericArrayPropertyAssignment.js @@ -12,4 +12,4 @@ isEmpty([]); // error function isEmpty(list) { return list.length === 0; } -isEmpty([]); +isEmpty([]); // error diff --git a/tests/baselines/reference/genericArrayPropertyAssignment.types b/tests/baselines/reference/genericArrayPropertyAssignment.types new file mode 100644 index 00000000000..ab3f47de813 --- /dev/null +++ b/tests/baselines/reference/genericArrayPropertyAssignment.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/genericArrayPropertyAssignment.ts === +function isEmpty(list: {length:number;}) +>isEmpty : (list: { length: number; }) => boolean +>list : { length: number; } +>length : number +{ +return list.length ===0; +>list.length ===0 : boolean +>list.length : number +>list : { length: number; } +>length : number +} + +isEmpty([]); // error +>isEmpty([]) : boolean +>isEmpty : (list: { length: number; }) => boolean +>[] : undefined[] + + diff --git a/tests/baselines/reference/genericBaseClassLiteralProperty.types b/tests/baselines/reference/genericBaseClassLiteralProperty.types new file mode 100644 index 00000000000..51246348ded --- /dev/null +++ b/tests/baselines/reference/genericBaseClassLiteralProperty.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/genericBaseClassLiteralProperty.ts === +class BaseClass { +>BaseClass : BaseClass +>T : T + + public _getValue1: { (): T; }; +>_getValue1 : () => T +>T : T + + public _getValue2: () => T; +>_getValue2 : () => T +>T : T +} + +class SubClass extends BaseClass { +>SubClass : SubClass +>BaseClass : BaseClass + + public Error(): void { +>Error : () => void + + var x : number = this._getValue1(); +>x : number +>this._getValue1() : number +>this._getValue1 : () => number +>this : SubClass +>_getValue1 : () => number + + var y : number = this._getValue2(); +>y : number +>this._getValue2() : number +>this._getValue2 : () => number +>this : SubClass +>_getValue2 : () => number + } +} diff --git a/tests/baselines/reference/genericBaseClassLiteralProperty2.types b/tests/baselines/reference/genericBaseClassLiteralProperty2.types new file mode 100644 index 00000000000..b2d156e3c16 --- /dev/null +++ b/tests/baselines/reference/genericBaseClassLiteralProperty2.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/genericBaseClassLiteralProperty2.ts === +class CollectionItem2 { } +>CollectionItem2 : CollectionItem2 + +class BaseCollection2 { +>BaseCollection2 : BaseCollection2 +>TItem : TItem +>CollectionItem2 : CollectionItem2 + + _itemsByKey: { [key: string]: TItem; }; +>_itemsByKey : { [x: string]: TItem; } +>key : string +>TItem : TItem + + constructor() { + this._itemsByKey = {}; +>this._itemsByKey = {} : { [x: string]: TItem; } +>this._itemsByKey : { [x: string]: TItem; } +>this : BaseCollection2 +>_itemsByKey : { [x: string]: TItem; } +>{} : { [x: string]: TItem; } + } +} + +class DataView2 extends BaseCollection2 { +>DataView2 : DataView2 +>BaseCollection2 : BaseCollection2 +>CollectionItem2 : CollectionItem2 + + fillItems(item: CollectionItem2) { +>fillItems : (item: CollectionItem2) => void +>item : CollectionItem2 +>CollectionItem2 : CollectionItem2 + + this._itemsByKey['dummy'] = item; +>this._itemsByKey['dummy'] = item : CollectionItem2 +>this._itemsByKey['dummy'] : CollectionItem2 +>this._itemsByKey : { [x: string]: CollectionItem2; } +>this : DataView2 +>_itemsByKey : { [x: string]: CollectionItem2; } +>item : CollectionItem2 + } +} + diff --git a/tests/baselines/reference/genericCallSpecializedToTypeArg.js b/tests/baselines/reference/genericCallSpecializedToTypeArg.js index c42e5e820fd..8df231b0de5 100644 --- a/tests/baselines/reference/genericCallSpecializedToTypeArg.js +++ b/tests/baselines/reference/genericCallSpecializedToTypeArg.js @@ -14,7 +14,7 @@ function dupe(x) { return x; } function dupeAndGetDist(x) { - var y = dupe(x); - y.getDist(); + var y = dupe(x); //<-- dupe has incorrect type here + y.getDist(); //<-- this requires a missing constraint, but it's not caught return y; } diff --git a/tests/baselines/reference/genericCallTypeArgumentInference.js b/tests/baselines/reference/genericCallTypeArgumentInference.js index 68a2d29ab70..cfa366e5e2b 100644 --- a/tests/baselines/reference/genericCallTypeArgumentInference.js +++ b/tests/baselines/reference/genericCallTypeArgumentInference.js @@ -92,10 +92,11 @@ var r10 = i.foo7(''); // {} var r11 = i.foo8(); // {} //// [genericCallTypeArgumentInference.js] +// Basic type inference with generic calls, no errors expected function foo(t) { return t; } -var r = foo(''); +var r = foo(''); // string function foo2(t, u) { return u; } @@ -103,8 +104,8 @@ function foo2b(u) { var x; return x; } -var r2 = foo2('', 1); -var r3 = foo2b(1); +var r2 = foo2('', 1); // number +var r3 = foo2b(1); // {} var C = (function () { function C(t, u) { this.t = t; @@ -140,20 +141,20 @@ var C = (function () { return C; })(); var c = new C('', 1); -var r4 = c.foo('', 1); -var r5 = c.foo2('', 1); -var r6 = c.foo3(true, 1); -var r7 = c.foo4('', true); -var r8 = c.foo5(true, 1); -var r9 = c.foo6(); -var r10 = c.foo7(''); -var r11 = c.foo8(); +var r4 = c.foo('', 1); // string +var r5 = c.foo2('', 1); // number +var r6 = c.foo3(true, 1); // boolean +var r7 = c.foo4('', true); // string +var r8 = c.foo5(true, 1); // boolean +var r9 = c.foo6(); // {} +var r10 = c.foo7(''); // {} +var r11 = c.foo8(); // {} var i; -var r4 = i.foo('', 1); -var r5 = i.foo2('', 1); -var r6 = i.foo3(true, 1); -var r7 = i.foo4('', true); -var r8 = i.foo5(true, 1); -var r9 = i.foo6(); -var r10 = i.foo7(''); -var r11 = i.foo8(); +var r4 = i.foo('', 1); // string +var r5 = i.foo2('', 1); // number +var r6 = i.foo3(true, 1); // boolean +var r7 = i.foo4('', true); // string +var r8 = i.foo5(true, 1); // boolean +var r9 = i.foo6(); // {} +var r10 = i.foo7(''); // {} +var r11 = i.foo8(); // {} diff --git a/tests/baselines/reference/genericCallTypeArgumentInference.types b/tests/baselines/reference/genericCallTypeArgumentInference.types new file mode 100644 index 00000000000..ced2daee38d --- /dev/null +++ b/tests/baselines/reference/genericCallTypeArgumentInference.types @@ -0,0 +1,366 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallTypeArgumentInference.ts === +// Basic type inference with generic calls, no errors expected + +function foo(t: T) { +>foo : (t: T) => T +>T : T +>t : T +>T : T + + return t; +>t : T +} + +var r = foo(''); // string +>r : string +>foo('') : string +>foo : (t: T) => T + +function foo2(t: T, u: U) { +>foo2 : (t: T, u: U) => U +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U + + return u; +>u : U +} + +function foo2b(u: U) { +>foo2b : (u: U) => T +>T : T +>U : U +>u : U +>U : U + + var x: T; +>x : T +>T : T + + return x; +>x : T +} + +var r2 = foo2('', 1); // number +>r2 : number +>foo2('', 1) : number +>foo2 : (t: T, u: U) => U + +var r3 = foo2b(1); // {} +>r3 : {} +>foo2b(1) : {} +>foo2b : (u: U) => T + +class C { +>C : C +>T : T +>U : U + + constructor(public t: T, public u: U) { +>t : T +>T : T +>u : U +>U : U + } + + foo(t: T, u: U) { +>foo : (t: T, u: U) => T +>t : T +>T : T +>u : U +>U : U + + return t; +>t : T + } + + foo2(t: T, u: U) { +>foo2 : (t: T, u: U) => U +>t : T +>T : T +>u : U +>U : U + + return u; +>u : U + } + + foo3(t: T, u: U) { +>foo3 : (t: T, u: U) => T +>T : T +>t : T +>T : T +>u : U +>U : U + + return t; +>t : T + } + + foo4(t: T, u: U) { +>foo4 : (t: T, u: U) => T +>U : U +>t : T +>T : T +>u : U +>U : U + + return t; +>t : T + } + + foo5(t: T, u: U) { +>foo5 : (t: T, u: U) => T +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U + + return t; +>t : T + } + + foo6() { +>foo6 : () => T +>T : T +>U : U + + var x: T; +>x : T +>T : T + + return x; +>x : T + } + + foo7(u: U) { +>foo7 : (u: U) => T +>T : T +>U : U +>u : U +>U : U + + var x: T; +>x : T +>T : T + + return x; +>x : T + } + + foo8() { +>foo8 : () => T +>T : T +>U : U + + var x: T; +>x : T +>T : T + + return x; +>x : T + } +} + +var c = new C('', 1); +>c : C +>new C('', 1) : C +>C : typeof C + +var r4 = c.foo('', 1); // string +>r4 : string +>c.foo('', 1) : string +>c.foo : (t: string, u: number) => string +>c : C +>foo : (t: string, u: number) => string + +var r5 = c.foo2('', 1); // number +>r5 : number +>c.foo2('', 1) : number +>c.foo2 : (t: string, u: number) => number +>c : C +>foo2 : (t: string, u: number) => number + +var r6 = c.foo3(true, 1); // boolean +>r6 : boolean +>c.foo3(true, 1) : boolean +>c.foo3 : (t: T, u: number) => T +>c : C +>foo3 : (t: T, u: number) => T + +var r7 = c.foo4('', true); // string +>r7 : string +>c.foo4('', true) : string +>c.foo4 : (t: string, u: U) => string +>c : C +>foo4 : (t: string, u: U) => string + +var r8 = c.foo5(true, 1); // boolean +>r8 : boolean +>c.foo5(true, 1) : boolean +>c.foo5 : (t: T, u: U) => T +>c : C +>foo5 : (t: T, u: U) => T + +var r9 = c.foo6(); // {} +>r9 : {} +>c.foo6() : {} +>c.foo6 : () => T +>c : C +>foo6 : () => T + +var r10 = c.foo7(''); // {} +>r10 : {} +>c.foo7('') : {} +>c.foo7 : (u: U) => T +>c : C +>foo7 : (u: U) => T + +var r11 = c.foo8(); // {} +>r11 : {} +>c.foo8() : {} +>c.foo8 : () => T +>c : C +>foo8 : () => T + +interface I { +>I : I +>T : T +>U : U + + new (t: T, u: U); +>t : T +>T : T +>u : U +>U : U + + foo(t: T, u: U): T; +>foo : (t: T, u: U) => T +>t : T +>T : T +>u : U +>U : U +>T : T + + foo2(t: T, u: U): U; +>foo2 : (t: T, u: U) => U +>t : T +>T : T +>u : U +>U : U +>U : U + + foo3(t: T, u: U): T; +>foo3 : (t: T, u: U) => T +>T : T +>t : T +>T : T +>u : U +>U : U +>T : T + + foo4(t: T, u: U): T; +>foo4 : (t: T, u: U) => T +>U : U +>t : T +>T : T +>u : U +>U : U +>T : T + + foo5(t: T, u: U): T; +>foo5 : (t: T, u: U) => T +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U +>T : T + + foo6(): T; +>foo6 : () => T +>T : T +>U : U +>T : T + + foo7(u: U): T; +>foo7 : (u: U) => T +>T : T +>U : U +>u : U +>U : U +>T : T + + foo8(): T; +>foo8 : () => T +>T : T +>U : U +>T : T +} + +var i: I; +>i : I +>I : I + +var r4 = i.foo('', 1); // string +>r4 : string +>i.foo('', 1) : string +>i.foo : (t: string, u: number) => string +>i : I +>foo : (t: string, u: number) => string + +var r5 = i.foo2('', 1); // number +>r5 : number +>i.foo2('', 1) : number +>i.foo2 : (t: string, u: number) => number +>i : I +>foo2 : (t: string, u: number) => number + +var r6 = i.foo3(true, 1); // boolean +>r6 : boolean +>i.foo3(true, 1) : boolean +>i.foo3 : (t: T, u: number) => T +>i : I +>foo3 : (t: T, u: number) => T + +var r7 = i.foo4('', true); // string +>r7 : string +>i.foo4('', true) : string +>i.foo4 : (t: string, u: U) => string +>i : I +>foo4 : (t: string, u: U) => string + +var r8 = i.foo5(true, 1); // boolean +>r8 : boolean +>i.foo5(true, 1) : boolean +>i.foo5 : (t: T, u: U) => T +>i : I +>foo5 : (t: T, u: U) => T + +var r9 = i.foo6(); // {} +>r9 : {} +>i.foo6() : {} +>i.foo6 : () => T +>i : I +>foo6 : () => T + +var r10 = i.foo7(''); // {} +>r10 : {} +>i.foo7('') : {} +>i.foo7 : (u: U) => T +>i : I +>foo7 : (u: U) => T + +var r11 = i.foo8(); // {} +>r11 : {} +>i.foo8() : {} +>i.foo8 : () => T +>i : I +>foo8 : () => T + diff --git a/tests/baselines/reference/genericCallWithArrayLiteralArgs.js b/tests/baselines/reference/genericCallWithArrayLiteralArgs.js index 9f3619a66ba..ba8c2884fff 100644 --- a/tests/baselines/reference/genericCallWithArrayLiteralArgs.js +++ b/tests/baselines/reference/genericCallWithArrayLiteralArgs.js @@ -17,11 +17,11 @@ var r6 = foo([1, '']); // Object[] function foo(t) { return t; } -var r = foo([1, 2]); -var r = foo([1, 2]); -var ra = foo([1, 2]); -var r2 = foo([]); -var r3 = foo([]); -var r4 = foo([1, '']); -var r5 = foo([1, '']); -var r6 = foo([1, '']); +var r = foo([1, 2]); // number[] +var r = foo([1, 2]); // number[] +var ra = foo([1, 2]); // any[] +var r2 = foo([]); // any[] +var r3 = foo([]); // number[] +var r4 = foo([1, '']); // {}[] +var r5 = foo([1, '']); // any[] +var r6 = foo([1, '']); // Object[] diff --git a/tests/baselines/reference/genericCallWithArrayLiteralArgs.types b/tests/baselines/reference/genericCallWithArrayLiteralArgs.types new file mode 100644 index 00000000000..c79efb0792c --- /dev/null +++ b/tests/baselines/reference/genericCallWithArrayLiteralArgs.types @@ -0,0 +1,60 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithArrayLiteralArgs.ts === +function foo(t: T) { +>foo : (t: T) => T +>T : T +>t : T +>T : T + + return t; +>t : T +} + +var r = foo([1, 2]); // number[] +>r : number[] +>foo([1, 2]) : number[] +>foo : (t: T) => T +>[1, 2] : number[] + +var r = foo([1, 2]); // number[] +>r : number[] +>foo([1, 2]) : number[] +>foo : (t: T) => T +>[1, 2] : number[] + +var ra = foo([1, 2]); // any[] +>ra : any[] +>foo([1, 2]) : any[] +>foo : (t: T) => T +>[1, 2] : any[] + +var r2 = foo([]); // any[] +>r2 : any[] +>foo([]) : any[] +>foo : (t: T) => T +>[] : any[] + +var r3 = foo([]); // number[] +>r3 : number[] +>foo([]) : number[] +>foo : (t: T) => T +>[] : number[] + +var r4 = foo([1, '']); // {}[] +>r4 : {}[] +>foo([1, '']) : {}[] +>foo : (t: T) => T +>[1, ''] : {}[] + +var r5 = foo([1, '']); // any[] +>r5 : any[] +>foo([1, '']) : any[] +>foo : (t: T) => T +>[1, ''] : any[] + +var r6 = foo([1, '']); // Object[] +>r6 : Object[] +>foo([1, '']) : Object[] +>foo : (t: T) => T +>Object : Object +>[1, ''] : Object[] + diff --git a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.js b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.js index 90889faf9f1..be6ef0e4124 100644 --- a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.js +++ b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.js @@ -108,6 +108,7 @@ var r11 = i.foo8(); // Base //// [genericCallWithConstraintsTypeArgumentInference.js] +// Basic type inference with generic calls and constraints, no errors expected var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -139,8 +140,8 @@ var d2; function foo(t) { return t; } -var r = foo(b); -var r2 = foo(d1); +var r = foo(b); // Base +var r2 = foo(d1); // Derived function foo2(t, u) { return u; } @@ -152,8 +153,8 @@ function foo2c() { var x; return x; } -var r3 = foo2b(d1); -var r3b = foo2c(); +var r3 = foo2b(d1); // Base +var r3b = foo2c(); // Base var C = (function () { function C(t, u) { this.t = t; @@ -189,22 +190,22 @@ var C = (function () { return C; })(); var c = new C(b, d1); -var r4 = c.foo(d1, d2); -var r5 = c.foo2(b, d2); -var r6 = c.foo3(d1, d1); -var r7 = c.foo4(d1, d2); -var r8 = c.foo5(d1, d2); -var r8b = c.foo5(d2, d2); -var r9 = c.foo6(); -var r10 = c.foo7(d1); -var r11 = c.foo8(); +var r4 = c.foo(d1, d2); // Base +var r5 = c.foo2(b, d2); // Derived +var r6 = c.foo3(d1, d1); // Derived +var r7 = c.foo4(d1, d2); // Base +var r8 = c.foo5(d1, d2); // Derived +var r8b = c.foo5(d2, d2); // Derived2 +var r9 = c.foo6(); // Derived +var r10 = c.foo7(d1); // Base +var r11 = c.foo8(); // Base var i; -var r4 = i.foo(d1, d2); -var r5 = i.foo2(b, d2); -var r6 = i.foo3(d1, d1); -var r7 = i.foo4(d1, d2); -var r8 = i.foo5(d1, d2); -var r8b = i.foo5(d2, d2); -var r9 = i.foo6(); -var r10 = i.foo7(d1); -var r11 = i.foo8(); +var r4 = i.foo(d1, d2); // Base +var r5 = i.foo2(b, d2); // Derived +var r6 = i.foo3(d1, d1); // Derived +var r7 = i.foo4(d1, d2); // Base +var r8 = i.foo5(d1, d2); // Derived +var r8b = i.foo5(d2, d2); // Derived2 +var r9 = i.foo6(); // Derived +var r10 = i.foo7(d1); // Base +var r11 = i.foo8(); // Base diff --git a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types new file mode 100644 index 00000000000..dcff9ef8a16 --- /dev/null +++ b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types @@ -0,0 +1,488 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithConstraintsTypeArgumentInference.ts === +// Basic type inference with generic calls and constraints, no errors expected + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Derived { baz: string; } +>Derived2 : Derived2 +>Derived : Derived +>baz : string + +var b: Base; +>b : Base +>Base : Base + +var d1: Derived; +>d1 : Derived +>Derived : Derived + +var d2: Derived2; +>d2 : Derived2 +>Derived2 : Derived2 + +function foo(t: T) { +>foo : (t: T) => T +>T : T +>Base : Base +>t : T +>T : T + + return t; +>t : T +} + +var r = foo(b); // Base +>r : Base +>foo(b) : Base +>foo : (t: T) => T +>b : Base + +var r2 = foo(d1); // Derived +>r2 : Derived +>foo(d1) : Derived +>foo : (t: T) => T +>d1 : Derived + +function foo2(t: T, u: U) { +>foo2 : (t: T, u: U) => U +>T : T +>Base : Base +>U : U +>Derived : Derived +>t : T +>T : T +>u : U +>U : U + + return u; +>u : U +} + +function foo2b(u: U) { +>foo2b : (u: U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>u : U +>U : U + + var x: T; +>x : T +>T : T + + return x; +>x : T +} + +function foo2c() { +>foo2c : () => T +>T : T +>Base : Base +>U : U +>Derived : Derived + + var x: T; +>x : T +>T : T + + return x; +>x : T +} + +var r3 = foo2b(d1); // Base +>r3 : Base +>foo2b(d1) : Base +>foo2b : (u: U) => T +>d1 : Derived + +var r3b = foo2c(); // Base +>r3b : Base +>foo2c() : Base +>foo2c : () => T + +class C { +>C : C +>T : T +>Base : Base +>U : U +>Derived : Derived + + constructor(public t: T, public u: U) { +>t : T +>T : T +>u : U +>U : U + } + + foo(t: T, u: U) { +>foo : (t: T, u: U) => T +>t : T +>T : T +>u : U +>U : U + + return t; +>t : T + } + + foo2(t: T, u: U) { +>foo2 : (t: T, u: U) => U +>t : T +>T : T +>u : U +>U : U + + return u; +>u : U + } + + foo3(t: T, u: U) { +>foo3 : (t: T, u: U) => T +>T : T +>Derived : Derived +>t : T +>T : T +>u : U +>U : U + + return t; +>t : T + } + + foo4(t: T, u: U) { +>foo4 : (t: T, u: U) => T +>U : U +>Derived2 : Derived2 +>t : T +>T : T +>u : U +>U : U + + return t; +>t : T + } + + foo5(t: T, u: U) { +>foo5 : (t: T, u: U) => T +>T : T +>Derived : Derived +>U : U +>Derived2 : Derived2 +>t : T +>T : T +>u : U +>U : U + + return t; +>t : T + } + + foo6() { +>foo6 : () => T +>T : T +>Derived : Derived +>U : U +>Derived2 : Derived2 + + var x: T; +>x : T +>T : T + + return x; +>x : T + } + + foo7(u: U) { +>foo7 : (u: U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>u : U +>U : U + + var x: T; +>x : T +>T : T + + return x; +>x : T + } + + foo8() { +>foo8 : () => T +>T : T +>Base : Base +>U : U +>Derived : Derived + + var x: T; +>x : T +>T : T + + return x; +>x : T + } +} + +var c = new C(b, d1); +>c : C +>new C(b, d1) : C +>C : typeof C +>b : Base +>d1 : Derived + +var r4 = c.foo(d1, d2); // Base +>r4 : Base +>c.foo(d1, d2) : Base +>c.foo : (t: Base, u: Derived) => Base +>c : C +>foo : (t: Base, u: Derived) => Base +>d1 : Derived +>d2 : Derived2 + +var r5 = c.foo2(b, d2); // Derived +>r5 : Derived +>c.foo2(b, d2) : Derived +>c.foo2 : (t: Base, u: Derived) => Derived +>c : C +>foo2 : (t: Base, u: Derived) => Derived +>b : Base +>d2 : Derived2 + +var r6 = c.foo3(d1, d1); // Derived +>r6 : Derived +>c.foo3(d1, d1) : Derived +>c.foo3 : (t: T, u: Derived) => T +>c : C +>foo3 : (t: T, u: Derived) => T +>d1 : Derived +>d1 : Derived + +var r7 = c.foo4(d1, d2); // Base +>r7 : Base +>c.foo4(d1, d2) : Base +>c.foo4 : (t: Base, u: U) => Base +>c : C +>foo4 : (t: Base, u: U) => Base +>d1 : Derived +>d2 : Derived2 + +var r8 = c.foo5(d1, d2); // Derived +>r8 : Derived +>c.foo5(d1, d2) : Derived +>c.foo5 : (t: T, u: U) => T +>c : C +>foo5 : (t: T, u: U) => T +>d1 : Derived +>d2 : Derived2 + +var r8b = c.foo5(d2, d2); // Derived2 +>r8b : Derived2 +>c.foo5(d2, d2) : Derived2 +>c.foo5 : (t: T, u: U) => T +>c : C +>foo5 : (t: T, u: U) => T +>d2 : Derived2 +>d2 : Derived2 + +var r9 = c.foo6(); // Derived +>r9 : Derived +>c.foo6() : Derived +>c.foo6 : () => T +>c : C +>foo6 : () => T + +var r10 = c.foo7(d1); // Base +>r10 : Base +>c.foo7(d1) : Base +>c.foo7 : (u: U) => T +>c : C +>foo7 : (u: U) => T +>d1 : Derived + +var r11 = c.foo8(); // Base +>r11 : Base +>c.foo8() : Base +>c.foo8 : () => T +>c : C +>foo8 : () => T + +interface I { +>I : I +>T : T +>Base : Base +>U : U +>Derived : Derived + + new (t: T, u: U); +>t : T +>T : T +>u : U +>U : U + + foo(t: T, u: U): T; +>foo : (t: T, u: U) => T +>t : T +>T : T +>u : U +>U : U +>T : T + + foo2(t: T, u: U): U; +>foo2 : (t: T, u: U) => U +>t : T +>T : T +>u : U +>U : U +>U : U + + foo3(t: T, u: U): T; +>foo3 : (t: T, u: U) => T +>T : T +>Derived : Derived +>t : T +>T : T +>u : U +>U : U +>T : T + + foo4(t: T, u: U): T; +>foo4 : (t: T, u: U) => T +>U : U +>Derived2 : Derived2 +>t : T +>T : T +>u : U +>U : U +>T : T + + foo5(t: T, u: U): T; +>foo5 : (t: T, u: U) => T +>T : T +>Derived : Derived +>U : U +>Derived2 : Derived2 +>t : T +>T : T +>u : U +>U : U +>T : T + + foo6(): T; +>foo6 : () => T +>T : T +>Derived : Derived +>U : U +>Derived2 : Derived2 +>T : T + + foo7(u: U): T; +>foo7 : (u: U) => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>u : U +>U : U +>T : T + + foo8(): T; +>foo8 : () => T +>T : T +>Base : Base +>U : U +>Derived : Derived +>T : T +} + +var i: I; +>i : I +>I : I +>Base : Base +>Derived : Derived + +var r4 = i.foo(d1, d2); // Base +>r4 : Base +>i.foo(d1, d2) : Base +>i.foo : (t: Base, u: Derived) => Base +>i : I +>foo : (t: Base, u: Derived) => Base +>d1 : Derived +>d2 : Derived2 + +var r5 = i.foo2(b, d2); // Derived +>r5 : Derived +>i.foo2(b, d2) : Derived +>i.foo2 : (t: Base, u: Derived) => Derived +>i : I +>foo2 : (t: Base, u: Derived) => Derived +>b : Base +>d2 : Derived2 + +var r6 = i.foo3(d1, d1); // Derived +>r6 : Derived +>i.foo3(d1, d1) : Derived +>i.foo3 : (t: T, u: Derived) => T +>i : I +>foo3 : (t: T, u: Derived) => T +>d1 : Derived +>d1 : Derived + +var r7 = i.foo4(d1, d2); // Base +>r7 : Base +>i.foo4(d1, d2) : Base +>i.foo4 : (t: Base, u: U) => Base +>i : I +>foo4 : (t: Base, u: U) => Base +>d1 : Derived +>d2 : Derived2 + +var r8 = i.foo5(d1, d2); // Derived +>r8 : Derived +>i.foo5(d1, d2) : Derived +>i.foo5 : (t: T, u: U) => T +>i : I +>foo5 : (t: T, u: U) => T +>d1 : Derived +>d2 : Derived2 + +var r8b = i.foo5(d2, d2); // Derived2 +>r8b : Derived2 +>i.foo5(d2, d2) : Derived2 +>i.foo5 : (t: T, u: U) => T +>i : I +>foo5 : (t: T, u: U) => T +>d2 : Derived2 +>d2 : Derived2 + +var r9 = i.foo6(); // Derived +>r9 : Derived +>i.foo6() : Derived +>i.foo6 : () => T +>i : I +>foo6 : () => T + +var r10 = i.foo7(d1); // Base +>r10 : Base +>i.foo7(d1) : Base +>i.foo7 : (u: U) => T +>i : I +>foo7 : (u: U) => T +>d1 : Derived + +var r11 = i.foo8(); // Base +>r11 : Base +>i.foo8() : Base +>i.foo8 : () => T +>i : I +>foo8 : () => T + diff --git a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference2.js b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference2.js index c64fb2eabe6..c51b8237c6d 100644 --- a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference2.js +++ b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference2.js @@ -13,12 +13,13 @@ var r4 = foo(1); // error var r5 = foo(new Date()); // no error //// [genericCallWithConstraintsTypeArgumentInference2.js] +// Generic call with parameters of T and U, U extends T, no parameter of type U function foo(t) { var u; return u; } -var r = foo(1); -var r2 = foo(null); -var r3 = foo(new Object()); -var r4 = foo(1); -var r5 = foo(new Date()); +var r = foo(1); // ok +var r2 = foo(null); // {} +var r3 = foo(new Object()); // {} +var r4 = foo(1); // error +var r5 = foo(new Date()); // no error diff --git a/tests/baselines/reference/genericCallWithConstructorTypedArguments5.js b/tests/baselines/reference/genericCallWithConstructorTypedArguments5.js index eed8b43a608..e4a6f43eaa9 100644 --- a/tests/baselines/reference/genericCallWithConstructorTypedArguments5.js +++ b/tests/baselines/reference/genericCallWithConstructorTypedArguments5.js @@ -26,20 +26,23 @@ var r7 = foo(arg5); // string //// [genericCallWithConstructorTypedArguments5.js] +// Generic call with parameter of object type with member of function type of n args passed object whose associated member is call signature with n+1 args function foo(arg) { return new arg.cb(null); } var arg; -var r = foo(arg); +var r = foo(arg); // {} +// more args not allowed var arg2; -var r2 = foo(arg2); +var r2 = foo(arg2); // error var arg3; -var r3 = foo(arg3); +var r3 = foo(arg3); // error function foo2(arg) { return new arg.cb(null, null); } -var r4 = foo(arg); +// fewer args ok +var r4 = foo(arg); // {} var arg4; -var r6 = foo(arg4); +var r6 = foo(arg4); // string var arg5; -var r7 = foo(arg5); +var r7 = foo(arg5); // string diff --git a/tests/baselines/reference/genericCallWithFixedArguments.js b/tests/baselines/reference/genericCallWithFixedArguments.js index 53d33635720..10c0e2b496b 100644 --- a/tests/baselines/reference/genericCallWithFixedArguments.js +++ b/tests/baselines/reference/genericCallWithFixedArguments.js @@ -24,4 +24,4 @@ var B = (function () { })(); function g(x) { } -g(7); +g(7); // the parameter list is fixed, so this should not error diff --git a/tests/baselines/reference/genericCallWithFixedArguments.types b/tests/baselines/reference/genericCallWithFixedArguments.types new file mode 100644 index 00000000000..acfad45a0f2 --- /dev/null +++ b/tests/baselines/reference/genericCallWithFixedArguments.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/genericCallWithFixedArguments.ts === +class A { foo() { } } +>A : A +>foo : () => void + +class B { bar() { }} +>B : B +>bar : () => void + +function g(x) { } +>g : (x: any) => void +>T : T +>U : U +>x : any + +g(7) // the parameter list is fixed, so this should not error +>g(7) : void +>g : (x: any) => void +>A : A +>B : B + + diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments.js b/tests/baselines/reference/genericCallWithFunctionTypedArguments.js index 7f0e69b2f1a..8e844cfbc5a 100644 --- a/tests/baselines/reference/genericCallWithFunctionTypedArguments.js +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments.js @@ -37,34 +37,36 @@ function other(t: T, u: U) { } //// [genericCallWithFunctionTypedArguments.js] +// Generic functions used as arguments for function typed parameters are not used to make inferences from +// Using function arguments, no errors expected function foo(x) { return x(null); } -var r = foo(function (x) { return ''; }); -var r2 = foo(function (x) { return ''; }); -var r3 = foo(function (x) { return ''; }); +var r = foo(function (x) { return ''; }); // {} +var r2 = foo(function (x) { return ''; }); // string +var r3 = foo(function (x) { return ''; }); // {} function foo2(x, cb) { return cb(x); } var r4 = foo2(1, function (a) { return ''; -}); -var r5 = foo2(1, function (a) { return ''; }); +}); // string, contextual signature instantiation is applied to generic functions +var r5 = foo2(1, function (a) { return ''; }); // string var r6 = foo2('', function (a) { return 1; }); function foo3(x, cb, y) { return cb(x); } -var r7 = foo3(1, function (a) { return ''; }, ''); +var r7 = foo3(1, function (a) { return ''; }, ''); // string var r8 = foo3(1, function (a) { return ''; -}, 1); -var r9 = foo3(1, function (a) { return ''; }, ''); +}, 1); // {} +var r9 = foo3(1, function (a) { return ''; }, ''); // string function other(t, u) { - var r10 = foo2(1, function (x) { return ''; }); - var r10 = foo2(1, function (x) { return ''; }); - var r11 = foo3(1, function (x) { return ''; }, ''); - var r11b = foo3(1, function (x) { return ''; }, 1); + var r10 = foo2(1, function (x) { return ''; }); // string, non-generic signature allows inferences to be made + var r10 = foo2(1, function (x) { return ''; }); // string + var r11 = foo3(1, function (x) { return ''; }, ''); // string + var r11b = foo3(1, function (x) { return ''; }, 1); // {} var r12 = foo3(1, function (a) { return ''; - }, 1); + }, 1); // {} } diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments.types b/tests/baselines/reference/genericCallWithFunctionTypedArguments.types new file mode 100644 index 00000000000..2d3b234d0e1 --- /dev/null +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments.types @@ -0,0 +1,173 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithFunctionTypedArguments.ts === +// Generic functions used as arguments for function typed parameters are not used to make inferences from +// Using function arguments, no errors expected + +function foo(x: (a: T) => T) { +>foo : (x: (a: T) => T) => T +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T + + return x(null); +>x(null) : T +>x : (a: T) => T +} + +var r = foo((x: U) => ''); // {} +>r : {} +>foo((x: U) => '') : {} +>foo : (x: (a: T) => T) => T +>(x: U) => '' : (x: U) => string +>U : U +>x : U +>U : U + +var r2 = foo((x: U) => ''); // string +>r2 : string +>foo((x: U) => '') : string +>foo : (x: (a: T) => T) => T +>(x: U) => '' : (x: U) => string +>U : U +>x : U +>U : U + +var r3 = foo(x => ''); // {} +>r3 : {} +>foo(x => '') : {} +>foo : (x: (a: T) => T) => T +>x => '' : (x: {}) => string +>x : {} + +function foo2(x: T, cb: (a: T) => U) { +>foo2 : (x: T, cb: (a: T) => U) => U +>T : T +>U : U +>x : T +>T : T +>cb : (a: T) => U +>a : T +>T : T +>U : U + + return cb(x); +>cb(x) : U +>cb : (a: T) => U +>x : T +} + +var r4 = foo2(1, function (a: Z) { return '' }); // string, contextual signature instantiation is applied to generic functions +>r4 : string +>foo2(1, function (a: Z) { return '' }) : string +>foo2 : (x: T, cb: (a: T) => U) => U +>function (a: Z) { return '' } : (a: Z) => string +>Z : Z +>a : Z +>Z : Z + +var r5 = foo2(1, (a) => ''); // string +>r5 : string +>foo2(1, (a) => '') : string +>foo2 : (x: T, cb: (a: T) => U) => U +>(a) => '' : (a: number) => string +>a : number + +var r6 = foo2('', (a: Z) => 1); +>r6 : number +>foo2('', (a: Z) => 1) : number +>foo2 : (x: T, cb: (a: T) => U) => U +>(a: Z) => 1 : (a: Z) => number +>Z : Z +>a : Z +>Z : Z + +function foo3(x: T, cb: (a: T) => U, y: U) { +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>T : T +>U : U +>x : T +>T : T +>cb : (a: T) => U +>a : T +>T : T +>U : U +>y : U +>U : U + + return cb(x); +>cb(x) : U +>cb : (a: T) => U +>x : T +} + +var r7 = foo3(1, (a: Z) => '', ''); // string +>r7 : string +>foo3(1, (a: Z) => '', '') : string +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>(a: Z) => '' : (a: Z) => string +>Z : Z +>a : Z +>Z : Z + +var r8 = foo3(1, function (a) { return '' }, 1); // {} +>r8 : {} +>foo3(1, function (a) { return '' }, 1) : {} +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>function (a) { return '' } : (a: number) => string +>a : number + +var r9 = foo3(1, (a) => '', ''); // string +>r9 : string +>foo3(1, (a) => '', '') : string +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>(a) => '' : (a: number) => string +>a : number + +function other(t: T, u: U) { +>other : (t: T, u: U) => void +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U + + var r10 = foo2(1, (x: T) => ''); // string, non-generic signature allows inferences to be made +>r10 : string +>foo2(1, (x: T) => '') : string +>foo2 : (x: T, cb: (a: T) => U) => U +>(x: T) => '' : (x: T) => string +>x : T +>T : T + + var r10 = foo2(1, (x) => ''); // string +>r10 : string +>foo2(1, (x) => '') : string +>foo2 : (x: T, cb: (a: T) => U) => U +>(x) => '' : (x: number) => string +>x : number + + var r11 = foo3(1, (x: T) => '', ''); // string +>r11 : string +>foo3(1, (x: T) => '', '') : string +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>(x: T) => '' : (x: T) => string +>x : T +>T : T + + var r11b = foo3(1, (x: T) => '', 1); // {} +>r11b : {} +>foo3(1, (x: T) => '', 1) : {} +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>(x: T) => '' : (x: T) => string +>x : T +>T : T + + var r12 = foo3(1, function (a) { return '' }, 1); // {} +>r12 : {} +>foo3(1, function (a) { return '' }, 1) : {} +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>function (a) { return '' } : (a: number) => string +>a : number +} diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments2.js b/tests/baselines/reference/genericCallWithFunctionTypedArguments2.js index 6e8af57f3f7..ca9b79c3507 100644 --- a/tests/baselines/reference/genericCallWithFunctionTypedArguments2.js +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments2.js @@ -42,27 +42,29 @@ var r8 = foo3(1, i2, 1); // {} var r9 = foo3('', i2, ''); // string //// [genericCallWithFunctionTypedArguments2.js] +// Generic functions used as arguments for function typed parameters are not used to make inferences from +// Using construct signature arguments, no errors expected function foo(x) { return new x(null); } var i; var i2; var a; -var r = foo(i); -var r2 = foo(i); -var r3 = foo(i2); -var r3b = foo(a); +var r = foo(i); // any +var r2 = foo(i); // string +var r3 = foo(i2); // string +var r3b = foo(a); // any function foo2(x, cb) { return new cb(x); } -var r4 = foo2(1, i2); -var r4b = foo2(1, a); -var r5 = foo2(1, i); -var r6 = foo2('', i2); +var r4 = foo2(1, i2); // string, instantiated generic +var r4b = foo2(1, a); // any +var r5 = foo2(1, i); // any +var r6 = foo2('', i2); // string function foo3(x, cb, y) { return new cb(x); } -var r7 = foo3(null, i, ''); -var r7b = foo3(null, a, ''); -var r8 = foo3(1, i2, 1); -var r9 = foo3('', i2, ''); +var r7 = foo3(null, i, ''); // any +var r7b = foo3(null, a, ''); // any +var r8 = foo3(1, i2, 1); // {} +var r9 = foo3('', i2, ''); // string diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments2.types b/tests/baselines/reference/genericCallWithFunctionTypedArguments2.types new file mode 100644 index 00000000000..89d7afd94e2 --- /dev/null +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments2.types @@ -0,0 +1,161 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithFunctionTypedArguments2.ts === +// Generic functions used as arguments for function typed parameters are not used to make inferences from +// Using construct signature arguments, no errors expected + +function foo(x: new(a: T) => T) { +>foo : (x: new (a: T) => T) => T +>T : T +>x : new (a: T) => T +>a : T +>T : T +>T : T + + return new x(null); +>new x(null) : T +>x : new (a: T) => T +} + +interface I { +>I : I + + new (x: T): T; +>T : T +>x : T +>T : T +>T : T +} +interface I2 { +>I2 : I2 +>T : T + + new (x: T): T; +>x : T +>T : T +>T : T +} +var i: I; +>i : I +>I : I + +var i2: I2; +>i2 : I2 +>I2 : I2 + +var a: { +>a : new (x: T) => T + + new (x: T): T; +>T : T +>x : T +>T : T +>T : T +} + +var r = foo(i); // any +>r : any +>foo(i) : any +>foo : (x: new (a: T) => T) => T +>i : I + +var r2 = foo(i); // string +>r2 : string +>foo(i) : string +>foo : (x: new (a: T) => T) => T +>i : I + +var r3 = foo(i2); // string +>r3 : string +>foo(i2) : string +>foo : (x: new (a: T) => T) => T +>i2 : I2 + +var r3b = foo(a); // any +>r3b : any +>foo(a) : any +>foo : (x: new (a: T) => T) => T +>a : new (x: T) => T + +function foo2(x: T, cb: new(a: T) => U) { +>foo2 : (x: T, cb: new (a: T) => U) => U +>T : T +>U : U +>x : T +>T : T +>cb : new (a: T) => U +>a : T +>T : T +>U : U + + return new cb(x); +>new cb(x) : U +>cb : new (a: T) => U +>x : T +} + +var r4 = foo2(1, i2); // string, instantiated generic +>r4 : string +>foo2(1, i2) : string +>foo2 : (x: T, cb: new (a: T) => U) => U +>i2 : I2 + +var r4b = foo2(1, a); // any +>r4b : any +>foo2(1, a) : any +>foo2 : (x: T, cb: new (a: T) => U) => U +>a : new (x: T) => T + +var r5 = foo2(1, i); // any +>r5 : any +>foo2(1, i) : any +>foo2 : (x: T, cb: new (a: T) => U) => U +>i : I + +var r6 = foo2('', i2); // string +>r6 : string +>foo2('', i2) : string +>foo2 : (x: T, cb: new (a: T) => U) => U +>i2 : I2 + +function foo3(x: T, cb: new(a: T) => U, y: U) { +>foo3 : (x: T, cb: new (a: T) => U, y: U) => U +>T : T +>U : U +>x : T +>T : T +>cb : new (a: T) => U +>a : T +>T : T +>U : U +>y : U +>U : U + + return new cb(x); +>new cb(x) : U +>cb : new (a: T) => U +>x : T +} + +var r7 = foo3(null, i, ''); // any +>r7 : any +>foo3(null, i, '') : any +>foo3 : (x: T, cb: new (a: T) => U, y: U) => U +>i : I + +var r7b = foo3(null, a, ''); // any +>r7b : any +>foo3(null, a, '') : any +>foo3 : (x: T, cb: new (a: T) => U, y: U) => U +>a : new (x: T) => T + +var r8 = foo3(1, i2, 1); // {} +>r8 : {} +>foo3(1, i2, 1) : {} +>foo3 : (x: T, cb: new (a: T) => U, y: U) => U +>i2 : I2 + +var r9 = foo3('', i2, ''); // string +>r9 : string +>foo3('', i2, '') : string +>foo3 : (x: T, cb: new (a: T) => U, y: U) => U +>i2 : I2 + diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments3.js b/tests/baselines/reference/genericCallWithFunctionTypedArguments3.js index 74e5d301b77..ff0082ea439 100644 --- a/tests/baselines/reference/genericCallWithFunctionTypedArguments3.js +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments3.js @@ -21,11 +21,12 @@ var b: { var r2 = foo4(b); // T is {} (candidates boolean and {}), U is any (candidates any and {}) //// [genericCallWithFunctionTypedArguments3.js] +// No inference is made from function typed arguments which have multiple call signatures var a; function foo4(cb) { var u; return u; } -var r = foo4(a); +var r = foo4(a); // T is {} (candidates boolean and string), U is any (candidates any and boolean) var b; -var r2 = foo4(b); +var r2 = foo4(b); // T is {} (candidates boolean and {}), U is any (candidates any and {}) diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments3.types b/tests/baselines/reference/genericCallWithFunctionTypedArguments3.types new file mode 100644 index 00000000000..a6e491d3eb8 --- /dev/null +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments3.types @@ -0,0 +1,56 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithFunctionTypedArguments3.ts === +// No inference is made from function typed arguments which have multiple call signatures + +var a: { +>a : { (x: boolean): boolean; (x: string): any; } + + (x: boolean): boolean; +>x : boolean + + (x: string): any; +>x : string +} + +function foo4(cb: (x: T) => U) { +>foo4 : (cb: (x: T) => U) => U +>T : T +>U : U +>cb : (x: T) => U +>x : T +>T : T +>U : U + + var u: U; +>u : U +>U : U + + return u; +>u : U +} + +var r = foo4(a); // T is {} (candidates boolean and string), U is any (candidates any and boolean) +>r : any +>foo4(a) : any +>foo4 : (cb: (x: T) => U) => U +>a : { (x: boolean): boolean; (x: string): any; } + +var b: { +>b : { (x: boolean): T; (x: T): any; } + + (x: boolean): T; +>T : T +>x : boolean +>T : T + + (x: T): any; +>T : T +>x : T +>T : T +} + +var r2 = foo4(b); // T is {} (candidates boolean and {}), U is any (candidates any and {}) +>r2 : any +>foo4(b) : any +>foo4 : (cb: (x: T) => U) => U +>b : { (x: boolean): T; (x: T): any; } + diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments4.js b/tests/baselines/reference/genericCallWithFunctionTypedArguments4.js index ad6cd256590..06c49c64f5b 100644 --- a/tests/baselines/reference/genericCallWithFunctionTypedArguments4.js +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments4.js @@ -23,6 +23,7 @@ var b: { var r2 = foo4(b); // T is {} (candidates boolean and {}), U is any (candidates any and {}) //// [genericCallWithFunctionTypedArguments4.js] +// No inference is made from function typed arguments which have multiple call signatures var C = (function () { function C() { } @@ -38,6 +39,6 @@ function foo4(cb) { var u; return u; } -var r = foo4(a); +var r = foo4(a); // T is {} (candidates boolean and string), U is {} (candidates C and D) var b; -var r2 = foo4(b); +var r2 = foo4(b); // T is {} (candidates boolean and {}), U is any (candidates any and {}) diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments4.types b/tests/baselines/reference/genericCallWithFunctionTypedArguments4.types new file mode 100644 index 00000000000..bf4e1eb749c --- /dev/null +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments4.types @@ -0,0 +1,66 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithFunctionTypedArguments4.ts === +// No inference is made from function typed arguments which have multiple call signatures + +class C { foo: string } +>C : C +>foo : string + +class D { bar: string } +>D : D +>bar : string + +var a: { +>a : { new (x: boolean): C; new (x: string): D; } + + new(x: boolean): C; +>x : boolean +>C : C + + new(x: string): D; +>x : string +>D : D +} + +function foo4(cb: new(x: T) => U) { +>foo4 : (cb: new (x: T) => U) => U +>T : T +>U : U +>cb : new (x: T) => U +>x : T +>T : T +>U : U + + var u: U; +>u : U +>U : U + + return u; +>u : U +} + +var r = foo4(a); // T is {} (candidates boolean and string), U is {} (candidates C and D) +>r : D +>foo4(a) : D +>foo4 : (cb: new (x: T) => U) => U +>a : { new (x: boolean): C; new (x: string): D; } + +var b: { +>b : { new (x: boolean): T; new (x: T): any; } + + new(x: boolean): T; +>T : T +>x : boolean +>T : T + + new(x: T): any; +>T : T +>x : T +>T : T +} + +var r2 = foo4(b); // T is {} (candidates boolean and {}), U is any (candidates any and {}) +>r2 : any +>foo4(b) : any +>foo4 : (cb: new (x: T) => U) => U +>b : { new (x: boolean): T; new (x: T): any; } + diff --git a/tests/baselines/reference/genericCallWithFunctionTypedArguments5.js b/tests/baselines/reference/genericCallWithFunctionTypedArguments5.js index 4e4703615bb..4e3e20071b2 100644 --- a/tests/baselines/reference/genericCallWithFunctionTypedArguments5.js +++ b/tests/baselines/reference/genericCallWithFunctionTypedArguments5.js @@ -23,17 +23,20 @@ var r7 = foo({ cb: () => '' }); // string //// [genericCallWithFunctionTypedArguments5.js] +// Generic call with parameter of object type with member of function type of n args passed object whose associated member is call signature with n+1 args function foo(arg) { return arg.cb(null); } var arg = { cb: function (x) { return ''; } }; -var r = foo(arg); -var r2 = foo({ cb: function (x, y) { return ''; } }); -var r3 = foo({ cb: function (x, y) { return ''; } }); +var r = foo(arg); // {} +// more args not allowed +var r2 = foo({ cb: function (x, y) { return ''; } }); // error +var r3 = foo({ cb: function (x, y) { return ''; } }); // error function foo2(arg) { return arg.cb(null, null); } -var r4 = foo(arg); -var r5 = foo({ cb: function (x) { return ''; } }); -var r6 = foo({ cb: function (x) { return ''; } }); -var r7 = foo({ cb: function () { return ''; } }); +// fewer args ok +var r4 = foo(arg); // {} +var r5 = foo({ cb: function (x) { return ''; } }); // {} +var r6 = foo({ cb: function (x) { return ''; } }); // string +var r7 = foo({ cb: function () { return ''; } }); // string diff --git a/tests/baselines/reference/genericCallWithGenericSignatureArguments.js b/tests/baselines/reference/genericCallWithGenericSignatureArguments.js index 5084f94f66d..17094dae69c 100644 --- a/tests/baselines/reference/genericCallWithGenericSignatureArguments.js +++ b/tests/baselines/reference/genericCallWithGenericSignatureArguments.js @@ -43,31 +43,36 @@ function other3(x: T) { } //// [genericCallWithGenericSignatureArguments.js] +// When a function expression is inferentially typed (section 4.9.3) and a type assigned to a parameter in that expression references type parameters for which inferences are being made, +// the corresponding inferred type arguments to become fixed and no further candidate inferences are made for them. function foo(a, b) { var r; return r; } -var r1b = foo(function (x) { return 1; }, function (x) { return ''; }); -var r2 = foo(function (x) { return null; }, function (x) { return ''; }); -var r3 = foo(function (x) { return 1; }, function (x) { return null; }); -var r3ii = foo(function (x) { return 1; }, function (x) { return 1; }); +//var r1 = foo((x: number) => 1, (x: string) => ''); // error +var r1b = foo(function (x) { return 1; }, function (x) { return ''; }); // {} => {} +var r2 = foo(function (x) { return null; }, function (x) { return ''; }); // Object => Object +var r3 = foo(function (x) { return 1; }, function (x) { return null; }); // number => number +var r3ii = foo(function (x) { return 1; }, function (x) { return 1; }); // number => number var a; var b; -var r4 = foo(function (x) { return a; }, function (x) { return b; }); -var r5 = foo(function (x) { return b; }, function (x) { return a; }); +var r4 = foo(function (x) { return a; }, function (x) { return b; }); // typeof a => typeof a +var r5 = foo(function (x) { return b; }, function (x) { return a; }); // typeof b => typeof b function other(x) { - var r6 = foo(function (a) { return a; }, function (b) { return b; }); - var r6b = foo(function (a) { return a; }, function (b) { return b; }); + var r6 = foo(function (a) { return a; }, function (b) { return b; }); // T => T + var r6b = foo(function (a) { return a; }, function (b) { return b; }); // {} => {} } function other2(x) { - var r7 = foo(function (a) { return a; }, function (b) { return b; }); - var r7b = foo(function (a) { return a; }, function (b) { return b; }); + var r7 = foo(function (a) { return a; }, function (b) { return b; }); // T => T + var r7b = foo(function (a) { return a; }, function (b) { return b; }); // {} => {} var r8 = r7(null); + // BUG 835518 + //var r9 = r7(new Date()); } function foo2(a, b) { var r; return r; } function other3(x) { - var r8 = foo2(function (a) { return a; }, function (b) { return b; }); + var r8 = foo2(function (a) { return a; }, function (b) { return b; }); // Date => Date } diff --git a/tests/baselines/reference/genericCallWithGenericSignatureArguments.types b/tests/baselines/reference/genericCallWithGenericSignatureArguments.types new file mode 100644 index 00000000000..9f634070b56 --- /dev/null +++ b/tests/baselines/reference/genericCallWithGenericSignatureArguments.types @@ -0,0 +1,216 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments.ts === +// When a function expression is inferentially typed (section 4.9.3) and a type assigned to a parameter in that expression references type parameters for which inferences are being made, +// the corresponding inferred type arguments to become fixed and no further candidate inferences are made for them. + +function foo(a: (x: T) => T, b: (x: T) => T) { +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>T : T +>a : (x: T) => T +>x : T +>T : T +>T : T +>b : (x: T) => T +>x : T +>T : T +>T : T + + var r: (x: T) => T; +>r : (x: T) => T +>x : T +>T : T +>T : T + + return r; +>r : (x: T) => T +} + +//var r1 = foo((x: number) => 1, (x: string) => ''); // error +var r1b = foo((x) => 1, (x) => ''); // {} => {} +>r1b : (x: {}) => {} +>foo((x) => 1, (x) => '') : (x: {}) => {} +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x) => 1 : (x: {}) => number +>x : {} +>(x) => '' : (x: {}) => string +>x : {} + +var r2 = foo((x: Object) => null, (x: string) => ''); // Object => Object +>r2 : (x: any) => any +>foo((x: Object) => null, (x: string) => '') : (x: any) => any +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x: Object) => null : (x: Object) => any +>x : Object +>Object : Object +>(x: string) => '' : (x: string) => string +>x : string + +var r3 = foo((x: number) => 1, (x: Object) => null); // number => number +>r3 : (x: any) => any +>foo((x: number) => 1, (x: Object) => null) : (x: any) => any +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x: number) => 1 : (x: number) => number +>x : number +>(x: Object) => null : (x: Object) => any +>x : Object +>Object : Object + +var r3ii = foo((x: number) => 1, (x: number) => 1); // number => number +>r3ii : (x: number) => number +>foo((x: number) => 1, (x: number) => 1) : (x: number) => number +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x: number) => 1 : (x: number) => number +>x : number +>(x: number) => 1 : (x: number) => number +>x : number + +var a: { x: number; y?: number; }; +>a : { x: number; y?: number; } +>x : number +>y : number + +var b: { x: number; z?: number; }; +>b : { x: number; z?: number; } +>x : number +>z : number + +var r4 = foo((x: typeof a) => a, (x: typeof b) => b); // typeof a => typeof a +>r4 : (x: { x: number; y?: number; }) => { x: number; y?: number; } +>foo((x: typeof a) => a, (x: typeof b) => b) : (x: { x: number; y?: number; }) => { x: number; y?: number; } +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x: typeof a) => a : (x: { x: number; y?: number; }) => { x: number; y?: number; } +>x : { x: number; y?: number; } +>a : { x: number; y?: number; } +>a : { x: number; y?: number; } +>(x: typeof b) => b : (x: { x: number; z?: number; }) => { x: number; z?: number; } +>x : { x: number; z?: number; } +>b : { x: number; z?: number; } +>b : { x: number; z?: number; } + +var r5 = foo((x: typeof b) => b, (x: typeof a) => a); // typeof b => typeof b +>r5 : (x: { x: number; z?: number; }) => { x: number; z?: number; } +>foo((x: typeof b) => b, (x: typeof a) => a) : (x: { x: number; z?: number; }) => { x: number; z?: number; } +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x: typeof b) => b : (x: { x: number; z?: number; }) => { x: number; z?: number; } +>x : { x: number; z?: number; } +>b : { x: number; z?: number; } +>b : { x: number; z?: number; } +>(x: typeof a) => a : (x: { x: number; y?: number; }) => { x: number; y?: number; } +>x : { x: number; y?: number; } +>a : { x: number; y?: number; } +>a : { x: number; y?: number; } + +function other(x: T) { +>other : (x: T) => void +>T : T +>x : T +>T : T + + var r6 = foo((a: T) => a, (b: T) => b); // T => T +>r6 : (x: T) => T +>foo((a: T) => a, (b: T) => b) : (x: T) => T +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(a: T) => a : (a: T) => T +>a : T +>T : T +>a : T +>(b: T) => b : (b: T) => T +>b : T +>T : T +>b : T + + var r6b = foo((a) => a, (b) => b); // {} => {} +>r6b : (x: {}) => {} +>foo((a) => a, (b) => b) : (x: {}) => {} +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(a) => a : (a: {}) => {} +>a : {} +>a : {} +>(b) => b : (b: {}) => {} +>b : {} +>b : {} +} + +function other2(x: T) { +>other2 : (x: T) => void +>T : T +>Date : Date +>x : T +>T : T + + var r7 = foo((a: T) => a, (b: T) => b); // T => T +>r7 : (x: T) => T +>foo((a: T) => a, (b: T) => b) : (x: T) => T +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(a: T) => a : (a: T) => T +>a : T +>T : T +>a : T +>(b: T) => b : (b: T) => T +>b : T +>T : T +>b : T + + var r7b = foo((a) => a, (b) => b); // {} => {} +>r7b : (x: {}) => {} +>foo((a) => a, (b) => b) : (x: {}) => {} +>foo : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(a) => a : (a: {}) => {} +>a : {} +>a : {} +>(b) => b : (b: {}) => {} +>b : {} +>b : {} + + var r8 = r7(null); +>r8 : T +>r7(null) : T +>r7 : (x: T) => T + + // BUG 835518 + //var r9 = r7(new Date()); +} + + +function foo2(a: (x: T) => T, b: (x: T) => T) { +>foo2 : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>T : T +>Date : Date +>a : (x: T) => T +>x : T +>T : T +>T : T +>b : (x: T) => T +>x : T +>T : T +>T : T + + var r: (x: T) => T; +>r : (x: T) => T +>x : T +>T : T +>T : T + + return r; +>r : (x: T) => T +} + +function other3(x: T) { +>other3 : (x: T) => void +>T : T +>RegExp : RegExp +>x : T +>T : T + + var r8 = foo2((a: Date) => a, (b: Date) => b); // Date => Date +>r8 : (x: Date) => Date +>foo2((a: Date) => a, (b: Date) => b) : (x: Date) => Date +>foo2 : (a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(a: Date) => a : (a: Date) => Date +>a : Date +>Date : Date +>a : Date +>(b: Date) => b : (b: Date) => Date +>b : Date +>Date : Date +>b : Date +} diff --git a/tests/baselines/reference/genericCallWithGenericSignatureArguments2.js b/tests/baselines/reference/genericCallWithGenericSignatureArguments2.js index e266159d289..7dc955b6172 100644 --- a/tests/baselines/reference/genericCallWithGenericSignatureArguments2.js +++ b/tests/baselines/reference/genericCallWithGenericSignatureArguments2.js @@ -37,23 +37,26 @@ function foo3(x: T, a: (x: T) => T, b: (x: T) => T) { var r7 = foo3(E.A, (x) => E.A, (x) => F.A); // error //// [genericCallWithGenericSignatureArguments2.js] +// When a function expression is inferentially typed (section 4.9.3) and a type assigned to a parameter in that expression references type parameters for which inferences are being made, +// the corresponding inferred type arguments to become fixed and no further candidate inferences are made for them. function foo(a, b) { var r; return r; } var r1 = foo(function (x) { return 1; }, function (x) { return ''; }); function other2(x) { - var r7 = foo(function (a) { return a; }, function (b) { return b; }); - var r9 = r7(new Date()); - var r10 = r7(1); + var r7 = foo(function (a) { return a; }, function (b) { return b; }); // T => T + // BUG 835518 + var r9 = r7(new Date()); // should be ok + var r10 = r7(1); // error } function foo2(a, b) { var r; return r; } function other3(x) { - var r7 = foo2(function (a) { return a; }, function (b) { return b; }); - var r7b = foo2(function (a) { return a; }, function (b) { return b; }); + var r7 = foo2(function (a) { return a; }, function (b) { return b; }); // error + var r7b = foo2(function (a) { return a; }, function (b) { return b; }); // valid, T is inferred to be Date } var E; (function (E) { @@ -67,4 +70,4 @@ function foo3(x, a, b) { var r; return r; } -var r7 = foo3(0 /* A */, function (x) { return 0 /* A */; }, function (x) { return 0 /* A */; }); +var r7 = foo3(0 /* A */, function (x) { return 0 /* A */; }, function (x) { return 0 /* A */; }); // error diff --git a/tests/baselines/reference/genericCallWithGenericSignatureArguments3.js b/tests/baselines/reference/genericCallWithGenericSignatureArguments3.js index 4a47646b184..8ffb4f9970b 100644 --- a/tests/baselines/reference/genericCallWithGenericSignatureArguments3.js +++ b/tests/baselines/reference/genericCallWithGenericSignatureArguments3.js @@ -34,16 +34,18 @@ var r11 = foo2(x, (a1: (y: string) => string) => (n: Object) => 1, (a2: (z: stri var r12 = foo2(x, (a1: (y: string) => boolean) => (n: Object) => 1, (a2: (z: string) => boolean) => 2); // (string => boolean) => {} //// [genericCallWithGenericSignatureArguments3.js] +// When a function expression is inferentially typed (section 4.9.3) and a type assigned to a parameter in that expression references type parameters for which inferences are being made, +// the corresponding inferred type arguments to become fixed and no further candidate inferences are made for them. function foo(x, a, b) { var r; return r; } -var r1 = foo('', function (x) { return ''; }, function (x) { return null; }); -var r1ii = foo('', function (x) { return ''; }, function (x) { return null; }); -var r2 = foo('', function (x) { return ''; }, function (x) { return ''; }); -var r3 = foo(null, function (x) { return ''; }, function (x) { return ''; }); -var r4 = foo(null, function (x) { return ''; }, function (x) { return ''; }); -var r5 = foo(new Object(), function (x) { return ''; }, function (x) { return ''; }); +var r1 = foo('', function (x) { return ''; }, function (x) { return null; }); // any => any +var r1ii = foo('', function (x) { return ''; }, function (x) { return null; }); // string => string +var r2 = foo('', function (x) { return ''; }, function (x) { return ''; }); // string => string +var r3 = foo(null, function (x) { return ''; }, function (x) { return ''; }); // Object => Object +var r4 = foo(null, function (x) { return ''; }, function (x) { return ''; }); // any => any +var r5 = foo(new Object(), function (x) { return ''; }, function (x) { return ''; }); // Object => Object var E; (function (E) { E[E["A"] = 0] = "A"; @@ -52,14 +54,14 @@ var F; (function (F) { F[F["A"] = 0] = "A"; })(F || (F = {})); -var r6 = foo(0 /* A */, function (x) { return 0 /* A */; }, function (x) { return 0 /* A */; }); +var r6 = foo(0 /* A */, function (x) { return 0 /* A */; }, function (x) { return 0 /* A */; }); // number => number function foo2(x, a, b) { var r; return r; } -var r8 = foo2('', function (x) { return ''; }, function (x) { return null; }); -var r9 = foo2(null, function (x) { return ''; }, function (x) { return ''; }); -var r10 = foo2(null, function (x) { return ''; }, function (x) { return ''; }); +var r8 = foo2('', function (x) { return ''; }, function (x) { return null; }); // string => string +var r9 = foo2(null, function (x) { return ''; }, function (x) { return ''; }); // any => any +var r10 = foo2(null, function (x) { return ''; }, function (x) { return ''; }); // Object => Object var x; -var r11 = foo2(x, function (a1) { return function (n) { return 1; }; }, function (a2) { return 2; }); -var r12 = foo2(x, function (a1) { return function (n) { return 1; }; }, function (a2) { return 2; }); +var r11 = foo2(x, function (a1) { return function (n) { return 1; }; }, function (a2) { return 2; }); // {} => {} +var r12 = foo2(x, function (a1) { return function (n) { return 1; }; }, function (a2) { return 2; }); // (string => boolean) => {} diff --git a/tests/baselines/reference/genericCallWithGenericSignatureArguments3.types b/tests/baselines/reference/genericCallWithGenericSignatureArguments3.types new file mode 100644 index 00000000000..2c0d21a5a07 --- /dev/null +++ b/tests/baselines/reference/genericCallWithGenericSignatureArguments3.types @@ -0,0 +1,202 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments3.ts === +// When a function expression is inferentially typed (section 4.9.3) and a type assigned to a parameter in that expression references type parameters for which inferences are being made, +// the corresponding inferred type arguments to become fixed and no further candidate inferences are made for them. + +function foo(x: T, a: (x: T) => T, b: (x: T) => T) { +>foo : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>T : T +>x : T +>T : T +>a : (x: T) => T +>x : T +>T : T +>T : T +>b : (x: T) => T +>x : T +>T : T +>T : T + + var r: (x: T) => T; +>r : (x: T) => T +>x : T +>T : T +>T : T + + return r; +>r : (x: T) => T +} + +var r1 = foo('', (x: string) => '', (x: Object) => null); // any => any +>r1 : (x: any) => any +>foo('', (x: string) => '', (x: Object) => null) : (x: any) => any +>foo : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x: string) => '' : (x: string) => string +>x : string +>(x: Object) => null : (x: Object) => any +>x : Object +>Object : Object + +var r1ii = foo('', (x) => '', (x) => null); // string => string +>r1ii : (x: string) => string +>foo('', (x) => '', (x) => null) : (x: string) => string +>foo : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x) => '' : (x: string) => string +>x : string +>(x) => null : (x: string) => any +>x : string + +var r2 = foo('', (x: string) => '', (x: Object) => ''); // string => string +>r2 : (x: Object) => Object +>foo('', (x: string) => '', (x: Object) => '') : (x: Object) => Object +>foo : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x: string) => '' : (x: string) => string +>x : string +>(x: Object) => '' : (x: Object) => string +>x : Object +>Object : Object + +var r3 = foo(null, (x: Object) => '', (x: string) => ''); // Object => Object +>r3 : (x: Object) => Object +>foo(null, (x: Object) => '', (x: string) => '') : (x: Object) => Object +>foo : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x: Object) => '' : (x: Object) => string +>x : Object +>Object : Object +>(x: string) => '' : (x: string) => string +>x : string + +var r4 = foo(null, (x) => '', (x) => ''); // any => any +>r4 : (x: any) => any +>foo(null, (x) => '', (x) => '') : (x: any) => any +>foo : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>(x) => '' : (x: any) => string +>x : any +>(x) => '' : (x: any) => string +>x : any + +var r5 = foo(new Object(), (x) => '', (x) => ''); // Object => Object +>r5 : (x: Object) => Object +>foo(new Object(), (x) => '', (x) => '') : (x: Object) => Object +>foo : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>(x) => '' : (x: Object) => string +>x : Object +>(x) => '' : (x: Object) => string +>x : Object + +enum E { A } +>E : E +>A : E + +enum F { A } +>F : F +>A : F + +var r6 = foo(E.A, (x: number) => E.A, (x: F) => F.A); // number => number +>r6 : (x: number) => number +>foo(E.A, (x: number) => E.A, (x: F) => F.A) : (x: number) => number +>foo : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T +>E.A : E +>E : typeof E +>A : E +>(x: number) => E.A : (x: number) => E +>x : number +>E.A : E +>E : typeof E +>A : E +>(x: F) => F.A : (x: F) => F +>x : F +>F : F +>F.A : F +>F : typeof F +>A : F + + +function foo2(x: T, a: (x: T) => U, b: (x: T) => U) { +>foo2 : (x: T, a: (x: T) => U, b: (x: T) => U) => (x: T) => U +>T : T +>U : U +>x : T +>T : T +>a : (x: T) => U +>x : T +>T : T +>U : U +>b : (x: T) => U +>x : T +>T : T +>U : U + + var r: (x: T) => U; +>r : (x: T) => U +>x : T +>T : T +>U : U + + return r; +>r : (x: T) => U +} + +var r8 = foo2('', (x) => '', (x) => null); // string => string +>r8 : (x: string) => any +>foo2('', (x) => '', (x) => null) : (x: string) => any +>foo2 : (x: T, a: (x: T) => U, b: (x: T) => U) => (x: T) => U +>(x) => '' : (x: string) => string +>x : string +>(x) => null : (x: string) => any +>x : string + +var r9 = foo2(null, (x) => '', (x) => ''); // any => any +>r9 : (x: any) => string +>foo2(null, (x) => '', (x) => '') : (x: any) => string +>foo2 : (x: T, a: (x: T) => U, b: (x: T) => U) => (x: T) => U +>(x) => '' : (x: any) => string +>x : any +>(x) => '' : (x: any) => string +>x : any + +var r10 = foo2(null, (x: Object) => '', (x: string) => ''); // Object => Object +>r10 : (x: Object) => string +>foo2(null, (x: Object) => '', (x: string) => '') : (x: Object) => string +>foo2 : (x: T, a: (x: T) => U, b: (x: T) => U) => (x: T) => U +>(x: Object) => '' : (x: Object) => string +>x : Object +>Object : Object +>(x: string) => '' : (x: string) => string +>x : string + +var x: (a: string) => boolean; +>x : (a: string) => boolean +>a : string + +var r11 = foo2(x, (a1: (y: string) => string) => (n: Object) => 1, (a2: (z: string) => string) => 2); // {} => {} +>r11 : (x: {}) => {} +>foo2(x, (a1: (y: string) => string) => (n: Object) => 1, (a2: (z: string) => string) => 2) : (x: {}) => {} +>foo2 : (x: T, a: (x: T) => U, b: (x: T) => U) => (x: T) => U +>x : (a: string) => boolean +>(a1: (y: string) => string) => (n: Object) => 1 : (a1: (y: string) => string) => (n: Object) => number +>a1 : (y: string) => string +>y : string +>(n: Object) => 1 : (n: Object) => number +>n : Object +>Object : Object +>(a2: (z: string) => string) => 2 : (a2: (z: string) => string) => number +>a2 : (z: string) => string +>z : string + +var r12 = foo2(x, (a1: (y: string) => boolean) => (n: Object) => 1, (a2: (z: string) => boolean) => 2); // (string => boolean) => {} +>r12 : (x: (a: string) => boolean) => {} +>foo2(x, (a1: (y: string) => boolean) => (n: Object) => 1, (a2: (z: string) => boolean) => 2) : (x: (a: string) => boolean) => {} +>foo2 : (x: T, a: (x: T) => U, b: (x: T) => U) => (x: T) => U +>x : (a: string) => boolean +>(a1: (y: string) => boolean) => (n: Object) => 1 : (a1: (y: string) => boolean) => (n: Object) => number +>a1 : (y: string) => boolean +>y : string +>(n: Object) => 1 : (n: Object) => number +>n : Object +>Object : Object +>(a2: (z: string) => boolean) => 2 : (a2: (z: string) => boolean) => number +>a2 : (z: string) => boolean +>z : string + diff --git a/tests/baselines/reference/genericCallWithNonGenericArgs1.types b/tests/baselines/reference/genericCallWithNonGenericArgs1.types new file mode 100644 index 00000000000..f08f8503075 --- /dev/null +++ b/tests/baselines/reference/genericCallWithNonGenericArgs1.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/genericCallWithNonGenericArgs1.ts === +function f(x: any) { } +>f : (x: any) => void +>T : T +>x : any + +f(null) +>f(null) : void +>f : (x: any) => void + diff --git a/tests/baselines/reference/genericCallWithNonSymmetricSubtypes.js b/tests/baselines/reference/genericCallWithNonSymmetricSubtypes.js index d78e6627cdd..4a33c7d9bcf 100644 --- a/tests/baselines/reference/genericCallWithNonSymmetricSubtypes.js +++ b/tests/baselines/reference/genericCallWithNonSymmetricSubtypes.js @@ -32,23 +32,25 @@ var r7 = foo(s1, s2); // (x: Object) => string; var r8 = foo(s2, s1); // (x: string) => string; //// [genericCallWithNonSymmetricSubtypes.js] +// generic type argument inference where inference leads to two candidates that are both supertypes of all candidates +// we choose the first candidate so the result is dependent on the order of the arguments provided function foo(x, y) { var r; return r; } var a; var b; -var r = foo(a, b); -var r2 = foo(b, a); +var r = foo(a, b); // { x: number; y?: number; }; +var r2 = foo(b, a); // { x: number; z?: number; }; var x; var y; -var r3 = foo(a, x); -var r4 = foo(x, a); -var r5 = foo(a, y); -var r5 = foo(y, a); -var r6 = foo(x, y); -var r6 = foo(y, x); +var r3 = foo(a, x); // { x: number; y?: number; }; +var r4 = foo(x, a); // { x: number; }; +var r5 = foo(a, y); // { x?: number; }; +var r5 = foo(y, a); // { x?: number; }; +var r6 = foo(x, y); // { x?: number; }; +var r6 = foo(y, x); // { x?: number; }; var s1; var s2; -var r7 = foo(s1, s2); -var r8 = foo(s2, s1); +var r7 = foo(s1, s2); // (x: Object) => string; +var r8 = foo(s2, s1); // (x: string) => string; diff --git a/tests/baselines/reference/genericCallWithNonSymmetricSubtypes.types b/tests/baselines/reference/genericCallWithNonSymmetricSubtypes.types new file mode 100644 index 00000000000..e37a010baed --- /dev/null +++ b/tests/baselines/reference/genericCallWithNonSymmetricSubtypes.types @@ -0,0 +1,117 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithNonSymmetricSubtypes.ts === +// generic type argument inference where inference leads to two candidates that are both supertypes of all candidates +// we choose the first candidate so the result is dependent on the order of the arguments provided + +function foo(x: T, y: T) { +>foo : (x: T, y: T) => T +>T : T +>x : T +>T : T +>y : T +>T : T + + var r: T; +>r : T +>T : T + + return r; +>r : T +} + +var a: { x: number; y?: number; }; +>a : { x: number; y?: number; } +>x : number +>y : number + +var b: { x: number; z?: number; }; +>b : { x: number; z?: number; } +>x : number +>z : number + +var r = foo(a, b); // { x: number; y?: number; }; +>r : { x: number; y?: number; } +>foo(a, b) : { x: number; y?: number; } +>foo : (x: T, y: T) => T +>a : { x: number; y?: number; } +>b : { x: number; z?: number; } + +var r2 = foo(b, a); // { x: number; z?: number; }; +>r2 : { x: number; z?: number; } +>foo(b, a) : { x: number; z?: number; } +>foo : (x: T, y: T) => T +>b : { x: number; z?: number; } +>a : { x: number; y?: number; } + +var x: { x: number; }; +>x : { x: number; } +>x : number + +var y: { x?: number; }; +>y : { x?: number; } +>x : number + +var r3 = foo(a, x); // { x: number; y?: number; }; +>r3 : { x: number; y?: number; } +>foo(a, x) : { x: number; y?: number; } +>foo : (x: T, y: T) => T +>a : { x: number; y?: number; } +>x : { x: number; } + +var r4 = foo(x, a); // { x: number; }; +>r4 : { x: number; } +>foo(x, a) : { x: number; } +>foo : (x: T, y: T) => T +>x : { x: number; } +>a : { x: number; y?: number; } + +var r5 = foo(a, y); // { x?: number; }; +>r5 : { x?: number; } +>foo(a, y) : { x?: number; } +>foo : (x: T, y: T) => T +>a : { x: number; y?: number; } +>y : { x?: number; } + +var r5 = foo(y, a); // { x?: number; }; +>r5 : { x?: number; } +>foo(y, a) : { x?: number; } +>foo : (x: T, y: T) => T +>y : { x?: number; } +>a : { x: number; y?: number; } + +var r6 = foo(x, y); // { x?: number; }; +>r6 : { x?: number; } +>foo(x, y) : { x?: number; } +>foo : (x: T, y: T) => T +>x : { x: number; } +>y : { x?: number; } + +var r6 = foo(y, x); // { x?: number; }; +>r6 : { x?: number; } +>foo(y, x) : { x?: number; } +>foo : (x: T, y: T) => T +>y : { x?: number; } +>x : { x: number; } + +var s1: (x: Object) => string; +>s1 : (x: Object) => string +>x : Object +>Object : Object + +var s2: (x: string) => string; +>s2 : (x: string) => string +>x : string + +var r7 = foo(s1, s2); // (x: Object) => string; +>r7 : (x: Object) => string +>foo(s1, s2) : (x: Object) => string +>foo : (x: T, y: T) => T +>s1 : (x: Object) => string +>s2 : (x: string) => string + +var r8 = foo(s2, s1); // (x: string) => string; +>r8 : (x: string) => string +>foo(s2, s1) : (x: string) => string +>foo : (x: T, y: T) => T +>s2 : (x: string) => string +>s1 : (x: Object) => string + diff --git a/tests/baselines/reference/genericCallWithObjectLiteralArgs.js b/tests/baselines/reference/genericCallWithObjectLiteralArgs.js index f942b1ff256..84a630425be 100644 --- a/tests/baselines/reference/genericCallWithObjectLiteralArgs.js +++ b/tests/baselines/reference/genericCallWithObjectLiteralArgs.js @@ -5,15 +5,14 @@ function foo(x: { bar: T; baz: T }) { var r = foo({ bar: 1, baz: '' }); // T = {} var r2 = foo({ bar: 1, baz: 1 }); // T = number -// BUG 835724 -var r3 = foo({ bar: foo, baz: foo }); // T = any +var r3 = foo({ bar: foo, baz: foo }); // T = typeof foo var r4 = foo({ bar: 1, baz: '' }); // T = Object //// [genericCallWithObjectLiteralArgs.js] function foo(x) { return x; } -var r = foo({ bar: 1, baz: '' }); -var r2 = foo({ bar: 1, baz: 1 }); -var r3 = foo({ bar: foo, baz: foo }); -var r4 = foo({ bar: 1, baz: '' }); +var r = foo({ bar: 1, baz: '' }); // T = {} +var r2 = foo({ bar: 1, baz: 1 }); // T = number +var r3 = foo({ bar: foo, baz: foo }); // T = typeof foo +var r4 = foo({ bar: 1, baz: '' }); // T = Object diff --git a/tests/baselines/reference/genericCallWithObjectLiteralArgs.types b/tests/baselines/reference/genericCallWithObjectLiteralArgs.types new file mode 100644 index 00000000000..d23445ecbca --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectLiteralArgs.types @@ -0,0 +1,49 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectLiteralArgs.ts === +function foo(x: { bar: T; baz: T }) { +>foo : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>T : T +>x : { bar: T; baz: T; } +>bar : T +>T : T +>baz : T +>T : T + + return x; +>x : { bar: T; baz: T; } +} + +var r = foo({ bar: 1, baz: '' }); // T = {} +>r : { bar: {}; baz: {}; } +>foo({ bar: 1, baz: '' }) : { bar: {}; baz: {}; } +>foo : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>{ bar: 1, baz: '' } : { bar: number; baz: string; } +>bar : number +>baz : string + +var r2 = foo({ bar: 1, baz: 1 }); // T = number +>r2 : { bar: number; baz: number; } +>foo({ bar: 1, baz: 1 }) : { bar: number; baz: number; } +>foo : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>{ bar: 1, baz: 1 } : { bar: number; baz: number; } +>bar : number +>baz : number + +var r3 = foo({ bar: foo, baz: foo }); // T = typeof foo +>r3 : { bar: (x: { bar: T; baz: T; }) => { bar: T; baz: T; }; baz: (x: { bar: T; baz: T; }) => { bar: T; baz: T; }; } +>foo({ bar: foo, baz: foo }) : { bar: (x: { bar: T; baz: T; }) => { bar: T; baz: T; }; baz: (x: { bar: T; baz: T; }) => { bar: T; baz: T; }; } +>foo : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>{ bar: foo, baz: foo } : { bar: (x: { bar: T; baz: T; }) => { bar: T; baz: T; }; baz: (x: { bar: T; baz: T; }) => { bar: T; baz: T; }; } +>bar : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>foo : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>baz : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>foo : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } + +var r4 = foo({ bar: 1, baz: '' }); // T = Object +>r4 : { bar: Object; baz: Object; } +>foo({ bar: 1, baz: '' }) : { bar: Object; baz: Object; } +>foo : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>Object : Object +>{ bar: 1, baz: '' } : { bar: number; baz: string; } +>bar : number +>baz : string + diff --git a/tests/baselines/reference/genericCallWithObjectLiteralArguments1.js b/tests/baselines/reference/genericCallWithObjectLiteralArguments1.js index 4bf498f8146..293a54e425f 100644 --- a/tests/baselines/reference/genericCallWithObjectLiteralArguments1.js +++ b/tests/baselines/reference/genericCallWithObjectLiteralArguments1.js @@ -11,7 +11,8 @@ var x5 = foo({ x: "", y: 4 }, ""); function foo(n, m) { return m; } -var x = foo({ x: 3, y: "" }, 4); +var x = foo({ x: 3, y: "" }, 4); // no error, x is Object, the best common type +// these are all errors var x2 = foo({ x: 3, y: "" }, 4); var x3 = foo({ x: 3, y: "" }, 4); var x4 = foo({ x: "", y: 4 }, ""); diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgs.js b/tests/baselines/reference/genericCallWithObjectTypeArgs.js index 69658c83991..b5429e9df43 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgs.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgs.js @@ -43,5 +43,5 @@ function foo(t, t2) { } var c1 = new X(); var d1 = new X(); -var r = foo(c1, d1); -var r2 = foo(c1, c1); +var r = foo(c1, d1); // error +var r2 = foo(c1, c1); // ok diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgs.types b/tests/baselines/reference/genericCallWithObjectTypeArgs.types new file mode 100644 index 00000000000..ddbd7d83054 --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectTypeArgs.types @@ -0,0 +1,68 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgs.ts === +class C { +>C : C + + private x: string; +>x : string +} + +class D { +>D : D + + private x: string; +>x : string +} + +class X { +>X : X +>T : T + + x: T; +>x : T +>T : T +} + +function foo(t: X, t2: X) { +>foo : (t: X, t2: X) => T +>T : T +>t : X +>X : X +>T : T +>t2 : X +>X : X +>T : T + + var x: T; +>x : T +>T : T + + return x; +>x : T +} + +var c1 = new X(); +>c1 : X +>new X() : X +>X : typeof X +>C : C + +var d1 = new X(); +>d1 : X +>new X() : X +>X : typeof X +>D : D + +var r = foo(c1, d1); // error +>r : {} +>foo(c1, d1) : {} +>foo : (t: X, t2: X) => T +>c1 : X +>d1 : X + +var r2 = foo(c1, c1); // ok +>r2 : C +>foo(c1, c1) : C +>foo : (t: X, t2: X) => T +>c1 : X +>c1 : X + diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgs2.js b/tests/baselines/reference/genericCallWithObjectTypeArgs2.js index be64dfcf510..3a72feff979 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgs2.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgs2.js @@ -58,14 +58,15 @@ var Derived2 = (function (_super) { } return Derived2; })(Base); +// returns {}[] function f(a) { return [a.x, a.y]; } -var r = f({ x: new Derived(), y: new Derived2() }); -var r2 = f({ x: new Base(), y: new Derived2() }); +var r = f({ x: new Derived(), y: new Derived2() }); // {}[] +var r2 = f({ x: new Base(), y: new Derived2() }); // {}[] function f2(a) { return function (x) { return a.y; }; } -var r3 = f2({ x: new Derived(), y: new Derived2() }); +var r3 = f2({ x: new Derived(), y: new Derived2() }); // Derived => Derived2 var i; -var r4 = f2(i); +var r4 = f2(i); // Base => Derived diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgs2.types b/tests/baselines/reference/genericCallWithObjectTypeArgs2.types new file mode 100644 index 00000000000..0065811fdc1 --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectTypeArgs2.types @@ -0,0 +1,129 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgs2.ts === +class Base { +>Base : Base + + x: string; +>x : string +} +class Derived extends Base { +>Derived : Derived +>Base : Base + + y: string; +>y : string +} +class Derived2 extends Base { +>Derived2 : Derived2 +>Base : Base + + z: string; +>z : string +} + +// returns {}[] +function f(a: { x: T; y: U }) { +>f : (a: { x: T; y: U; }) => {}[] +>T : T +>Base : Base +>U : U +>Base : Base +>a : { x: T; y: U; } +>x : T +>T : T +>y : U +>U : U + + return [a.x, a.y]; +>[a.x, a.y] : {}[] +>a.x : T +>a : { x: T; y: U; } +>x : T +>a.y : U +>a : { x: T; y: U; } +>y : U +} + +var r = f({ x: new Derived(), y: new Derived2() }); // {}[] +>r : {}[] +>f({ x: new Derived(), y: new Derived2() }) : {}[] +>f : (a: { x: T; y: U; }) => {}[] +>{ x: new Derived(), y: new Derived2() } : { x: Derived; y: Derived2; } +>x : Derived +>new Derived() : Derived +>Derived : typeof Derived +>y : Derived2 +>new Derived2() : Derived2 +>Derived2 : typeof Derived2 + +var r2 = f({ x: new Base(), y: new Derived2() }); // {}[] +>r2 : {}[] +>f({ x: new Base(), y: new Derived2() }) : {}[] +>f : (a: { x: T; y: U; }) => {}[] +>{ x: new Base(), y: new Derived2() } : { x: Base; y: Derived2; } +>x : Base +>new Base() : Base +>Base : typeof Base +>y : Derived2 +>new Derived2() : Derived2 +>Derived2 : typeof Derived2 + + +function f2(a: { x: T; y: U }) { +>f2 : (a: { x: T; y: U; }) => (x: T) => U +>T : T +>Base : Base +>U : U +>Base : Base +>a : { x: T; y: U; } +>x : T +>T : T +>y : U +>U : U + + return (x: T) => a.y; +>(x: T) => a.y : (x: T) => U +>x : T +>T : T +>a.y : U +>a : { x: T; y: U; } +>y : U +} + +var r3 = f2({ x: new Derived(), y: new Derived2() }); // Derived => Derived2 +>r3 : (x: Derived) => Derived2 +>f2({ x: new Derived(), y: new Derived2() }) : (x: Derived) => Derived2 +>f2 : (a: { x: T; y: U; }) => (x: T) => U +>{ x: new Derived(), y: new Derived2() } : { x: Derived; y: Derived2; } +>x : Derived +>new Derived() : Derived +>Derived : typeof Derived +>y : Derived2 +>new Derived2() : Derived2 +>Derived2 : typeof Derived2 + +interface I { +>I : I +>T : T +>U : U + + x: T; +>x : T +>T : T + + y: U; +>y : U +>U : U +} + +var i: I; +>i : I +>I : I +>Base : Base +>Derived : Derived + +var r4 = f2(i); // Base => Derived +>r4 : (x: Base) => Derived +>f2(i) : (x: Base) => Derived +>f2 : (a: { x: T; y: U; }) => (x: T) => U +>i : I + diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints.js index 24741b7b8dd..ca8c11bd7b3 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints.js @@ -34,6 +34,8 @@ var r = foo2(c1, d1); var r2 = foo2(c1, c1); //// [genericCallWithObjectTypeArgsAndConstraints.js] +// Generic call with constraints infering type parameter from object member properties +// No errors expected var C = (function () { function C() { } diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints.types b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints.types new file mode 100644 index 00000000000..8e062a8d5bf --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints.types @@ -0,0 +1,108 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints.ts === +// Generic call with constraints infering type parameter from object member properties +// No errors expected + +class C { +>C : C + + x: string; +>x : string +} + +class D { +>D : D + + x: string; +>x : string + + y: string; +>y : string +} + +class X { +>X : X +>T : T + + x: T; +>x : T +>T : T +} + +function foo(t: X, t2: X) { +>foo : (t: X, t2: X) => T +>T : T +>x : string +>t : X +>X : X +>T : T +>t2 : X +>X : X +>T : T + + var x: T; +>x : T +>T : T + + return x; +>x : T +} + +var c1 = new X(); +>c1 : X +>new X() : X +>X : typeof X +>C : C + +var d1 = new X(); +>d1 : X +>new X() : X +>X : typeof X +>D : D + +var r = foo(c1, d1); +>r : C +>foo(c1, d1) : C +>foo : (t: X, t2: X) => T +>c1 : X +>d1 : X + +var r2 = foo(c1, c1); +>r2 : C +>foo(c1, c1) : C +>foo : (t: X, t2: X) => T +>c1 : X +>c1 : X + +function foo2(t: X, t2: X) { +>foo2 : (t: X, t2: X) => T +>T : T +>C : C +>t : X +>X : X +>T : T +>t2 : X +>X : X +>T : T + + var x: T; +>x : T +>T : T + + return x; +>x : T +} + +var r = foo2(c1, d1); +>r : C +>foo2(c1, d1) : C +>foo2 : (t: X, t2: X) => T +>c1 : X +>d1 : X + +var r2 = foo2(c1, c1); +>r2 : C +>foo2(c1, c1) : C +>foo2 : (t: X, t2: X) => T +>c1 : X +>c1 : X + diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.js index e86234e960e..c1f0945ba10 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.js @@ -39,6 +39,8 @@ var r7 = f3(null, x => x); // any //// [genericCallWithObjectTypeArgsAndConstraints2.js] +// Generic call with constraints infering type parameter from object member properties +// No errors expected var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -74,5 +76,5 @@ function f3(x, y) { } var r4 = f3(new Base(), function (x) { return x; }); var r5 = f3(new Derived(), function (x) { return x; }); -var r6 = f3(null, null); -var r7 = f3(null, function (x) { return x; }); +var r6 = f3(null, null); // any +var r7 = f3(null, function (x) { return x; }); // any diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types new file mode 100644 index 00000000000..29706ba7e3d --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types @@ -0,0 +1,143 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints2.ts === +// Generic call with constraints infering type parameter from object member properties +// No errors expected + +class Base { +>Base : Base + + x: string; +>x : string +} +class Derived extends Base { +>Derived : Derived +>Base : Base + + y: string; +>y : string +} + +function f(x: { foo: T; bar: T }) { +>f : (x: { foo: T; bar: T; }) => T +>T : T +>Base : Base +>x : { foo: T; bar: T; } +>foo : T +>T : T +>bar : T +>T : T + + var r: T; +>r : T +>T : T + + return r; +>r : T +} +var r = f({ foo: new Base(), bar: new Derived() }); +>r : Base +>f({ foo: new Base(), bar: new Derived() }) : Base +>f : (x: { foo: T; bar: T; }) => T +>{ foo: new Base(), bar: new Derived() } : { foo: Base; bar: Derived; } +>foo : Base +>new Base() : Base +>Base : typeof Base +>bar : Derived +>new Derived() : Derived +>Derived : typeof Derived + +var r2 = f({ foo: new Derived(), bar: new Derived() }); +>r2 : Derived +>f({ foo: new Derived(), bar: new Derived() }) : Derived +>f : (x: { foo: T; bar: T; }) => T +>{ foo: new Derived(), bar: new Derived() } : { foo: Derived; bar: Derived; } +>foo : Derived +>new Derived() : Derived +>Derived : typeof Derived +>bar : Derived +>new Derived() : Derived +>Derived : typeof Derived + + +interface I { +>I : I +>T : T + + a: T; +>a : T +>T : T +} +function f2(x: I) { +>f2 : (x: I) => T +>T : T +>Base : Base +>x : I +>I : I +>T : T + + var r: T; +>r : T +>T : T + + return r; +>r : T +} +var i: I; +>i : I +>I : I +>Derived : Derived + +var r3 = f2(i); +>r3 : Derived +>f2(i) : Derived +>f2 : (x: I) => T +>i : I + + +function f3(x: T, y: (a: T) => T) { +>f3 : (x: T, y: (a: T) => T) => T +>T : T +>Base : Base +>x : T +>T : T +>y : (a: T) => T +>a : T +>T : T +>T : T + + return y(null); +>y(null) : T +>y : (a: T) => T +} +var r4 = f3(new Base(), x => x); +>r4 : Base +>f3(new Base(), x => x) : Base +>f3 : (x: T, y: (a: T) => T) => T +>new Base() : Base +>Base : typeof Base +>x => x : (x: Base) => Base +>x : Base +>x : Base + +var r5 = f3(new Derived(), x => x); +>r5 : Derived +>f3(new Derived(), x => x) : Derived +>f3 : (x: T, y: (a: T) => T) => T +>new Derived() : Derived +>Derived : typeof Derived +>x => x : (x: Derived) => Derived +>x : Derived +>x : Derived + +var r6 = f3(null, null); // any +>r6 : any +>f3(null, null) : any +>f3 : (x: T, y: (a: T) => T) => T + +var r7 = f3(null, x => x); // any +>r7 : any +>f3(null, x => x) : any +>f3 : (x: T, y: (a: T) => T) => T +>x => x : (x: any) => any +>x : any +>x : any + diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints3.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints3.js index 66ecc4326e1..3d37dace7ae 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints3.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints3.js @@ -38,6 +38,7 @@ var r6 = f3(x => x, null); //// [genericCallWithObjectTypeArgsAndConstraints3.js] +// Generic call with constraints infering type parameter from object member properties var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -67,16 +68,17 @@ function f(a) { var r; return r; } -var r1 = f({ x: new Derived(), y: new Derived2() }); +var r1 = f({ x: new Derived(), y: new Derived2() }); // ok, both extend Base function f2(a) { var r; return r; } -var r2 = f2({ x: new Derived(), y: new Derived2() }); -var r3 = f2({ x: new Derived(), y: new Derived2() }); +var r2 = f2({ x: new Derived(), y: new Derived2() }); // ok +var r3 = f2({ x: new Derived(), y: new Derived2() }); // ok function f3(y, x) { return y(null); } +// all ok - T gets fixed too early, but then defaults to Base and everything works out var r4 = f3(function (x) { return x; }, new Base()); var r5 = f3(function (x) { return x; }, new Derived()); var r6 = f3(function (x) { return x; }, null); diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints4.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints4.js index e0f93863e1b..513a0317cf3 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints4.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints4.js @@ -34,6 +34,7 @@ function other() { //// [genericCallWithObjectTypeArgsAndConstraints4.js] +// Generic call with constraints infering type parameter from object member properties var C = (function () { function C() { } @@ -50,7 +51,7 @@ function foo(t, t2) { var c; var d; var r = foo(c, d); -var r2 = foo(d, c); +var r2 = foo(d, c); // error because C does not extend D var r3 = foo(c, { x: '', foo: c }); var r4 = foo(null, null); var r5 = foo({}, null); @@ -63,5 +64,5 @@ var r9 = foo(function () { }, function () { return 1; }); function other() { var r4 = foo(c, d); - var r5 = foo(c, d); + var r5 = foo(c, d); // error } diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints5.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints5.js index 7e35ab01ca3..b2cda6e2d81 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints5.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints5.js @@ -25,6 +25,7 @@ function other() { //// [genericCallWithObjectTypeArgsAndConstraints5.js] +// Generic call with constraints infering type parameter from object member properties var C = (function () { function C() { } @@ -40,9 +41,9 @@ function foo(t, t2) { } var c; var d; -var r2 = foo(d, c); +var r2 = foo(d, c); // the constraints are self-referencing, no downstream error var r9 = foo(function () { return 1; }, function () { -}); +}); // the constraints are self-referencing, no downstream error function other() { - var r5 = foo(c, d); + var r5 = foo(c, d); // error } diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexers.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexers.js index 4c302e8a1a2..7923d06d529 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexers.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexers.js @@ -22,6 +22,7 @@ function other(arg: T) { } //// [genericCallWithObjectTypeArgsAndIndexers.js] +// Type inference infers from indexers in target type, no errors expected function foo(x) { return x; } diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexers.types b/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexers.types new file mode 100644 index 00000000000..9a7ca1dbb91 --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexers.types @@ -0,0 +1,66 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndIndexers.ts === +// Type inference infers from indexers in target type, no errors expected + +function foo(x: T) { +>foo : (x: T) => T +>T : T +>x : T +>T : T + + return x; +>x : T +} + +var a: { +>a : { [x: string]: Object; [x: number]: Date; } + + [x: string]: Object; +>x : string +>Object : Object + + [x: number]: Date; +>x : number +>Date : Date + +}; +var r = foo(a); +>r : { [x: string]: Object; [x: number]: Date; } +>foo(a) : { [x: string]: Object; [x: number]: Date; } +>foo : (x: T) => T +>a : { [x: string]: Object; [x: number]: Date; } + +function other(arg: T) { +>other : (arg: T) => void +>T : T +>Date : Date +>arg : T +>T : T + + var b: { +>b : { [x: string]: Object; [x: number]: T; } + + [x: string]: Object; +>x : string +>Object : Object + + [x: number]: T +>x : number +>T : T + + }; + var r2 = foo(b); +>r2 : { [x: string]: Object; [x: number]: T; } +>foo(b) : { [x: string]: Object; [x: number]: T; } +>foo : (x: T) => T +>b : { [x: string]: Object; [x: number]: T; } + + var d = r2[1]; +>d : T +>r2[1] : T +>r2 : { [x: string]: Object; [x: number]: T; } + + var e = r2['1']; +>e : Object +>r2['1'] : Object +>r2 : { [x: string]: Object; [x: number]: T; } +} diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexersErrors.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexersErrors.js index acc7b64402d..0c33d3cad15 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexersErrors.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndIndexersErrors.js @@ -25,17 +25,18 @@ function other3(arg: T) { } //// [genericCallWithObjectTypeArgsAndIndexersErrors.js] +// Type inference infers from indexers in target type, error cases function foo(x) { return x; } function other(arg) { var b; - var r2 = foo(b); + var r2 = foo(b); // T } function other3(arg) { var b; var r2 = foo(b); var d = r2[1]; var e = r2['1']; - var u = r2[1]; + var u = r2[1]; // ok } diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndInitializers.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndInitializers.js index 1795b32ca23..ae104470b76 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndInitializers.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndInitializers.js @@ -10,26 +10,27 @@ function foo6(x: T, y: U, z: V = y) { } // error function foo7(x: V, y: U = x) { } // should be ok //// [genericCallWithObjectTypeArgsAndInitializers.js] +// Generic typed parameters with initializers function foo(x) { if (x === void 0) { x = null; } return x; -} +} // ok function foo2(x) { if (x === void 0) { x = undefined; } return x; -} +} // ok function foo3(x) { if (x === void 0) { x = 1; } -} +} // error function foo4(x, y) { if (y === void 0) { y = x; } -} +} // error function foo5(x, y) { if (y === void 0) { y = x; } -} +} // ok function foo6(x, y, z) { if (z === void 0) { z = y; } -} +} // error function foo7(x, y) { if (y === void 0) { y = x; } -} +} // should be ok diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.js index c9942884618..aa2da602e25 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.js @@ -35,6 +35,7 @@ function other3(arg: T) { //} //// [genericCallWithObjectTypeArgsAndNumericIndexer.js] +// Type inference infers from indexers in target type, no errors expected function foo(x) { return x; } @@ -42,7 +43,7 @@ var a; var r = foo(a); function other(arg) { var b; - var r2 = foo(b); + var r2 = foo(b); // T } function other2(arg) { var b; @@ -53,4 +54,6 @@ function other3(arg) { var b; var r2 = foo(b); var d = r2[1]; + // BUG 821629 + //var u: U = r2[1]; // ok } diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.types b/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.types new file mode 100644 index 00000000000..f4b3f5960f0 --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.types @@ -0,0 +1,101 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndNumericIndexer.ts === +// Type inference infers from indexers in target type, no errors expected + +function foo(x: T) { +>foo : (x: T) => T +>T : T +>x : T +>T : T + + return x; +>x : T +} + +var a: { [x: number]: Date }; +>a : { [x: number]: Date; } +>x : number +>Date : Date + +var r = foo(a); +>r : { [x: number]: Date; } +>foo(a) : { [x: number]: Date; } +>foo : (x: T) => T +>a : { [x: number]: Date; } + +function other(arg: T) { +>other : (arg: T) => void +>T : T +>arg : T +>T : T + + var b: { [x: number]: T }; +>b : { [x: number]: T; } +>x : number +>T : T + + var r2 = foo(b); // T +>r2 : { [x: number]: T; } +>foo(b) : { [x: number]: T; } +>foo : (x: T) => T +>b : { [x: number]: T; } +} + +function other2(arg: T) { +>other2 : (arg: T) => void +>T : T +>Date : Date +>arg : T +>T : T + + var b: { [x: number]: T }; +>b : { [x: number]: T; } +>x : number +>T : T + + var r2 = foo(b); +>r2 : { [x: number]: T; } +>foo(b) : { [x: number]: T; } +>foo : (x: T) => T +>b : { [x: number]: T; } + + var d = r2[1]; +>d : T +>r2[1] : T +>r2 : { [x: number]: T; } +} + +function other3(arg: T) { +>other3 : (arg: T) => void +>T : T +>Date : Date +>U : U +>Date : Date +>arg : T +>T : T + + var b: { [x: number]: T }; +>b : { [x: number]: T; } +>x : number +>T : T + + var r2 = foo(b); +>r2 : { [x: number]: T; } +>foo(b) : { [x: number]: T; } +>foo : (x: T) => T +>b : { [x: number]: T; } + + var d = r2[1]; +>d : T +>r2[1] : T +>r2 : { [x: number]: T; } + + // 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 cd1deb76760..c810ce01fd4 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.js @@ -36,6 +36,7 @@ function other3(arg: T) { //} //// [genericCallWithObjectTypeArgsAndStringIndexer.js] +// Type inference infers from indexers in target type, no errors expected function foo(x) { return x; } @@ -43,15 +44,17 @@ var a; var r = foo(a); function other(arg) { var b; - var r2 = foo(b); + var r2 = foo(b); // T } function other2(arg) { var b; var r2 = foo(b); - var d = r2['hm']; + var d = r2['hm']; // ok } function other3(arg) { var b; var r2 = foo(b); - var d = r2['hm']; + var d = r2['hm']; // ok + // BUG 821629 + //var u: U = r2['hm']; // ok } diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.types b/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.types new file mode 100644 index 00000000000..e52e6cff113 --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.types @@ -0,0 +1,104 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndStringIndexer.ts === +// Type inference infers from indexers in target type, no errors expected + +function foo(x: T) { +>foo : (x: T) => T +>T : T +>x : T +>T : T + + return x; +>x : T +} + +var a: { [x: string]: Date }; +>a : { [x: string]: Date; } +>x : string +>Date : Date + +var r = foo(a); +>r : { [x: string]: Date; } +>foo(a) : { [x: string]: Date; } +>foo : (x: T) => T +>a : { [x: string]: Date; } + +function other(arg: T) { +>other : (arg: T) => void +>T : T +>arg : T +>T : T + + var b: { [x: string]: T }; +>b : { [x: string]: T; } +>x : string +>T : T + + var r2 = foo(b); // T +>r2 : { [x: string]: T; } +>foo(b) : { [x: string]: T; } +>foo : (x: T) => T +>b : { [x: string]: T; } +} + +function other2(arg: T) { +>other2 : (arg: T) => void +>T : T +>Date : Date +>arg : T +>T : T + + var b: { [x: string]: T }; +>b : { [x: string]: T; } +>x : string +>T : T + + var r2 = foo(b); +>r2 : { [x: string]: T; } +>foo(b) : { [x: string]: T; } +>foo : (x: T) => T +>b : { [x: string]: T; } + + var d: Date = r2['hm']; // ok +>d : Date +>Date : Date +>r2['hm'] : T +>r2 : { [x: string]: T; } +} + +function other3(arg: T) { +>other3 : (arg: T) => void +>T : T +>Date : Date +>U : U +>Date : Date +>arg : T +>T : T + + var b: { [x: string]: T }; +>b : { [x: string]: T; } +>x : string +>T : T + + var r2 = foo(b); +>r2 : { [x: string]: T; } +>foo(b) : { [x: string]: T; } +>foo : (x: T) => T +>b : { [x: string]: T; } + + var d: Date = r2['hm']; // ok +>d : Date +>Date : Date +>r2['hm'] : T +>r2 : { [x: string]: T; } + + // 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/genericCallWithOverloadedConstructorTypedArguments.js b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.js index 3057287d914..9da34ebad86 100644 --- a/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.js +++ b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.js @@ -49,6 +49,8 @@ module GenericParameter { } //// [genericCallWithOverloadedConstructorTypedArguments.js] +// Function typed arguments with multiple signatures must be passed an implementation that matches all of them +// Inferences are made quadratic-pairwise to and from these overload sets var NonGenericParameter; (function (NonGenericParameter) { var a; @@ -65,20 +67,20 @@ var GenericParameter; return cb; } var a; - var r5 = foo5(a); + var r5 = foo5(a); // new{} => string; new(x:number) => {} var b; - var r7 = foo5(b); + var r7 = foo5(b); // new any => string; new(x:number) => any function foo6(cb) { return cb; } - var r8 = foo6(a); - var r9 = foo6(b); + var r8 = foo6(a); // new{} => string; new(x:{}, y?:{}) => string + var r9 = foo6(b); // new any => string; new(x:any, y?:any) => string function foo7(x, cb) { return cb; } - var r13 = foo7(1, b); + var r13 = foo7(1, b); // new any => string; new(x:any, y?:any) => string var c; var c2; - var r14 = foo7(1, c); - var r15 = foo7(1, c2); + var r14 = foo7(1, c); // new any => string; new(x:any, y?:any) => string + var r15 = foo7(1, c2); // new any => string; new(x:any, y?:any) => string })(GenericParameter || (GenericParameter = {})); diff --git a/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.types b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.types new file mode 100644 index 00000000000..6c16ad0259c --- /dev/null +++ b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments.types @@ -0,0 +1,173 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithOverloadedConstructorTypedArguments.ts === +// Function typed arguments with multiple signatures must be passed an implementation that matches all of them +// Inferences are made quadratic-pairwise to and from these overload sets + +module NonGenericParameter { +>NonGenericParameter : typeof NonGenericParameter + + var a: { +>a : { new (x: boolean): boolean; new (x: string): string; } + + new(x: boolean): boolean; +>x : boolean + + new(x: string): string; +>x : string + } + + function foo4(cb: typeof a) { +>foo4 : (cb: { new (x: boolean): boolean; new (x: string): string; }) => boolean +>cb : { new (x: boolean): boolean; new (x: string): string; } +>a : { new (x: boolean): boolean; new (x: string): string; } + + return new cb(null); +>new cb(null) : boolean +>cb : { new (x: boolean): boolean; new (x: string): string; } + } + + var r = foo4(a); +>r : boolean +>foo4(a) : boolean +>foo4 : (cb: { new (x: boolean): boolean; new (x: string): string; }) => boolean +>a : { new (x: boolean): boolean; new (x: string): string; } + + var b: { new (x: T): T }; +>b : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + + var r2 = foo4(b); +>r2 : boolean +>foo4(b) : boolean +>foo4 : (cb: { new (x: boolean): boolean; new (x: string): string; }) => boolean +>b : new (x: T) => T +} + +module GenericParameter { +>GenericParameter : typeof GenericParameter + + function foo5(cb: { new(x: T): string; new(x: number): T }) { +>foo5 : (cb: { new (x: T): string; new (x: number): T; }) => { new (x: T): string; new (x: number): T; } +>T : T +>cb : { new (x: T): string; new (x: number): T; } +>x : T +>T : T +>x : number +>T : T + + return cb; +>cb : { new (x: T): string; new (x: number): T; } + } + + var a: { +>a : { new (x: boolean): string; new (x: number): boolean; } + + new (x: boolean): string; +>x : boolean + + new (x: number): boolean; +>x : number + } + var r5 = foo5(a); // new{} => string; new(x:number) => {} +>r5 : { new (x: boolean): string; new (x: number): boolean; } +>foo5(a) : { new (x: boolean): string; new (x: number): boolean; } +>foo5 : (cb: { new (x: T): string; new (x: number): T; }) => { new (x: T): string; new (x: number): T; } +>a : { new (x: boolean): string; new (x: number): boolean; } + + var b: { new(x: T): string; new(x: number): T; } +>b : { new (x: T): string; new (x: number): T; } +>T : T +>x : T +>T : T +>T : T +>x : number +>T : T + + var r7 = foo5(b); // new any => string; new(x:number) => any +>r7 : { new (x: any): string; new (x: number): any; } +>foo5(b) : { new (x: any): string; new (x: number): any; } +>foo5 : (cb: { new (x: T): string; new (x: number): T; }) => { new (x: T): string; new (x: number): T; } +>b : { new (x: T): string; new (x: number): T; } + + function foo6(cb: { new(x: T): string; new(x: T, y?: T): string }) { +>foo6 : (cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>T : T +>cb : { new (x: T): string; new (x: T, y?: T): string; } +>x : T +>T : T +>x : T +>T : T +>y : T +>T : T + + return cb; +>cb : { new (x: T): string; new (x: T, y?: T): string; } + } + + var r8 = foo6(a); // new{} => string; new(x:{}, y?:{}) => string +>r8 : { new (x: {}): string; new (x: {}, y?: {}): string; } +>foo6(a) : { new (x: {}): string; new (x: {}, y?: {}): string; } +>foo6 : (cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>a : { new (x: boolean): string; new (x: number): boolean; } + + var r9 = foo6(b); // new any => string; new(x:any, y?:any) => string +>r9 : { new (x: any): string; new (x: any, y?: any): string; } +>foo6(b) : { new (x: any): string; new (x: any, y?: any): string; } +>foo6 : (cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>b : { new (x: T): string; new (x: number): T; } + + function foo7(x:T, cb: { new(x: T): string; new(x: T, y?: T): string }) { +>foo7 : (x: T, cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>T : T +>x : T +>T : T +>cb : { new (x: T): string; new (x: T, y?: T): string; } +>x : T +>T : T +>x : T +>T : T +>y : T +>T : T + + return cb; +>cb : { new (x: T): string; new (x: T, y?: T): string; } + } + + var r13 = foo7(1, b); // new any => string; new(x:any, y?:any) => string +>r13 : { new (x: any): string; new (x: any, y?: any): string; } +>foo7(1, b) : { new (x: any): string; new (x: any, y?: any): string; } +>foo7 : (x: T, cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>b : { new (x: T): string; new (x: number): T; } + + var c: { new (x: T): string; (x: number): T; } +>c : { (x: number): T; new (x: T): string; } +>T : T +>x : T +>T : T +>T : T +>x : number +>T : T + + var c2: { new (x: T): string; new(x: number): T; } +>c2 : { new (x: T): string; new (x: number): T; } +>T : T +>x : T +>T : T +>T : T +>x : number +>T : T + + var r14 = foo7(1, c); // new any => string; new(x:any, y?:any) => string +>r14 : { new (x: any): string; new (x: any, y?: any): string; } +>foo7(1, c) : { new (x: any): string; new (x: any, y?: any): string; } +>foo7 : (x: T, cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>c : { (x: number): T; new (x: T): string; } + + var r15 = foo7(1, c2); // new any => string; new(x:any, y?:any) => string +>r15 : { new (x: any): string; new (x: any, y?: any): string; } +>foo7(1, c2) : { new (x: any): string; new (x: any, y?: any): string; } +>foo7 : (x: T, cb: { new (x: T): string; new (x: T, y?: T): string; }) => { new (x: T): string; new (x: T, y?: T): string; } +>c2 : { new (x: T): string; new (x: number): T; } +} diff --git a/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments2.js b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments2.js index 097059f2cb1..88044f82fdb 100644 --- a/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments2.js +++ b/tests/baselines/reference/genericCallWithOverloadedConstructorTypedArguments2.js @@ -41,6 +41,8 @@ module GenericParameter { } //// [genericCallWithOverloadedConstructorTypedArguments2.js] +// Function typed arguments with multiple signatures must be passed an implementation that matches all of them +// Inferences are made quadratic-pairwise to and from these overload sets var NonGenericParameter; (function (NonGenericParameter) { var a; @@ -48,7 +50,7 @@ var NonGenericParameter; return cb; } var b; - var r3 = foo4(b); + var r3 = foo4(b); // ok })(NonGenericParameter || (NonGenericParameter = {})); var GenericParameter; (function (GenericParameter) { @@ -56,16 +58,16 @@ var GenericParameter; return cb; } var a; - var r6 = foo5(a); + var r6 = foo5(a); // ok function foo6(cb) { return cb; } var b; - var r10 = foo6(b); + var r10 = foo6(b); // error function foo7(x, cb) { return cb; } - var r13 = foo7(1, a); + var r13 = foo7(1, a); // ok var c; - var r14 = foo7(1, c); + var r14 = foo7(1, c); // ok })(GenericParameter || (GenericParameter = {})); diff --git a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.js b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.js index aea863d8b64..dea5948242b 100644 --- a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.js +++ b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.js @@ -45,6 +45,8 @@ module GenericParameter { } //// [genericCallWithOverloadedFunctionTypedArguments.js] +// Function typed arguments with multiple signatures must be passed an implementation that matches all of them +// Inferences are made quadratic-pairwise to and from these overload sets var NonGenericParameter; (function (NonGenericParameter) { var a; @@ -60,20 +62,20 @@ var GenericParameter; function foo5(cb) { return cb; } - var r5 = foo5(function (x) { return x; }); + var r5 = foo5(function (x) { return x; }); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed]. T is any var a; - var r7 = foo5(a); + var r7 = foo5(a); // any => string (+1 overload) function foo6(cb) { return cb; } - var r8 = foo6(function (x) { return x; }); - var r9 = foo6(function (x) { return ''; }); - var r11 = foo6(function (x, y) { return ''; }); + var r8 = foo6(function (x) { return x; }); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed]. T is any + var r9 = foo6(function (x) { return ''; }); // any => string (+1 overload) + var r11 = foo6(function (x, y) { return ''; }); // any => string (+1 overload) function foo7(x, cb) { return cb; } - var r12 = foo7(1, function (x) { return x; }); - var r13 = foo7(1, function (x) { return ''; }); + var r12 = foo7(1, function (x) { return x; }); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed] + var r13 = foo7(1, function (x) { return ''; }); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed] var a; - var r14 = foo7(1, a); + var r14 = foo7(1, a); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed] })(GenericParameter || (GenericParameter = {})); diff --git a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types new file mode 100644 index 00000000000..ad491206be6 --- /dev/null +++ b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments.types @@ -0,0 +1,182 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithOverloadedFunctionTypedArguments.ts === +// Function typed arguments with multiple signatures must be passed an implementation that matches all of them +// Inferences are made quadratic-pairwise to and from these overload sets + +module NonGenericParameter { +>NonGenericParameter : typeof NonGenericParameter + + var a: { +>a : { (x: boolean): boolean; (x: string): string; } + + (x: boolean): boolean; +>x : boolean + + (x: string): string; +>x : string + } + + function foo4(cb: typeof a) { +>foo4 : (cb: { (x: boolean): boolean; (x: string): string; }) => { (x: boolean): boolean; (x: string): string; } +>cb : { (x: boolean): boolean; (x: string): string; } +>a : { (x: boolean): boolean; (x: string): string; } + + return cb; +>cb : { (x: boolean): boolean; (x: string): string; } + } + + var r = foo4(a); +>r : { (x: boolean): boolean; (x: string): string; } +>foo4(a) : { (x: boolean): boolean; (x: string): string; } +>foo4 : (cb: { (x: boolean): boolean; (x: string): string; }) => { (x: boolean): boolean; (x: string): string; } +>a : { (x: boolean): boolean; (x: string): string; } + + var r2 = foo4((x: T) => x); +>r2 : { (x: boolean): boolean; (x: string): string; } +>foo4((x: T) => x) : { (x: boolean): boolean; (x: string): string; } +>foo4 : (cb: { (x: boolean): boolean; (x: string): string; }) => { (x: boolean): boolean; (x: string): string; } +>(x: T) => x : (x: T) => T +>T : T +>x : T +>T : T +>x : T + + var r4 = foo4(x => x); +>r4 : { (x: boolean): boolean; (x: string): string; } +>foo4(x => x) : { (x: boolean): boolean; (x: string): string; } +>foo4 : (cb: { (x: boolean): boolean; (x: string): string; }) => { (x: boolean): boolean; (x: string): string; } +>x => x : (x: any) => any +>x : any +>x : any +} + +module GenericParameter { +>GenericParameter : typeof GenericParameter + + function foo5(cb: { (x: T): string; (x: number): T }) { +>foo5 : (cb: { (x: T): string; (x: number): T; }) => { (x: T): string; (x: number): T; } +>T : T +>cb : { (x: T): string; (x: number): T; } +>x : T +>T : T +>x : number +>T : T + + return cb; +>cb : { (x: T): string; (x: number): T; } + } + + var r5 = foo5(x => x); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed]. T is any +>r5 : { (x: any): string; (x: number): any; } +>foo5(x => x) : { (x: any): string; (x: number): any; } +>foo5 : (cb: { (x: T): string; (x: number): T; }) => { (x: T): string; (x: number): T; } +>x => x : (x: any) => any +>x : any +>x : any + + var a: { (x: T): string; (x: number): T; } +>a : { (x: T): string; (x: number): T; } +>T : T +>x : T +>T : T +>T : T +>x : number +>T : T + + var r7 = foo5(a); // any => string (+1 overload) +>r7 : { (x: any): string; (x: number): any; } +>foo5(a) : { (x: any): string; (x: number): any; } +>foo5 : (cb: { (x: T): string; (x: number): T; }) => { (x: T): string; (x: number): T; } +>a : { (x: T): string; (x: number): T; } + + function foo6(cb: { (x: T): string; (x: T, y?: T): string }) { +>foo6 : (cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>T : T +>cb : { (x: T): string; (x: T, y?: T): string; } +>x : T +>T : T +>x : T +>T : T +>y : T +>T : T + + return cb; +>cb : { (x: T): string; (x: T, y?: T): string; } + } + + var r8 = foo6(x => x); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed]. T is any +>r8 : { (x: any): string; (x: any, y?: any): string; } +>foo6(x => x) : { (x: any): string; (x: any, y?: any): string; } +>foo6 : (cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>x => x : (x: any) => any +>x : any +>x : any + + var r9 = foo6((x: T) => ''); // any => string (+1 overload) +>r9 : { (x: any): string; (x: any, y?: any): string; } +>foo6((x: T) => '') : { (x: any): string; (x: any, y?: any): string; } +>foo6 : (cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>(x: T) => '' : (x: T) => string +>T : T +>x : T +>T : T + + var r11 = foo6((x: T, y?: T) => ''); // any => string (+1 overload) +>r11 : { (x: any): string; (x: any, y?: any): string; } +>foo6((x: T, y?: T) => '') : { (x: any): string; (x: any, y?: any): string; } +>foo6 : (cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>(x: T, y?: T) => '' : (x: T, y?: T) => string +>T : T +>x : T +>T : T +>y : T +>T : T + + function foo7(x:T, cb: { (x: T): string; (x: T, y?: T): string }) { +>foo7 : (x: T, cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>T : T +>x : T +>T : T +>cb : { (x: T): string; (x: T, y?: T): string; } +>x : T +>T : T +>x : T +>T : T +>y : T +>T : T + + return cb; +>cb : { (x: T): string; (x: T, y?: T): string; } + } + + var r12 = foo7(1, (x) => x); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed] +>r12 : { (x: any): string; (x: any, y?: any): string; } +>foo7(1, (x) => x) : { (x: any): string; (x: any, y?: any): string; } +>foo7 : (x: T, cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>(x) => x : (x: any) => any +>x : any +>x : any + + var r13 = foo7(1, (x: T) => ''); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed] +>r13 : { (x: any): string; (x: any, y?: any): string; } +>foo7(1, (x: T) => '') : { (x: any): string; (x: any, y?: any): string; } +>foo7 : (x: T, cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>(x: T) => '' : (x: T) => string +>T : T +>x : T +>T : T + + var a: { (x: T): string; (x: number): T; } +>a : { (x: T): string; (x: number): T; } +>T : T +>x : T +>T : T +>T : T +>x : number +>T : T + + var r14 = foo7(1, a); // any => string (+1 overload) [inferences are made for T, but lambda not contextually typed] +>r14 : { (x: any): string; (x: any, y?: any): string; } +>foo7(1, a) : { (x: any): string; (x: any, y?: any): string; } +>foo7 : (x: T, cb: { (x: T): string; (x: T, y?: T): string; }) => { (x: T): string; (x: T, y?: T): string; } +>a : { (x: T): string; (x: number): T; } +} diff --git a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments2.js b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments2.js index dfe62bbc11a..25001bd86bb 100644 --- a/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments2.js +++ b/tests/baselines/reference/genericCallWithOverloadedFunctionTypedArguments2.js @@ -38,6 +38,8 @@ module GenericParameter { } //// [genericCallWithOverloadedFunctionTypedArguments2.js] +// Function typed arguments with multiple signatures must be passed an implementation that matches all of them +// Inferences are made quadratic-pairwise to and from these overload sets var NonGenericParameter; (function (NonGenericParameter) { var a; @@ -47,22 +49,22 @@ var NonGenericParameter; var r3 = foo4(function (x) { var r; return r; - }); + }); // ok })(NonGenericParameter || (NonGenericParameter = {})); var GenericParameter; (function (GenericParameter) { function foo5(cb) { return cb; } - var r6 = foo5(function (x) { return x; }); + var r6 = foo5(function (x) { return x; }); // ok function foo6(cb) { return cb; } - var r10 = foo6(function (x, y) { return ''; }); + var r10 = foo6(function (x, y) { return ''; }); // error function foo7(x, cb) { return cb; } - var r13 = foo7(1, function (x) { return x; }); + var r13 = foo7(1, function (x) { return x; }); // ok var a; - var r14 = foo7(1, a); + var r14 = foo7(1, a); // ok })(GenericParameter || (GenericParameter = {})); diff --git a/tests/baselines/reference/genericCallbacksAndClassHierarchy.js b/tests/baselines/reference/genericCallbacksAndClassHierarchy.js index 7cf2cc22fbe..682cd6010f1 100644 --- a/tests/baselines/reference/genericCallbacksAndClassHierarchy.js +++ b/tests/baselines/reference/genericCallbacksAndClassHierarchy.js @@ -59,6 +59,7 @@ var M; var f = function (newValue) { }; var v = viewModel.value; + // both of these should work v.subscribe(f); v.subscribe(function (newValue) { }); diff --git a/tests/baselines/reference/genericCallbacksAndClassHierarchy.types b/tests/baselines/reference/genericCallbacksAndClassHierarchy.types new file mode 100644 index 00000000000..97e584dca3f --- /dev/null +++ b/tests/baselines/reference/genericCallbacksAndClassHierarchy.types @@ -0,0 +1,83 @@ +=== tests/cases/compiler/genericCallbacksAndClassHierarchy.ts === +module M { +>M : typeof M + + export interface I { +>I : I +>T : T + + subscribe(callback: (newValue: T) => void ): any; +>subscribe : (callback: (newValue: T) => void) => any +>callback : (newValue: T) => void +>newValue : T +>T : T + } + export class C1 { +>C1 : C1 +>T : T + + public value: I; +>value : I +>I : I +>T : T + } + export class A { +>A : A +>T : T + + public dummy: any; +>dummy : any + } + export class B extends C1> { } +>B : B +>T : T +>C1 : C1 +>A : A +>T : T + + export class D { +>D : D +>T : T + + _subscribe(viewModel: B): void { +>_subscribe : (viewModel: B) => void +>viewModel : B +>B : B +>T : T + + var f = (newValue: A) => { }; +>f : (newValue: A) => void +>(newValue: A) => { } : (newValue: A) => void +>newValue : A +>A : A +>T : T + + var v: I> = viewModel.value; +>v : I> +>I : I +>A : A +>T : T +>viewModel.value : I> +>viewModel : B +>value : I> + + // both of these should work + v.subscribe(f); +>v.subscribe(f) : any +>v.subscribe : (callback: (newValue: A) => void) => any +>v : I> +>subscribe : (callback: (newValue: A) => void) => any +>f : (newValue: A) => void + + v.subscribe((newValue: A) => { }); +>v.subscribe((newValue: A) => { }) : any +>v.subscribe : (callback: (newValue: A) => void) => any +>v : I> +>subscribe : (callback: (newValue: A) => void) => any +>(newValue: A) => { } : (newValue: A) => void +>newValue : A +>A : A +>T : T + } + } +} diff --git a/tests/baselines/reference/genericChainedCalls.js b/tests/baselines/reference/genericChainedCalls.js index 536d156196e..618d34cbc5a 100644 --- a/tests/baselines/reference/genericChainedCalls.js +++ b/tests/baselines/reference/genericChainedCalls.js @@ -17,5 +17,5 @@ var s3 = s2.func(num => num.toString()) //// [genericChainedCalls.js] var r1 = v1.func(function (num) { return num.toString(); }).func(function (str) { return str.length; }).func(function (num) { return num.toString(); }); var s1 = v1.func(function (num) { return num.toString(); }); -var s2 = s1.func(function (str) { return str.length; }); +var s2 = s1.func(function (str) { return str.length; }); // should also error var s3 = s2.func(function (num) { return num.toString(); }); diff --git a/tests/baselines/reference/genericClassImplementingGenericInterfaceFromAnotherModule.types b/tests/baselines/reference/genericClassImplementingGenericInterfaceFromAnotherModule.types new file mode 100644 index 00000000000..337485dee2c --- /dev/null +++ b/tests/baselines/reference/genericClassImplementingGenericInterfaceFromAnotherModule.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/genericClassImplementingGenericInterfaceFromAnotherModule.ts === +module foo { +>foo : unknown + + export interface IFoo { } +>IFoo : IFoo +>T : T +} +module bar { +>bar : typeof bar + + export class Foo implements foo.IFoo { } +>Foo : Foo +>T : T +>foo : unknown +>IFoo : foo.IFoo +>T : T +} + diff --git a/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types b/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types new file mode 100644 index 00000000000..800b215f123 --- /dev/null +++ b/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/genericClassInheritsConstructorFromNonGenericClass.ts === +class A extends B { } +>A : A +>B : B + +class B extends C { } +>B : B +>U : U +>C : C + +class C { +>C : C + + constructor(p: string) { } +>p : string +} diff --git a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types new file mode 100644 index 00000000000..2d39c0a465b --- /dev/null +++ b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types @@ -0,0 +1,255 @@ +=== tests/cases/compiler/genericClassPropertyInheritanceSpecialization.ts === +interface KnockoutObservableBase { +>KnockoutObservableBase : KnockoutObservableBase +>T : T + + peek(): T; +>peek : () => T +>T : T + + (): T; +>T : T + + (value: T): void; +>value : T +>T : T +} + +interface KnockoutObservable extends KnockoutObservableBase { +>KnockoutObservable : KnockoutObservable +>T : T +>KnockoutObservableBase : KnockoutObservableBase +>T : T + + equalityComparer(a: T, b: T): boolean; +>equalityComparer : (a: T, b: T) => boolean +>a : T +>T : T +>b : T +>T : T + + valueHasMutated(): void; +>valueHasMutated : () => void + + valueWillMutate(): void; +>valueWillMutate : () => void +} + +interface KnockoutObservableArray extends KnockoutObservable { +>KnockoutObservableArray : KnockoutObservableArray +>T : T +>KnockoutObservable : KnockoutObservable +>T : T + + indexOf(searchElement: T, fromIndex?: number): number; +>indexOf : (searchElement: T, fromIndex?: number) => number +>searchElement : T +>T : T +>fromIndex : number + + slice(start: number, end?: number): T[]; +>slice : (start: number, end?: number) => T[] +>start : number +>end : number +>T : T + + splice(start: number, deleteCount?: number, ...items: T[]): T[]; +>splice : (start: number, deleteCount?: number, ...items: T[]) => T[] +>start : number +>deleteCount : number +>items : T[] +>T : T +>T : T + + pop(): T; +>pop : () => T +>T : T + + push(...items: T[]): void; +>push : (...items: T[]) => void +>items : T[] +>T : T + + shift(): T; +>shift : () => T +>T : T + + unshift(...items: T[]): number; +>unshift : (...items: T[]) => number +>items : T[] +>T : T + + reverse(): T[]; +>reverse : () => T[] +>T : T + + sort(compareFunction?: (a: T, b: T) => number): void; +>sort : (compareFunction?: (a: T, b: T) => number) => void +>compareFunction : (a: T, b: T) => number +>a : T +>T : T +>b : T +>T : T + + replace(oldItem: T, newItem: T): void; +>replace : (oldItem: T, newItem: T) => void +>oldItem : T +>T : T +>newItem : T +>T : T + + remove(item: T): T[]; +>remove : (item: T) => T[] +>item : T +>T : T +>T : T + + removeAll(items?: T[]): T[]; +>removeAll : (items?: T[]) => T[] +>items : T[] +>T : T +>T : T + + destroy(item: T): void; +>destroy : (item: T) => void +>item : T +>T : T + + destroyAll(items?: T[]): void; +>destroyAll : (items?: T[]) => void +>items : T[] +>T : T +} + +interface KnockoutObservableArrayStatic { +>KnockoutObservableArrayStatic : KnockoutObservableArrayStatic + + fn: KnockoutObservableArray; +>fn : KnockoutObservableArray +>KnockoutObservableArray : KnockoutObservableArray + + (value?: T[]): KnockoutObservableArray; +>T : T +>value : T[] +>T : T +>KnockoutObservableArray : KnockoutObservableArray +>T : T +} + +declare module ko { +>ko : typeof ko + + export var observableArray: KnockoutObservableArrayStatic; +>observableArray : KnockoutObservableArrayStatic +>KnockoutObservableArrayStatic : KnockoutObservableArrayStatic +} + +module Portal.Controls.Validators { +>Portal : typeof Portal +>Controls : typeof Controls +>Validators : typeof Validators + + export class Validator { +>Validator : Validator +>TValue : TValue + + private _subscription; +>_subscription : any + + public message: KnockoutObservable; +>message : KnockoutObservable +>KnockoutObservable : KnockoutObservable + + public validationState: KnockoutObservable; +>validationState : KnockoutObservable +>KnockoutObservable : KnockoutObservable + + public validate: KnockoutObservable; +>validate : KnockoutObservable +>KnockoutObservable : KnockoutObservable +>TValue : TValue + + constructor(message?: string) { } +>message : string + + public destroy(): void { } +>destroy : () => void + + public _validate(value: TValue): number {return 0 } +>_validate : (value: TValue) => number +>value : TValue +>TValue : TValue + } +} + +module PortalFx.ViewModels.Controls.Validators { +>PortalFx : typeof PortalFx +>ViewModels : typeof ViewModels +>Controls : typeof Controls +>Validators : typeof Validators + + export class Validator extends Portal.Controls.Validators.Validator { +>Validator : Validator +>TValue : TValue +>Portal : unknown +>Controls : unknown +>Validators : unknown +>Validator : Portal.Controls.Validators.Validator +>TValue : TValue + + constructor(message?: string) { +>message : string + + super(message); +>super(message) : void +>super : typeof Portal.Controls.Validators.Validator +>message : string + } + } + +} + +interface Contract { +>Contract : Contract +>TValue : TValue + + validators: KnockoutObservableArray>; +>validators : KnockoutObservableArray> +>KnockoutObservableArray : KnockoutObservableArray +>PortalFx : unknown +>ViewModels : unknown +>Controls : unknown +>Validators : unknown +>Validator : PortalFx.ViewModels.Controls.Validators.Validator +>TValue : TValue +} + + +class ViewModel implements Contract { +>ViewModel : ViewModel +>TValue : TValue +>Contract : Contract +>TValue : TValue + + public validators: KnockoutObservableArray> = ko.observableArray>(); +>validators : KnockoutObservableArray> +>KnockoutObservableArray : KnockoutObservableArray +>PortalFx : unknown +>ViewModels : unknown +>Controls : unknown +>Validators : unknown +>Validator : PortalFx.ViewModels.Controls.Validators.Validator +>TValue : TValue +>ko.observableArray>() : KnockoutObservableArray> +>ko.observableArray : KnockoutObservableArrayStatic +>ko : typeof ko +>observableArray : KnockoutObservableArrayStatic +>PortalFx : unknown +>ViewModels : unknown +>Controls : unknown +>Validators : unknown +>Validator : PortalFx.ViewModels.Controls.Validators.Validator +>TValue : TValue +} + + diff --git a/tests/baselines/reference/genericClassStaticMethod.types b/tests/baselines/reference/genericClassStaticMethod.types new file mode 100644 index 00000000000..3d4c02317d6 --- /dev/null +++ b/tests/baselines/reference/genericClassStaticMethod.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/genericClassStaticMethod.ts === +class Foo { +>Foo : Foo +>T : T + + static getFoo() { +>getFoo : () => void + } +} + +class Bar extends Foo { +>Bar : Bar +>T : T +>Foo : Foo +>T : T + + static getFoo() { +>getFoo : () => void + } +} + diff --git a/tests/baselines/reference/genericClassWithFunctionTypedMemberArguments.js b/tests/baselines/reference/genericClassWithFunctionTypedMemberArguments.js index e12e5a19e8c..1af5f0ea6e6 100644 --- a/tests/baselines/reference/genericClassWithFunctionTypedMemberArguments.js +++ b/tests/baselines/reference/genericClassWithFunctionTypedMemberArguments.js @@ -65,6 +65,8 @@ module WithCandidates { } //// [genericClassWithFunctionTypedMemberArguments.js] +// Generic functions used as arguments for function typed parameters are not used to make inferences from +// Using function arguments, no errors expected var ImmediatelyFix; (function (ImmediatelyFix) { var C = (function () { @@ -76,9 +78,9 @@ var ImmediatelyFix; return C; })(); var c = new C(); - var r = c.foo(function (x) { return ''; }); - var r2 = c.foo(function (x) { return ''; }); - var r3 = c.foo(function (x) { return ''; }); + var r = c.foo(function (x) { return ''; }); // {} + var r2 = c.foo(function (x) { return ''; }); // string + var r3 = c.foo(function (x) { return ''; }); // {} var C2 = (function () { function C2() { } @@ -88,8 +90,8 @@ var ImmediatelyFix; return C2; })(); var c2 = new C2(); - var ra = c2.foo(function (x) { return 1; }); - var r3a = c2.foo(function (x) { return 1; }); + var ra = c2.foo(function (x) { return 1; }); // number + var r3a = c2.foo(function (x) { return 1; }); // number })(ImmediatelyFix || (ImmediatelyFix = {})); var WithCandidates; (function (WithCandidates) { @@ -104,9 +106,9 @@ var WithCandidates; var c; var r4 = c.foo2(1, function (a) { return ''; - }); - var r5 = c.foo2(1, function (a) { return ''; }); - var r6 = c.foo2('', function (a) { return 1; }); + }); // string, contextual signature instantiation is applied to generic functions + var r5 = c.foo2(1, function (a) { return ''; }); // string + var r6 = c.foo2('', function (a) { return 1; }); // number var C2 = (function () { function C2() { } @@ -116,10 +118,10 @@ var WithCandidates; return C2; })(); var c2; - var r7 = c2.foo3(1, function (a) { return ''; }, ''); + var r7 = c2.foo3(1, function (a) { return ''; }, ''); // string var r8 = c2.foo3(1, function (a) { return ''; - }, ''); + }, ''); // string var C3 = (function () { function C3() { } @@ -130,12 +132,12 @@ var WithCandidates; })(); var c3; function other(t, u) { - var r10 = c.foo2(1, function (x) { return ''; }); - var r10 = c.foo2(1, function (x) { return ''; }); - var r11 = c3.foo3(1, function (x) { return ''; }, ''); - var r11b = c3.foo3(1, function (x) { return ''; }, 1); + var r10 = c.foo2(1, function (x) { return ''; }); // string, non-generic signature allows inferences to be made + var r10 = c.foo2(1, function (x) { return ''; }); // string + var r11 = c3.foo3(1, function (x) { return ''; }, ''); // string + var r11b = c3.foo3(1, function (x) { return ''; }, 1); // {} var r12 = c3.foo3(1, function (a) { return ''; - }, 1); + }, 1); // {} } })(WithCandidates || (WithCandidates = {})); diff --git a/tests/baselines/reference/genericClassWithFunctionTypedMemberArguments.types b/tests/baselines/reference/genericClassWithFunctionTypedMemberArguments.types new file mode 100644 index 00000000000..68b94d81d02 --- /dev/null +++ b/tests/baselines/reference/genericClassWithFunctionTypedMemberArguments.types @@ -0,0 +1,297 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericClassWithFunctionTypedMemberArguments.ts === +// Generic functions used as arguments for function typed parameters are not used to make inferences from +// Using function arguments, no errors expected + +module ImmediatelyFix { +>ImmediatelyFix : typeof ImmediatelyFix + + class C { +>C : C +>T : T + + foo(x: (a: T) => T) { +>foo : (x: (a: T) => T) => T +>T : T +>x : (a: T) => T +>a : T +>T : T +>T : T + + return x(null); +>x(null) : T +>x : (a: T) => T + } + } + + var c = new C(); +>c : C +>new C() : C +>C : typeof C + + var r = c.foo((x: U) => ''); // {} +>r : {} +>c.foo((x: U) => '') : {} +>c.foo : (x: (a: T) => T) => T +>c : C +>foo : (x: (a: T) => T) => T +>(x: U) => '' : (x: U) => string +>U : U +>x : U +>U : U + + var r2 = c.foo((x: U) => ''); // string +>r2 : string +>c.foo((x: U) => '') : string +>c.foo : (x: (a: T) => T) => T +>c : C +>foo : (x: (a: T) => T) => T +>(x: U) => '' : (x: U) => string +>U : U +>x : U +>U : U + + var r3 = c.foo(x => ''); // {} +>r3 : {} +>c.foo(x => '') : {} +>c.foo : (x: (a: T) => T) => T +>c : C +>foo : (x: (a: T) => T) => T +>x => '' : (x: {}) => string +>x : {} + + class C2 { +>C2 : C2 +>T : T + + foo(x: (a: T) => T) { +>foo : (x: (a: T) => T) => T +>x : (a: T) => T +>a : T +>T : T +>T : T + + return x(null); +>x(null) : T +>x : (a: T) => T + } + } + + var c2 = new C2(); +>c2 : C2 +>new C2() : C2 +>C2 : typeof C2 + + var ra = c2.foo((x: U) => 1); // number +>ra : number +>c2.foo((x: U) => 1) : number +>c2.foo : (x: (a: number) => number) => number +>c2 : C2 +>foo : (x: (a: number) => number) => number +>(x: U) => 1 : (x: U) => number +>U : U +>x : U +>U : U + + var r3a = c2.foo(x => 1); // number +>r3a : number +>c2.foo(x => 1) : number +>c2.foo : (x: (a: number) => number) => number +>c2 : C2 +>foo : (x: (a: number) => number) => number +>x => 1 : (x: number) => number +>x : number +} + +module WithCandidates { +>WithCandidates : typeof WithCandidates + + class C { +>C : C +>T : T + + foo2(x: T, cb: (a: T) => U) { +>foo2 : (x: T, cb: (a: T) => U) => U +>T : T +>U : U +>x : T +>T : T +>cb : (a: T) => U +>a : T +>T : T +>U : U + + return cb(x); +>cb(x) : U +>cb : (a: T) => U +>x : T + } + } + + var c: C; +>c : C +>C : C + + var r4 = c.foo2(1, function (a: Z) { return '' }); // string, contextual signature instantiation is applied to generic functions +>r4 : string +>c.foo2(1, function (a: Z) { return '' }) : string +>c.foo2 : (x: T, cb: (a: T) => U) => U +>c : C +>foo2 : (x: T, cb: (a: T) => U) => U +>function (a: Z) { return '' } : (a: Z) => string +>Z : Z +>a : Z +>Z : Z + + var r5 = c.foo2(1, (a) => ''); // string +>r5 : string +>c.foo2(1, (a) => '') : string +>c.foo2 : (x: T, cb: (a: T) => U) => U +>c : C +>foo2 : (x: T, cb: (a: T) => U) => U +>(a) => '' : (a: number) => string +>a : number + + var r6 = c.foo2('', (a: Z) => 1); // number +>r6 : number +>c.foo2('', (a: Z) => 1) : number +>c.foo2 : (x: T, cb: (a: T) => U) => U +>c : C +>foo2 : (x: T, cb: (a: T) => U) => U +>(a: Z) => 1 : (a: Z) => number +>Z : Z +>a : Z +>Z : Z + + class C2 { +>C2 : C2 +>T : T +>U : U + + foo3(x: T, cb: (a: T) => U, y: U) { +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>x : T +>T : T +>cb : (a: T) => U +>a : T +>T : T +>U : U +>y : U +>U : U + + return cb(x); +>cb(x) : U +>cb : (a: T) => U +>x : T + } + } + + var c2: C2; +>c2 : C2 +>C2 : C2 + + var r7 = c2.foo3(1, (a: Z) => '', ''); // string +>r7 : string +>c2.foo3(1, (a: Z) => '', '') : string +>c2.foo3 : (x: number, cb: (a: number) => string, y: string) => string +>c2 : C2 +>foo3 : (x: number, cb: (a: number) => string, y: string) => string +>(a: Z) => '' : (a: Z) => string +>Z : Z +>a : Z +>Z : Z + + var r8 = c2.foo3(1, function (a) { return '' }, ''); // string +>r8 : string +>c2.foo3(1, function (a) { return '' }, '') : string +>c2.foo3 : (x: number, cb: (a: number) => string, y: string) => string +>c2 : C2 +>foo3 : (x: number, cb: (a: number) => string, y: string) => string +>function (a) { return '' } : (a: number) => string +>a : number + + class C3 { +>C3 : C3 +>T : T +>U : U + + foo3(x: T, cb: (a: T) => U, y: U) { +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>T : T +>U : U +>x : T +>T : T +>cb : (a: T) => U +>a : T +>T : T +>U : U +>y : U +>U : U + + return cb(x); +>cb(x) : U +>cb : (a: T) => U +>x : T + } + } + var c3: C3; +>c3 : C3 +>C3 : C3 + + function other(t: T, u: U) { +>other : (t: T, u: U) => void +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U + + var r10 = c.foo2(1, (x: T) => ''); // string, non-generic signature allows inferences to be made +>r10 : string +>c.foo2(1, (x: T) => '') : string +>c.foo2 : (x: T, cb: (a: T) => U) => U +>c : C +>foo2 : (x: T, cb: (a: T) => U) => U +>(x: T) => '' : (x: T) => string +>x : T +>T : T + + var r10 = c.foo2(1, (x) => ''); // string +>r10 : string +>c.foo2(1, (x) => '') : string +>c.foo2 : (x: T, cb: (a: T) => U) => U +>c : C +>foo2 : (x: T, cb: (a: T) => U) => U +>(x) => '' : (x: number) => string +>x : number + + var r11 = c3.foo3(1, (x: T) => '', ''); // string +>r11 : string +>c3.foo3(1, (x: T) => '', '') : string +>c3.foo3 : (x: T, cb: (a: T) => U, y: U) => U +>c3 : C3 +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>(x: T) => '' : (x: T) => string +>x : T +>T : T + + var r11b = c3.foo3(1, (x: T) => '', 1); // {} +>r11b : {} +>c3.foo3(1, (x: T) => '', 1) : {} +>c3.foo3 : (x: T, cb: (a: T) => U, y: U) => U +>c3 : C3 +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>(x: T) => '' : (x: T) => string +>x : T +>T : T + + var r12 = c3.foo3(1, function (a) { return '' }, 1); // {} +>r12 : {} +>c3.foo3(1, function (a) { return '' }, 1) : {} +>c3.foo3 : (x: T, cb: (a: T) => U, y: U) => U +>c3 : C3 +>foo3 : (x: T, cb: (a: T) => U, y: U) => U +>function (a) { return '' } : (a: number) => string +>a : number + } +} diff --git a/tests/baselines/reference/genericClassWithObjectTypeArgsAndConstraints.js b/tests/baselines/reference/genericClassWithObjectTypeArgsAndConstraints.js index b1f306d485f..5b0a4c11164 100644 --- a/tests/baselines/reference/genericClassWithObjectTypeArgsAndConstraints.js +++ b/tests/baselines/reference/genericClassWithObjectTypeArgsAndConstraints.js @@ -61,6 +61,8 @@ module Interface { } //// [genericClassWithObjectTypeArgsAndConstraints.js] +// Generic call with constraints infering type parameter from object member properties +// No errors expected var C = (function () { function C() { } diff --git a/tests/baselines/reference/genericClassWithObjectTypeArgsAndConstraints.types b/tests/baselines/reference/genericClassWithObjectTypeArgsAndConstraints.types new file mode 100644 index 00000000000..25fe052d498 --- /dev/null +++ b/tests/baselines/reference/genericClassWithObjectTypeArgsAndConstraints.types @@ -0,0 +1,240 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/genericClassWithObjectTypeArgsAndConstraints.ts === +// Generic call with constraints infering type parameter from object member properties +// No errors expected + +class C { +>C : C + + x: string; +>x : string +} + +class D { +>D : D + + x: string; +>x : string + + y: string; +>y : string +} + +class X { +>X : X +>T : T + + x: T; +>x : T +>T : T +} + +module Class { +>Class : typeof Class + + class G { +>G : G +>T : T +>x : string + + foo(t: X, t2: X) { +>foo : (t: X, t2: X) => T +>T : T +>x : string +>t : X +>X : X +>T : T +>t2 : X +>X : X +>T : T + + var x: T; +>x : T +>T : T + + return x; +>x : T + } + } + + var c1 = new X(); +>c1 : X +>new X() : X +>X : typeof X +>C : C + + var d1 = new X(); +>d1 : X +>new X() : X +>X : typeof X +>D : D + + var g: G<{ x: string; y: string }>; +>g : G<{ x: string; y: string; }> +>G : G +>x : string +>y : string + + var r = g.foo(c1, d1); +>r : C +>g.foo(c1, d1) : C +>g.foo : (t: X, t2: X) => T +>g : G<{ x: string; y: string; }> +>foo : (t: X, t2: X) => T +>c1 : X +>d1 : X + + var r2 = g.foo(c1, c1); +>r2 : C +>g.foo(c1, c1) : C +>g.foo : (t: X, t2: X) => T +>g : G<{ x: string; y: string; }> +>foo : (t: X, t2: X) => T +>c1 : X +>c1 : X + + class G2 { +>G2 : G2 +>T : T +>C : C + + foo2(t: X, t2: X) { +>foo2 : (t: X, t2: X) => T +>T : T +>C : C +>t : X +>X : X +>T : T +>t2 : X +>X : X +>T : T + + var x: T; +>x : T +>T : T + + return x; +>x : T + } + } + var g2: G2; +>g2 : G2 +>G2 : G2 +>D : D + + var r = g2.foo2(c1, d1); +>r : C +>g2.foo2(c1, d1) : C +>g2.foo2 : (t: X, t2: X) => T +>g2 : G2 +>foo2 : (t: X, t2: X) => T +>c1 : X +>d1 : X + + var r2 = g2.foo2(c1, c1); +>r2 : C +>g2.foo2(c1, c1) : C +>g2.foo2 : (t: X, t2: X) => T +>g2 : G2 +>foo2 : (t: X, t2: X) => T +>c1 : X +>c1 : X +} + +module Interface { +>Interface : typeof Interface + + interface G { +>G : G +>T : T +>x : string + + foo(t: X, t2: X): T; +>foo : (t: X, t2: X) => T +>T : T +>x : string +>t : X +>X : X +>T : T +>t2 : X +>X : X +>T : T +>T : T + } + + var c1 = new X(); +>c1 : X +>new X() : X +>X : typeof X +>C : C + + var d1 = new X(); +>d1 : X +>new X() : X +>X : typeof X +>D : D + + var g: G<{ x: string; y: string }>; +>g : G<{ x: string; y: string; }> +>G : G +>x : string +>y : string + + var r = g.foo(c1, d1); +>r : C +>g.foo(c1, d1) : C +>g.foo : (t: X, t2: X) => T +>g : G<{ x: string; y: string; }> +>foo : (t: X, t2: X) => T +>c1 : X +>d1 : X + + var r2 = g.foo(c1, c1); +>r2 : C +>g.foo(c1, c1) : C +>g.foo : (t: X, t2: X) => T +>g : G<{ x: string; y: string; }> +>foo : (t: X, t2: X) => T +>c1 : X +>c1 : X + + interface G2 { +>G2 : G2 +>T : T +>C : C + + foo2(t: X, t2: X): T; +>foo2 : (t: X, t2: X) => T +>T : T +>C : C +>t : X +>X : X +>T : T +>t2 : X +>X : X +>T : T +>T : T + } + + var g2: G2; +>g2 : G2 +>G2 : G2 +>D : D + + var r = g2.foo2(c1, d1); +>r : C +>g2.foo2(c1, d1) : C +>g2.foo2 : (t: X, t2: X) => T +>g2 : G2 +>foo2 : (t: X, t2: X) => T +>c1 : X +>d1 : X + + var r2 = g2.foo2(c1, c1); +>r2 : C +>g2.foo2(c1, c1) : C +>g2.foo2 : (t: X, t2: X) => T +>g2 : G2 +>foo2 : (t: X, t2: X) => T +>c1 : X +>c1 : X +} diff --git a/tests/baselines/reference/genericClassWithStaticFactory.js b/tests/baselines/reference/genericClassWithStaticFactory.js index 72cb53fefad..6fbef32dc1b 100644 --- a/tests/baselines/reference/genericClassWithStaticFactory.js +++ b/tests/baselines/reference/genericClassWithStaticFactory.js @@ -183,7 +183,7 @@ var Editor; entry.next = this.next; entry.prev = this; this.next = entry; - entry.next.prev = entry; + entry.next.prev = entry; // entry.next.prev does not show intellisense, but entry.prev.prev does }; List.prototype.push = function (data) { var entry = this.listFactory.MakeEntry(data); @@ -192,7 +192,7 @@ var Editor; entry.next = this.next; entry.prev = this; this.next = entry; - entry.next.prev = entry; + entry.next.prev = entry; // entry.next.prev does not show intellisense, but entry.prev.prev does }; List.prototype.popEntry = function (head) { if (this.next.isHead) { @@ -215,7 +215,7 @@ var Editor; entry.next = this.next; entry.prev = this; this.next = entry; - entry.next.prev = entry; + entry.next.prev = entry; // entry.next.prev does not show intellisense, but entry.prev.prev does return entry; }; List.prototype.insertEntryBefore = function (entry) { @@ -252,6 +252,7 @@ var Editor; return null; } else if (entry.isHead) { + // Can't remove the head of a list! return null; } else { diff --git a/tests/baselines/reference/genericClassWithStaticFactory.types b/tests/baselines/reference/genericClassWithStaticFactory.types new file mode 100644 index 00000000000..b0df737ee68 --- /dev/null +++ b/tests/baselines/reference/genericClassWithStaticFactory.types @@ -0,0 +1,603 @@ +=== tests/cases/compiler/genericClassWithStaticFactory.ts === +module Editor { +>Editor : typeof Editor + + export class List { +>List : List +>T : T + + public next: List; +>next : List +>List : List +>T : T + + public prev: List; +>prev : List +>List : List +>T : T + + private listFactory: ListFactory; +>listFactory : ListFactory +>ListFactory : ListFactory +>T : T + + constructor(public isHead: boolean, public data: T) { +>isHead : boolean +>data : T +>T : T + + this.listFactory = new ListFactory(); +>this.listFactory = new ListFactory() : ListFactory +>this.listFactory : ListFactory +>this : List +>listFactory : ListFactory +>new ListFactory() : ListFactory +>ListFactory : typeof ListFactory +>T : T + + } + + public add(data: T): List { +>add : (data: T) => List +>data : T +>T : T +>List : List +>T : T + + var entry = this.listFactory.MakeEntry(data); +>entry : List +>this.listFactory.MakeEntry(data) : List +>this.listFactory.MakeEntry : (data: T) => List +>this.listFactory : ListFactory +>this : List +>listFactory : ListFactory +>MakeEntry : (data: T) => List +>data : T + + this.prev.next = entry; +>this.prev.next = entry : List +>this.prev.next : List +>this.prev : List +>this : List +>prev : List +>next : List +>entry : List + + entry.next = this; +>entry.next = this : List +>entry.next : List +>entry : List +>next : List +>this : List + + entry.prev = this.prev; +>entry.prev = this.prev : List +>entry.prev : List +>entry : List +>prev : List +>this.prev : List +>this : List +>prev : List + + this.prev = entry; +>this.prev = entry : List +>this.prev : List +>this : List +>prev : List +>entry : List + + return entry; +>entry : List + } + + public count(): number { +>count : () => number + + var entry: List; +>entry : List +>List : List +>T : T + + var i: number; +>i : number + + entry = this.next; +>entry = this.next : List +>entry : List +>this.next : List +>this : List +>next : List + + for (i = 0; !(entry.isHead); i++) { +>i = 0 : number +>i : number +>!(entry.isHead) : boolean +>(entry.isHead) : boolean +>entry.isHead : boolean +>entry : List +>isHead : boolean +>i++ : number +>i : number + + entry = entry.next; +>entry = entry.next : List +>entry : List +>entry.next : List +>entry : List +>next : List + } + + return (i); +>(i) : number +>i : number + } + + public isEmpty(): boolean { +>isEmpty : () => boolean + + return (this.next == this); +>(this.next == this) : boolean +>this.next == this : boolean +>this.next : List +>this : List +>next : List +>this : List + } + + public first(): T { +>first : () => T +>T : T + + if (this.isEmpty()) +>this.isEmpty() : boolean +>this.isEmpty : () => boolean +>this : List +>isEmpty : () => boolean + { + return this.next.data; +>this.next.data : T +>this.next : List +>this : List +>next : List +>data : T + } + else { + return null; + } + } + + public pushEntry(entry: List): void { +>pushEntry : (entry: List) => void +>entry : List +>List : List +>T : T + + entry.isHead = false; +>entry.isHead = false : boolean +>entry.isHead : boolean +>entry : List +>isHead : boolean + + entry.next = this.next; +>entry.next = this.next : List +>entry.next : List +>entry : List +>next : List +>this.next : List +>this : List +>next : List + + entry.prev = this; +>entry.prev = this : List +>entry.prev : List +>entry : List +>prev : List +>this : List + + this.next = entry; +>this.next = entry : List +>this.next : List +>this : List +>next : List +>entry : List + + entry.next.prev = entry; // entry.next.prev does not show intellisense, but entry.prev.prev does +>entry.next.prev = entry : List +>entry.next.prev : List +>entry.next : List +>entry : List +>next : List +>prev : List +>entry : List + } + + public push(data: T): void { +>push : (data: T) => void +>data : T +>T : T + + var entry = this.listFactory.MakeEntry(data); +>entry : List +>this.listFactory.MakeEntry(data) : List +>this.listFactory.MakeEntry : (data: T) => List +>this.listFactory : ListFactory +>this : List +>listFactory : ListFactory +>MakeEntry : (data: T) => List +>data : T + + entry.data = data; +>entry.data = data : T +>entry.data : T +>entry : List +>data : T +>data : T + + entry.isHead = false; +>entry.isHead = false : boolean +>entry.isHead : boolean +>entry : List +>isHead : boolean + + entry.next = this.next; +>entry.next = this.next : List +>entry.next : List +>entry : List +>next : List +>this.next : List +>this : List +>next : List + + entry.prev = this; +>entry.prev = this : List +>entry.prev : List +>entry : List +>prev : List +>this : List + + this.next = entry; +>this.next = entry : List +>this.next : List +>this : List +>next : List +>entry : List + + entry.next.prev = entry; // entry.next.prev does not show intellisense, but entry.prev.prev does +>entry.next.prev = entry : List +>entry.next.prev : List +>entry.next : List +>entry : List +>next : List +>prev : List +>entry : List + } + + public popEntry(head: List): List { +>popEntry : (head: List) => List +>head : List +>List : List +>T : T +>List : List +>T : T + + if (this.next.isHead) { +>this.next.isHead : boolean +>this.next : List +>this : List +>next : List +>isHead : boolean + + return null; + } + else { + return this.listFactory.RemoveEntry(this.next); +>this.listFactory.RemoveEntry(this.next) : List +>this.listFactory.RemoveEntry : (entry: List) => List +>this.listFactory : ListFactory +>this : List +>listFactory : ListFactory +>RemoveEntry : (entry: List) => List +>this.next : List +>this : List +>next : List + } + } + + public insertEntry(entry: List): List { +>insertEntry : (entry: List) => List +>entry : List +>List : List +>T : T +>List : List +>T : T + + entry.isHead = false; +>entry.isHead = false : boolean +>entry.isHead : boolean +>entry : List +>isHead : boolean + + this.prev.next = entry; +>this.prev.next = entry : List +>this.prev.next : List +>this.prev : List +>this : List +>prev : List +>next : List +>entry : List + + entry.next = this; +>entry.next = this : List +>entry.next : List +>entry : List +>next : List +>this : List + + entry.prev = this.prev; +>entry.prev = this.prev : List +>entry.prev : List +>entry : List +>prev : List +>this.prev : List +>this : List +>prev : List + + this.prev = entry; +>this.prev = entry : List +>this.prev : List +>this : List +>prev : List +>entry : List + + return entry; +>entry : List + } + + public insertAfter(data: T): List { +>insertAfter : (data: T) => List +>data : T +>T : T +>List : List +>T : T + + var entry: List = this.listFactory.MakeEntry(data); +>entry : List +>List : List +>T : T +>this.listFactory.MakeEntry(data) : List +>this.listFactory.MakeEntry : (data: T) => List +>this.listFactory : ListFactory +>this : List +>listFactory : ListFactory +>MakeEntry : (data: T) => List +>data : T + + entry.next = this.next; +>entry.next = this.next : List +>entry.next : List +>entry : List +>next : List +>this.next : List +>this : List +>next : List + + entry.prev = this; +>entry.prev = this : List +>entry.prev : List +>entry : List +>prev : List +>this : List + + this.next = entry; +>this.next = entry : List +>this.next : List +>this : List +>next : List +>entry : List + + entry.next.prev = entry;// entry.next.prev does not show intellisense, but entry.prev.prev does +>entry.next.prev = entry : List +>entry.next.prev : List +>entry.next : List +>entry : List +>next : List +>prev : List +>entry : List + + return entry; +>entry : List + } + + public insertEntryBefore(entry: List): List { +>insertEntryBefore : (entry: List) => List +>entry : List +>List : List +>T : T +>List : List +>T : T + + this.prev.next = entry; +>this.prev.next = entry : List +>this.prev.next : List +>this.prev : List +>this : List +>prev : List +>next : List +>entry : List + + entry.next = this; +>entry.next = this : List +>entry.next : List +>entry : List +>next : List +>this : List + + entry.prev = this.prev; +>entry.prev = this.prev : List +>entry.prev : List +>entry : List +>prev : List +>this.prev : List +>this : List +>prev : List + + this.prev = entry; +>this.prev = entry : List +>this.prev : List +>this : List +>prev : List +>entry : List + + return entry; +>entry : List + } + + public insertBefore(data: T): List { +>insertBefore : (data: T) => List +>data : T +>T : T +>List : List +>T : T + + var entry = this.listFactory.MakeEntry(data); +>entry : List +>this.listFactory.MakeEntry(data) : List +>this.listFactory.MakeEntry : (data: T) => List +>this.listFactory : ListFactory +>this : List +>listFactory : ListFactory +>MakeEntry : (data: T) => List +>data : T + + return this.insertEntryBefore(entry); +>this.insertEntryBefore(entry) : List +>this.insertEntryBefore : (entry: List) => List +>this : List +>insertEntryBefore : (entry: List) => List +>entry : List + } + } + + export class ListFactory { +>ListFactory : ListFactory +>T : T + + public MakeHead(): List { +>MakeHead : () => List +>T : T +>List : List +>T : T + + var entry: List = new List(true, null); +>entry : List +>List : List +>T : T +>new List(true, null) : List +>List : typeof List +>T : T + + entry.prev = entry; +>entry.prev = entry : List +>entry.prev : List +>entry : List +>prev : List +>entry : List + + entry.next = entry; +>entry.next = entry : List +>entry.next : List +>entry : List +>next : List +>entry : List + + return entry; +>entry : List + } + + public MakeEntry(data: T): List { +>MakeEntry : (data: T) => List +>T : T +>data : T +>T : T +>List : List +>T : T + + var entry: List = new List(false, data); +>entry : List +>List : List +>T : T +>new List(false, data) : List +>List : typeof List +>T : T +>data : T + + entry.prev = entry; +>entry.prev = entry : List +>entry.prev : List +>entry : List +>prev : List +>entry : List + + entry.next = entry; +>entry.next = entry : List +>entry.next : List +>entry : List +>next : List +>entry : List + + return entry; +>entry : List + } + + public RemoveEntry(entry: List): List { +>RemoveEntry : (entry: List) => List +>T : T +>entry : List +>List : List +>T : T +>List : List +>T : T + + if (entry == null) { +>entry == null : boolean +>entry : List + + return null; + } + else if (entry.isHead) { +>entry.isHead : boolean +>entry : List +>isHead : boolean + + // Can't remove the head of a list! + return null; + } + else { + entry.next.prev = entry.prev; +>entry.next.prev = entry.prev : List +>entry.next.prev : List +>entry.next : List +>entry : List +>next : List +>prev : List +>entry.prev : List +>entry : List +>prev : List + + entry.prev.next = entry.next; +>entry.prev.next = entry.next : List +>entry.prev.next : List +>entry.prev : List +>entry : List +>prev : List +>next : List +>entry.next : List +>entry : List +>next : List + + return entry; +>entry : List + } + } + } +} diff --git a/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js b/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js index 24890476cab..57d33a35990 100644 --- a/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js +++ b/tests/baselines/reference/genericClassWithStaticsUsingTypeArguments.js @@ -18,6 +18,7 @@ class Foo { //// [genericClassWithStaticsUsingTypeArguments.js] +// Should be error to use 'T' in all declarations within Foo. var Foo = (function () { function Foo() { } diff --git a/tests/baselines/reference/genericClasses0.js b/tests/baselines/reference/genericClasses0.js index 4b69110269a..158793a9cbf 100644 --- a/tests/baselines/reference/genericClasses0.js +++ b/tests/baselines/reference/genericClasses0.js @@ -14,7 +14,7 @@ var C = (function () { return C; })(); var v1; -var y = v1.x; +var y = v1.x; // should be 'string' //// [genericClasses0.d.ts] diff --git a/tests/baselines/reference/genericClasses0.types b/tests/baselines/reference/genericClasses0.types new file mode 100644 index 00000000000..b02fa07c219 --- /dev/null +++ b/tests/baselines/reference/genericClasses0.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/genericClasses0.ts === +class C { +>C : C +>T : T + + public x: T; +>x : T +>T : T +} + +var v1 : C; +>v1 : C +>C : C + +var y = v1.x; // should be 'string' +>y : string +>v1.x : string +>v1 : C +>x : string + diff --git a/tests/baselines/reference/genericClasses1.js b/tests/baselines/reference/genericClasses1.js index b3747a1023a..804d6624a32 100644 --- a/tests/baselines/reference/genericClasses1.js +++ b/tests/baselines/reference/genericClasses1.js @@ -14,7 +14,7 @@ var C = (function () { return C; })(); var v1 = new C(); -var y = v1.x; +var y = v1.x; // should be 'string' //// [genericClasses1.d.ts] diff --git a/tests/baselines/reference/genericClasses1.types b/tests/baselines/reference/genericClasses1.types new file mode 100644 index 00000000000..82ce172f5ea --- /dev/null +++ b/tests/baselines/reference/genericClasses1.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/genericClasses1.ts === +class C { +>C : C +>T : T + + public x: T; +>x : T +>T : T +} + +var v1 = new C(); +>v1 : C +>new C() : C +>C : typeof C + +var y = v1.x; // should be 'string' +>y : string +>v1.x : string +>v1 : C +>x : string + diff --git a/tests/baselines/reference/genericClasses2.js b/tests/baselines/reference/genericClasses2.js index 86393702b0c..b581621dc97 100644 --- a/tests/baselines/reference/genericClasses2.js +++ b/tests/baselines/reference/genericClasses2.js @@ -22,9 +22,9 @@ var C = (function () { return C; })(); var v1; -var y = v1.x; -var w = v1.y.a; -var z = v1.z.a; +var y = v1.x; // should be 'string' +var w = v1.y.a; // should be 'string' +var z = v1.z.a; // should be 'number' //// [genericClasses2.d.ts] diff --git a/tests/baselines/reference/genericClasses2.types b/tests/baselines/reference/genericClasses2.types new file mode 100644 index 00000000000..2b366f0a8fd --- /dev/null +++ b/tests/baselines/reference/genericClasses2.types @@ -0,0 +1,54 @@ +=== tests/cases/compiler/genericClasses2.ts === +interface Foo { +>Foo : Foo +>T : T + + a: T; +>a : T +>T : T +} + +class C { +>C : C +>T : T + + public x: T; +>x : T +>T : T + + public y: Foo; +>y : Foo +>Foo : Foo +>T : T + + public z: Foo; +>z : Foo +>Foo : Foo +} + +var v1 : C; +>v1 : C +>C : C + +var y = v1.x; // should be 'string' +>y : string +>v1.x : string +>v1 : C +>x : string + +var w = v1.y.a; // should be 'string' +>w : string +>v1.y.a : string +>v1.y : Foo +>v1 : C +>y : Foo +>a : string + +var z = v1.z.a; // should be 'number' +>z : number +>v1.z.a : number +>v1.z : Foo +>v1 : C +>z : Foo +>a : number + diff --git a/tests/baselines/reference/genericClasses3.js b/tests/baselines/reference/genericClasses3.js index 48634b449ec..621142c2e9a 100644 --- a/tests/baselines/reference/genericClasses3.js +++ b/tests/baselines/reference/genericClasses3.js @@ -37,8 +37,8 @@ var C = (function (_super) { return C; })(B); var v2; -var y = v2.x; -var u = v2.a; +var y = v2.x; // should be 'string' +var u = v2.a; // should be 'string' var z = v2.b; diff --git a/tests/baselines/reference/genericClasses3.types b/tests/baselines/reference/genericClasses3.types new file mode 100644 index 00000000000..ea0ebcd2cc7 --- /dev/null +++ b/tests/baselines/reference/genericClasses3.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/genericClasses3.ts === +class B { +>B : B +>T : T + + a: T; +>a : T +>T : T + + b: T; +>b : T +>T : T +} + +class C extends B { +>C : C +>T : T +>B : B +>T : T + + public x: T; +>x : T +>T : T +} + +var v2: C ; +>v2 : C +>C : C + +var y = v2.x; // should be 'string' +>y : string +>v2.x : string +>v2 : C +>x : string + +var u = v2.a; // should be 'string' +>u : string +>v2.a : string +>v2 : C +>a : string + +var z = v2.b; +>z : string +>v2.b : string +>v2 : C +>b : string + + diff --git a/tests/baselines/reference/genericClasses4.js b/tests/baselines/reference/genericClasses4.js index 4d00470f08a..24927413d3e 100644 --- a/tests/baselines/reference/genericClasses4.js +++ b/tests/baselines/reference/genericClasses4.js @@ -18,6 +18,7 @@ class Vec2_T } //// [genericClasses4.js] +// once caused stack overflow var Vec2_T = (function () { function Vec2_T(x, y) { this.x = x; diff --git a/tests/baselines/reference/genericClasses4.types b/tests/baselines/reference/genericClasses4.types new file mode 100644 index 00000000000..ac3d05be84d --- /dev/null +++ b/tests/baselines/reference/genericClasses4.types @@ -0,0 +1,98 @@ +=== tests/cases/compiler/genericClasses4.ts === +// once caused stack overflow +class Vec2_T +>Vec2_T : Vec2_T +>A : A +{ + constructor(public x: A, public y: A) { } +>x : A +>A : A +>y : A +>A : A + + fmap(f: (a: A) => B): Vec2_T { +>fmap : (f: (a: A) => B) => Vec2_T +>B : B +>f : (a: A) => B +>a : A +>A : A +>B : B +>Vec2_T : Vec2_T +>B : B + + var x:B = f(this.x); +>x : B +>B : B +>f(this.x) : B +>f : (a: A) => B +>this.x : A +>this : Vec2_T +>x : A + + var y:B = f(this.y); +>y : B +>B : B +>f(this.y) : B +>f : (a: A) => B +>this.y : A +>this : Vec2_T +>y : A + + var retval: Vec2_T = new Vec2_T(x, y); +>retval : Vec2_T +>Vec2_T : Vec2_T +>B : B +>new Vec2_T(x, y) : Vec2_T +>Vec2_T : typeof Vec2_T +>x : B +>y : B + + return retval; +>retval : Vec2_T + } + apply(f: Vec2_T<(a: A) => B>): Vec2_T { +>apply : (f: Vec2_T<(a: A) => B>) => Vec2_T +>B : B +>f : Vec2_T<(a: A) => B> +>Vec2_T : Vec2_T +>a : A +>A : A +>B : B +>Vec2_T : Vec2_T +>B : B + + var x:B = f.x(this.x); +>x : B +>B : B +>f.x(this.x) : B +>f.x : (a: A) => B +>f : Vec2_T<(a: A) => B> +>x : (a: A) => B +>this.x : A +>this : Vec2_T +>x : A + + var y:B = f.y(this.y); +>y : B +>B : B +>f.y(this.y) : B +>f.y : (a: A) => B +>f : Vec2_T<(a: A) => B> +>y : (a: A) => B +>this.y : A +>this : Vec2_T +>y : A + + var retval: Vec2_T = new Vec2_T(x, y); +>retval : Vec2_T +>Vec2_T : Vec2_T +>B : B +>new Vec2_T(x, y) : Vec2_T +>Vec2_T : typeof Vec2_T +>x : B +>y : B + + return retval; +>retval : Vec2_T + } +} diff --git a/tests/baselines/reference/genericClassesInModule.types b/tests/baselines/reference/genericClassesInModule.types new file mode 100644 index 00000000000..8c25523803c --- /dev/null +++ b/tests/baselines/reference/genericClassesInModule.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/genericClassesInModule.ts === + +module Foo { +>Foo : typeof Foo + + export class B{ } +>B : B +>T : T + + export class A { } +>A : A +} + +var a = new Foo.B(); +>a : Foo.B +>new Foo.B() : Foo.B +>Foo.B : typeof Foo.B +>Foo : typeof Foo +>B : typeof Foo.B +>Foo : unknown +>A : Foo.A + diff --git a/tests/baselines/reference/genericClassesInModule2.types b/tests/baselines/reference/genericClassesInModule2.types new file mode 100644 index 00000000000..5da8c43097f --- /dev/null +++ b/tests/baselines/reference/genericClassesInModule2.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/genericClassesInModule2.ts === +export class A{ +>A : A +>T1 : T1 + + constructor( public callback: (self: A) => void) { +>callback : (self: A) => void +>self : A +>A : A +>T1 : T1 + + var child = new B(this); +>child : B> +>new B(this) : B> +>B : typeof B +>this : A + } + AAA( callback: (self: A) => void) { +>AAA : (callback: (self: A) => void) => void +>callback : (self: A) => void +>self : A +>A : A +>T1 : T1 + + var child = new B(this); +>child : B> +>new B(this) : B> +>B : typeof B +>this : A + } +} + +export interface C{ +>C : C +>T1 : T1 + + child: B; +>child : B +>B : B +>T1 : T1 + + (self: C): void; +>self : C +>C : C +>T1 : T1 + + new(callback: (self: C) => void) +>callback : (self: C) => void +>self : C +>C : C +>T1 : T1 +} + +export class B { +>B : B +>T2 : T2 + + constructor(public parent: T2) { } +>parent : T2 +>T2 : T2 +} + + diff --git a/tests/baselines/reference/genericCloduleInModule.types b/tests/baselines/reference/genericCloduleInModule.types new file mode 100644 index 00000000000..108dc34c2f7 --- /dev/null +++ b/tests/baselines/reference/genericCloduleInModule.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/genericCloduleInModule.ts === +module A { +>A : typeof A + + export class B { +>B : B +>T : T + + foo() { } +>foo : () => void + + static bar() { } +>bar : () => void + } + export module B { +>B : typeof B + + export var x = 1; +>x : number + } +} + +var b: A.B; +>b : A.B +>A : unknown +>B : A.B + +b.foo(); +>b.foo() : void +>b.foo : () => void +>b : A.B +>foo : () => void + diff --git a/tests/baselines/reference/genericCloneReturnTypes2.js b/tests/baselines/reference/genericCloneReturnTypes2.js index 5784e3bbec3..9a1201af7f8 100644 --- a/tests/baselines/reference/genericCloneReturnTypes2.js +++ b/tests/baselines/reference/genericCloneReturnTypes2.js @@ -27,6 +27,6 @@ var MyList = (function () { return MyList; })(); var a; -var b = a.clone(); -var c = a.clone(); -var d = a.clone(); +var b = a.clone(); // ok +var c = a.clone(); // bug was there was an error on this line +var d = a.clone(); // error diff --git a/tests/baselines/reference/genericConstraintDeclaration.types b/tests/baselines/reference/genericConstraintDeclaration.types new file mode 100644 index 00000000000..126da138d4e --- /dev/null +++ b/tests/baselines/reference/genericConstraintDeclaration.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/genericConstraintDeclaration.ts === +class List{ +>List : List +>T : T + + static empty(): List{return null;} +>empty : () => List +>T : T +>List : List +>T : T +} + + + + + diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types new file mode 100644 index 00000000000..1e744ce25c2 --- /dev/null +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types @@ -0,0 +1,66 @@ +=== tests/cases/compiler/genericConstraintOnExtendedBuiltinTypes.ts === +declare module EndGate { +>EndGate : typeof EndGate + + export interface ICloneable { +>ICloneable : ICloneable + + Clone(): any; +>Clone : () => any + } +} + +interface Number extends EndGate.ICloneable { } +>Number : Number +>EndGate : unknown +>ICloneable : EndGate.ICloneable + +module EndGate.Tweening { +>EndGate : typeof EndGate +>Tweening : typeof Tweening + + export class Tween{ +>Tween : Tween +>T : T +>ICloneable : ICloneable + + private _from: T; +>_from : T +>T : T + + + constructor(from: T) { +>from : T +>T : T + + this._from = from.Clone(); +>this._from = from.Clone() : any +>this._from : T +>this : Tween +>_from : T +>from.Clone() : any +>from.Clone : () => any +>from : T +>Clone : () => any + } + } +} + +module EndGate.Tweening { +>EndGate : typeof EndGate +>Tweening : typeof Tweening + + export class NumberTween extends Tween{ +>NumberTween : NumberTween +>Tween : Tween + + constructor(from: number) { +>from : number + + super(from); +>super(from) : void +>super : typeof Tween +>from : number + } + } +} diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types new file mode 100644 index 00000000000..ad3182f62e5 --- /dev/null +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types @@ -0,0 +1,66 @@ +=== tests/cases/compiler/genericConstraintOnExtendedBuiltinTypes2.ts === +module EndGate { +>EndGate : typeof EndGate + + export interface ICloneable { +>ICloneable : ICloneable + + Clone(): any; +>Clone : () => any + } +} + +interface Number extends EndGate.ICloneable { } +>Number : Number +>EndGate : unknown +>ICloneable : EndGate.ICloneable + +module EndGate.Tweening { +>EndGate : typeof EndGate +>Tweening : typeof Tweening + + export class Tween{ +>Tween : Tween +>T : T +>ICloneable : ICloneable + + private _from: T; +>_from : T +>T : T + + constructor(from: T) { +>from : T +>T : T + + this._from = from.Clone(); +>this._from = from.Clone() : any +>this._from : T +>this : Tween +>_from : T +>from.Clone() : any +>from.Clone : () => any +>from : T +>Clone : () => any + } + } +} + +module EndGate.Tweening { +>EndGate : typeof EndGate +>Tweening : typeof Tweening + + export class NumberTween extends Tween{ +>NumberTween : NumberTween +>Tween : Tween +>Number : Number + + constructor(from: number) { +>from : number + + super(from); +>super(from) : void +>super : typeof Tween +>from : number + } + } +} diff --git a/tests/baselines/reference/genericConstructSignatureInInterface.types b/tests/baselines/reference/genericConstructSignatureInInterface.types new file mode 100644 index 00000000000..5318edb5bf1 --- /dev/null +++ b/tests/baselines/reference/genericConstructSignatureInInterface.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/genericConstructSignatureInInterface.ts === +interface C { +>C : C + + new (x: T); +>T : T +>x : T +>T : T +} + +var v: C; +>v : C +>C : C + +var r = new v(1); +>r : any +>new v(1) : any +>v : C + diff --git a/tests/baselines/reference/genericConstructorFunction1.js b/tests/baselines/reference/genericConstructorFunction1.js index 16dbac009ba..e693006a80c 100644 --- a/tests/baselines/reference/genericConstructorFunction1.js +++ b/tests/baselines/reference/genericConstructorFunction1.js @@ -20,12 +20,12 @@ function f1(args) { var v1; var v2 = v1['test']; v2(args); - return new v2(args); + return new v2(args); // used to give error } ; function f2(args) { var v1; var v2 = v1['test']; var y = v2(args); - return new v2(args); + return new v2(args); // used to give error } diff --git a/tests/baselines/reference/genericContextualTypingSpecialization.js b/tests/baselines/reference/genericContextualTypingSpecialization.js index 900189bab88..75d8b995fa3 100644 --- a/tests/baselines/reference/genericContextualTypingSpecialization.js +++ b/tests/baselines/reference/genericContextualTypingSpecialization.js @@ -4,4 +4,4 @@ b.reduce((c, d) => c + d, 0); // should not error on '+' //// [genericContextualTypingSpecialization.js] var b; -b.reduce(function (c, d) { return c + d; }, 0); +b.reduce(function (c, d) { return c + d; }, 0); // should not error on '+' diff --git a/tests/baselines/reference/genericContextualTypingSpecialization.types b/tests/baselines/reference/genericContextualTypingSpecialization.types new file mode 100644 index 00000000000..890da96c260 --- /dev/null +++ b/tests/baselines/reference/genericContextualTypingSpecialization.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/genericContextualTypingSpecialization.ts === +var b: number[]; +>b : number[] + +b.reduce((c, d) => c + d, 0); // should not error on '+' +>b.reduce((c, d) => c + d, 0) : number +>b.reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue?: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>b : number[] +>reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue?: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>(c, d) => c + d : (c: number, d: number) => number +>c : number +>d : number +>c + d : number +>c : number +>d : number + diff --git a/tests/baselines/reference/genericDerivedTypeWithSpecializedBase.js b/tests/baselines/reference/genericDerivedTypeWithSpecializedBase.js index 913484d4b55..7f639415490 100644 --- a/tests/baselines/reference/genericDerivedTypeWithSpecializedBase.js +++ b/tests/baselines/reference/genericDerivedTypeWithSpecializedBase.js @@ -33,4 +33,4 @@ var B = (function (_super) { })(A); var x; var y; -x = y; +x = y; // error diff --git a/tests/baselines/reference/genericDerivedTypeWithSpecializedBase2.js b/tests/baselines/reference/genericDerivedTypeWithSpecializedBase2.js index 9739721c04f..4b28d4b7f1c 100644 --- a/tests/baselines/reference/genericDerivedTypeWithSpecializedBase2.js +++ b/tests/baselines/reference/genericDerivedTypeWithSpecializedBase2.js @@ -33,4 +33,4 @@ var B = (function (_super) { })(A); var x; var y; -x = y; +x = y; // error diff --git a/tests/baselines/reference/genericFunctionHasFreshTypeArgs.types b/tests/baselines/reference/genericFunctionHasFreshTypeArgs.types new file mode 100644 index 00000000000..3a3afebb9ac --- /dev/null +++ b/tests/baselines/reference/genericFunctionHasFreshTypeArgs.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/genericFunctionHasFreshTypeArgs.ts === +function f(p: (x: T) => void) { }; +>f : (p: (x: T) => void) => void +>p : (x: T) => void +>T : T +>x : T +>T : T + +f(x => f(y => x = y)); +>f(x => f(y => x = y)) : void +>f : (p: (x: T) => void) => void +>x => f(y => x = y) : (x: any) => void +>x : any +>f(y => x = y) : void +>f : (p: (x: T) => void) => void +>y => x = y : (y: any) => any +>y : any +>x = y : any +>x : any +>y : any + diff --git a/tests/baselines/reference/genericFunctionSpecializations1.types b/tests/baselines/reference/genericFunctionSpecializations1.types new file mode 100644 index 00000000000..60819c786b8 --- /dev/null +++ b/tests/baselines/reference/genericFunctionSpecializations1.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/genericFunctionSpecializations1.ts === +function foo3(test: string); // error +>foo3 : (test: string) => any +>T : T +>test : string + +function foo3(test: T) { } +>foo3 : (test: string) => any +>T : T +>test : T +>T : T + +function foo4(test: string); // valid +>foo4 : (test: string) => any +>T : T +>test : string + +function foo4(test: T) { } +>foo4 : (test: string) => any +>T : T +>String : String +>test : T +>T : T + diff --git a/tests/baselines/reference/genericFunctions0.js b/tests/baselines/reference/genericFunctions0.js index 353aef05bac..408abdb9ce0 100644 --- a/tests/baselines/reference/genericFunctions0.js +++ b/tests/baselines/reference/genericFunctions0.js @@ -7,7 +7,7 @@ var x = foo(5); // 'x' should be number function foo(x) { return x; } -var x = foo(5); +var x = foo(5); // 'x' should be number //// [genericFunctions0.d.ts] diff --git a/tests/baselines/reference/genericFunctions0.types b/tests/baselines/reference/genericFunctions0.types new file mode 100644 index 00000000000..045224a7aaa --- /dev/null +++ b/tests/baselines/reference/genericFunctions0.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/genericFunctions0.ts === +function foo (x: T) { return x; } +>foo : (x: T) => T +>T : T +>x : T +>T : T +>x : T + +var x = foo(5); // 'x' should be number +>x : number +>foo(5) : number +>foo : (x: T) => T + diff --git a/tests/baselines/reference/genericFunctions1.js b/tests/baselines/reference/genericFunctions1.js index 48d9cad9af7..25cc91820b8 100644 --- a/tests/baselines/reference/genericFunctions1.js +++ b/tests/baselines/reference/genericFunctions1.js @@ -7,7 +7,7 @@ var x = foo(5); // 'x' should be number function foo(x) { return x; } -var x = foo(5); +var x = foo(5); // 'x' should be number //// [genericFunctions1.d.ts] diff --git a/tests/baselines/reference/genericFunctions1.types b/tests/baselines/reference/genericFunctions1.types new file mode 100644 index 00000000000..aed264c78e1 --- /dev/null +++ b/tests/baselines/reference/genericFunctions1.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/genericFunctions1.ts === +function foo (x: T) { return x; } +>foo : (x: T) => T +>T : T +>x : T +>T : T +>x : T + +var x = foo(5); // 'x' should be number +>x : number +>foo(5) : number +>foo : (x: T) => T + diff --git a/tests/baselines/reference/genericFunctions2.types b/tests/baselines/reference/genericFunctions2.types new file mode 100644 index 00000000000..96e757d3d9e --- /dev/null +++ b/tests/baselines/reference/genericFunctions2.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/genericFunctions2.ts === +declare function map (items: T[], f: (x: T) => U): U[]; +>map : (items: T[], f: (x: T) => U) => U[] +>T : T +>U : U +>items : T[] +>T : T +>f : (x: T) => U +>x : T +>T : T +>U : U +>U : U + +var myItems: string[]; +>myItems : string[] + +var lengths = map(myItems, x => x.length); +>lengths : number[] +>map(myItems, x => x.length) : number[] +>map : (items: T[], f: (x: T) => U) => U[] +>myItems : string[] +>x => x.length : (x: string) => number +>x : string +>x.length : number +>x : string +>length : number + + diff --git a/tests/baselines/reference/genericFunctions3.types b/tests/baselines/reference/genericFunctions3.types new file mode 100644 index 00000000000..2215e30adcf --- /dev/null +++ b/tests/baselines/reference/genericFunctions3.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/genericFunctions3.ts === +interface Query { +>Query : Query +>T : T + + foo(x: string): Query; +>foo : (x: string) => Query +>x : string +>Query : Query +>T : T +} + +function from(arg: boolean): Query; // was Error: Overload signature is not compatible with function definition. +>from : (arg: boolean) => Query +>T : T +>arg : boolean +>Query : Query +>T : T + +function from(arg: any): Query { +>from : (arg: boolean) => Query +>T : T +>arg : any +>Query : Query +>T : T + + return undefined; +>undefined : undefined +} + diff --git a/tests/baselines/reference/genericFunctionsWithOptionalParameters1.js b/tests/baselines/reference/genericFunctionsWithOptionalParameters1.js index eee26581839..b0b97eea7de 100644 --- a/tests/baselines/reference/genericFunctionsWithOptionalParameters1.js +++ b/tests/baselines/reference/genericFunctionsWithOptionalParameters1.js @@ -13,7 +13,7 @@ utils.fold(null, null, null); // no error //// [genericFunctionsWithOptionalParameters1.js] var utils; -utils.fold(); -utils.fold(null); -utils.fold(null, null); -utils.fold(null, null, null); +utils.fold(); // no error +utils.fold(null); // no error +utils.fold(null, null); // no error +utils.fold(null, null, null); // no error diff --git a/tests/baselines/reference/genericFunctionsWithOptionalParameters1.types b/tests/baselines/reference/genericFunctionsWithOptionalParameters1.types new file mode 100644 index 00000000000..74b8b5e6858 --- /dev/null +++ b/tests/baselines/reference/genericFunctionsWithOptionalParameters1.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/genericFunctionsWithOptionalParameters1.ts === +interface Utils { +>Utils : Utils + + fold(c?: Array, folder?: (s: S, t: T) => T, init?: S): T; +>fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T +>T : T +>S : S +>c : T[] +>Array : T[] +>T : T +>folder : (s: S, t: T) => T +>s : S +>S : S +>t : T +>T : T +>T : T +>init : S +>S : S +>T : T +} + +var utils: Utils; +>utils : Utils +>Utils : Utils + +utils.fold(); // no error +>utils.fold() : {} +>utils.fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T +>utils : Utils +>fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T + +utils.fold(null); // no error +>utils.fold(null) : {} +>utils.fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T +>utils : Utils +>fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T + +utils.fold(null, null); // no error +>utils.fold(null, null) : {} +>utils.fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T +>utils : Utils +>fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T + +utils.fold(null, null, null); // no error +>utils.fold(null, null, null) : {} +>utils.fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T +>utils : Utils +>fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T + diff --git a/tests/baselines/reference/genericFunctionsWithOptionalParameters2.js b/tests/baselines/reference/genericFunctionsWithOptionalParameters2.js index bd785e13bf8..ff47461c666 100644 --- a/tests/baselines/reference/genericFunctionsWithOptionalParameters2.js +++ b/tests/baselines/reference/genericFunctionsWithOptionalParameters2.js @@ -13,7 +13,7 @@ utils.fold(null, null, null); // error: Unable to invoke type with no call signa //// [genericFunctionsWithOptionalParameters2.js] var utils; -utils.fold(); -utils.fold(null); -utils.fold(null, null); -utils.fold(null, null, null); +utils.fold(); // error +utils.fold(null); // no error +utils.fold(null, null); // no error +utils.fold(null, null, null); // error: Unable to invoke type with no call signatures diff --git a/tests/baselines/reference/genericFunctionsWithOptionalParameters3.types b/tests/baselines/reference/genericFunctionsWithOptionalParameters3.types new file mode 100644 index 00000000000..4df90324283 --- /dev/null +++ b/tests/baselines/reference/genericFunctionsWithOptionalParameters3.types @@ -0,0 +1,108 @@ +=== tests/cases/compiler/genericFunctionsWithOptionalParameters3.ts === +class Collection { +>Collection : Collection +>T : T + + public add(x: T) { } +>add : (x: T) => void +>x : T +>T : T +} +interface Utils { +>Utils : Utils + + fold(c?: Collection, folder?: (s: S, t: T) => T, init?: S): T; +>fold : (c?: Collection, folder?: (s: S, t: T) => T, init?: S) => T +>T : T +>S : S +>c : Collection +>Collection : Collection +>T : T +>folder : (s: S, t: T) => T +>s : S +>S : S +>t : T +>T : T +>T : T +>init : S +>S : S +>T : T + + mapReduce(c: Collection, mapper: (x: T) => U, reducer: (y: U) => V): Collection; +>mapReduce : (c: Collection, mapper: (x: T) => U, reducer: (y: U) => V) => Collection +>T : T +>U : U +>V : V +>c : Collection +>Collection : Collection +>T : T +>mapper : (x: T) => U +>x : T +>T : T +>U : U +>reducer : (y: U) => V +>y : U +>U : U +>V : V +>Collection : Collection +>V : V +} +var utils: Utils; +>utils : Utils +>Utils : Utils + +var c = new Collection(); +>c : Collection +>new Collection() : Collection +>Collection : typeof Collection + +var r3 = utils.mapReduce(c, (x) => { return 1 }, (y) => { return new Date() }); +>r3 : Collection +>utils.mapReduce(c, (x) => { return 1 }, (y) => { return new Date() }) : Collection +>utils.mapReduce : (c: Collection, mapper: (x: T) => U, reducer: (y: U) => V) => Collection +>utils : Utils +>mapReduce : (c: Collection, mapper: (x: T) => U, reducer: (y: U) => V) => Collection +>c : Collection +>(x) => { return 1 } : (x: string) => number +>x : string +>(y) => { return new Date() } : (y: number) => Date +>y : number +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +var r4 = utils.mapReduce(c, (x: string) => { return 1 }, (y: number) => { return new Date() }); +>r4 : Collection +>utils.mapReduce(c, (x: string) => { return 1 }, (y: number) => { return new Date() }) : Collection +>utils.mapReduce : (c: Collection, mapper: (x: T) => U, reducer: (y: U) => V) => Collection +>utils : Utils +>mapReduce : (c: Collection, mapper: (x: T) => U, reducer: (y: U) => V) => Collection +>c : Collection +>(x: string) => { return 1 } : (x: string) => number +>x : string +>(y: number) => { return new Date() } : (y: number) => Date +>y : number +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +var f1 = (x: string) => { return 1 }; +>f1 : (x: string) => number +>(x: string) => { return 1 } : (x: string) => number +>x : string + +var f2 = (y: number) => { return new Date() }; +>f2 : (y: number) => Date +>(y: number) => { return new Date() } : (y: number) => Date +>y : number +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +var r5 = utils.mapReduce(c, f1, f2); +>r5 : Collection +>utils.mapReduce(c, f1, f2) : Collection +>utils.mapReduce : (c: Collection, mapper: (x: T) => U, reducer: (y: U) => V) => Collection +>utils : Utils +>mapReduce : (c: Collection, mapper: (x: T) => U, reducer: (y: U) => V) => Collection +>c : Collection +>f1 : (x: string) => number +>f2 : (y: number) => Date + diff --git a/tests/baselines/reference/genericImplements.js b/tests/baselines/reference/genericImplements.js index 559b45ec720..17d3d2c0d20 100644 --- a/tests/baselines/reference/genericImplements.js +++ b/tests/baselines/reference/genericImplements.js @@ -33,6 +33,7 @@ var B = (function () { return B; })(); ; +// OK var X = (function () { function X() { } @@ -40,7 +41,8 @@ var X = (function () { return undefined; }; return X; -})(); +})(); // { f: () => { b; } } +// OK var Y = (function () { function Y() { } @@ -48,7 +50,8 @@ var Y = (function () { return undefined; }; return Y; -})(); +})(); // { f: () => { a; } } +// OK var Z = (function () { function Z() { } @@ -56,4 +59,4 @@ var Z = (function () { return undefined; }; return Z; -})(); +})(); // { f: () => T } diff --git a/tests/baselines/reference/genericImplements.types b/tests/baselines/reference/genericImplements.types new file mode 100644 index 00000000000..e96e46c81cb --- /dev/null +++ b/tests/baselines/reference/genericImplements.types @@ -0,0 +1,60 @@ +=== tests/cases/compiler/genericImplements.ts === +class A { a; }; +>A : A +>a : any + +class B { b; }; +>B : B +>b : any + +interface I { +>I : I + + f(): T; +>f : () => T +>T : T +>A : A +>T : T + +} // { f: () => { a; } } + +// OK +class X implements I { +>X : X +>I : I + + f(): T { return undefined; } +>f : () => T +>T : T +>B : B +>T : T +>undefined : undefined + +} // { f: () => { b; } } + +// OK +class Y implements I { +>Y : Y +>I : I + + f(): T { return undefined; } +>f : () => T +>T : T +>A : A +>T : T +>undefined : undefined + +} // { f: () => { a; } } + +// OK +class Z implements I { +>Z : Z +>I : I + + f(): T { return undefined; } +>f : () => T +>T : T +>T : T +>undefined : undefined + +} // { f: () => T } diff --git a/tests/baselines/reference/genericInference1.types b/tests/baselines/reference/genericInference1.types new file mode 100644 index 00000000000..f83a1dcd361 --- /dev/null +++ b/tests/baselines/reference/genericInference1.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/genericInference1.ts === +['a', 'b', 'c'].map(x => x.length); +>['a', 'b', 'c'].map(x => x.length) : number[] +>['a', 'b', 'c'].map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>['a', 'b', 'c'] : string[] +>map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>x => x.length : (x: string) => number +>x : string +>x.length : number +>x : string +>length : number + diff --git a/tests/baselines/reference/genericInference2.js b/tests/baselines/reference/genericInference2.js index 99be1a38eb7..8724dae47c4 100644 --- a/tests/baselines/reference/genericInference2.js +++ b/tests/baselines/reference/genericInference2.js @@ -25,9 +25,9 @@ var o = { name: ko.observable("Bob"), age: ko.observable(37) }; -var x_v = o.name().length; -var age_v = o.age(); -var name_v = o.name("Robert"); -var zz_v = o.name.N; -var yy_v = o.name.g; -var rr_v = o.name.r; +var x_v = o.name().length; // should be 'number' +var age_v = o.age(); // should be 'number' +var name_v = o.name("Robert"); // should be 'any' +var zz_v = o.name.N; // should be 'number' +var yy_v = o.name.g; // should be 'boolean' +var rr_v = o.name.r; // should be 'string' diff --git a/tests/baselines/reference/genericInference2.types b/tests/baselines/reference/genericInference2.types new file mode 100644 index 00000000000..2616c0de2c4 --- /dev/null +++ b/tests/baselines/reference/genericInference2.types @@ -0,0 +1,99 @@ +=== tests/cases/compiler/genericInference2.ts === + declare module ko { +>ko : typeof ko + + export interface Observable { +>Observable : Observable +>T : T + + (): T; +>T : T + + (value: T): any; +>value : T +>T : T + + N: number; +>N : number + + g: boolean; +>g : boolean + + r: T; +>r : T +>T : T + } + export function observable(value: T): Observable; +>observable : (value: T) => Observable +>T : T +>value : T +>T : T +>Observable : Observable +>T : T + } + var o = { +>o : { name: ko.Observable; age: ko.Observable; } +>{ name: ko.observable("Bob"), age: ko.observable(37) } : { name: ko.Observable; age: ko.Observable; } + + name: ko.observable("Bob"), +>name : ko.Observable +>ko.observable("Bob") : ko.Observable +>ko.observable : (value: T) => ko.Observable +>ko : typeof ko +>observable : (value: T) => ko.Observable + + age: ko.observable(37) +>age : ko.Observable +>ko.observable(37) : ko.Observable +>ko.observable : (value: T) => ko.Observable +>ko : typeof ko +>observable : (value: T) => ko.Observable + + }; + var x_v = o.name().length; // should be 'number' +>x_v : number +>o.name().length : number +>o.name() : string +>o.name : ko.Observable +>o : { name: ko.Observable; age: ko.Observable; } +>name : ko.Observable +>length : number + + var age_v = o.age(); // should be 'number' +>age_v : number +>o.age() : number +>o.age : ko.Observable +>o : { name: ko.Observable; age: ko.Observable; } +>age : ko.Observable + + var name_v = o.name("Robert"); // should be 'any' +>name_v : any +>o.name("Robert") : any +>o.name : ko.Observable +>o : { name: ko.Observable; age: ko.Observable; } +>name : ko.Observable + + var zz_v = o.name.N; // should be 'number' +>zz_v : number +>o.name.N : number +>o.name : ko.Observable +>o : { name: ko.Observable; age: ko.Observable; } +>name : ko.Observable +>N : number + + var yy_v = o.name.g; // should be 'boolean' +>yy_v : boolean +>o.name.g : boolean +>o.name : ko.Observable +>o : { name: ko.Observable; age: ko.Observable; } +>name : ko.Observable +>g : boolean + + var rr_v = o.name.r; // should be 'string' +>rr_v : string +>o.name.r : string +>o.name : ko.Observable +>o : { name: ko.Observable; age: ko.Observable; } +>name : ko.Observable +>r : string + diff --git a/tests/baselines/reference/genericInstanceOf.types b/tests/baselines/reference/genericInstanceOf.types new file mode 100644 index 00000000000..726fa38fbf8 --- /dev/null +++ b/tests/baselines/reference/genericInstanceOf.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/genericInstanceOf.ts === +interface F { +>F : F + + (): number; +} + +class C { +>C : C +>T : T + + constructor(public a: T, public b: F) {} +>a : T +>T : T +>b : F +>F : F + + foo() { +>foo : () => void + + if (this.a instanceof this.b) { +>this.a instanceof this.b : boolean +>this.a : T +>this : C +>a : T +>this.b : F +>this : C +>b : F + } + } +} diff --git a/tests/baselines/reference/genericInstantiationEquivalentToObjectLiteral.types b/tests/baselines/reference/genericInstantiationEquivalentToObjectLiteral.types new file mode 100644 index 00000000000..449c5712c6c --- /dev/null +++ b/tests/baselines/reference/genericInstantiationEquivalentToObjectLiteral.types @@ -0,0 +1,68 @@ +=== tests/cases/conformance/types/namedTypes/genericInstantiationEquivalentToObjectLiteral.ts === +interface Pair { first: T1; second: T2; } +>Pair : Pair +>T1 : T1 +>T2 : T2 +>first : T1 +>T1 : T1 +>second : T2 +>T2 : T2 + +var x: Pair +>x : Pair +>Pair : Pair + +var y: { first: string; second: number; } +>y : { first: string; second: number; } +>first : string +>second : number + +x = y; +>x = y : { first: string; second: number; } +>x : Pair +>y : { first: string; second: number; } + +y = x; +>y = x : Pair +>y : { first: string; second: number; } +>x : Pair + +declare function f(x: Pair); +>f : (x: Pair) => any +>T : T +>U : U +>x : Pair +>Pair : Pair +>T : T +>U : U + +declare function f2(x: { first: T; second: U; }); +>f2 : (x: { first: T; second: U; }) => any +>T : T +>U : U +>x : { first: T; second: U; } +>first : T +>T : T +>second : U +>U : U + +f(x); +>f(x) : any +>f : (x: Pair) => any +>x : Pair + +f(y); +>f(y) : any +>f : (x: Pair) => any +>y : { first: string; second: number; } + +f2(x); +>f2(x) : any +>f2 : (x: { first: T; second: U; }) => any +>x : Pair + +f2(y); +>f2(y) : any +>f2 : (x: { first: T; second: U; }) => any +>y : { first: string; second: number; } + diff --git a/tests/baselines/reference/genericInterfaceFunctionTypeParameter.js b/tests/baselines/reference/genericInterfaceFunctionTypeParameter.js index 080f3853dd4..30c7aa72e57 100644 --- a/tests/baselines/reference/genericInterfaceFunctionTypeParameter.js +++ b/tests/baselines/reference/genericInterfaceFunctionTypeParameter.js @@ -10,7 +10,7 @@ export function foo(fn: (ifoo: IFoo) => void) { //// [genericInterfaceFunctionTypeParameter.js] define(["require", "exports"], function (require, exports) { function foo(fn) { - foo(fn); + foo(fn); // Invocation is necessary to repro (!) } exports.foo = foo; }); diff --git a/tests/baselines/reference/genericInterfaceFunctionTypeParameter.types b/tests/baselines/reference/genericInterfaceFunctionTypeParameter.types new file mode 100644 index 00000000000..f262fda55f6 --- /dev/null +++ b/tests/baselines/reference/genericInterfaceFunctionTypeParameter.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/genericInterfaceFunctionTypeParameter.ts === +export interface IFoo { } +>IFoo : IFoo +>A : A + +export function foo(fn: (ifoo: IFoo) => void) { +>foo : (fn: (ifoo: IFoo) => void) => void +>A : A +>fn : (ifoo: IFoo) => void +>ifoo : IFoo +>IFoo : IFoo +>A : A + + foo(fn); // Invocation is necessary to repro (!) +>foo(fn) : void +>foo : (fn: (ifoo: IFoo) => void) => void +>fn : (ifoo: IFoo) => void +} + + + diff --git a/tests/baselines/reference/genericInterfaceImplementation.types b/tests/baselines/reference/genericInterfaceImplementation.types new file mode 100644 index 00000000000..b075864634c --- /dev/null +++ b/tests/baselines/reference/genericInterfaceImplementation.types @@ -0,0 +1,42 @@ +=== tests/cases/compiler/genericInterfaceImplementation.ts === +interface IOption { +>IOption : IOption +>A : A + + get(): A; +>get : () => A +>A : A + + flatten(): IOption; +>flatten : () => IOption +>B : B +>IOption : IOption +>B : B +} + +class None implements IOption{ +>None : None +>T : T +>IOption : IOption +>T : T + + get(): T { +>get : () => T +>T : T + + throw null; + } + + flatten() : IOption { +>flatten : () => IOption +>U : U +>IOption : IOption +>U : U + + return new None(); +>new None() : None +>None : typeof None +>U : U + } +} + diff --git a/tests/baselines/reference/genericInterfaceTypeCall.js b/tests/baselines/reference/genericInterfaceTypeCall.js index 6b69dc383d5..7f5f586ec12 100644 --- a/tests/baselines/reference/genericInterfaceTypeCall.js +++ b/tests/baselines/reference/genericInterfaceTypeCall.js @@ -18,4 +18,4 @@ test.fail2(arg => foo.reject(arg)); // Error: Supplied parameters do not match a var foo; var test; test.fail(function (arg) { return foo.reject(arg); }); -test.fail2(function (arg) { return foo.reject(arg); }); +test.fail2(function (arg) { return foo.reject(arg); }); // Error: Supplied parameters do not match any signature of call target diff --git a/tests/baselines/reference/genericInterfaceTypeCall.types b/tests/baselines/reference/genericInterfaceTypeCall.types new file mode 100644 index 00000000000..fcf64fac066 --- /dev/null +++ b/tests/baselines/reference/genericInterfaceTypeCall.types @@ -0,0 +1,60 @@ +=== tests/cases/compiler/genericInterfaceTypeCall.ts === +interface Foo { +>Foo : Foo +>T : T + + reject(arg: T): void; +>reject : (arg: T) => void +>arg : T +>T : T +} +var foo: Foo +>foo : Foo +>Foo : Foo + +interface bar { +>bar : bar +>T : T + + fail(func: (arg: T) => void ): void; +>fail : (func: (arg: T) => void) => void +>func : (arg: T) => void +>arg : T +>T : T + + fail2(func2: { (arg: T): void; }): void; +>fail2 : (func2: (arg: T) => void) => void +>func2 : (arg: T) => void +>arg : T +>T : T +} +var test: bar; +>test : bar +>bar : bar + +test.fail(arg => foo.reject(arg)); +>test.fail(arg => foo.reject(arg)) : void +>test.fail : (func: (arg: string) => void) => void +>test : bar +>fail : (func: (arg: string) => void) => void +>arg => foo.reject(arg) : (arg: string) => void +>arg : string +>foo.reject(arg) : void +>foo.reject : (arg: string) => void +>foo : Foo +>reject : (arg: string) => void +>arg : string + +test.fail2(arg => foo.reject(arg)); // Error: Supplied parameters do not match any signature of call target +>test.fail2(arg => foo.reject(arg)) : void +>test.fail2 : (func2: (arg: string) => void) => void +>test : bar +>fail2 : (func2: (arg: string) => void) => void +>arg => foo.reject(arg) : (arg: string) => void +>arg : string +>foo.reject(arg) : void +>foo.reject : (arg: string) => void +>foo : Foo +>reject : (arg: string) => void +>arg : string + diff --git a/tests/baselines/reference/genericMethodOverspecialization.types b/tests/baselines/reference/genericMethodOverspecialization.types new file mode 100644 index 00000000000..145a7b33381 --- /dev/null +++ b/tests/baselines/reference/genericMethodOverspecialization.types @@ -0,0 +1,81 @@ +=== tests/cases/compiler/genericMethodOverspecialization.ts === +var names = ["list", "table1", "table2", "table3", "summary"]; +>names : string[] +>["list", "table1", "table2", "table3", "summary"] : string[] + +interface HTMLElement { +>HTMLElement : HTMLElement + + clientWidth: number; +>clientWidth : number + + isDisabled: boolean; +>isDisabled : boolean +} + +declare var document: Document; +>document : Document +>Document : Document + +interface Document { +>Document : Document + + getElementById(elementId: string): HTMLElement; +>getElementById : (elementId: string) => HTMLElement +>elementId : string +>HTMLElement : HTMLElement +} + +var elements = names.map(function (name) { +>elements : HTMLElement[] +>names.map(function (name) { return document.getElementById(name);}) : HTMLElement[] +>names.map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>names : string[] +>map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>function (name) { return document.getElementById(name);} : (name: string) => HTMLElement +>name : string + + return document.getElementById(name); +>document.getElementById(name) : HTMLElement +>document.getElementById : (elementId: string) => HTMLElement +>document : Document +>getElementById : (elementId: string) => HTMLElement +>name : string + +}); + + +var xxx = elements.filter(function (e) { +>xxx : HTMLElement[] +>elements.filter(function (e) { return !e.isDisabled;}) : HTMLElement[] +>elements.filter : (callbackfn: (value: HTMLElement, index: number, array: HTMLElement[]) => boolean, thisArg?: any) => HTMLElement[] +>elements : HTMLElement[] +>filter : (callbackfn: (value: HTMLElement, index: number, array: HTMLElement[]) => boolean, thisArg?: any) => HTMLElement[] +>function (e) { return !e.isDisabled;} : (e: HTMLElement) => boolean +>e : HTMLElement + + return !e.isDisabled; +>!e.isDisabled : boolean +>e.isDisabled : boolean +>e : HTMLElement +>isDisabled : boolean + +}); + +var widths:number[] = elements.map(function (e) { // should not error +>widths : number[] +>elements.map(function (e) { // should not error return e.clientWidth;}) : number[] +>elements.map : (callbackfn: (value: HTMLElement, index: number, array: HTMLElement[]) => U, thisArg?: any) => U[] +>elements : HTMLElement[] +>map : (callbackfn: (value: HTMLElement, index: number, array: HTMLElement[]) => U, thisArg?: any) => U[] +>function (e) { // should not error return e.clientWidth;} : (e: HTMLElement) => number +>e : HTMLElement + + return e.clientWidth; +>e.clientWidth : number +>e : HTMLElement +>clientWidth : number + +}); + + diff --git a/tests/baselines/reference/genericNewInterface.js b/tests/baselines/reference/genericNewInterface.js index 1e0132fe8f3..f015c7d7ce7 100644 --- a/tests/baselines/reference/genericNewInterface.js +++ b/tests/baselines/reference/genericNewInterface.js @@ -13,8 +13,8 @@ function createInstance2(ctor: INewable): T { //// [genericNewInterface.js] function createInstance(ctor) { - return new ctor(42); + return new ctor(42); //should be an error } function createInstance2(ctor) { - return new ctor(1024); + return new ctor(1024); //should be an error } diff --git a/tests/baselines/reference/genericObjectLitReturnType.js b/tests/baselines/reference/genericObjectLitReturnType.js index 730364ddb37..5191f17796b 100644 --- a/tests/baselines/reference/genericObjectLitReturnType.js +++ b/tests/baselines/reference/genericObjectLitReturnType.js @@ -22,4 +22,4 @@ var X = (function () { })(); var x; var t1 = x.f(5); -t1.a = 5; +t1.a = 5; // Should not error: t1 should have type {a: number}, instead has type {a: T} diff --git a/tests/baselines/reference/genericObjectLitReturnType.types b/tests/baselines/reference/genericObjectLitReturnType.types new file mode 100644 index 00000000000..3ecb5706689 --- /dev/null +++ b/tests/baselines/reference/genericObjectLitReturnType.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/genericObjectLitReturnType.ts === +class X +>X : X +>T : T +{ + f(t: T) { return { a: t }; } +>f : (t: T) => { a: T; } +>t : T +>T : T +>{ a: t } : { a: T; } +>a : T +>t : T +} + + +var x: X; +>x : X +>X : X + +var t1 = x.f(5); +>t1 : { a: number; } +>x.f(5) : { a: number; } +>x.f : (t: number) => { a: number; } +>x : X +>f : (t: number) => { a: number; } + +t1.a = 5; // Should not error: t1 should have type {a: number}, instead has type {a: T} +>t1.a = 5 : number +>t1.a : number +>t1 : { a: number; } +>a : number + + diff --git a/tests/baselines/reference/genericOfACloduleType1.js b/tests/baselines/reference/genericOfACloduleType1.js index d0ffd8f3657..f9899f33cfc 100644 --- a/tests/baselines/reference/genericOfACloduleType1.js +++ b/tests/baselines/reference/genericOfACloduleType1.js @@ -43,4 +43,4 @@ var M; var g1 = new G(); g1.bar(null).foo(); })(M || (M = {})); -var g2 = new G(); +var g2 = new G(); // was: error Type reference cannot refer to container 'M.C'. diff --git a/tests/baselines/reference/genericOfACloduleType1.types b/tests/baselines/reference/genericOfACloduleType1.types new file mode 100644 index 00000000000..afbef2f4180 --- /dev/null +++ b/tests/baselines/reference/genericOfACloduleType1.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/genericOfACloduleType1.ts === +class G{ bar(x: T) { return x; } } +>G : G +>T : T +>bar : (x: T) => T +>x : T +>T : T +>x : T + +module M { +>M : typeof M + + export class C { foo() { } } +>C : C +>foo : () => void + + export module C { +>C : typeof C + + export class X { +>X : X + } + } + + var g1 = new G(); +>g1 : G +>new G() : G +>G : typeof G +>C : C + + g1.bar(null).foo(); +>g1.bar(null).foo() : void +>g1.bar(null).foo : () => void +>g1.bar(null) : C +>g1.bar : (x: C) => C +>g1 : G +>bar : (x: C) => C +>foo : () => void +} +var g2 = new G() // was: error Type reference cannot refer to container 'M.C'. +>g2 : G +>new G() : G +>G : typeof G +>M : unknown +>C : M.C + diff --git a/tests/baselines/reference/genericOfACloduleType2.js b/tests/baselines/reference/genericOfACloduleType2.js index 4a277b606c5..7eb0a6f110e 100644 --- a/tests/baselines/reference/genericOfACloduleType2.js +++ b/tests/baselines/reference/genericOfACloduleType2.js @@ -44,7 +44,7 @@ var M; })(M.C || (M.C = {})); var C = M.C; var g1 = new G(); - g1.bar(null).foo(); + g1.bar(null).foo(); // no error })(M || (M = {})); var N; (function (N) { diff --git a/tests/baselines/reference/genericOfACloduleType2.types b/tests/baselines/reference/genericOfACloduleType2.types new file mode 100644 index 00000000000..275af8c913b --- /dev/null +++ b/tests/baselines/reference/genericOfACloduleType2.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/genericOfACloduleType2.ts === +class G{ bar(x: T) { return x; } } +>G : G +>T : T +>bar : (x: T) => T +>x : T +>T : T +>x : T + +module M { +>M : typeof M + + export class C { foo() { } } +>C : C +>foo : () => void + + export module C { +>C : typeof C + + export class X { +>X : X + } + } + + var g1 = new G(); +>g1 : G +>new G() : G +>G : typeof G +>C : C + + g1.bar(null).foo(); // no error +>g1.bar(null).foo() : void +>g1.bar(null).foo : () => void +>g1.bar(null) : C +>g1.bar : (x: C) => C +>g1 : G +>bar : (x: C) => C +>foo : () => void +} + +module N { +>N : typeof N + + var g2 = new G() +>g2 : G +>new G() : G +>G : typeof G +>M : unknown +>C : M.C +} diff --git a/tests/baselines/reference/genericOverloadSignatures.types b/tests/baselines/reference/genericOverloadSignatures.types new file mode 100644 index 00000000000..e1efe0785ab --- /dev/null +++ b/tests/baselines/reference/genericOverloadSignatures.types @@ -0,0 +1,101 @@ +=== tests/cases/compiler/genericOverloadSignatures.ts === +interface A { +>A : A + + (x: T): void; +>T : T +>x : T +>T : T + + (x: T): void; +>T : T +>x : T +>T : T +} + +function f(a: T); +>f : { (a: T): any; (a: T): any; } +>T : T +>a : T +>T : T + +function f(a: T); +>f : { (a: T): any; (a: T): any; } +>T : T +>a : T +>T : T + +function f(a) { } +>f : { (a: T): any; (a: T): any; } +>a : any + +interface I2 { +>I2 : I2 + + f(x: T): number; +>f : { (x: T): number; (x: T): string; } +>T : T +>x : T +>T : T + + f(x: T): string; +>f : { (x: T): number; (x: T): string; } +>T : T +>x : T +>T : T +} + +interface I3 { +>I3 : I3 +>T : T + + f(x: T): number; +>f : { (x: T): number; (x: T): string; } +>x : T +>T : T + + f(x: T): string; +>f : { (x: T): number; (x: T): string; } +>x : T +>T : T +} + +class C2 { +>C2 : C2 +>T : T +} +var b: { +>b : { new (x: T, y: string): C2; new (x: T, y: string): C2; } + + new (x: T, y: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T + + new (x: T, y: string): C2; +>T : T +>x : T +>T : T +>y : string +>C2 : C2 +>T : T +} + +interface D { +>D : D + + (x: T): T; +>T : T +>x : T +>T : T +>T : T + + (x: T): T; +>T : T +>x : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/genericParameterAssignability1.js b/tests/baselines/reference/genericParameterAssignability1.js index 042a5c3ca36..844c8f9a988 100644 --- a/tests/baselines/reference/genericParameterAssignability1.js +++ b/tests/baselines/reference/genericParameterAssignability1.js @@ -8,4 +8,4 @@ function f(x) { return null; } var r = function (x) { return x; }; -r = f; +r = f; // should be allowed diff --git a/tests/baselines/reference/genericParameterAssignability1.types b/tests/baselines/reference/genericParameterAssignability1.types new file mode 100644 index 00000000000..b7888014dea --- /dev/null +++ b/tests/baselines/reference/genericParameterAssignability1.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/genericParameterAssignability1.ts === +function f(x: T): T { return null; } +>f : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var r = (x: T) => x; +>r : (x: T) => T +>(x: T) => x : (x: T) => T +>T : T +>x : T +>T : T +>x : T + +r = f; // should be allowed +>r = f : (x: T) => T +>r : (x: T) => T +>f : (x: T) => T + diff --git a/tests/baselines/reference/genericPrototypeProperty.js b/tests/baselines/reference/genericPrototypeProperty.js index 64e03a8c2d7..c38cdb753a7 100644 --- a/tests/baselines/reference/genericPrototypeProperty.js +++ b/tests/baselines/reference/genericPrototypeProperty.js @@ -19,5 +19,6 @@ var C = (function () { return C; })(); var r = C.prototype; +// should be any var r2 = r.x; var r3 = r.foo(null); diff --git a/tests/baselines/reference/genericPrototypeProperty.types b/tests/baselines/reference/genericPrototypeProperty.types new file mode 100644 index 00000000000..a25914229b0 --- /dev/null +++ b/tests/baselines/reference/genericPrototypeProperty.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/genericPrototypeProperty.ts === +class C { +>C : C +>T : T + + x: T; +>x : T +>T : T + + foo(x: T): T { return null; } +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +var r = C.prototype; +>r : C +>C.prototype : C +>C : typeof C +>prototype : C + +// should be any +var r2 = r.x +>r2 : any +>r.x : any +>r : C +>x : any + +var r3 = r.foo(null); +>r3 : any +>r.foo(null) : any +>r.foo : (x: any) => any +>r : C +>foo : (x: any) => any + diff --git a/tests/baselines/reference/genericPrototypeProperty2.types b/tests/baselines/reference/genericPrototypeProperty2.types new file mode 100644 index 00000000000..1c95041b650 --- /dev/null +++ b/tests/baselines/reference/genericPrototypeProperty2.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/genericPrototypeProperty2.ts === +interface EventTarget { x } +>EventTarget : EventTarget +>x : any + +class BaseEvent { +>BaseEvent : BaseEvent + + target: EventTarget; +>target : EventTarget +>EventTarget : EventTarget +} + +class MyEvent extends BaseEvent { +>MyEvent : MyEvent +>T : T +>EventTarget : EventTarget +>BaseEvent : BaseEvent + + target: T; +>target : T +>T : T +} +class BaseEventWrapper { +>BaseEventWrapper : BaseEventWrapper + + t: BaseEvent; +>t : BaseEvent +>BaseEvent : BaseEvent +} + +class MyEventWrapper extends BaseEventWrapper { +>MyEventWrapper : MyEventWrapper +>BaseEventWrapper : BaseEventWrapper + + t: MyEvent; // any satisfies constraint and passes assignability check between 'target' properties +>t : MyEvent +>MyEvent : MyEvent +} diff --git a/tests/baselines/reference/genericPrototypeProperty3.types b/tests/baselines/reference/genericPrototypeProperty3.types new file mode 100644 index 00000000000..5a190164642 --- /dev/null +++ b/tests/baselines/reference/genericPrototypeProperty3.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/genericPrototypeProperty3.ts === +class BaseEvent { +>BaseEvent : BaseEvent + + target: {}; +>target : {} +} + +class MyEvent extends BaseEvent { // T is instantiated to any in the prototype, which is assignable to {} +>MyEvent : MyEvent +>T : T +>BaseEvent : BaseEvent + + target: T; +>target : T +>T : T +} +class BaseEventWrapper { +>BaseEventWrapper : BaseEventWrapper + + t: BaseEvent; +>t : BaseEvent +>BaseEvent : BaseEvent +} + +class MyEventWrapper extends BaseEventWrapper { +>MyEventWrapper : MyEventWrapper +>BaseEventWrapper : BaseEventWrapper + + t: MyEvent; +>t : MyEvent +>MyEvent : MyEvent +} diff --git a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.js b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.js index 1b34b2d21e8..4d5c6810f75 100644 --- a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.js +++ b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.js @@ -46,6 +46,7 @@ var TypeScript2; var PullSymbol = (function () { function PullSymbol(name, declKind) { } + // link methods PullSymbol.prototype.addOutgoingLink = function (linkTo, kind) { }; PullSymbol.prototype.getType = function () { diff --git a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types new file mode 100644 index 00000000000..2f62a20c415 --- /dev/null +++ b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types @@ -0,0 +1,68 @@ +=== tests/cases/compiler/genericRecursiveImplicitConstructorErrors2.ts === +module TypeScript2 { +>TypeScript2 : typeof TypeScript2 + + export interface DeclKind { }; +>DeclKind : DeclKind + + export interface PullTypesymbol { }; +>PullTypesymbol : PullTypesymbol + + export interface SymbolLinkKind { }; +>SymbolLinkKind : SymbolLinkKind + + export enum PullSymbolVisibility { +>PullSymbolVisibility : PullSymbolVisibility + + Private, +>Private : PullSymbolVisibility + + Public +>Public : PullSymbolVisibility + } +  + export class PullSymbol { +>PullSymbol : PullSymbol + + constructor (name: string, declKind: DeclKind) { +>name : string +>declKind : DeclKind +>DeclKind : DeclKind + + } + // link methods + public addOutgoingLink(linkTo: PullSymbol, kind: SymbolLinkKind) { +>addOutgoingLink : (linkTo: PullSymbol, kind: SymbolLinkKind) => void +>A : A +>B : B +>C : C +>linkTo : PullSymbol +>PullSymbol : PullSymbol +>kind : SymbolLinkKind +>SymbolLinkKind : SymbolLinkKind + + } + + public getType(): PullTypeSymbol { +>getType : () => PullTypeSymbol +>A : A +>B : B +>C : C +>PullTypeSymbol : PullTypeSymbol +>A : A +>B : B +>C : C + + return undefined; +>undefined : undefined + } + } + export class PullTypeSymbol extends PullSymbol { +>PullTypeSymbol : PullTypeSymbol +>A : A +>B : B +>C : C +>PullSymbol : PullSymbol + } +} + diff --git a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors3.errors.txt b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors3.errors.txt index 1320a21f46b..ee9aadfdf93 100644 --- a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors3.errors.txt +++ b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors3.errors.txt @@ -3,9 +3,9 @@ export class MemberName { static create(arg1: any, arg2?: any, arg3?: any): MemberName { ~~~~~~~~~~ -!!! A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. - ~~~~~~~~~~ !!! Generic type 'MemberName' requires 3 type argument(s). + ~~~~~~~~~~ +!!! A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. } } } diff --git a/tests/baselines/reference/genericReduce.js b/tests/baselines/reference/genericReduce.js index a4955d52fb9..ac160e43868 100644 --- a/tests/baselines/reference/genericReduce.js +++ b/tests/baselines/reference/genericReduce.js @@ -18,10 +18,10 @@ var a = ["An", "array", "of", "strings"]; var b = a.map(function (s) { return s.length; }); var n1 = b.reduce(function (x, y) { return x + y; }); var n2 = b.reduceRight(function (x, y) { return x + y; }); -n1.x = "fail"; -n1.toExponential(2); -n2.x = "fail"; -n2.toExponential(2); -var n3 = b.reduce(function (x, y) { return x + y; }, ""); -n3.toExponential(2); -n3.charAt(0); +n1.x = "fail"; // should error, as 'n1' should be type 'number', not 'any'. +n1.toExponential(2); // should not error if 'n1' is correctly number. +n2.x = "fail"; // should error, as 'n2' should be type 'number', not 'any'. +n2.toExponential(2); // should not error if 'n2' is correctly number. +var n3 = b.reduce(function (x, y) { return x + y; }, ""); // Initial value is of type string +n3.toExponential(2); // should error if 'n3' is correctly type 'string' +n3.charAt(0); // should not error if 'n3' is correctly type 'string' diff --git a/tests/baselines/reference/genericRestArgs.js b/tests/baselines/reference/genericRestArgs.js index 5e28ddf2a1f..75c88d7cbf2 100644 --- a/tests/baselines/reference/genericRestArgs.js +++ b/tests/baselines/reference/genericRestArgs.js @@ -20,13 +20,13 @@ function makeArrayG() { } return items; } -var a1Ga = makeArrayG(1, ""); +var a1Ga = makeArrayG(1, ""); // no error var a1Gb = makeArrayG(1, ""); var a1Gc = makeArrayG(1, ""); -var a1Gd = makeArrayG(1, ""); +var a1Gd = makeArrayG(1, ""); // error function makeArrayGOpt(item1, item2, item3) { return [item1, item2, item3]; } var a2Ga = makeArrayGOpt(1, ""); var a2Gb = makeArrayG(1, ""); -var a2Gc = makeArrayG(1, ""); +var a2Gc = makeArrayG(1, ""); // error diff --git a/tests/baselines/reference/genericReversingTypeParameters.js b/tests/baselines/reference/genericReversingTypeParameters.js index eede7e23d62..0e51b0256ea 100644 --- a/tests/baselines/reference/genericReversingTypeParameters.js +++ b/tests/baselines/reference/genericReversingTypeParameters.js @@ -24,5 +24,5 @@ var BiMap = (function () { })(); var b = new BiMap(); var r1 = b.get(''); -var i = b.inverse(); +var i = b.inverse(); // used to get the type wrong here. var r2b = i.get(1); diff --git a/tests/baselines/reference/genericReversingTypeParameters.types b/tests/baselines/reference/genericReversingTypeParameters.types new file mode 100644 index 00000000000..a95f6620082 --- /dev/null +++ b/tests/baselines/reference/genericReversingTypeParameters.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/genericReversingTypeParameters.ts === +class BiMap { +>BiMap : BiMap +>K : K +>V : V + + private inverseBiMap: BiMap; +>inverseBiMap : BiMap +>BiMap : BiMap +>V : V +>K : K + + public get(key: K): V { return null; } +>get : (key: K) => V +>key : K +>K : K +>V : V + + public inverse(): BiMap { return null; } +>inverse : () => BiMap +>BiMap : BiMap +>V : V +>K : K +} + +var b = new BiMap(); +>b : BiMap +>new BiMap() : BiMap +>BiMap : typeof BiMap + +var r1 = b.get(''); +>r1 : number +>b.get('') : number +>b.get : (key: string) => number +>b : BiMap +>get : (key: string) => number + +var i = b.inverse(); // used to get the type wrong here. +>i : BiMap +>b.inverse() : BiMap +>b.inverse : () => BiMap +>b : BiMap +>inverse : () => BiMap + +var r2b = i.get(1); +>r2b : string +>i.get(1) : string +>i.get : (key: number) => string +>i : BiMap +>get : (key: number) => string + diff --git a/tests/baselines/reference/genericReversingTypeParameters2.js b/tests/baselines/reference/genericReversingTypeParameters2.js index 4dd87401775..eb904f4a2ed 100644 --- a/tests/baselines/reference/genericReversingTypeParameters2.js +++ b/tests/baselines/reference/genericReversingTypeParameters2.js @@ -22,5 +22,5 @@ var BiMap = (function () { return BiMap; })(); var b = new BiMap(); -var i = b.inverse(); +var i = b.inverse(); // used to get the type wrong here. var r2b = i.get(1); diff --git a/tests/baselines/reference/genericReversingTypeParameters2.types b/tests/baselines/reference/genericReversingTypeParameters2.types new file mode 100644 index 00000000000..4356280f4d3 --- /dev/null +++ b/tests/baselines/reference/genericReversingTypeParameters2.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/genericReversingTypeParameters2.ts === +class BiMap { +>BiMap : BiMap +>K : K +>V : V + + private inverseBiMap: BiMap; +>inverseBiMap : BiMap +>BiMap : BiMap +>V : V +>K : K + + public get(key: K): V { return null; } +>get : (key: K) => V +>key : K +>K : K +>V : V + + public inverse(): BiMap { return null; } +>inverse : () => BiMap +>BiMap : BiMap +>V : V +>K : K +} + +var b = new BiMap(); +>b : BiMap +>new BiMap() : BiMap +>BiMap : typeof BiMap + +var i = b.inverse(); // used to get the type wrong here. +>i : BiMap +>b.inverse() : BiMap +>b.inverse : () => BiMap +>b : BiMap +>inverse : () => BiMap + +var r2b = i.get(1); +>r2b : string +>i.get(1) : string +>i.get : (key: number) => string +>i : BiMap +>get : (key: number) => string + diff --git a/tests/baselines/reference/genericSignatureInheritance.types b/tests/baselines/reference/genericSignatureInheritance.types new file mode 100644 index 00000000000..0ae6be52ba1 --- /dev/null +++ b/tests/baselines/reference/genericSignatureInheritance.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/genericSignatureInheritance.ts === +interface I { +>I : I + + (x: T): string; +>T : T +>x : T +>T : T +} + +interface I2 extends I { } +>I2 : I2 +>I : I + diff --git a/tests/baselines/reference/genericSignatureInheritance2.types b/tests/baselines/reference/genericSignatureInheritance2.types new file mode 100644 index 00000000000..0b31483cdc5 --- /dev/null +++ b/tests/baselines/reference/genericSignatureInheritance2.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/genericSignatureInheritance2.ts === +interface I { +>I : I + + (x: T): string; +>T : T +>x : T +>T : T +} + +interface I2 extends I { +>I2 : I2 +>I : I + + (x: T): void; +>T : T +>x : T +>T : T +} + diff --git a/tests/baselines/reference/genericSpecializationToTypeLiteral1.types b/tests/baselines/reference/genericSpecializationToTypeLiteral1.types new file mode 100644 index 00000000000..c75f07f6aef --- /dev/null +++ b/tests/baselines/reference/genericSpecializationToTypeLiteral1.types @@ -0,0 +1,178 @@ +=== tests/cases/compiler/genericSpecializationToTypeLiteral1.ts === +interface IEnumerable { +>IEnumerable : IEnumerable +>T : T + + zip(second: IEnumerable, resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; +>zip : { (second: IEnumerable, resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (second: T[], resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (...params: any[]): IEnumerable; } +>TResult : TResult +>second : IEnumerable +>IEnumerable : IEnumerable +>T : T +>resultSelector : (first: T, second: T, index: number) => TResult +>first : T +>T : T +>second : T +>T : T +>index : number +>TResult : TResult +>IEnumerable : IEnumerable +>TResult : TResult + + zip(second: T[], resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; +>zip : { (second: IEnumerable, resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (second: T[], resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (...params: any[]): IEnumerable; } +>TResult : TResult +>second : T[] +>T : T +>resultSelector : (first: T, second: T, index: number) => TResult +>first : T +>T : T +>second : T +>T : T +>index : number +>TResult : TResult +>IEnumerable : IEnumerable +>TResult : TResult + + zip(...params: any[]): IEnumerable; // last one is selector +>zip : { (second: IEnumerable, resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (second: T[], resultSelector: (first: T, second: T, index: number) => TResult): IEnumerable; (...params: any[]): IEnumerable; } +>TResult : TResult +>params : any[] +>IEnumerable : IEnumerable +>TResult : TResult + + merge(...params: IEnumerable[]): IEnumerable; +>merge : { (...params: IEnumerable[]): IEnumerable; (...params: T[][]): IEnumerable; } +>TResult : TResult +>params : IEnumerable[] +>IEnumerable : IEnumerable +>T : T +>IEnumerable : IEnumerable +>T : T + + merge(...params: T[][]): IEnumerable; +>merge : { (...params: IEnumerable[]): IEnumerable; (...params: T[][]): IEnumerable; } +>TResult : TResult +>params : T[][] +>T : T +>IEnumerable : IEnumerable +>T : T + + + concat(...sequences: IEnumerable[]): IEnumerable; +>concat : { (...sequences: IEnumerable[]): IEnumerable; (...sequences: T[]): IEnumerable; } +>sequences : IEnumerable[] +>IEnumerable : IEnumerable +>T : T +>IEnumerable : IEnumerable +>T : T + + concat(...sequences: T[]): IEnumerable; +>concat : { (...sequences: IEnumerable[]): IEnumerable; (...sequences: T[]): IEnumerable; } +>sequences : T[] +>T : T +>IEnumerable : IEnumerable +>T : T + + insert(index: number, second: IEnumerable): IEnumerable; +>insert : (index: number, second: IEnumerable) => IEnumerable +>index : number +>second : IEnumerable +>IEnumerable : IEnumerable +>T : T +>IEnumerable : IEnumerable +>T : T + + sequenceEqual(second: IEnumerable): boolean; +>sequenceEqual : { (second: IEnumerable): boolean; (second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; (second: T[]): boolean; (second: T[], compareSelector: (element: T) => TCompare): boolean; } +>second : IEnumerable +>IEnumerable : IEnumerable +>T : T + + sequenceEqual(second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; +>sequenceEqual : { (second: IEnumerable): boolean; (second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; (second: T[]): boolean; (second: T[], compareSelector: (element: T) => TCompare): boolean; } +>TCompare : TCompare +>second : IEnumerable +>IEnumerable : IEnumerable +>T : T +>compareSelector : (element: T) => TCompare +>element : T +>T : T +>TCompare : TCompare + + sequenceEqual(second: T[]): boolean; +>sequenceEqual : { (second: IEnumerable): boolean; (second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; (second: T[]): boolean; (second: T[], compareSelector: (element: T) => TCompare): boolean; } +>second : T[] +>T : T + + sequenceEqual(second: T[], compareSelector: (element: T) => TCompare): boolean; +>sequenceEqual : { (second: IEnumerable): boolean; (second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; (second: T[]): boolean; (second: T[], compareSelector: (element: T) => TCompare): boolean; } +>TCompare : TCompare +>second : T[] +>T : T +>compareSelector : (element: T) => TCompare +>element : T +>T : T +>TCompare : TCompare + + toDictionary(keySelector: (element: T) => TKey): IDictionary; +>toDictionary : { (keySelector: (element: T) => TKey): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; } +>TKey : TKey +>keySelector : (element: T) => TKey +>element : T +>T : T +>TKey : TKey +>IDictionary : IDictionary +>TKey : TKey + + toDictionary(keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; +>toDictionary : { (keySelector: (element: T) => TKey): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; } +>TKey : TKey +>TValue : TValue +>keySelector : (element: T) => TKey +>element : T +>T : T +>TKey : TKey +>elementSelector : (element: T) => TValue +>element : T +>T : T +>TValue : TValue +>IDictionary : IDictionary +>TKey : TKey +>TValue : TValue + + toDictionary(keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; +>toDictionary : { (keySelector: (element: T) => TKey): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; } +>TKey : TKey +>TValue : TValue +>TCompare : TCompare +>keySelector : (element: T) => TKey +>element : T +>T : T +>TKey : TKey +>elementSelector : (element: T) => TValue +>element : T +>T : T +>TValue : TValue +>compareSelector : (key: TKey) => TCompare +>key : TKey +>TKey : TKey +>TCompare : TCompare +>IDictionary : IDictionary +>TKey : TKey +>TValue : TValue +} + +interface IDictionary { +>IDictionary : IDictionary +>TKey : TKey +>TValue : TValue + + toEnumerable(): IEnumerable<{ key: TKey; value: TValue }>; +>toEnumerable : () => IEnumerable<{ key: TKey; value: TValue; }> +>IEnumerable : IEnumerable +>key : TKey +>TKey : TKey +>value : TValue +>TValue : TValue +} diff --git a/tests/baselines/reference/genericSpecializations1.types b/tests/baselines/reference/genericSpecializations1.types new file mode 100644 index 00000000000..3b60a3b9987 --- /dev/null +++ b/tests/baselines/reference/genericSpecializations1.types @@ -0,0 +1,42 @@ +=== tests/cases/compiler/genericSpecializations1.ts === +interface IFoo { +>IFoo : IFoo +>T : T + + foo(x: T): T; // no error on implementors because IFoo's T is different from foo's T +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} + +class IntFooBad implements IFoo { +>IntFooBad : IntFooBad +>IFoo : IFoo + + foo(x: string): string { return null; } +>foo : (x: string) => string +>x : string +} + +class StringFoo2 implements IFoo { +>StringFoo2 : StringFoo2 +>IFoo : IFoo + + foo(x: string): string { return null; } +>foo : (x: string) => string +>x : string +} + +class StringFoo3 implements IFoo { +>StringFoo3 : StringFoo3 +>IFoo : IFoo + + foo(x: T): T { return null; } +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/genericSpecializations3.js b/tests/baselines/reference/genericSpecializations3.js index 5b9c49e173b..8d157761160 100644 --- a/tests/baselines/reference/genericSpecializations3.js +++ b/tests/baselines/reference/genericSpecializations3.js @@ -66,8 +66,8 @@ var StringFoo2 = (function () { })(); var stringFoo2; stringFoo2.foo("hm"); -intFoo = stringFoo2; -stringFoo2 = intFoo; +intFoo = stringFoo2; // error +stringFoo2 = intFoo; // error var StringFoo3 = (function () { function StringFoo3() { } diff --git a/tests/baselines/reference/genericStaticAnyTypeFunction.js b/tests/baselines/reference/genericStaticAnyTypeFunction.js index 9557964c3bd..055e6b4f683 100644 --- a/tests/baselines/reference/genericStaticAnyTypeFunction.js +++ b/tests/baselines/reference/genericStaticAnyTypeFunction.js @@ -29,7 +29,7 @@ var A = (function () { return 0; }; A.two = function (source) { - return this.one(source, 42); + return this.one(source, 42); // should not error }; return A; })(); diff --git a/tests/baselines/reference/genericStaticAnyTypeFunction.types b/tests/baselines/reference/genericStaticAnyTypeFunction.types new file mode 100644 index 00000000000..9cf511ca0d9 --- /dev/null +++ b/tests/baselines/reference/genericStaticAnyTypeFunction.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/genericStaticAnyTypeFunction.ts === +class A { +>A : A + + static one(source: T, value: number): T { +>one : (source: T, value: number) => T +>T : T +>source : T +>T : T +>value : number +>T : T + + return source; +>source : T + + } + static goo() { return 0; } +>goo : () => number + + static two(source: T): T { +>two : (source: T) => T +>T : T +>source : T +>T : T +>T : T + + return this.one(source, 42); // should not error +>this.one(source, 42) : T +>this.one : (source: T, value: number) => T +>this : typeof A +>one : (source: T, value: number) => T +>T : T +>source : T + + } + +} + + + diff --git a/tests/baselines/reference/genericTypeArgumentInference1.types b/tests/baselines/reference/genericTypeArgumentInference1.types new file mode 100644 index 00000000000..20a9a0ca8f9 --- /dev/null +++ b/tests/baselines/reference/genericTypeArgumentInference1.types @@ -0,0 +1,88 @@ +=== tests/cases/compiler/genericTypeArgumentInference1.ts === +module Underscore { +>Underscore : unknown + + export interface Iterator { +>Iterator : Iterator +>T : T +>U : U + + (value: T, index: any, list: any): U; +>value : T +>T : T +>index : any +>list : any +>U : U + } + export interface Static { +>Static : Static + + all(list: T[], iterator?: Iterator, context?: any): T; +>all : (list: T[], iterator?: Iterator, context?: any) => T +>T : T +>list : T[] +>T : T +>iterator : Iterator +>Iterator : Iterator +>T : T +>context : any +>T : T + + identity(value: T): T; +>identity : (value: T) => T +>T : T +>value : T +>T : T +>T : T + } +} +declare var _: Underscore.Static; +>_ : Underscore.Static +>Underscore : unknown +>Static : Underscore.Static + +var r = _.all([true, 1, null, 'yes'], _.identity); +>r : {} +>_.all([true, 1, null, 'yes'], _.identity) : {} +>_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T +>_ : Underscore.Static +>all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T +>[true, 1, null, 'yes'] : {}[] +>_.identity : (value: T) => T +>_ : Underscore.Static +>identity : (value: T) => T + +var r2 = _.all([true], _.identity); +>r2 : boolean +>_.all([true], _.identity) : boolean +>_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T +>_ : Underscore.Static +>all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T +>[true] : boolean[] +>_.identity : (value: T) => T +>_ : Underscore.Static +>identity : (value: T) => T + +var r3 = _.all([], _.identity); +>r3 : any +>_.all([], _.identity) : any +>_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T +>_ : Underscore.Static +>all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T +>[] : any[] +>_.identity : (value: T) => T +>_ : Underscore.Static +>identity : (value: T) => T + +var r4 = _.all([true], _.identity); +>r4 : any +>_.all([true], _.identity) : any +>_.all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T +>_ : Underscore.Static +>all : (list: T[], iterator?: Underscore.Iterator, context?: any) => T +>[true] : any[] +>true : any +>_.identity : (value: T) => T +>_ : Underscore.Static +>identity : (value: T) => T + diff --git a/tests/baselines/reference/genericTypeAssertions1.js b/tests/baselines/reference/genericTypeAssertions1.js index 091455a7a45..02a22aa5c81 100644 --- a/tests/baselines/reference/genericTypeAssertions1.js +++ b/tests/baselines/reference/genericTypeAssertions1.js @@ -13,5 +13,5 @@ var A = (function () { return A; })(); var foo = new A(); -var r = new A(); -var r2 = foo; +var r = new A(); // error +var r2 = foo; // error diff --git a/tests/baselines/reference/genericTypeAssertions2.js b/tests/baselines/reference/genericTypeAssertions2.js index 333417379c6..c7acecb5e43 100644 --- a/tests/baselines/reference/genericTypeAssertions2.js +++ b/tests/baselines/reference/genericTypeAssertions2.js @@ -39,7 +39,7 @@ var B = (function (_super) { })(A); var foo = new A(); var r = new B(); -var r2 = new B(); -var r3 = new B(); +var r2 = new B(); // error +var r3 = new B(); // error var r4 = new A(); -var r5 = []; +var r5 = []; // error diff --git a/tests/baselines/reference/genericTypeAssertions3.js b/tests/baselines/reference/genericTypeAssertions3.js index d59dd31e868..19a477c142c 100644 --- a/tests/baselines/reference/genericTypeAssertions3.js +++ b/tests/baselines/reference/genericTypeAssertions3.js @@ -6,7 +6,7 @@ var s = < (x: T) => T > ((x: any) => { return null; }); // no error //// [genericTypeAssertions3.js] var r = (function (x) { return null; -}); +}); // bug was 'could not find dotted symbol T' on x's annotation in the type assertion instead of no error var s = (function (x) { return null; -}); +}); // no error diff --git a/tests/baselines/reference/genericTypeAssertions3.types b/tests/baselines/reference/genericTypeAssertions3.types new file mode 100644 index 00000000000..53435145939 --- /dev/null +++ b/tests/baselines/reference/genericTypeAssertions3.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/genericTypeAssertions3.ts === +var r = < (x: T) => T > ((x) => { return null; }); // bug was 'could not find dotted symbol T' on x's annotation in the type assertion instead of no error +>r : (x: T) => T +>< (x: T) => T > ((x) => { return null; }) : (x: T) => T +>T : T +>x : T +>T : T +>T : T +>((x) => { return null; }) : (x: any) => any +>(x) => { return null; } : (x: any) => any +>x : any + +var s = < (x: T) => T > ((x: any) => { return null; }); // no error +>s : (x: T) => T +>< (x: T) => T > ((x: any) => { return null; }) : (x: T) => T +>T : T +>x : T +>T : T +>T : T +>((x: any) => { return null; }) : (x: any) => any +>(x: any) => { return null; } : (x: any) => any +>x : any + diff --git a/tests/baselines/reference/genericTypeAssertions4.js b/tests/baselines/reference/genericTypeAssertions4.js index 2357f882399..d04b6cbe104 100644 --- a/tests/baselines/reference/genericTypeAssertions4.js +++ b/tests/baselines/reference/genericTypeAssertions4.js @@ -65,10 +65,10 @@ var b; var c; function foo2(x) { var y = x; + y = a; // error: cannot convert A to T + y = b; // error: cannot convert B to T + y = c; // error: cannot convert C to T y = a; - y = b; - y = c; - y = a; - y = b; - y = c; + y = b; // error: cannot convert B to T + y = c; // error: cannot convert C to T } diff --git a/tests/baselines/reference/genericTypeAssertions5.js b/tests/baselines/reference/genericTypeAssertions5.js index dc83c3ed743..5dc73022203 100644 --- a/tests/baselines/reference/genericTypeAssertions5.js +++ b/tests/baselines/reference/genericTypeAssertions5.js @@ -31,10 +31,10 @@ var b; var c; function foo2(x) { var y = x; + y = a; // error: cannot convert A to T + y = b; // error: cannot convert B to T + y = c; // error: cannot convert C to T y = a; - y = b; - y = c; - y = a; - y = b; - y = c; + y = b; // error: cannot convert B to T + y = c; // error: cannot convert C to T } diff --git a/tests/baselines/reference/genericTypeParameterEquivalence2.js b/tests/baselines/reference/genericTypeParameterEquivalence2.js index acd110af5b7..005ca773275 100644 --- a/tests/baselines/reference/genericTypeParameterEquivalence2.js +++ b/tests/baselines/reference/genericTypeParameterEquivalence2.js @@ -59,16 +59,19 @@ function countWhere_2(pred: (a: A) => boolean): (a: A[]) => number { } //// [genericTypeParameterEquivalence2.js] +// compose :: (b->c) -> (a->b) -> (a->c) function compose(f, g) { return function (a) { return f(g.apply(null, a)); }; } +// forEach :: [a] -> (a -> ()) -> () function forEach(list, f) { for (var i = 0; i < list.length; ++i) { f(list[i], i); } } +// filter :: (a->bool) -> [a] -> [a] function filter(f, ar) { var ret = []; forEach(ar, function (el) { @@ -78,9 +81,11 @@ function filter(f, ar) { }); return ret; } +// length :: [a] -> Num function length2(ar) { return ar.length; } +// curry1 :: ((a,b)->c) -> (a->(b->c)) function curry1(f) { return function (ay) { return function (by) { @@ -89,6 +94,13 @@ function curry1(f) { }; } var cfilter = curry1(filter); +// compose :: (b->c) -> (a->b) -> (a->c) +// length :: [a] -> Num +// cfilter :: {} -> {} -> [{}] +// pred :: a -> Bool +// cfilter(pred) :: {} -> [{}] +// length2 :: [a] -> Num +// countWhere :: (a -> Bool) -> [a] -> Num function countWhere_1(pred) { return compose(length2, cfilter(pred)); } diff --git a/tests/baselines/reference/genericTypeParameterEquivalence2.types b/tests/baselines/reference/genericTypeParameterEquivalence2.types new file mode 100644 index 00000000000..09e13b12f7b --- /dev/null +++ b/tests/baselines/reference/genericTypeParameterEquivalence2.types @@ -0,0 +1,212 @@ +=== tests/cases/compiler/genericTypeParameterEquivalence2.ts === +// compose :: (b->c) -> (a->b) -> (a->c) +function compose(f: (b: B) => C, g: (a:A) => B): (a:A) => C { +>compose : (f: (b: B) => C, g: (a: A) => B) => (a: A) => C +>A : A +>B : B +>C : C +>f : (b: B) => C +>b : B +>B : B +>C : C +>g : (a: A) => B +>a : A +>A : A +>B : B +>a : A +>A : A +>C : C + + return function (a:A) : C { +>function (a:A) : C { return f(g.apply(null, a)); } : (a: A) => C +>a : A +>A : A +>C : C + + return f(g.apply(null, a)); +>f(g.apply(null, a)) : C +>f : (b: B) => C +>g.apply(null, a) : any +>g.apply : (thisArg: any, argArray?: any) => any +>g : (a: A) => B +>apply : (thisArg: any, argArray?: any) => any +>a : A + + }; +} + +// forEach :: [a] -> (a -> ()) -> () +function forEach(list: A[], f: (a: A, n?: number) => void ): void { +>forEach : (list: A[], f: (a: A, n?: number) => void) => void +>A : A +>list : A[] +>A : A +>f : (a: A, n?: number) => void +>a : A +>A : A +>n : number + + for (var i = 0; i < list.length; ++i) { +>i : number +>i < list.length : boolean +>i : number +>list.length : number +>list : A[] +>length : number +>++i : number +>i : number + + f(list[i], i); +>f(list[i], i) : void +>f : (a: A, n?: number) => void +>list[i] : A +>list : A[] +>i : number +>i : number + } +} + +// filter :: (a->bool) -> [a] -> [a] +function filter(f: (a: A) => boolean, ar: A[]): A[] { +>filter : (f: (a: A) => boolean, ar: A[]) => A[] +>A : A +>f : (a: A) => boolean +>a : A +>A : A +>ar : A[] +>A : A +>A : A + + var ret = []; +>ret : any[] +>[] : undefined[] + + forEach(ar, (el) => { +>forEach(ar, (el) => { if (f(el)) { ret.push(el); } } ) : void +>forEach : (list: A[], f: (a: A, n?: number) => void) => void +>ar : A[] +>(el) => { if (f(el)) { ret.push(el); } } : (el: A) => void +>el : A + + if (f(el)) { +>f(el) : boolean +>f : (a: A) => boolean +>el : A + + ret.push(el); +>ret.push(el) : number +>ret.push : (...items: any[]) => number +>ret : any[] +>push : (...items: any[]) => number +>el : A + } + } ); + + return ret; +>ret : any[] +} + +// length :: [a] -> Num +function length2(ar: A[]): number { +>length2 : (ar: A[]) => number +>A : A +>ar : A[] +>A : A + + return ar.length; +>ar.length : number +>ar : A[] +>length : number +} + +// curry1 :: ((a,b)->c) -> (a->(b->c)) +function curry1(f: (a: A, b: B) => C): (ax: A) => (bx: B) => C { +>curry1 : (f: (a: A, b: B) => C) => (ax: A) => (bx: B) => C +>A : A +>B : B +>C : C +>f : (a: A, b: B) => C +>a : A +>A : A +>b : B +>B : B +>C : C +>ax : A +>A : A +>bx : B +>B : B +>C : C + + return function (ay: A) { +>function (ay: A) { return function (by: B) { return f(ay, by); }; } : (ay: A) => (by: B) => C +>ay : A +>A : A + + return function (by: B) { +>function (by: B) { return f(ay, by); } : (by: B) => C +>by : B +>B : B + + return f(ay, by); +>f(ay, by) : C +>f : (a: A, b: B) => C +>ay : A +>by : B + + }; + }; +} + +var cfilter = curry1(filter); +>cfilter : (ax: {}) => (bx: {}) => {}[] +>curry1(filter) : (ax: {}) => (bx: {}) => {}[] +>curry1 : (f: (a: A, b: B) => C) => (ax: A) => (bx: B) => C +>filter : (f: (a: A) => boolean, ar: A[]) => A[] + +// compose :: (b->c) -> (a->b) -> (a->c) +// length :: [a] -> Num +// cfilter :: {} -> {} -> [{}] +// pred :: a -> Bool +// cfilter(pred) :: {} -> [{}] +// length2 :: [a] -> Num +// countWhere :: (a -> Bool) -> [a] -> Num + +function countWhere_1(pred: (a: A) => boolean): (a: A[]) => number { +>countWhere_1 : (pred: (a: A) => boolean) => (a: A[]) => number +>A : A +>pred : (a: A) => boolean +>a : A +>A : A +>a : A[] +>A : A + + return compose(length2, cfilter(pred)); +>compose(length2, cfilter(pred)) : (a: {}) => number +>compose : (f: (b: B) => C, g: (a: A) => B) => (a: A) => C +>length2 : (ar: A[]) => number +>cfilter(pred) : (bx: {}) => {}[] +>cfilter : (ax: {}) => (bx: {}) => {}[] +>pred : (a: A) => boolean +} + +function countWhere_2(pred: (a: A) => boolean): (a: A[]) => number { +>countWhere_2 : (pred: (a: A) => boolean) => (a: A[]) => number +>A : A +>pred : (a: A) => boolean +>a : A +>A : A +>a : A[] +>A : A + + var where = cfilter(pred); +>where : (bx: {}) => {}[] +>cfilter(pred) : (bx: {}) => {}[] +>cfilter : (ax: {}) => (bx: {}) => {}[] +>pred : (a: A) => boolean + + return compose(length2, where); +>compose(length2, where) : (a: {}) => number +>compose : (f: (b: B) => C, g: (a: A) => B) => (a: A) => C +>length2 : (ar: A[]) => number +>where : (bx: {}) => {}[] +} diff --git a/tests/baselines/reference/genericTypeReferencesRequireTypeArgs.js b/tests/baselines/reference/genericTypeReferencesRequireTypeArgs.js index 9c4dd761ad8..69bc1c372b3 100644 --- a/tests/baselines/reference/genericTypeReferencesRequireTypeArgs.js +++ b/tests/baselines/reference/genericTypeReferencesRequireTypeArgs.js @@ -20,7 +20,7 @@ var C = (function () { }; return C; })(); -var c1; -var i1; -var c2; -var i2; +var c1; // error +var i1; // error +var c2; // should be an error +var i2; // should be an error diff --git a/tests/baselines/reference/genericTypeWithCallableMembers.js b/tests/baselines/reference/genericTypeWithCallableMembers.js index c885859dcfd..ebf95b41dcc 100644 --- a/tests/baselines/reference/genericTypeWithCallableMembers.js +++ b/tests/baselines/reference/genericTypeWithCallableMembers.js @@ -19,8 +19,8 @@ var C = (function () { this.data2 = data2; } C.prototype.create = function () { - var x = new this.data(); - var x2 = new this.data2(); + var x = new this.data(); // no error + var x2 = new this.data2(); // was error, shouldn't be }; return C; })(); diff --git a/tests/baselines/reference/genericTypeWithCallableMembers.types b/tests/baselines/reference/genericTypeWithCallableMembers.types new file mode 100644 index 00000000000..e0068d5ff2b --- /dev/null +++ b/tests/baselines/reference/genericTypeWithCallableMembers.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/genericTypeWithCallableMembers.ts === +interface Constructable { +>Constructable : Constructable + + new (): Constructable; +>Constructable : Constructable +} + +class C { +>C : C +>T : T +>Constructable : Constructable + + constructor(public data: T, public data2: Constructable) { } +>data : T +>T : T +>data2 : Constructable +>Constructable : Constructable + + create() { +>create : () => void + + var x = new this.data(); // no error +>x : Constructable +>new this.data() : Constructable +>this.data : T +>this : C +>data : T + + var x2 = new this.data2(); // was error, shouldn't be +>x2 : Constructable +>new this.data2() : Constructable +>this.data2 : Constructable +>this : C +>data2 : Constructable + } +} + diff --git a/tests/baselines/reference/genericTypeWithCallableMembers2.js b/tests/baselines/reference/genericTypeWithCallableMembers2.js index 5ff105f026e..0f4f96f6a66 100644 --- a/tests/baselines/reference/genericTypeWithCallableMembers2.js +++ b/tests/baselines/reference/genericTypeWithCallableMembers2.js @@ -9,8 +9,8 @@ function foo2(f: T) { //// [genericTypeWithCallableMembers2.js] function foo1(f) { - return f(); + return f(); // should return 'string', once returned 'any' } function foo2(f) { - return new f(); + return new f(); // should be legal, once was an error } diff --git a/tests/baselines/reference/genericTypeWithCallableMembers2.types b/tests/baselines/reference/genericTypeWithCallableMembers2.types new file mode 100644 index 00000000000..5c265e30a85 --- /dev/null +++ b/tests/baselines/reference/genericTypeWithCallableMembers2.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/genericTypeWithCallableMembers2.ts === +function foo1(f: T) { +>foo1 : string>(f: T) => string +>T : T +>f : T +>T : T + + return f(); // should return 'string', once returned 'any' +>f() : string +>f : T +} + +function foo2(f: T) { +>foo2 : string>(f: T) => string +>T : T +>f : T +>T : T + + return new f(); // should be legal, once was an error +>new f() : string +>f : T +} diff --git a/tests/baselines/reference/genericTypeWithMultipleBases1.types b/tests/baselines/reference/genericTypeWithMultipleBases1.types new file mode 100644 index 00000000000..c3bb692d9f2 --- /dev/null +++ b/tests/baselines/reference/genericTypeWithMultipleBases1.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/genericTypeWithMultipleBases1.ts === +export interface I1 { +>I1 : I1 + + m1: () => void; +>m1 : () => void +} + +export interface I2 { +>I2 : I2 + + m2: () => void; +>m2 : () => void +} + +export interface I3 extends I1, I2 { +>I3 : I3 +>T : T +>I1 : I1 +>I2 : I2 + +//export interface I3 extends I2, I1 { + p1: T; +>p1 : T +>T : T +} + +var x: I3; +>x : I3 +>I3 : I3 + +x.p1; +>x.p1 : number +>x : I3 +>p1 : number + +x.m1(); +>x.m1() : void +>x.m1 : () => void +>x : I3 +>m1 : () => void + +x.m2(); +>x.m2() : void +>x.m2 : () => void +>x : I3 +>m2 : () => void + + diff --git a/tests/baselines/reference/genericTypeWithMultipleBases2.types b/tests/baselines/reference/genericTypeWithMultipleBases2.types new file mode 100644 index 00000000000..a04e57075c3 --- /dev/null +++ b/tests/baselines/reference/genericTypeWithMultipleBases2.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/genericTypeWithMultipleBases2.ts === +export interface I1 { +>I1 : I1 + + m1: () => void; +>m1 : () => void +} + +export interface I2 { +>I2 : I2 + + m2: () => void; +>m2 : () => void +} + +export interface I3 extends I2, I1 { +>I3 : I3 +>T : T +>I2 : I2 +>I1 : I1 + + p1: T; +>p1 : T +>T : T +} + +var x: I3; +>x : I3 +>I3 : I3 + +x.p1; +>x.p1 : number +>x : I3 +>p1 : number + +x.m1(); +>x.m1() : void +>x.m1 : () => void +>x : I3 +>m1 : () => void + +x.m2(); +>x.m2() : void +>x.m2 : () => void +>x : I3 +>m2 : () => void + + diff --git a/tests/baselines/reference/genericTypeWithMultipleBases3.types b/tests/baselines/reference/genericTypeWithMultipleBases3.types new file mode 100644 index 00000000000..a0127b456bb --- /dev/null +++ b/tests/baselines/reference/genericTypeWithMultipleBases3.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/genericTypeWithMultipleBases3.ts === +interface IA { +>IA : IA +>T : T + +foo(x: T): T; +>foo : (x: T) => T +>x : T +>T : T +>T : T + +} + +interface IB { +>IB : IB +>T : T + +bar(x: T): T; +>bar : (x: T) => T +>x : T +>T : T +>T : T + +} + +interface IC extends IA, IB { } +>IC : IC +>T : T +>IA : IA +>T : T +>IB : IB +>T : T + +var c: IC; +>c : IC +>IC : IC + +var x = c.foo; +>x : (x: number) => number +>c.foo : (x: number) => number +>c : IC +>foo : (x: number) => number + +var y = c.bar; +>y : (x: number) => number +>c.bar : (x: number) => number +>c : IC +>bar : (x: number) => number + diff --git a/tests/baselines/reference/genericTypeWithNonGenericBaseMisMatch.js b/tests/baselines/reference/genericTypeWithNonGenericBaseMisMatch.js index 6fda8db13f5..4cd7eb4165b 100644 --- a/tests/baselines/reference/genericTypeWithNonGenericBaseMisMatch.js +++ b/tests/baselines/reference/genericTypeWithNonGenericBaseMisMatch.js @@ -18,4 +18,4 @@ var X = (function () { return X; })(); var x = new X(); -var i = x; +var i = x; // Should not be allowed -- type of 'f' is incompatible with 'I' diff --git a/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.js b/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.js index ba9e3d63d67..1afd647cb7f 100644 --- a/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.js +++ b/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.js @@ -9,4 +9,4 @@ x(true); // was error //// [genericWithCallSignatureReturningSpecialization.js] var x; -x(true); +x(true); // was error diff --git a/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.types b/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.types new file mode 100644 index 00000000000..824ada50b89 --- /dev/null +++ b/tests/baselines/reference/genericWithCallSignatureReturningSpecialization.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/genericWithCallSignatureReturningSpecialization.ts === +interface B { +>B : B +>T : T + + f(): B; +>f : () => B +>B : B + + (value: T): void; +>value : T +>T : T +} +var x: B; +>x : B +>B : B + +x(true); // was error +>x(true) : void +>x : B + diff --git a/tests/baselines/reference/genericWithCallSignatures1.js b/tests/baselines/reference/genericWithCallSignatures1.js index 5bbd36e2e7f..0d512faa7e1 100644 --- a/tests/baselines/reference/genericWithCallSignatures1.js +++ b/tests/baselines/reference/genericWithCallSignatures1.js @@ -20,6 +20,7 @@ class MyClass { //// [genericWithCallSignatures_0.js] //// [genericWithCallSignatures_1.js] +/// var MyClass = (function () { function MyClass() { } diff --git a/tests/baselines/reference/genericWithCallSignatures1.types b/tests/baselines/reference/genericWithCallSignatures1.types new file mode 100644 index 00000000000..b55b4bbc64b --- /dev/null +++ b/tests/baselines/reference/genericWithCallSignatures1.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/genericWithCallSignatures_1.ts === +/// +class MyClass { +>MyClass : MyClass + + public callableThing: CallableExtention; +>callableThing : CallableExtention +>CallableExtention : CallableExtention + + public myMethod() { +>myMethod : () => void + + var x = this.callableThing(); +>x : string +> this.callableThing() : string +>this.callableThing() : string +>this.callableThing : CallableExtention +>this : MyClass +>callableThing : CallableExtention + } +} +=== tests/cases/compiler/genericWithCallSignatures_0.ts === +interface Callable { +>Callable : Callable +>T : T + + (): T; +>T : T + + (value: T): void; +>value : T +>T : T +} + +interface CallableExtention extends Callable { } +>CallableExtention : CallableExtention +>T : T +>Callable : Callable +>T : T + diff --git a/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.js b/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.js index b80b1268f35..441123c9fd4 100644 --- a/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.js +++ b/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.js @@ -19,4 +19,4 @@ var LazyArray = (function () { return LazyArray; })(); var lazyArray = new LazyArray(); -var value = lazyArray.array()["test"]; +var value = lazyArray.array()["test"]; // used to be an error diff --git a/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.types b/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.types new file mode 100644 index 00000000000..05697f1e1f9 --- /dev/null +++ b/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/genericWithIndexerOfTypeParameterType1.ts === +class LazyArray { +>LazyArray : LazyArray +>T : T + + private objects = <{ [objectId: string]: T; }>{}; +>objects : { [x: string]: T; } +><{ [objectId: string]: T; }>{} : { [x: string]: T; } +>objectId : string +>T : T +>{} : { [x: string]: T; } + + array() { +>array : () => { [x: string]: T; } + + return this.objects; +>this.objects : { [x: string]: T; } +>this : LazyArray +>objects : { [x: string]: T; } + } +} +var lazyArray = new LazyArray(); +>lazyArray : LazyArray +>new LazyArray() : LazyArray +>LazyArray : typeof LazyArray + +var value: string = lazyArray.array()["test"]; // used to be an error +>value : string +>lazyArray.array()["test"] : string +>lazyArray.array() : { [x: string]: string; } +>lazyArray.array : () => { [x: string]: string; } +>lazyArray : LazyArray +>array : () => { [x: string]: string; } + diff --git a/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types b/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types new file mode 100644 index 00000000000..1de9b6d2aa8 --- /dev/null +++ b/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/genericWithIndexerOfTypeParameterType2.ts === +export class Collection { +>Collection : Collection +>TItem : TItem +>CollectionItem : CollectionItem + + _itemsByKey: { [key: string]: TItem; }; +>_itemsByKey : { [x: string]: TItem; } +>key : string +>TItem : TItem +} + +export class List extends Collection{ +>List : List +>Collection : Collection +>ListItem : ListItem + + Bar() {} +>Bar : () => void +} + +export class CollectionItem {} +>CollectionItem : CollectionItem + +export class ListItem extends CollectionItem { +>ListItem : ListItem +>CollectionItem : CollectionItem + + __isNew: boolean; +>__isNew : boolean +} + diff --git a/tests/baselines/reference/genericWithOpenTypeParameters1.js b/tests/baselines/reference/genericWithOpenTypeParameters1.js index f007f182106..afdce73cb11 100644 --- a/tests/baselines/reference/genericWithOpenTypeParameters1.js +++ b/tests/baselines/reference/genericWithOpenTypeParameters1.js @@ -21,16 +21,16 @@ var B = (function () { return B; })(); var x; -x.foo(1); +x.foo(1); // no error var f = function (x) { return x.foo(1); -}; +}; // error var f2 = function (x) { return x.foo(1); -}; +}; // error var f3 = function (x) { return x.foo(1); -}; +}; // error var f4 = function (x) { return x.foo(1); -}; +}; // no error diff --git a/tests/baselines/reference/generics0.js b/tests/baselines/reference/generics0.js index 844ca59b92b..2772397c055 100644 --- a/tests/baselines/reference/generics0.js +++ b/tests/baselines/reference/generics0.js @@ -9,7 +9,7 @@ var z = v2.x; // 'y' should be of type 'string' //// [generics0.js] var v2; -var z = v2.x; +var z = v2.x; // 'y' should be of type 'string' //// [generics0.d.ts] diff --git a/tests/baselines/reference/generics0.types b/tests/baselines/reference/generics0.types new file mode 100644 index 00000000000..2febb5bd808 --- /dev/null +++ b/tests/baselines/reference/generics0.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/generics0.ts === +interface G { +>G : G +>T : T + + x: T; +>x : T +>T : T +} + +var v2: G; +>v2 : G +>G : G + +var z = v2.x; // 'y' should be of type 'string' +>z : string +>v2.x : string +>v2 : G +>x : string + diff --git a/tests/baselines/reference/generics1.js b/tests/baselines/reference/generics1.js index 2e8571cba2d..bd18aef7798 100644 --- a/tests/baselines/reference/generics1.js +++ b/tests/baselines/reference/generics1.js @@ -16,10 +16,10 @@ var v7: G; // Error, no type arguments //// [generics1.js] -var v1; -var v2; -var v3; -var v4; -var v5; -var v6; -var v7; +var v1; // Ok +var v2; // Ok, equivalent to G +var v3; // Error, A not valid argument for U +var v4; // Ok +var v5; // Error, any does not satisfy constraint B +var v6; // Error, wrong number of arguments +var v7; // Error, no type arguments diff --git a/tests/baselines/reference/generics1NoError.js b/tests/baselines/reference/generics1NoError.js index 07b640bdba5..66b0ca3baff 100644 --- a/tests/baselines/reference/generics1NoError.js +++ b/tests/baselines/reference/generics1NoError.js @@ -11,9 +11,9 @@ var v2: G<{ a: string }, C>; // Ok, equivalent to G var v4: G, C>; // Ok //// [generics1NoError.js] -var v1; -var v2; -var v4; +var v1; // Ok +var v2; // Ok, equivalent to G +var v4; // Ok //// [generics1NoError.d.ts] diff --git a/tests/baselines/reference/generics1NoError.types b/tests/baselines/reference/generics1NoError.types new file mode 100644 index 00000000000..409517b56ce --- /dev/null +++ b/tests/baselines/reference/generics1NoError.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/generics1NoError.ts === +interface A { a: string; } +>A : A +>a : string + +interface B extends A { b: string; } +>B : B +>A : A +>b : string + +interface C extends B { c: string; } +>C : C +>B : B +>c : string + +interface G { +>G : G +>T : T +>U : U +>B : B + + x: T; +>x : T +>T : T + + y: U; +>y : U +>U : U +} +var v1: G; // Ok +>v1 : G +>G : G +>A : A +>C : C + +var v2: G<{ a: string }, C>; // Ok, equivalent to G +>v2 : G<{ a: string; }, C> +>G : G +>a : string +>C : C + +var v4: G, C>; // Ok +>v4 : G, C> +>G : G +>G : G +>A : A +>B : B +>C : C + diff --git a/tests/baselines/reference/generics2.js b/tests/baselines/reference/generics2.js index cf8984fe3bd..aed20b922f6 100644 --- a/tests/baselines/reference/generics2.js +++ b/tests/baselines/reference/generics2.js @@ -23,10 +23,10 @@ var v7: G; // Error, no type arguments //// [generics2.js] -var v1; -var v2; -var v3; -var v4; -var v5; -var v6; -var v7; +var v1; // Ok +var v2; // Ok, equivalent to G +var v3; // Error, A not valid argument for U +var v4; // Ok +var v5; // Error, any does not satisfy constraint B +var v6; // Error, wrong number of arguments +var v7; // Error, no type arguments diff --git a/tests/baselines/reference/generics2NoError.js b/tests/baselines/reference/generics2NoError.js index 703eb2152c9..047275f4f4c 100644 --- a/tests/baselines/reference/generics2NoError.js +++ b/tests/baselines/reference/generics2NoError.js @@ -18,9 +18,9 @@ var v2: G<{ a: string }, C>; // Ok, equivalent to G var v4: G, C>; // Ok //// [generics2NoError.js] -var v1; -var v2; -var v4; +var v1; // Ok +var v2; // Ok, equivalent to G +var v4; // Ok //// [generics2NoError.d.ts] diff --git a/tests/baselines/reference/generics2NoError.types b/tests/baselines/reference/generics2NoError.types new file mode 100644 index 00000000000..6b6d526e4b2 --- /dev/null +++ b/tests/baselines/reference/generics2NoError.types @@ -0,0 +1,61 @@ +=== tests/cases/compiler/generics2NoError.ts === +interface A { a: string; } +>A : A +>a : string + +interface B extends A { b: string; } +>B : B +>A : A +>b : string + +interface C extends B { c: string; } +>C : C +>B : B +>c : string + +interface G { +>G : G +>T : T +>U : U +>B : B + + x: T; +>x : T +>T : T + + y: U; +>y : U +>U : U +} + + +var v1: { +>v1 : { x: { a: string; }; y: { a: string; b: string; c: string; }; } + + x: { a: string; } +>x : { a: string; } +>a : string + + y: { a: string; b: string; c: string }; +>y : { a: string; b: string; c: string; } +>a : string +>b : string +>c : string + +}; // Ok + + +var v2: G<{ a: string }, C>; // Ok, equivalent to G +>v2 : G<{ a: string; }, C> +>G : G +>a : string +>C : C + +var v4: G, C>; // Ok +>v4 : G, C> +>G : G +>G : G +>A : A +>B : B +>C : C + diff --git a/tests/baselines/reference/generics3.js b/tests/baselines/reference/generics3.js index 4d45a301ee7..d88ed1082cd 100644 --- a/tests/baselines/reference/generics3.js +++ b/tests/baselines/reference/generics3.js @@ -15,7 +15,7 @@ var C = (function () { })(); var a; var b; -a = b; +a = b; // Ok - should be identical //// [generics3.d.ts] diff --git a/tests/baselines/reference/generics3.types b/tests/baselines/reference/generics3.types new file mode 100644 index 00000000000..510dcbfeaf8 --- /dev/null +++ b/tests/baselines/reference/generics3.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/generics3.ts === +class C { private x: T; } +>C : C +>T : T +>x : T +>T : T + +interface X { f(): string; } +>X : X +>f : () => string + +interface Y { f(): string; } +>Y : Y +>f : () => string + +var a: C; +>a : C +>C : C +>X : X + +var b: C; +>b : C +>C : C +>Y : Y + +a = b; // Ok - should be identical +>a = b : C +>a : C +>b : C + diff --git a/tests/baselines/reference/generics4.js b/tests/baselines/reference/generics4.js index 8a74afe9e52..95d8aea4f55 100644 --- a/tests/baselines/reference/generics4.js +++ b/tests/baselines/reference/generics4.js @@ -15,4 +15,4 @@ var C = (function () { })(); var a; var b; -a = b; +a = b; // Not ok - return types of "f" are different diff --git a/tests/baselines/reference/generics4NoError.types b/tests/baselines/reference/generics4NoError.types new file mode 100644 index 00000000000..c22b1905e44 --- /dev/null +++ b/tests/baselines/reference/generics4NoError.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/generics4NoError.ts === +class C { private x: T; } +>C : C +>T : T +>x : T +>T : T + +interface X { f(): string; } +>X : X +>f : () => string + +interface Y { f(): boolean; } +>Y : Y +>f : () => boolean + +var a: C; +>a : C +>C : C +>X : X + +var b: C; +>b : C +>C : C +>Y : Y + diff --git a/tests/baselines/reference/generics5.js b/tests/baselines/reference/generics5.js index 3020a9941e0..68660e1a939 100644 --- a/tests/baselines/reference/generics5.js +++ b/tests/baselines/reference/generics5.js @@ -13,4 +13,4 @@ var v3: G; // Error, A not valid argument for U //// [generics5.js] -var v3; +var v3; // Error, A not valid argument for U diff --git a/tests/baselines/reference/genericsAndHigherOrderFunctions.js b/tests/baselines/reference/genericsAndHigherOrderFunctions.js index d99164bd5f6..1086bd78c54 100644 --- a/tests/baselines/reference/genericsAndHigherOrderFunctions.js +++ b/tests/baselines/reference/genericsAndHigherOrderFunctions.js @@ -18,5 +18,6 @@ var foo: (g: (x: K) => N) => (f: (_: N) => (_: R) => R) => h(combine(f)(g)) //// [genericsAndHigherOrderFunctions.js] +// no errors expected var combine = function (f) { return function (g) { return function (x) { return f(g(x)); }; }; }; var foo = function (g) { return function (h) { return function (f) { return h(combine(f)(g)); }; }; }; diff --git a/tests/baselines/reference/genericsAndHigherOrderFunctions.types b/tests/baselines/reference/genericsAndHigherOrderFunctions.types new file mode 100644 index 00000000000..04209ca99ec --- /dev/null +++ b/tests/baselines/reference/genericsAndHigherOrderFunctions.types @@ -0,0 +1,125 @@ +=== tests/cases/compiler/genericsAndHigherOrderFunctions.ts === +// no errors expected + +var combine: (f: (_: T) => S) => +>combine : (f: (_: T) => S) => (g: (_: U) => T) => (x: U) => S +>T : T +>S : S +>f : (_: T) => S +>_ : T +>T : T +>S : S + + (g: (_: U) => T) => +>U : U +>g : (_: U) => T +>_ : U +>U : U +>T : T + + (x: U) => S +>x : U +>U : U +>S : S + + = (f: (_: T) => S) => +>(f: (_: T) => S) => (g: (_: U) => T) => (x: U) => f(g(x)) : (f: (_: T) => S) => (g: (_: U) => T) => (x: U) => S +>T : T +>S : S +>f : (_: T) => S +>_ : T +>T : T +>S : S + + (g: (_: U) => T) => +>(g: (_: U) => T) => (x: U) => f(g(x)) : (g: (_: U) => T) => (x: U) => S +>U : U +>g : (_: U) => T +>_ : U +>U : U +>T : T + + (x: U) => f(g(x)) +>(x: U) => f(g(x)) : (x: U) => S +>x : U +>U : U +>f(g(x)) : S +>f : (_: T) => S +>g(x) : T +>g : (_: U) => T +>x : U + +var foo: (g: (x: K) => N) => +>foo : (g: (x: K) => N) => (h: (_: (_: K) => (_: M) => M) => (_: M) => M) => (f: (_: N) => (_: R) => R) => (_: R) => R +>K : K +>N : N +>g : (x: K) => N +>x : K +>K : K +>N : N + + (h: (_: (_: K) => (_: M) => M) => (_: M) => M) => +>h : (_: (_: K) => (_: M) => M) => (_: M) => M +>M : M +>_ : (_: K) => (_: M) => M +>_ : K +>K : K +>_ : M +>M : M +>M : M +>_ : M +>M : M +>M : M + + (f: (_: N) => (_: R) => R) => (_: R) => R +>R : R +>f : (_: N) => (_: R) => R +>_ : N +>N : N +>_ : R +>R : R +>R : R +>_ : R +>R : R +>R : R + + = (g: (x: K) => N) => +>(g: (x: K) => N) => (h: (_: (_: K) => (_: M) => M) => (_: M) => M) => (f: (_: N) => (_: R) => R) => h(combine(f)(g)) : (g: (x: K) => N) => (h: (_: (_: K) => (_: M) => M) => (_: M) => M) => (f: (_: N) => (_: R) => R) => (_: R) => R +>K : K +>N : N +>g : (x: K) => N +>x : K +>K : K +>N : N + + (h: (_: (_: K) => (_: M) => M) => (_: M) => M) => +>(h: (_: (_: K) => (_: M) => M) => (_: M) => M) => (f: (_: N) => (_: R) => R) => h(combine(f)(g)) : (h: (_: (_: K) => (_: M) => M) => (_: M) => M) => (f: (_: N) => (_: R) => R) => (_: R) => R +>h : (_: (_: K) => (_: M) => M) => (_: M) => M +>M : M +>_ : (_: K) => (_: M) => M +>_ : K +>K : K +>_ : M +>M : M +>M : M +>_ : M +>M : M +>M : M + + (f: (_: N) => (_: R) => R) => h(combine(f)(g)) +>(f: (_: N) => (_: R) => R) => h(combine(f)(g)) : (f: (_: N) => (_: R) => R) => (_: R) => R +>R : R +>f : (_: N) => (_: R) => R +>_ : N +>N : N +>_ : R +>R : R +>R : R +>h(combine(f)(g)) : (_: R) => R +>h : (_: (_: K) => (_: M) => M) => (_: M) => M +>combine(f)(g) : (x: K) => (_: R) => R +>combine(f) : (g: (_: U) => N) => (x: U) => (_: R) => R +>combine : (f: (_: T) => S) => (g: (_: U) => T) => (x: U) => S +>f : (_: N) => (_: R) => R +>g : (x: K) => N + diff --git a/tests/baselines/reference/genericsManyTypeParameters.types b/tests/baselines/reference/genericsManyTypeParameters.types new file mode 100644 index 00000000000..65f9a7c115e --- /dev/null +++ b/tests/baselines/reference/genericsManyTypeParameters.types @@ -0,0 +1,548 @@ +=== tests/cases/compiler/genericsManyTypeParameters.ts === +function Foo< +>Foo : (x1: a1, y1: a21, z1: a31, a1: a41, b1: a51, c1: a61, x2: a119, y2: a22, z2: a32, a2: a42, b2: a52, c2: a62, x3: a219, y3: a23, z3: a33, a3: a43, b3: a53, c3: a63, x4: a319, y4: a24, z4: a34, a4: a44, b4: a54, c4: a64, x5: a419, y5: a25, z5: a35, a5: a45, b5: a55, c5: a65, x6: a519, y6: a26, z6: a36, a6: a46, b6: a56, c6: a66, x7: a619, y7: a27, z7: a37, a7: a47, b7: a57, c7: a67, x8: a71, y8: a28, z8: a38, a8: a48, b8: a58, c8: a68, x9: a81, y9: a29, z9: a39, a9: a49, b9: a59, c9: a69, x10: a91, y12: a210, z10: a310, a10: a410, b10: a510, c10: a610, x11: a111, y13: a211, z11: a311, a11: a411, b11: a511, c11: a611, x12: a112, y14: a212, z12: a312, a12: a412, b12: a512, c12: a612, x13: a113, y15: a213, z13: a313, a13: a413, b13: a513, c13: a613, x14: a114, y16: a214, z14: a314, a14: a414, b14: a514, c14: a614, x15: a115, y17: a215, z15: a315, a15: a415, b15: a515, c15: a615, x16: a116, y18: a216, z16: a316, a16: a416, b16: a516, c16: a616, x17: a117, y19: a217, z17: a317, a17: a417, b17: a517, c17: a617, x18: a118, y10: a218, z18: a318, a18: a418, b18: a518, c18: a618) => {}[] + + a1, a21, a31, a41, a51, a61, +>a1 : a1 +>a21 : a21 +>a31 : a31 +>a41 : a41 +>a51 : a51 +>a61 : a61 + + a119, a22, a32, a42, a52, a62, +>a119 : a119 +>a22 : a22 +>a32 : a32 +>a42 : a42 +>a52 : a52 +>a62 : a62 + + a219, a23, a33, a43, a53, a63, +>a219 : a219 +>a23 : a23 +>a33 : a33 +>a43 : a43 +>a53 : a53 +>a63 : a63 + + a319, a24, a34, a44, a54, a64, +>a319 : a319 +>a24 : a24 +>a34 : a34 +>a44 : a44 +>a54 : a54 +>a64 : a64 + + a419, a25, a35, a45, a55, a65, +>a419 : a419 +>a25 : a25 +>a35 : a35 +>a45 : a45 +>a55 : a55 +>a65 : a65 + + a519, a26, a36, a46, a56, a66, +>a519 : a519 +>a26 : a26 +>a36 : a36 +>a46 : a46 +>a56 : a56 +>a66 : a66 + + a619, a27, a37, a47, a57, a67, +>a619 : a619 +>a27 : a27 +>a37 : a37 +>a47 : a47 +>a57 : a57 +>a67 : a67 + + a71, a28, a38, a48, a58, a68, +>a71 : a71 +>a28 : a28 +>a38 : a38 +>a48 : a48 +>a58 : a58 +>a68 : a68 + + a81, a29, a39, a49, a59, a69, +>a81 : a81 +>a29 : a29 +>a39 : a39 +>a49 : a49 +>a59 : a59 +>a69 : a69 + + a91, a210, a310, a410, a510, a610, +>a91 : a91 +>a210 : a210 +>a310 : a310 +>a410 : a410 +>a510 : a510 +>a610 : a610 + + a111, a211, a311, a411, a511, a611, +>a111 : a111 +>a211 : a211 +>a311 : a311 +>a411 : a411 +>a511 : a511 +>a611 : a611 + + a112, a212, a312, a412, a512, a612, +>a112 : a112 +>a212 : a212 +>a312 : a312 +>a412 : a412 +>a512 : a512 +>a612 : a612 + + a113, a213, a313, a413, a513, a613, +>a113 : a113 +>a213 : a213 +>a313 : a313 +>a413 : a413 +>a513 : a513 +>a613 : a613 + + a114, a214, a314, a414, a514, a614, +>a114 : a114 +>a214 : a214 +>a314 : a314 +>a414 : a414 +>a514 : a514 +>a614 : a614 + + a115, a215, a315, a415, a515, a615, +>a115 : a115 +>a215 : a215 +>a315 : a315 +>a415 : a415 +>a515 : a515 +>a615 : a615 + + a116, a216, a316, a416, a516, a616, +>a116 : a116 +>a216 : a216 +>a316 : a316 +>a416 : a416 +>a516 : a516 +>a616 : a616 + + a117, a217, a317, a417, a517, a617, +>a117 : a117 +>a217 : a217 +>a317 : a317 +>a417 : a417 +>a517 : a517 +>a617 : a617 + + a118, a218, a318, a418, a518, a618> +>a118 : a118 +>a218 : a218 +>a318 : a318 +>a418 : a418 +>a518 : a518 +>a618 : a618 + + ( + x1: a1, y1: a21, z1: a31, a1: a41, b1: a51, c1: a61, +>x1 : a1 +>a1 : a1 +>y1 : a21 +>a21 : a21 +>z1 : a31 +>a31 : a31 +>a1 : a41 +>a41 : a41 +>b1 : a51 +>a51 : a51 +>c1 : a61 +>a61 : a61 + + x2: a119, y2: a22, z2: a32, a2: a42, b2: a52, c2: a62, +>x2 : a119 +>a119 : a119 +>y2 : a22 +>a22 : a22 +>z2 : a32 +>a32 : a32 +>a2 : a42 +>a42 : a42 +>b2 : a52 +>a52 : a52 +>c2 : a62 +>a62 : a62 + + x3: a219, y3: a23, z3: a33, a3: a43, b3: a53, c3: a63, +>x3 : a219 +>a219 : a219 +>y3 : a23 +>a23 : a23 +>z3 : a33 +>a33 : a33 +>a3 : a43 +>a43 : a43 +>b3 : a53 +>a53 : a53 +>c3 : a63 +>a63 : a63 + + x4: a319, y4: a24, z4: a34, a4: a44, b4: a54, c4: a64, +>x4 : a319 +>a319 : a319 +>y4 : a24 +>a24 : a24 +>z4 : a34 +>a34 : a34 +>a4 : a44 +>a44 : a44 +>b4 : a54 +>a54 : a54 +>c4 : a64 +>a64 : a64 + + x5: a419, y5: a25, z5: a35, a5: a45, b5: a55, c5: a65, +>x5 : a419 +>a419 : a419 +>y5 : a25 +>a25 : a25 +>z5 : a35 +>a35 : a35 +>a5 : a45 +>a45 : a45 +>b5 : a55 +>a55 : a55 +>c5 : a65 +>a65 : a65 + + x6: a519, y6: a26, z6: a36, a6: a46, b6: a56, c6: a66, +>x6 : a519 +>a519 : a519 +>y6 : a26 +>a26 : a26 +>z6 : a36 +>a36 : a36 +>a6 : a46 +>a46 : a46 +>b6 : a56 +>a56 : a56 +>c6 : a66 +>a66 : a66 + + x7: a619, y7: a27, z7: a37, a7: a47, b7: a57, c7: a67, +>x7 : a619 +>a619 : a619 +>y7 : a27 +>a27 : a27 +>z7 : a37 +>a37 : a37 +>a7 : a47 +>a47 : a47 +>b7 : a57 +>a57 : a57 +>c7 : a67 +>a67 : a67 + + x8: a71, y8: a28, z8: a38, a8: a48, b8: a58, c8: a68, +>x8 : a71 +>a71 : a71 +>y8 : a28 +>a28 : a28 +>z8 : a38 +>a38 : a38 +>a8 : a48 +>a48 : a48 +>b8 : a58 +>a58 : a58 +>c8 : a68 +>a68 : a68 + + x9: a81, y9: a29, z9: a39, a9: a49, b9: a59, c9: a69, +>x9 : a81 +>a81 : a81 +>y9 : a29 +>a29 : a29 +>z9 : a39 +>a39 : a39 +>a9 : a49 +>a49 : a49 +>b9 : a59 +>a59 : a59 +>c9 : a69 +>a69 : a69 + + x10: a91, y12: a210, z10: a310, a10: a410, b10: a510, c10: a610, +>x10 : a91 +>a91 : a91 +>y12 : a210 +>a210 : a210 +>z10 : a310 +>a310 : a310 +>a10 : a410 +>a410 : a410 +>b10 : a510 +>a510 : a510 +>c10 : a610 +>a610 : a610 + + x11: a111, y13: a211, z11: a311, a11: a411, b11: a511, c11: a611, +>x11 : a111 +>a111 : a111 +>y13 : a211 +>a211 : a211 +>z11 : a311 +>a311 : a311 +>a11 : a411 +>a411 : a411 +>b11 : a511 +>a511 : a511 +>c11 : a611 +>a611 : a611 + + x12: a112, y14: a212, z12: a312, a12: a412, b12: a512, c12: a612, +>x12 : a112 +>a112 : a112 +>y14 : a212 +>a212 : a212 +>z12 : a312 +>a312 : a312 +>a12 : a412 +>a412 : a412 +>b12 : a512 +>a512 : a512 +>c12 : a612 +>a612 : a612 + + x13: a113, y15: a213, z13: a313, a13: a413, b13: a513, c13: a613, +>x13 : a113 +>a113 : a113 +>y15 : a213 +>a213 : a213 +>z13 : a313 +>a313 : a313 +>a13 : a413 +>a413 : a413 +>b13 : a513 +>a513 : a513 +>c13 : a613 +>a613 : a613 + + x14: a114, y16: a214, z14: a314, a14: a414, b14: a514, c14: a614, +>x14 : a114 +>a114 : a114 +>y16 : a214 +>a214 : a214 +>z14 : a314 +>a314 : a314 +>a14 : a414 +>a414 : a414 +>b14 : a514 +>a514 : a514 +>c14 : a614 +>a614 : a614 + + x15: a115, y17: a215, z15: a315, a15: a415, b15: a515, c15: a615, +>x15 : a115 +>a115 : a115 +>y17 : a215 +>a215 : a215 +>z15 : a315 +>a315 : a315 +>a15 : a415 +>a415 : a415 +>b15 : a515 +>a515 : a515 +>c15 : a615 +>a615 : a615 + + x16: a116, y18: a216, z16: a316, a16: a416, b16: a516, c16: a616, +>x16 : a116 +>a116 : a116 +>y18 : a216 +>a216 : a216 +>z16 : a316 +>a316 : a316 +>a16 : a416 +>a416 : a416 +>b16 : a516 +>a516 : a516 +>c16 : a616 +>a616 : a616 + + x17: a117, y19: a217, z17: a317, a17: a417, b17: a517, c17: a617, +>x17 : a117 +>a117 : a117 +>y19 : a217 +>a217 : a217 +>z17 : a317 +>a317 : a317 +>a17 : a417 +>a417 : a417 +>b17 : a517 +>a517 : a517 +>c17 : a617 +>a617 : a617 + + x18: a118, y10: a218, z18: a318, a18: a418, b18: a518, c18: a618 +>x18 : a118 +>a118 : a118 +>y10 : a218 +>a218 : a218 +>z18 : a318 +>a318 : a318 +>a18 : a418 +>a418 : a418 +>b18 : a518 +>a518 : a518 +>c18 : a618 +>a618 : a618 + + ) + { + return [x1 , y1 , z1 , a1 , b1 , c1, +>[x1 , y1 , z1 , a1 , b1 , c1, x2 , y2 , z2 , a2 , b2 , c2, x3 , y3 , z3 , a3 , b3 , c3, x4 , y4 , z4 , a4 , b4 , c4, x5 , y5 , z5 , a5 , b5 , c5, x6 , y6 , z6 , a6 , b6 , c6, x7 , y7 , z7 , a7 , b7 , c7, x8 , y8 , z8 , a8 , b8 , c8, x9 , y9 , z9 , a9 , b9 , c9, x10 , y12 , z10 , a10 , b10 , c10, x11 , y13 , z11 , a11 , b11 , c11, x12 , y14 , z12 , a12 , b12 , c12, x13 , y15 , z13 , a13 , b13 , c13, x14 , y16 , z14 , a14 , b14 , c14, x15 , y17 , z15 , a15 , b15 , c15, x16 , y18 , z16 , a16 , b16 , c16, x17 , y19 , z17 , a17 , b17 , c17, x18 , y10 , z18 , a18 , b18 , c18] : {}[] +>x1 : a1 +>y1 : a21 +>z1 : a31 +>a1 : a41 +>b1 : a51 +>c1 : a61 + + x2 , y2 , z2 , a2 , b2 , c2, +>x2 : a119 +>y2 : a22 +>z2 : a32 +>a2 : a42 +>b2 : a52 +>c2 : a62 + + x3 , y3 , z3 , a3 , b3 , c3, +>x3 : a219 +>y3 : a23 +>z3 : a33 +>a3 : a43 +>b3 : a53 +>c3 : a63 + + x4 , y4 , z4 , a4 , b4 , c4, +>x4 : a319 +>y4 : a24 +>z4 : a34 +>a4 : a44 +>b4 : a54 +>c4 : a64 + + x5 , y5 , z5 , a5 , b5 , c5, +>x5 : a419 +>y5 : a25 +>z5 : a35 +>a5 : a45 +>b5 : a55 +>c5 : a65 + + x6 , y6 , z6 , a6 , b6 , c6, +>x6 : a519 +>y6 : a26 +>z6 : a36 +>a6 : a46 +>b6 : a56 +>c6 : a66 + + x7 , y7 , z7 , a7 , b7 , c7, +>x7 : a619 +>y7 : a27 +>z7 : a37 +>a7 : a47 +>b7 : a57 +>c7 : a67 + + x8 , y8 , z8 , a8 , b8 , c8, +>x8 : a71 +>y8 : a28 +>z8 : a38 +>a8 : a48 +>b8 : a58 +>c8 : a68 + + x9 , y9 , z9 , a9 , b9 , c9, +>x9 : a81 +>y9 : a29 +>z9 : a39 +>a9 : a49 +>b9 : a59 +>c9 : a69 + + x10 , y12 , z10 , a10 , b10 , c10, +>x10 : a91 +>y12 : a210 +>z10 : a310 +>a10 : a410 +>b10 : a510 +>c10 : a610 + + x11 , y13 , z11 , a11 , b11 , c11, +>x11 : a111 +>y13 : a211 +>z11 : a311 +>a11 : a411 +>b11 : a511 +>c11 : a611 + + x12 , y14 , z12 , a12 , b12 , c12, +>x12 : a112 +>y14 : a212 +>z12 : a312 +>a12 : a412 +>b12 : a512 +>c12 : a612 + + x13 , y15 , z13 , a13 , b13 , c13, +>x13 : a113 +>y15 : a213 +>z13 : a313 +>a13 : a413 +>b13 : a513 +>c13 : a613 + + x14 , y16 , z14 , a14 , b14 , c14, +>x14 : a114 +>y16 : a214 +>z14 : a314 +>a14 : a414 +>b14 : a514 +>c14 : a614 + + x15 , y17 , z15 , a15 , b15 , c15, +>x15 : a115 +>y17 : a215 +>z15 : a315 +>a15 : a415 +>b15 : a515 +>c15 : a615 + + x16 , y18 , z16 , a16 , b16 , c16, +>x16 : a116 +>y18 : a216 +>z16 : a316 +>a16 : a416 +>b16 : a516 +>c16 : a616 + + x17 , y19 , z17 , a17 , b17 , c17, +>x17 : a117 +>y19 : a217 +>z17 : a317 +>a17 : a417 +>b17 : a517 +>c17 : a617 + + x18 , y10 , z18 , a18 , b18 , c18]; +>x18 : a118 +>y10 : a218 +>z18 : a318 +>a18 : a418 +>b18 : a518 +>c18 : a618 + } diff --git a/tests/baselines/reference/getterSetterNonAccessor.types b/tests/baselines/reference/getterSetterNonAccessor.types new file mode 100644 index 00000000000..d0b925f99e0 --- /dev/null +++ b/tests/baselines/reference/getterSetterNonAccessor.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/getterSetterNonAccessor.ts === +function getFunc():any{return 0;} +>getFunc : () => any + +function setFunc(v){} +>setFunc : (v: any) => void +>v : any + +Object.defineProperty({}, "0", ({ +>Object.defineProperty({}, "0", ({ get: getFunc, set: setFunc, configurable: true })) : any +>Object.defineProperty : (o: any, p: string, attributes: PropertyDescriptor) => any +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>defineProperty : (o: any, p: string, attributes: PropertyDescriptor) => any +>{} : {} +>({ get: getFunc, set: setFunc, configurable: true }) : PropertyDescriptor +>PropertyDescriptor : PropertyDescriptor +>({ get: getFunc, set: setFunc, configurable: true }) : { get: () => any; set: (v: any) => void; configurable: boolean; } +>{ get: getFunc, set: setFunc, configurable: true } : { get: () => any; set: (v: any) => void; configurable: boolean; } + + get: getFunc, +>get : () => any +>getFunc : () => any + + set: setFunc, +>set : (v: any) => void +>setFunc : (v: any) => void + + configurable: true +>configurable : boolean + + })); + diff --git a/tests/baselines/reference/global.types b/tests/baselines/reference/global.types new file mode 100644 index 00000000000..86d5dd3c986 --- /dev/null +++ b/tests/baselines/reference/global.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/global.ts === +module M { +>M : typeof M + + export function f(y:number) { +>f : (y: number) => number +>y : number + + return x+y; +>x+y : number +>x : number +>y : number + } +} + +var x=10; +>x : number + +M.f(3); +>M.f(3) : number +>M.f : (y: number) => number +>M : typeof M +>f : (y: number) => number + + diff --git a/tests/baselines/reference/globalThis.js b/tests/baselines/reference/globalThis.js index 1479658fdd5..ce706376a0f 100644 --- a/tests/baselines/reference/globalThis.js +++ b/tests/baselines/reference/globalThis.js @@ -2,4 +2,4 @@ var __e = Math.E; // should not generate 'this.Math.E' //// [globalThis.js] -var __e = Math.E; +var __e = Math.E; // should not generate 'this.Math.E' diff --git a/tests/baselines/reference/globalThis.types b/tests/baselines/reference/globalThis.types new file mode 100644 index 00000000000..479b8ae276a --- /dev/null +++ b/tests/baselines/reference/globalThis.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/globalThis.ts === +var __e = Math.E; // should not generate 'this.Math.E' +>__e : number +>Math.E : number +>Math : Math +>E : number + diff --git a/tests/baselines/reference/globalThisCapture.js b/tests/baselines/reference/globalThisCapture.js index f3186389f22..b854e754a34 100644 --- a/tests/baselines/reference/globalThisCapture.js +++ b/tests/baselines/reference/globalThisCapture.js @@ -10,6 +10,8 @@ parts[0]; //// [globalThisCapture.js] var _this = this; +// Add a lambda to ensure global 'this' capture is triggered (function () { return _this.window; }); var parts = []; +// Ensure that the generated code is correct parts[0]; diff --git a/tests/baselines/reference/globalThisCapture.types b/tests/baselines/reference/globalThisCapture.types new file mode 100644 index 00000000000..71bb4e99853 --- /dev/null +++ b/tests/baselines/reference/globalThisCapture.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/globalThisCapture.ts === +// Add a lambda to ensure global 'this' capture is triggered +(()=>this.window); +>(()=>this.window) : () => any +>()=>this.window : () => any +>this.window : any +>this : any +>window : any + +var parts = []; +>parts : any[] +>[] : undefined[] + +// Ensure that the generated code is correct +parts[0]; +>parts[0] : any +>parts : any[] + diff --git a/tests/baselines/reference/grammarAmbiguities.js b/tests/baselines/reference/grammarAmbiguities.js index 1b58e69e514..ee81d947ff6 100644 --- a/tests/baselines/reference/grammarAmbiguities.js +++ b/tests/baselines/reference/grammarAmbiguities.js @@ -20,5 +20,5 @@ function g(x) { } var A, B; f(g(7)); -f(g < A, B > 7); -f(g < A, B > +(7)); +f(g < A, B > 7); // Should error +f(g < A, B > +(7)); // Should error diff --git a/tests/baselines/reference/heterogeneousArrayAndOverloads.js b/tests/baselines/reference/heterogeneousArrayAndOverloads.js index 1e166879621..c44a0921bc6 100644 --- a/tests/baselines/reference/heterogeneousArrayAndOverloads.js +++ b/tests/baselines/reference/heterogeneousArrayAndOverloads.js @@ -21,7 +21,7 @@ var arrTest = (function () { this.test([1, 2, 3, 5]); this.test(["hi"]); this.test([]); - this.test([1, 2, "hi", 5]); + this.test([1, 2, "hi", 5]); // Error }; return arrTest; })(); diff --git a/tests/baselines/reference/heterogeneousArrayLiterals.js b/tests/baselines/reference/heterogeneousArrayLiterals.js index f16c398e398..8deb3b4b068 100644 --- a/tests/baselines/reference/heterogeneousArrayLiterals.js +++ b/tests/baselines/reference/heterogeneousArrayLiterals.js @@ -132,26 +132,27 @@ function foo4(t: T, u: U) { //} //// [heterogeneousArrayLiterals.js] +// type of an array is the best common type of its elements (plus its contextual type if it exists) var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var a = [1, '']; -var b = [1, null]; -var c = [1, '', null]; -var d = [{}, 1]; -var e = [{}, Object]; -var f = [[], [1]]; -var g = [[1], ['']]; -var h = [{ foo: 1, bar: '' }, { foo: 2 }]; -var i = [{ foo: 1, bar: '' }, { foo: '' }]; -var j = [function () { return 1; }, function () { return ''; }]; -var k = [function () { return 1; }, function () { return 1; }]; -var l = [function () { return 1; }, function () { return null; }]; -var m = [function () { return 1; }, function () { return ''; }, function () { return null; }]; -var n = [[function () { return 1; }], [function () { return ''; }]]; +var a = [1, '']; // {}[] +var b = [1, null]; // number[] +var c = [1, '', null]; // {}[] +var d = [{}, 1]; // {}[] +var e = [{}, Object]; // {}[] +var f = [[], [1]]; // number[][] +var g = [[1], ['']]; // {}[] +var h = [{ foo: 1, bar: '' }, { foo: 2 }]; // {foo: number}[] +var i = [{ foo: 1, bar: '' }, { foo: '' }]; // {}[] +var j = [function () { return 1; }, function () { return ''; }]; // {}[] +var k = [function () { return 1; }, function () { return 1; }]; // { (): number }[] +var l = [function () { return 1; }, function () { return null; }]; // { (): any }[] +var m = [function () { return 1; }, function () { return ''; }, function () { return null; }]; // { (): any }[] +var n = [[function () { return 1; }], [function () { return ''; }]]; // {}[] var Base = (function () { function Base() { } @@ -176,66 +177,67 @@ var derived; var derived2; var Derived; (function (Derived) { - var h = [{ foo: base, basear: derived }, { foo: base }]; - var i = [{ foo: base, basear: derived }, { foo: derived }]; - var j = [function () { return base; }, function () { return derived; }]; - var k = [function () { return base; }, function () { return 1; }]; - var l = [function () { return base; }, function () { return null; }]; - var m = [function () { return base; }, function () { return derived; }, function () { return null; }]; - var n = [[function () { return base; }], [function () { return derived; }]]; - var o = [derived, derived2]; - var p = [derived, derived2, base]; - var q = [[function () { return derived2; }], [function () { return derived; }]]; + var h = [{ foo: base, basear: derived }, { foo: base }]; // {foo: Base}[] + var i = [{ foo: base, basear: derived }, { foo: derived }]; // {foo: Derived}[] + var j = [function () { return base; }, function () { return derived; }]; // { {}: Base } + var k = [function () { return base; }, function () { return 1; }]; // {}[]~ + var l = [function () { return base; }, function () { return null; }]; // { (): any }[] + var m = [function () { return base; }, function () { return derived; }, function () { return null; }]; // { (): any }[] + var n = [[function () { return base; }], [function () { return derived; }]]; // { (): Base }[] + var o = [derived, derived2]; // {}[] + var p = [derived, derived2, base]; // Base[] + var q = [[function () { return derived2; }], [function () { return derived; }]]; // {}[] })(Derived || (Derived = {})); var WithContextualType; (function (WithContextualType) { + // no errors var a = [derived, derived2]; var b = [null]; var c = []; var d = [function () { return derived; }, function () { return derived2; }]; })(WithContextualType || (WithContextualType = {})); function foo(t, u) { - var a = [t, t]; - var b = [t, null]; - var c = [t, u]; - var d = [t, 1]; - var e = [function () { return t; }, function () { return u; }]; - var f = [function () { return t; }, function () { return u; }, function () { return null; }]; + var a = [t, t]; // T[] + var b = [t, null]; // T[] + var c = [t, u]; // {}[] + var d = [t, 1]; // {}[] + var e = [function () { return t; }, function () { return u; }]; // {}[] + var f = [function () { return t; }, function () { return u; }, function () { return null; }]; // { (): any }[] } function foo2(t, u) { - var a = [t, t]; - var b = [t, null]; - var c = [t, u]; - var d = [t, 1]; - var e = [function () { return t; }, function () { return u; }]; - var f = [function () { return t; }, function () { return u; }, function () { return null; }]; - var g = [t, base]; - var h = [t, derived]; - var i = [u, base]; - var j = [u, derived]; + var a = [t, t]; // T[] + var b = [t, null]; // T[] + var c = [t, u]; // {}[] + var d = [t, 1]; // {}[] + var e = [function () { return t; }, function () { return u; }]; // {}[] + var f = [function () { return t; }, function () { return u; }, function () { return null; }]; // { (): any }[] + var g = [t, base]; // Base[] + var h = [t, derived]; // Derived[] + var i = [u, base]; // Base[] + var j = [u, derived]; // Derived[] } function foo3(t, u) { - var a = [t, t]; - var b = [t, null]; - var c = [t, u]; - var d = [t, 1]; - var e = [function () { return t; }, function () { return u; }]; - var f = [function () { return t; }, function () { return u; }, function () { return null; }]; - var g = [t, base]; - var h = [t, derived]; - var i = [u, base]; - var j = [u, derived]; + var a = [t, t]; // T[] + var b = [t, null]; // T[] + var c = [t, u]; // {}[] + var d = [t, 1]; // {}[] + var e = [function () { return t; }, function () { return u; }]; // {}[] + var f = [function () { return t; }, function () { return u; }, function () { return 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, u) { - var a = [t, t]; - var b = [t, null]; - var c = [t, u]; - var d = [t, 1]; - var e = [function () { return t; }, function () { return u; }]; - var f = [function () { return t; }, function () { return u; }, function () { return null; }]; - var g = [t, base]; - var h = [t, derived]; - var i = [u, base]; - var j = [u, derived]; + var a = [t, t]; // T[] + var b = [t, null]; // T[] + var c = [t, u]; // BUG 821629 + var d = [t, 1]; // {}[] + var e = [function () { return t; }, function () { return u; }]; // {}[] + var f = [function () { return t; }, function () { return u; }, function () { return null; }]; // { (): any }[] + var g = [t, base]; // Base[] + var h = [t, derived]; // Derived[] + var i = [u, base]; // Base[] + var j = [u, derived]; // Derived[] var k = [t, u]; } diff --git a/tests/baselines/reference/heterogeneousArrayLiterals.types b/tests/baselines/reference/heterogeneousArrayLiterals.types new file mode 100644 index 00000000000..81770731633 --- /dev/null +++ b/tests/baselines/reference/heterogeneousArrayLiterals.types @@ -0,0 +1,548 @@ +=== tests/cases/conformance/types/typeRelationships/bestCommonType/heterogeneousArrayLiterals.ts === +// type of an array is the best common type of its elements (plus its contextual type if it exists) + +var a = [1, '']; // {}[] +>a : {}[] +>[1, ''] : {}[] + +var b = [1, null]; // number[] +>b : number[] +>[1, null] : number[] + +var c = [1, '', null]; // {}[] +>c : {}[] +>[1, '', null] : {}[] + +var d = [{}, 1]; // {}[] +>d : {}[] +>[{}, 1] : {}[] +>{} : {} + +var e = [{}, Object]; // {}[] +>e : {}[] +>[{}, Object] : {}[] +>{} : {} +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + +var f = [[], [1]]; // number[][] +>f : number[][] +>[[], [1]] : number[][] +>[] : undefined[] +>[1] : number[] + +var g = [[1], ['']]; // {}[] +>g : {}[] +>[[1], ['']] : {}[] +>[1] : number[] +>[''] : string[] + +var h = [{ foo: 1, bar: '' }, { foo: 2 }]; // {foo: number}[] +>h : { foo: number; }[] +>[{ foo: 1, bar: '' }, { foo: 2 }] : { foo: number; }[] +>{ foo: 1, bar: '' } : { foo: number; bar: string; } +>foo : number +>bar : string +>{ foo: 2 } : { foo: number; } +>foo : number + +var i = [{ foo: 1, bar: '' }, { foo: '' }]; // {}[] +>i : {}[] +>[{ foo: 1, bar: '' }, { foo: '' }] : {}[] +>{ foo: 1, bar: '' } : { foo: number; bar: string; } +>foo : number +>bar : string +>{ foo: '' } : { foo: string; } +>foo : string + +var j = [() => 1, () => '']; // {}[] +>j : {}[] +>[() => 1, () => ''] : {}[] +>() => 1 : () => number +>() => '' : () => string + +var k = [() => 1, () => 1]; // { (): number }[] +>k : { (): number; }[] +>[() => 1, () => 1] : { (): number; }[] +>() => 1 : () => number +>() => 1 : () => number + +var l = [() => 1, () => null]; // { (): any }[] +>l : { (): any; }[] +>[() => 1, () => null] : { (): any; }[] +>() => 1 : () => number +>() => null : () => any + +var m = [() => 1, () => '', () => null]; // { (): any }[] +>m : { (): any; }[] +>[() => 1, () => '', () => null] : { (): any; }[] +>() => 1 : () => number +>() => '' : () => string +>() => null : () => any + +var n = [[() => 1], [() => '']]; // {}[] +>n : {}[] +>[[() => 1], [() => '']] : {}[] +>[() => 1] : { (): number; }[] +>() => 1 : () => number +>[() => ''] : { (): string; }[] +>() => '' : () => string + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Base { baz: string; } +>Derived2 : Derived2 +>Base : Base +>baz : string + +var base: Base; +>base : Base +>Base : Base + +var derived: Derived; +>derived : Derived +>Derived : Derived + +var derived2: Derived2; +>derived2 : Derived2 +>Derived2 : Derived2 + +module Derived { +>Derived : typeof Derived + + var h = [{ foo: base, basear: derived }, { foo: base }]; // {foo: Base}[] +>h : { foo: Base; }[] +>[{ foo: base, basear: derived }, { foo: base }] : { foo: Base; }[] +>{ foo: base, basear: derived } : { foo: Base; basear: Derived; } +>foo : Base +>base : Base +>basear : Derived +>derived : Derived +>{ foo: base } : { foo: Base; } +>foo : Base +>base : Base + + var i = [{ foo: base, basear: derived }, { foo: derived }]; // {foo: Derived}[] +>i : {}[] +>[{ foo: base, basear: derived }, { foo: derived }] : {}[] +>{ foo: base, basear: derived } : { foo: Base; basear: Derived; } +>foo : Base +>base : Base +>basear : Derived +>derived : Derived +>{ foo: derived } : { foo: Derived; } +>foo : Derived +>derived : Derived + + var j = [() => base, () => derived]; // { {}: Base } +>j : { (): Base; }[] +>[() => base, () => derived] : { (): Base; }[] +>() => base : () => Base +>base : Base +>() => derived : () => Derived +>derived : Derived + + var k = [() => base, () => 1]; // {}[]~ +>k : {}[] +>[() => base, () => 1] : {}[] +>() => base : () => Base +>base : Base +>() => 1 : () => number + + var l = [() => base, () => null]; // { (): any }[] +>l : { (): any; }[] +>[() => base, () => null] : { (): any; }[] +>() => base : () => Base +>base : Base +>() => null : () => any + + var m = [() => base, () => derived, () => null]; // { (): any }[] +>m : { (): any; }[] +>[() => base, () => derived, () => null] : { (): any; }[] +>() => base : () => Base +>base : Base +>() => derived : () => Derived +>derived : Derived +>() => null : () => any + + var n = [[() => base], [() => derived]]; // { (): Base }[] +>n : { (): Base; }[][] +>[[() => base], [() => derived]] : { (): Base; }[][] +>[() => base] : { (): Base; }[] +>() => base : () => Base +>base : Base +>[() => derived] : { (): Derived; }[] +>() => derived : () => Derived +>derived : Derived + + var o = [derived, derived2]; // {}[] +>o : {}[] +>[derived, derived2] : {}[] +>derived : Derived +>derived2 : Derived2 + + var p = [derived, derived2, base]; // Base[] +>p : Base[] +>[derived, derived2, base] : Base[] +>derived : Derived +>derived2 : Derived2 +>base : Base + + var q = [[() => derived2], [() => derived]]; // {}[] +>q : {}[] +>[[() => derived2], [() => derived]] : {}[] +>[() => derived2] : { (): Derived2; }[] +>() => derived2 : () => Derived2 +>derived2 : Derived2 +>[() => derived] : { (): Derived; }[] +>() => derived : () => Derived +>derived : Derived +} + +module WithContextualType { +>WithContextualType : typeof WithContextualType + + // no errors + var a: Base[] = [derived, derived2]; +>a : Base[] +>Base : Base +>[derived, derived2] : Base[] +>derived : Derived +>derived2 : Derived2 + + var b: Derived[] = [null]; +>b : Derived[] +>Derived : Derived +>[null] : Derived[] + + var c: Derived[] = []; +>c : Derived[] +>Derived : Derived +>[] : Derived[] + + var d: { (): Base }[] = [() => derived, () => derived2]; +>d : { (): Base; }[] +>Base : Base +>[() => derived, () => derived2] : { (): Base; }[] +>() => derived : () => Derived +>derived : Derived +>() => derived2 : () => Derived2 +>derived2 : Derived2 +} + +function foo(t: T, u: U) { +>foo : (t: T, u: U) => void +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U + + var a = [t, t]; // T[] +>a : T[] +>[t, t] : T[] +>t : T +>t : T + + var b = [t, null]; // T[] +>b : T[] +>[t, null] : T[] +>t : T + + var c = [t, u]; // {}[] +>c : {}[] +>[t, u] : {}[] +>t : T +>u : U + + var d = [t, 1]; // {}[] +>d : {}[] +>[t, 1] : {}[] +>t : T + + var e = [() => t, () => u]; // {}[] +>e : {}[] +>[() => t, () => u] : {}[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U + + var f = [() => t, () => u, () => null]; // { (): any }[] +>f : { (): any; }[] +>[() => t, () => u, () => null] : { (): any; }[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U +>() => null : () => any +} + +function foo2(t: T, u: U) { +>foo2 : (t: T, u: U) => void +>T : T +>Base : Base +>U : U +>Derived : Derived +>t : T +>T : T +>u : U +>U : U + + var a = [t, t]; // T[] +>a : T[] +>[t, t] : T[] +>t : T +>t : T + + var b = [t, null]; // T[] +>b : T[] +>[t, null] : T[] +>t : T + + var c = [t, u]; // {}[] +>c : {}[] +>[t, u] : {}[] +>t : T +>u : U + + var d = [t, 1]; // {}[] +>d : {}[] +>[t, 1] : {}[] +>t : T + + var e = [() => t, () => u]; // {}[] +>e : {}[] +>[() => t, () => u] : {}[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U + + var f = [() => t, () => u, () => null]; // { (): any }[] +>f : { (): any; }[] +>[() => t, () => u, () => null] : { (): any; }[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U +>() => null : () => any + + var g = [t, base]; // Base[] +>g : Base[] +>[t, base] : Base[] +>t : T +>base : Base + + var h = [t, derived]; // Derived[] +>h : {}[] +>[t, derived] : {}[] +>t : T +>derived : Derived + + var i = [u, base]; // Base[] +>i : Base[] +>[u, base] : Base[] +>u : U +>base : Base + + var j = [u, derived]; // Derived[] +>j : Derived[] +>[u, derived] : Derived[] +>u : U +>derived : Derived +} + +function foo3(t: T, u: U) { +>foo3 : (t: T, u: U) => void +>T : T +>Derived : Derived +>U : U +>Derived : Derived +>t : T +>T : T +>u : U +>U : U + + var a = [t, t]; // T[] +>a : T[] +>[t, t] : T[] +>t : T +>t : T + + var b = [t, null]; // T[] +>b : T[] +>[t, null] : T[] +>t : T + + var c = [t, u]; // {}[] +>c : {}[] +>[t, u] : {}[] +>t : T +>u : U + + var d = [t, 1]; // {}[] +>d : {}[] +>[t, 1] : {}[] +>t : T + + var e = [() => t, () => u]; // {}[] +>e : {}[] +>[() => t, () => u] : {}[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U + + var f = [() => t, () => u, () => null]; // { (): any }[] +>f : { (): any; }[] +>[() => t, () => u, () => null] : { (): any; }[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U +>() => null : () => any + + var g = [t, base]; // Base[] +>g : Base[] +>[t, base] : Base[] +>t : T +>base : Base + + var h = [t, derived]; // Derived[] +>h : Derived[] +>[t, derived] : Derived[] +>t : T +>derived : Derived + + var i = [u, base]; // Base[] +>i : Base[] +>[u, base] : Base[] +>u : U +>base : Base + + var j = [u, derived]; // Derived[] +>j : Derived[] +>[u, derived] : Derived[] +>u : U +>derived : Derived +} + +function foo4(t: T, u: U) { +>foo4 : (t: T, u: U) => void +>T : T +>Base : Base +>U : U +>Base : Base +>t : T +>T : T +>u : U +>U : U + + var a = [t, t]; // T[] +>a : T[] +>[t, t] : T[] +>t : T +>t : T + + var b = [t, null]; // T[] +>b : T[] +>[t, null] : T[] +>t : T + + var c = [t, u]; // BUG 821629 +>c : {}[] +>[t, u] : {}[] +>t : T +>u : U + + var d = [t, 1]; // {}[] +>d : {}[] +>[t, 1] : {}[] +>t : T + + var e = [() => t, () => u]; // {}[] +>e : {}[] +>[() => t, () => u] : {}[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U + + var f = [() => t, () => u, () => null]; // { (): any }[] +>f : { (): any; }[] +>[() => t, () => u, () => null] : { (): any; }[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U +>() => null : () => any + + var g = [t, base]; // Base[] +>g : Base[] +>[t, base] : Base[] +>t : T +>base : Base + + var h = [t, derived]; // Derived[] +>h : {}[] +>[t, derived] : {}[] +>t : T +>derived : Derived + + var i = [u, base]; // Base[] +>i : Base[] +>[u, base] : Base[] +>u : U +>base : Base + + var j = [u, derived]; // Derived[] +>j : {}[] +>[u, derived] : {}[] +>u : U +>derived : Derived + + var k: Base[] = [t, u]; +>k : Base[] +>Base : Base +>[t, u] : Base[] +>t : T +>u : 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/hidingCallSignatures.js b/tests/baselines/reference/hidingCallSignatures.js index b5f074da236..6b206d7d8a0 100644 --- a/tests/baselines/reference/hidingCallSignatures.js +++ b/tests/baselines/reference/hidingCallSignatures.js @@ -27,9 +27,9 @@ e(""); // {} //// [hidingCallSignatures.js] var d; -d(""); -new d(""); +d(""); // number +new d(""); // should be string var f; -f(""); +f(""); // string var e; -e(""); +e(""); // {} diff --git a/tests/baselines/reference/hidingCallSignatures.types b/tests/baselines/reference/hidingCallSignatures.types new file mode 100644 index 00000000000..90428b8db76 --- /dev/null +++ b/tests/baselines/reference/hidingCallSignatures.types @@ -0,0 +1,59 @@ +=== tests/cases/compiler/hidingCallSignatures.ts === +interface C { +>C : C + + new (a: string): string; +>a : string +} + +interface D extends C { +>D : D +>C : C + + (a: string): number; // Should be ok +>a : string +} + +interface E { +>E : E + + (a: string): {}; +>a : string +} + +interface F extends E { +>F : F +>E : E + + (a: string): string; +>a : string +} + +var d: D; +>d : D +>D : D + +d(""); // number +>d("") : number +>d : D + +new d(""); // should be string +>new d("") : string +>d : D + +var f: F; +>f : F +>F : F + +f(""); // string +>f("") : string +>f : F + +var e: E; +>e : E +>E : E + +e(""); // {} +>e("") : {} +>e : E + diff --git a/tests/baselines/reference/hidingConstructSignatures.js b/tests/baselines/reference/hidingConstructSignatures.js index 089e2e89f2b..6e0a2054885 100644 --- a/tests/baselines/reference/hidingConstructSignatures.js +++ b/tests/baselines/reference/hidingConstructSignatures.js @@ -27,9 +27,9 @@ new e(""); // {} //// [hidingConstructSignatures.js] var d; -d(""); -new d(""); +d(""); // string +new d(""); // should be number var f; -new f(""); +new f(""); // string var e; -new e(""); +new e(""); // {} diff --git a/tests/baselines/reference/hidingConstructSignatures.types b/tests/baselines/reference/hidingConstructSignatures.types new file mode 100644 index 00000000000..99781535b5d --- /dev/null +++ b/tests/baselines/reference/hidingConstructSignatures.types @@ -0,0 +1,59 @@ +=== tests/cases/compiler/hidingConstructSignatures.ts === +interface C { +>C : C + + (a: string): string; +>a : string +} + +interface D extends C { +>D : D +>C : C + + new (a: string): number; // Should be ok +>a : string +} + +interface E { +>E : E + + new (a: string): {}; +>a : string +} + +interface F extends E { +>F : F +>E : E + + new (a: string): string; +>a : string +} + +var d: D; +>d : D +>D : D + +d(""); // string +>d("") : string +>d : D + +new d(""); // should be number +>new d("") : number +>d : D + +var f: F; +>f : F +>F : F + +new f(""); // string +>new f("") : string +>f : F + +var e: E; +>e : E +>E : E + +new e(""); // {} +>new e("") : {} +>e : E + diff --git a/tests/baselines/reference/hidingIndexSignatures.js b/tests/baselines/reference/hidingIndexSignatures.js index 9c6df13b8a8..76b2381b69f 100644 --- a/tests/baselines/reference/hidingIndexSignatures.js +++ b/tests/baselines/reference/hidingIndexSignatures.js @@ -14,6 +14,6 @@ a[""]; // Should be {} //// [hidingIndexSignatures.js] var b; -b[""]; +b[""]; // Should be number var a; -a[""]; +a[""]; // Should be {} diff --git a/tests/baselines/reference/hidingIndexSignatures.types b/tests/baselines/reference/hidingIndexSignatures.types new file mode 100644 index 00000000000..fe1363d1598 --- /dev/null +++ b/tests/baselines/reference/hidingIndexSignatures.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/hidingIndexSignatures.ts === +interface A { +>A : A + + [a: string]: {}; +>a : string +} + +interface B extends A { +>B : B +>A : A + + [a: string]: number; // Number is not a subtype of string. Should error. +>a : string +} + +var b: B; +>b : B +>B : B + +b[""]; // Should be number +>b[""] : number +>b : B + +var a: A; +>a : A +>A : A + +a[""]; // Should be {} +>a[""] : {} +>a : A + diff --git a/tests/baselines/reference/icomparable.types b/tests/baselines/reference/icomparable.types new file mode 100644 index 00000000000..2766743f41f --- /dev/null +++ b/tests/baselines/reference/icomparable.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/icomparable.ts === + interface IComparable { +>IComparable : IComparable +>T : T + + compareTo(other: T); +>compareTo : (other: T) => any +>other : T +>T : T + } + + declare function sort>(items: U[]): U[]; +>sort : >(items: U[]) => U[] +>U : U +>IComparable : IComparable +>items : U[] +>U : U +>U : U + + interface StringComparable extends IComparable { +>StringComparable : StringComparable +>IComparable : IComparable + } + + var sc: StringComparable[]; +>sc : StringComparable[] +>StringComparable : StringComparable + + var x = sort(sc); +>x : StringComparable[] +>sort(sc) : StringComparable[] +>sort : >(items: U[]) => U[] +>sc : StringComparable[] + diff --git a/tests/baselines/reference/idInProp.types b/tests/baselines/reference/idInProp.types new file mode 100644 index 00000000000..f300be6ebf2 --- /dev/null +++ b/tests/baselines/reference/idInProp.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/idInProp.ts === +function f() { +>f : () => void + +var t: { (f: any) : any; }; +>t : (f: any) => any +>f : any + +} + diff --git a/tests/baselines/reference/identicalCallSignatures.types b/tests/baselines/reference/identicalCallSignatures.types new file mode 100644 index 00000000000..82616b44a60 --- /dev/null +++ b/tests/baselines/reference/identicalCallSignatures.types @@ -0,0 +1,61 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/identicalCallSignatures.ts === +// Each pair of call signatures in these types have a duplicate signature error. +// Identical call signatures should generate an error. +interface I { +>I : I + + (x): number; +>x : any + + (x: any): number; +>x : any + + (x: T): T; +>T : T +>x : T +>T : T +>T : T + + (x: U): U; // error +>U : U +>x : U +>U : U +>U : U +} + +interface I2 { +>I2 : I2 +>T : T + + (x: T): T; +>x : T +>T : T +>T : T + + (x: T): T; // error +>x : T +>T : T +>T : T +} + +var a: { +>a : { (x: any): number; (x: any): number; (x: T): T; (x: T): T; } + + (x): number; +>x : any + + (x: any): number; +>x : any + + (x: T): T; +>T : T +>x : T +>T : T +>T : T + + (x: T): T; // error +>T : T +>x : T +>T : T +>T : T +} diff --git a/tests/baselines/reference/identicalCallSignatures2.js b/tests/baselines/reference/identicalCallSignatures2.js index 78692ac4031..d6d38e9c9e3 100644 --- a/tests/baselines/reference/identicalCallSignatures2.js +++ b/tests/baselines/reference/identicalCallSignatures2.js @@ -11,3 +11,5 @@ interface I extends Base, Base { } interface I2 extends Base, Base { } //// [identicalCallSignatures2.js] +// Normally it is an error to have multiple overloads with identical signatures in a single type declaration. +// Here the multiple overloads come from multiple bases. diff --git a/tests/baselines/reference/identicalCallSignatures2.types b/tests/baselines/reference/identicalCallSignatures2.types new file mode 100644 index 00000000000..febe2f38d8b --- /dev/null +++ b/tests/baselines/reference/identicalCallSignatures2.types @@ -0,0 +1,23 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/identicalCallSignatures2.ts === +// Normally it is an error to have multiple overloads with identical signatures in a single type declaration. +// Here the multiple overloads come from multiple bases. + +interface Base { +>Base : Base +>T : T + + (x: number): string; +>x : number +} + +interface I extends Base, Base { } +>I : I +>Base : Base +>Base : Base + +interface I2 extends Base, Base { } +>I2 : I2 +>T : T +>Base : Base +>Base : Base + diff --git a/tests/baselines/reference/identicalCallSignatures3.js b/tests/baselines/reference/identicalCallSignatures3.js index 346e16061a6..dbb2753cb17 100644 --- a/tests/baselines/reference/identicalCallSignatures3.js +++ b/tests/baselines/reference/identicalCallSignatures3.js @@ -19,3 +19,5 @@ interface I2 { } //// [identicalCallSignatures3.js] +// Normally it is an error to have multiple overloads with identical signatures in a single type declaration. +// Here the multiple overloads come from multiple merged declarations, so we do not report errors. diff --git a/tests/baselines/reference/identicalCallSignatures3.types b/tests/baselines/reference/identicalCallSignatures3.types new file mode 100644 index 00000000000..d7334d9e5bb --- /dev/null +++ b/tests/baselines/reference/identicalCallSignatures3.types @@ -0,0 +1,33 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/identicalCallSignatures3.ts === +// Normally it is an error to have multiple overloads with identical signatures in a single type declaration. +// Here the multiple overloads come from multiple merged declarations, so we do not report errors. + +interface I { +>I : I + + (x: number): string; +>x : number +} + +interface I { +>I : I + + (x: number): string; +>x : number +} + +interface I2 { +>I2 : I2 +>T : T + + (x: number): string; +>x : number +} + +interface I2 { +>I2 : I2 +>T : T + + (x: number): string; +>x : number +} diff --git a/tests/baselines/reference/identityForSignaturesWithTypeParametersSwitched.types b/tests/baselines/reference/identityForSignaturesWithTypeParametersSwitched.types new file mode 100644 index 00000000000..59e50179946 --- /dev/null +++ b/tests/baselines/reference/identityForSignaturesWithTypeParametersSwitched.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/identityForSignaturesWithTypeParametersSwitched.ts === +var f: (x: T, y: U) => T; +>f : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + +var f: (x: U, y: T) => U; +>f : (x: T, y: U) => T +>T : T +>U : U +>x : U +>U : U +>y : T +>T : T +>U : U + diff --git a/tests/baselines/reference/ifDoWhileStatements.js b/tests/baselines/reference/ifDoWhileStatements.js index 3597a21498d..613cbf6f4ec 100644 --- a/tests/baselines/reference/ifDoWhileStatements.js +++ b/tests/baselines/reference/ifDoWhileStatements.js @@ -218,6 +218,7 @@ var N; } N.F2 = F2; })(N || (N = {})); +// literals if (true) { } while (true) { @@ -302,6 +303,7 @@ while (new D()) { } do { } while (new D()); +// references var a = true; if (a) { } diff --git a/tests/baselines/reference/ifDoWhileStatements.types b/tests/baselines/reference/ifDoWhileStatements.types new file mode 100644 index 00000000000..b4a3f7a70af --- /dev/null +++ b/tests/baselines/reference/ifDoWhileStatements.types @@ -0,0 +1,375 @@ +=== tests/cases/conformance/statements/ifDoWhileStatements/ifDoWhileStatements.ts === +interface I { +>I : I + + id: number; +>id : number +} + +class C implements I { +>C : C +>I : I + + id: number; +>id : number + + name: string; +>name : string +} + +class C2 extends C { +>C2 : C2 +>C : C + + valid: boolean; +>valid : boolean +} + +class D{ +>D : D +>T : T + + source: T; +>source : T +>T : T + + recurse: D; +>recurse : D +>D : D +>T : T + + wrapped: D> +>wrapped : D> +>D : D +>D : D +>T : T +} + +function F(x: string): number { return 42; } +>F : (x: string) => number +>x : string + +function F2(x: number): boolean { return x < 42; } +>F2 : (x: number) => boolean +>x : number +>x < 42 : boolean +>x : number + +module M { +>M : typeof M + + export class A { +>A : A + + name: string; +>name : string + } + + export function F2(x: number): string { return x.toString(); } +>F2 : (x: number) => string +>x : number +>x.toString() : string +>x.toString : (radix?: number) => string +>x : number +>toString : (radix?: number) => string +} + +module N { +>N : typeof N + + export class A { +>A : A + + id: number; +>id : number + } + + export function F2(x: number): string { return x.toString(); } +>F2 : (x: number) => string +>x : number +>x.toString() : string +>x.toString : (radix?: number) => string +>x : number +>toString : (radix?: number) => string +} + +// literals +if (true) { } +while (true) { } +do { }while(true) + +if (null) { } +while (null) { } +do { }while(null) + +if (undefined) { } +>undefined : undefined + +while (undefined) { } +>undefined : undefined + +do { }while(undefined) +>undefined : undefined + +if (0.0) { } +while (0.0) { } +do { }while(0.0) + +if ('a string') { } +while ('a string') { } +do { }while('a string') + +if ('') { } +while ('') { } +do { }while('') + +if (/[a-z]/) { } +while (/[a-z]/) { } +do { }while(/[a-z]/) + +if ([]) { } +>[] : undefined[] + +while ([]) { } +>[] : undefined[] + +do { }while([]) +>[] : undefined[] + +if ([1, 2]) { } +>[1, 2] : number[] + +while ([1, 2]) { } +>[1, 2] : number[] + +do { }while([1, 2]) +>[1, 2] : number[] + +if ({}) { } +>{} : {} + +while ({}) { } +>{} : {} + +do { }while({}) +>{} : {} + +if ({ x: 1, y: 'a' }) { } +>{ x: 1, y: 'a' } : { x: number; y: string; } +>x : number +>y : string + +while ({ x: 1, y: 'a' }) { } +>{ x: 1, y: 'a' } : { x: number; y: string; } +>x : number +>y : string + +do { }while({ x: 1, y: 'a' }) +>{ x: 1, y: 'a' } : { x: number; y: string; } +>x : number +>y : string + +if (() => 43) { } +>() => 43 : () => number + +while (() => 43) { } +>() => 43 : () => number + +do { }while(() => 43) +>() => 43 : () => number + +if (new C()) { } +>new C() : C +>C : typeof C + +while (new C()) { } +>new C() : C +>C : typeof C + +do { }while(new C()) +>new C() : C +>C : typeof C + +if (new D()) { } +>new D() : D +>D : typeof D +>C : C + +while (new D()) { } +>new D() : D +>D : typeof D +>C : C + +do { }while(new D()) +>new D() : D +>D : typeof D +>C : C + +// references +var a = true; +>a : boolean + +if (a) { } +>a : boolean + +while (a) { } +>a : boolean + +do { }while(a) +>a : boolean + +var b = null; +>b : any + +if (b) { } +>b : any + +while (b) { } +>b : any + +do { }while(b) +>b : any + +var c = undefined; +>c : any +>undefined : undefined + +if (c) { } +>c : any + +while (c) { } +>c : any + +do { }while(c) +>c : any + +var d = 0.0; +>d : number + +if (d) { } +>d : number + +while (d) { } +>d : number + +do { }while(d) +>d : number + +var e = 'a string'; +>e : string + +if (e) { } +>e : string + +while (e) { } +>e : string + +do { }while(e) +>e : string + +var f = ''; +>f : string + +if (f) { } +>f : string + +while (f) { } +>f : string + +do { }while(f) +>f : string + +var g = /[a-z]/ +>g : RegExp + +if (g) { } +>g : RegExp + +while (g) { } +>g : RegExp + +do { }while(g) +>g : RegExp + +var h = []; +>h : any[] +>[] : undefined[] + +if (h) { } +>h : any[] + +while (h) { } +>h : any[] + +do { }while(h) +>h : any[] + +var i = [1, 2]; +>i : number[] +>[1, 2] : number[] + +if (i) { } +>i : number[] + +while (i) { } +>i : number[] + +do { }while(i) +>i : number[] + +var j = {}; +>j : {} +>{} : {} + +if (j) { } +>j : {} + +while (j) { } +>j : {} + +do { }while(j) +>j : {} + +var k = { x: 1, y: 'a' }; +>k : { x: number; y: string; } +>{ x: 1, y: 'a' } : { x: number; y: string; } +>x : number +>y : string + +if (k) { } +>k : { x: number; y: string; } + +while (k) { } +>k : { x: number; y: string; } + +do { }while(k) +>k : { x: number; y: string; } + +function fn(x?: string): I { return null; } +>fn : (x?: string) => I +>x : string +>I : I + +if (fn()) { } +>fn() : I +>fn : (x?: string) => I + +while (fn()) { } +>fn() : I +>fn : (x?: string) => I + +do { }while(fn()) +>fn() : I +>fn : (x?: string) => I + +if (fn) { } +>fn : (x?: string) => I + +while (fn) { } +>fn : (x?: string) => I + +do { }while(fn) +>fn : (x?: string) => I + + + diff --git a/tests/baselines/reference/illegalGenericWrapping1.types b/tests/baselines/reference/illegalGenericWrapping1.types new file mode 100644 index 00000000000..82de593104c --- /dev/null +++ b/tests/baselines/reference/illegalGenericWrapping1.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/illegalGenericWrapping1.ts === +interface Sequence { +>Sequence : Sequence +>T : T + + each(iterator: (value: T) => void ): void; +>each : (iterator: (value: T) => void) => void +>iterator : (value: T) => void +>value : T +>T : T + + map(iterator: (value: T) => U): Sequence; +>map : (iterator: (value: T) => U) => Sequence +>U : U +>iterator : (value: T) => U +>value : T +>T : T +>U : U +>Sequence : Sequence +>U : U + + filter(iterator: (value: T) => boolean): Sequence; +>filter : (iterator: (value: T) => boolean) => Sequence +>iterator : (value: T) => boolean +>value : T +>T : T +>Sequence : Sequence +>T : T + + groupBy(keySelector: (value: T) => K): Sequence<{ key: K; items: Sequence; }>; +>groupBy : (keySelector: (value: T) => K) => Sequence<{ key: K; items: Sequence; }> +>K : K +>keySelector : (value: T) => K +>value : T +>T : T +>K : K +>Sequence : Sequence +>key : K +>K : K +>items : Sequence +>Sequence : Sequence +>T : T +} + diff --git a/tests/baselines/reference/implementArrayInterface.types b/tests/baselines/reference/implementArrayInterface.types new file mode 100644 index 00000000000..68d192cee6f --- /dev/null +++ b/tests/baselines/reference/implementArrayInterface.types @@ -0,0 +1,217 @@ +=== tests/cases/compiler/implementArrayInterface.ts === +declare class ArrayConstructor implements Array { +>ArrayConstructor : ArrayConstructor +>T : T +>Array : T[] +>T : T + + toString(): string; +>toString : () => string + + toLocaleString(): string; +>toLocaleString : () => string + + concat(...items: U[]): T[]; +>concat : { (...items: U[]): T[]; (...items: T[]): T[]; } +>U : U +>T : T +>items : U[] +>U : U +>T : T + + concat(...items: T[]): T[]; +>concat : { (...items: U[]): T[]; (...items: T[]): T[]; } +>items : T[] +>T : T +>T : T + + join(separator?: string): string; +>join : (separator?: string) => string +>separator : string + + pop(): T; +>pop : () => T +>T : T + + push(...items: T[]): number; +>push : (...items: T[]) => number +>items : T[] +>T : T + + reverse(): T[]; +>reverse : () => T[] +>T : T + + shift(): T; +>shift : () => T +>T : T + + slice(start?: number, end?: number): T[]; +>slice : (start?: number, end?: number) => T[] +>start : number +>end : number +>T : T + + sort(compareFn?: (a: T, b: T) => number): T[]; +>sort : (compareFn?: (a: T, b: T) => number) => T[] +>compareFn : (a: T, b: T) => number +>a : T +>T : T +>b : T +>T : T +>T : T + + splice(start: number): T[]; +>splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>start : number +>T : T + + splice(start: number, deleteCount: number, ...items: T[]): T[]; +>splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>start : number +>deleteCount : number +>items : T[] +>T : T +>T : T + + unshift(...items: T[]): number; +>unshift : (...items: T[]) => number +>items : T[] +>T : T + + indexOf(searchElement: T, fromIndex?: number): number; +>indexOf : (searchElement: T, fromIndex?: number) => number +>searchElement : T +>T : T +>fromIndex : number + + lastIndexOf(searchElement: T, fromIndex?: number): number; +>lastIndexOf : (searchElement: T, fromIndex?: number) => number +>searchElement : T +>T : T +>fromIndex : number + + every(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; +>every : (callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any) => boolean +>callbackfn : (value: T, index: number, array: T[]) => boolean +>value : T +>T : T +>index : number +>array : T[] +>T : T +>thisArg : any + + some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; +>some : (callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any) => boolean +>callbackfn : (value: T, index: number, array: T[]) => boolean +>value : T +>T : T +>index : number +>array : T[] +>T : T +>thisArg : any + + forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; +>forEach : (callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any) => void +>callbackfn : (value: T, index: number, array: T[]) => void +>value : T +>T : T +>index : number +>array : T[] +>T : T +>thisArg : any + + map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; +>map : (callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any) => U[] +>U : U +>callbackfn : (value: T, index: number, array: T[]) => U +>value : T +>T : T +>index : number +>array : T[] +>T : T +>U : U +>thisArg : any +>U : U + + filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[]; +>filter : (callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any) => T[] +>callbackfn : (value: T, index: number, array: T[]) => boolean +>value : T +>T : T +>index : number +>array : T[] +>T : T +>thisArg : any +>T : T + + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; +>reduce : { (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; } +>callbackfn : (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T +>previousValue : T +>T : T +>currentValue : T +>T : T +>currentIndex : number +>array : T[] +>T : T +>T : T +>initialValue : T +>T : T +>T : T + + reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +>reduce : { (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; } +>U : U +>callbackfn : (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U +>previousValue : U +>U : U +>currentValue : T +>T : T +>currentIndex : number +>array : T[] +>T : T +>U : U +>initialValue : U +>U : U +>U : U + + reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; +>reduceRight : { (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; } +>callbackfn : (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T +>previousValue : T +>T : T +>currentValue : T +>T : T +>currentIndex : number +>array : T[] +>T : T +>T : T +>initialValue : T +>T : T +>T : T + + reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +>reduceRight : { (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; } +>U : U +>callbackfn : (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U +>previousValue : U +>U : U +>currentValue : T +>T : T +>currentIndex : number +>array : T[] +>T : T +>U : U +>initialValue : U +>U : U +>U : U + + length: number; +>length : number + + [n: number]: T; +>n : number +>T : T +} + diff --git a/tests/baselines/reference/implementGenericWithMismatchedTypes.js b/tests/baselines/reference/implementGenericWithMismatchedTypes.js index af576424a1e..a030ebc3c1d 100644 --- a/tests/baselines/reference/implementGenericWithMismatchedTypes.js +++ b/tests/baselines/reference/implementGenericWithMismatchedTypes.js @@ -21,6 +21,8 @@ class C2 implements IFoo2 { // error } //// [implementGenericWithMismatchedTypes.js] +// no errors because in the derived types the best common type for T's value is Object +// and that matches the original signature for assignability since we treat its T's as Object var C = (function () { function C() { } diff --git a/tests/baselines/reference/implementInterfaceAnyMemberWithVoid.types b/tests/baselines/reference/implementInterfaceAnyMemberWithVoid.types new file mode 100644 index 00000000000..0b7fe6c69d0 --- /dev/null +++ b/tests/baselines/reference/implementInterfaceAnyMemberWithVoid.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/implementInterfaceAnyMemberWithVoid.ts === +interface I { +>I : I + + foo(value: number); +>foo : (value: number) => any +>value : number +} + +class Bug implements I { +>Bug : Bug +>I : I + + public foo(value: number) { +>foo : (value: number) => void +>value : number + } +} + diff --git a/tests/baselines/reference/implementPublicPropertyAsPrivate.js b/tests/baselines/reference/implementPublicPropertyAsPrivate.js index 0a57704553f..4a946801da3 100644 --- a/tests/baselines/reference/implementPublicPropertyAsPrivate.js +++ b/tests/baselines/reference/implementPublicPropertyAsPrivate.js @@ -9,7 +9,7 @@ class C implements I { //// [implementPublicPropertyAsPrivate.js] var C = (function () { function C() { - this.x = 0; + this.x = 0; // should raise error at class decl } return C; })(); diff --git a/tests/baselines/reference/implementingAnInterfaceExtendingClassWithPrivates2.js b/tests/baselines/reference/implementingAnInterfaceExtendingClassWithPrivates2.js index 79524b9ecb9..767851fd16d 100644 --- a/tests/baselines/reference/implementingAnInterfaceExtendingClassWithPrivates2.js +++ b/tests/baselines/reference/implementingAnInterfaceExtendingClassWithPrivates2.js @@ -118,6 +118,7 @@ var Bar3 = (function (_super) { } return Bar3; })(Foo); +// another level of indirection var M; (function (M) { var Foo = (function () { @@ -154,6 +155,7 @@ var M; return Bar3; })(Foo); })(M || (M = {})); +// two levels of privates var M2; (function (M2) { var Foo = (function () { @@ -177,8 +179,8 @@ var M2; })(Foo); var b; var r1 = b.z; - var r2 = b.x; - var r3 = b.y; + var r2 = b.x; // error + var r3 = b.y; // error var Bar2 = (function (_super) { __extends(Bar2, _super); function Bar2() { diff --git a/tests/baselines/reference/implicitAnyAnyReturningFunction.types b/tests/baselines/reference/implicitAnyAnyReturningFunction.types new file mode 100644 index 00000000000..1f0b81c724f --- /dev/null +++ b/tests/baselines/reference/implicitAnyAnyReturningFunction.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/implicitAnyAnyReturningFunction.ts === +function A() { +>A : () => any + + return ""; +>"" : any +} + +function B() { +>B : () => any + + var someLocal: any = {}; +>someLocal : any +>{} : {} + + return someLocal; +>someLocal : any +} + +class C { +>C : C + + public A() { +>A : () => any + + return ""; +>"" : any + } + + public B() { +>B : () => any + + var someLocal: any = {}; +>someLocal : any +>{} : {} + + return someLocal; +>someLocal : any + } +} + diff --git a/tests/baselines/reference/implicitAnyDeclareFunctionExprWithoutFormalType.js b/tests/baselines/reference/implicitAnyDeclareFunctionExprWithoutFormalType.js index 23184bcd69c..cba7602d049 100644 --- a/tests/baselines/reference/implicitAnyDeclareFunctionExprWithoutFormalType.js +++ b/tests/baselines/reference/implicitAnyDeclareFunctionExprWithoutFormalType.js @@ -18,15 +18,17 @@ var lambda10 = function temp1() { return 5; } //// [implicitAnyDeclareFunctionExprWithoutFormalType.js] +// these should be errors for implicit any parameter var lambda = function (l1) { -}; +}; // Error at "l1" var lambd2 = function (ll1, ll2) { -}; +}; // Error at "ll1" var lamda3 = function myLambda3(myParam) { }; var lamda4 = function () { return null; }; +// these should be error for implicit any return type var lambda5 = function temp() { return null; }; @@ -39,6 +41,7 @@ var lambda7 = function temp() { var lambda8 = function () { return undefined; }; +// this shouldn't be an error var lambda9 = function () { return 5; }; diff --git a/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType.js b/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType.js index 629a2c4e33b..72d68da2287 100644 --- a/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType.js +++ b/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType.js @@ -12,6 +12,7 @@ function noError2(x: number, y: string) { }; //// [implicitAnyDeclareFunctionWithoutFormalType.js] +// these should be errors function foo(x) { } ; @@ -33,6 +34,7 @@ function func4(z, w) { if (w === void 0) { w = undefined; } } ; +// these shouldn't be errors function noError1(x, y) { if (x === void 0) { x = 3; } if (y === void 0) { y = 2; } diff --git a/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType2.js b/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType2.js index e24420d0d5e..09954c159fa 100644 --- a/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType2.js +++ b/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType2.js @@ -17,14 +17,17 @@ function fn3() { //// [implicitAnyDeclareFunctionWithoutFormalType2.js] +// generates function fn1(): number; function fn1() { var x; return x; } +// generates function fn2(): any; function fn2() { var x; return x; } +// generates function fn3(); function fn3() { var x; return x; diff --git a/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType2.types b/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType2.types new file mode 100644 index 00000000000..9fd971ab862 --- /dev/null +++ b/tests/baselines/reference/implicitAnyDeclareFunctionWithoutFormalType2.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/implicitAnyDeclareFunctionWithoutFormalType2.ts === +// generates function fn1(): number; +function fn1() { +>fn1 : () => number + + var x: number; +>x : number + + return x; +>x : number +} +// generates function fn2(): any; +function fn2(): any { +>fn2 : () => any + + var x: any; +>x : any + + return x; +>x : any +} +// generates function fn3(); +function fn3() { +>fn3 : () => any + + var x: any; +>x : any + + return x; +>x : any +} + diff --git a/tests/baselines/reference/implicitAnyDeclareMemberWithoutType2.js b/tests/baselines/reference/implicitAnyDeclareMemberWithoutType2.js index 442a6902081..1a49449529e 100644 --- a/tests/baselines/reference/implicitAnyDeclareMemberWithoutType2.js +++ b/tests/baselines/reference/implicitAnyDeclareMemberWithoutType2.js @@ -10,11 +10,12 @@ class C { //// [implicitAnyDeclareMemberWithoutType2.js] +// this should be an error var C = (function () { function C(c1, c2, c3) { - this.x = null; - } + this.x = null; // error at "x" + } // error at "c1, c2" C.prototype.funcOfC = function (f1, f2, f3) { - }; + }; // error at "f1,f2" return C; })(); diff --git a/tests/baselines/reference/implicitAnyDeclareTypePropertyWithoutType.js b/tests/baselines/reference/implicitAnyDeclareTypePropertyWithoutType.js index 274c263d4f2..63f90a1aaa7 100644 --- a/tests/baselines/reference/implicitAnyDeclareTypePropertyWithoutType.js +++ b/tests/baselines/reference/implicitAnyDeclareTypePropertyWithoutType.js @@ -23,11 +23,13 @@ var C = (function () { } return C; })(); -var x; -var x1; -var x11; -var x2; -var x3; +// this should be an error +var x; // error at "y,z" +var x1; // error at "z1" +var x11; // error at "new" +var x2; // error at "y2" +var x3; // error at "y3" +// this should not be an error var bar; var foo; var x4; diff --git a/tests/baselines/reference/implicitAnyDeclareVariablesWithoutTypeAndInit.js b/tests/baselines/reference/implicitAnyDeclareVariablesWithoutTypeAndInit.js index 514d9c1dd76..95b617d79ee 100644 --- a/tests/baselines/reference/implicitAnyDeclareVariablesWithoutTypeAndInit.js +++ b/tests/baselines/reference/implicitAnyDeclareVariablesWithoutTypeAndInit.js @@ -12,11 +12,13 @@ declare var bar2: any; var x1: any; var y1 = new x1; //// [implicitAnyDeclareVariablesWithoutTypeAndInit.js] -var x; +// this should be an error +var x; // error at "x" function func(k) { } ; func(x); +// this shouldn't be an error var bar = 3; var bar1; var x1; diff --git a/tests/baselines/reference/implicitAnyFunctionInvocationWithAnyArguements.js b/tests/baselines/reference/implicitAnyFunctionInvocationWithAnyArguements.js index f5dbea07b93..e7642fd8420 100644 --- a/tests/baselines/reference/implicitAnyFunctionInvocationWithAnyArguements.js +++ b/tests/baselines/reference/implicitAnyFunctionInvocationWithAnyArguements.js @@ -36,12 +36,13 @@ var newC2 = new C([], null) //// [implicitAnyFunctionInvocationWithAnyArguements.js] -var arg0 = null; -var anyArray = [null, undefined]; -var objL; +// this should be errors +var arg0 = null; // error at "arg0" +var anyArray = [null, undefined]; // error at array literal +var objL; // error at "y,z" var funcL; function temp1(arg1) { -} +} // error at "temp1" function testFunctionExprC(subReplace) { } function testFunctionExprC2(eq) { @@ -53,6 +54,7 @@ function testObjLiteral(objLit) { function testFuncLiteral(funcLit) { } ; +// this should not be an error testFunctionExprC2(function (v1, v2) { return 1; }); testObjLiteral(objL); testFuncLiteral(funcL); diff --git a/tests/baselines/reference/implicitAnyFunctionReturnNullOrUndefined.js b/tests/baselines/reference/implicitAnyFunctionReturnNullOrUndefined.js index 9c5e94515a8..699b57603eb 100644 --- a/tests/baselines/reference/implicitAnyFunctionReturnNullOrUndefined.js +++ b/tests/baselines/reference/implicitAnyFunctionReturnNullOrUndefined.js @@ -25,12 +25,13 @@ undefinedWidenFunction(); //// [implicitAnyFunctionReturnNullOrUndefined.js] +// this should be an error function nullWidenFunction() { return null; -} +} // error at "nullWidenFunction" function undefinedWidenFunction() { return undefined; -} +} // error at "undefinedWidenFunction" var C = (function () { function C() { } @@ -42,6 +43,7 @@ var C = (function () { }; return C; })(); +// this should not be an error function foo1() { return null; } @@ -54,5 +56,6 @@ function fooBar() { function fooFoo() { return 5; } +// this should not be an error as the error is raised by expr above nullWidenFunction(); undefinedWidenFunction(); diff --git a/tests/baselines/reference/implicitAnyGenerics.types b/tests/baselines/reference/implicitAnyGenerics.types new file mode 100644 index 00000000000..91a231e3f12 --- /dev/null +++ b/tests/baselines/reference/implicitAnyGenerics.types @@ -0,0 +1,83 @@ +=== tests/cases/compiler/implicitAnyGenerics.ts === + +class C { +>C : C +>T : T + + x: T; +>x : T +>T : T +} + +var c = new C(); +>c : C<{}> +>new C() : C<{}> +>C : typeof C + +var c2 = new C(); +>c2 : C +>new C() : C +>C : typeof C + +var c3 = new C(); +>c3 : C +>new C() : C +>C : typeof C + +var c4: C = new C(); +>c4 : C +>C : C +>new C() : C<{}> +>C : typeof C + +class D { +>D : D +>T : T + + constructor(x: T) { } +>x : T +>T : T +} + +var d = new D(null); +>d : D +>new D(null) : D +>D : typeof D + +var d2 = new D(1); +>d2 : D +>new D(1) : D +>D : typeof D + +var d3 = new D(1); +>d3 : D +>new D(1) : D +>D : typeof D + +var d4 = new D(1); +>d4 : D +>new D(1) : D +>D : typeof D +>1 : any + +var d5: D = new D(null); +>d5 : D +>D : D +>new D(null) : D +>D : typeof D + +function foo(): T { return null; }; +>foo : () => T +>T : T +>T : T + +foo() +>foo() : {} +>foo : () => T + +foo(); +>foo() : any +>foo : () => T + + + diff --git a/tests/baselines/reference/implicitAnyInCatch.types b/tests/baselines/reference/implicitAnyInCatch.types new file mode 100644 index 00000000000..b5a5821eacc --- /dev/null +++ b/tests/baselines/reference/implicitAnyInCatch.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/implicitAnyInCatch.ts === +// this should not be an error +try { } catch (error) { +>error : any + + if (error.number === -2147024809) { } +>error.number === -2147024809 : boolean +>error.number : any +>error : any +>number : any +>-2147024809 : number +} +for (var key in this) { } +>key : any +>this : any + +class C { +>C : C + + public temp() { +>temp : () => void + + for (var x in this) { +>x : any +>this : C + } + } +} + + diff --git a/tests/baselines/reference/implicitAnyNewExprLackConstructorSignature.js b/tests/baselines/reference/implicitAnyNewExprLackConstructorSignature.js index c48d967dc9b..4218d9a9a21 100644 --- a/tests/baselines/reference/implicitAnyNewExprLackConstructorSignature.js +++ b/tests/baselines/reference/implicitAnyNewExprLackConstructorSignature.js @@ -6,4 +6,4 @@ var x: any = new Point(); // error at "new" function Point() { this.x = 3; } -var x = new Point(); +var x = new Point(); // error at "new" diff --git a/tests/baselines/reference/implicitAnyWidenToAny.js b/tests/baselines/reference/implicitAnyWidenToAny.js index cad9ade340e..9f380df1cf0 100644 --- a/tests/baselines/reference/implicitAnyWidenToAny.js +++ b/tests/baselines/reference/implicitAnyWidenToAny.js @@ -28,10 +28,12 @@ var obj1 = anyReturnFunc(); //// [implicitAnyWidenToAny.js] -var x = null; -var x1 = undefined; -var widenArray = [null, undefined]; -var emptyArray = []; +// these should be errors +var x = null; // error at "x" +var x1 = undefined; // error at "x1" +var widenArray = [null, undefined]; // error at "widenArray" +var emptyArray = []; // error at "emptyArray" +// these should not be error var AnimalObj = (function () { function AnimalObj() { } diff --git a/tests/baselines/reference/importAliasIdentifiers.types b/tests/baselines/reference/importAliasIdentifiers.types new file mode 100644 index 00000000000..5cff22d7e98 --- /dev/null +++ b/tests/baselines/reference/importAliasIdentifiers.types @@ -0,0 +1,123 @@ +=== tests/cases/conformance/internalModules/importDeclarations/importAliasIdentifiers.ts === +module moduleA { +>moduleA : typeof moduleA + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } +} + +import alias = moduleA; +>alias : typeof moduleA +>moduleA : typeof moduleA + +var p: alias.Point; +>p : alias.Point +>alias : unknown +>Point : alias.Point + +var p: moduleA.Point; +>p : alias.Point +>moduleA : unknown +>Point : alias.Point + +var p: { x: number; y: number; }; +>p : alias.Point +>x : number +>y : number + +class clodule { +>clodule : clodule + + name: string; +>name : string +} + +module clodule { +>clodule : typeof clodule + + export interface Point { +>Point : Point + + x: number; y: number; +>x : number +>y : number + } + var Point: Point = { x: 0, y: 0 }; +>Point : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + +import clolias = clodule; +>clolias : typeof clodule +>clodule : clodule + +var p: clolias.Point; +>p : alias.Point +>clolias : clodule +>Point : clolias.Point + +var p: clodule.Point; +>p : alias.Point +>clodule : clodule +>Point : clolias.Point + +var p: { x: number; y: number; }; +>p : alias.Point +>x : number +>y : number + + +function fundule() { +>fundule : typeof fundule + + return { x: 0, y: 0 }; +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + +module fundule { +>fundule : typeof fundule + + export interface Point { +>Point : Point + + x: number; y: number; +>x : number +>y : number + } + var Point: Point = { x: 0, y: 0 }; +>Point : Point +>Point : Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + +import funlias = fundule; +>funlias : typeof fundule +>fundule : typeof fundule + +var p: funlias.Point; +>p : alias.Point +>funlias : unknown +>Point : funlias.Point + +var p: fundule.Point; +>p : alias.Point +>fundule : unknown +>Point : funlias.Point + +var p: { x: number; y: number; }; +>p : alias.Point +>x : number +>y : number + diff --git a/tests/baselines/reference/importAliasWithDottedName.types b/tests/baselines/reference/importAliasWithDottedName.types new file mode 100644 index 00000000000..ab316fade5c --- /dev/null +++ b/tests/baselines/reference/importAliasWithDottedName.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/importAliasWithDottedName.ts === +module M { +>M : typeof M + + export var x = 1; +>x : number + + export module N { +>N : typeof N + + export var y = 2; +>y : number + } +} + +module A { +>A : typeof A + + import N = M.N; +>N : typeof N +>M : typeof M +>N : typeof N + + var r = N.y; +>r : number +>N.y : number +>N : typeof N +>y : number + + var r2 = M.N.y; +>r2 : number +>M.N.y : number +>M.N : typeof N +>M : typeof M +>N : typeof N +>y : number +} diff --git a/tests/baselines/reference/importAndVariableDeclarationConflict2.types b/tests/baselines/reference/importAndVariableDeclarationConflict2.types new file mode 100644 index 00000000000..eb4f354a4dc --- /dev/null +++ b/tests/baselines/reference/importAndVariableDeclarationConflict2.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/importAndVariableDeclarationConflict2.ts === +module m { +>m : typeof m + + export var m = ''; +>m : string +} + +import x = m.m; +>x : string +>m : typeof m +>m : string + +class C { +>C : C + + public foo() { +>foo : () => void + + var x = ''; +>x : string + } +} diff --git a/tests/baselines/reference/importDecl.js b/tests/baselines/reference/importDecl.js index b6c9715df64..c9ef33c1201 100644 --- a/tests/baselines/reference/importDecl.js +++ b/tests/baselines/reference/importDecl.js @@ -135,7 +135,12 @@ function foo2() { } exports.foo2 = foo2; //// [importDecl_1.js] -var m4 = require("importDecl_require"); +/// +/// +/// +/// +/// +var m4 = require("importDecl_require"); // Emit used exports.x4 = m4.x; exports.d4 = m4.d; exports.f4 = m4.foo(); @@ -148,11 +153,14 @@ exports.f4 = m4.foo(); var f3 = m4.foo(); })(exports.m1 || (exports.m1 = {})); var m1 = exports.m1; +//Emit global only usage var glo_m4 = require("importDecl_require1"); exports.useGlo_m4_d4 = glo_m4.d; exports.useGlo_m4_f4 = glo_m4.foo(); +//Emit even when used just in function type var fncOnly_m4 = require("importDecl_require2"); exports.useFncOnly_m4_f4 = fncOnly_m4.foo(); +// only used privately no need to emit var private_m4 = require("importDecl_require3"); (function (usePrivate_m4_m1) { var x3 = private_m4.x; @@ -160,9 +168,11 @@ var private_m4 = require("importDecl_require3"); var f3 = private_m4.foo(); })(exports.usePrivate_m4_m1 || (exports.usePrivate_m4_m1 = {})); var usePrivate_m4_m1 = exports.usePrivate_m4_m1; +// Do not emit unused import var m5 = require("importDecl_require4"); exports.d = m5.foo2(); -var multiImport_m4 = require("importDecl_require"); +// Do not emit multiple used import statements +var multiImport_m4 = require("importDecl_require"); // Emit used exports.useMultiImport_m4_x4 = multiImport_m4.x; exports.useMultiImport_m4_d4 = multiImport_m4.d; exports.useMultiImport_m4_f4 = multiImport_m4.foo(); @@ -195,11 +205,11 @@ export declare function foo(): d; import m4 = require("importDecl_require"); export declare function foo2(): m4.d; //// [importDecl_1.d.ts] -/// -/// -/// -/// -/// +/// +/// +/// +/// +/// import m4 = require("importDecl_require"); export declare var x4: m4.d; export declare var d4: typeof m4.d; diff --git a/tests/baselines/reference/importDecl.types b/tests/baselines/reference/importDecl.types new file mode 100644 index 00000000000..973729ae050 --- /dev/null +++ b/tests/baselines/reference/importDecl.types @@ -0,0 +1,228 @@ +=== tests/cases/compiler/importDecl_1.ts === +/// +/// +/// +/// +/// +import m4 = require("importDecl_require"); // Emit used +>m4 : typeof m4 + +export var x4 = m4.x; +>x4 : m4.d +>m4.x : m4.d +>m4 : typeof m4 +>x : m4.d + +export var d4 = m4.d; +>d4 : typeof m4.d +>m4.d : typeof m4.d +>m4 : typeof m4 +>d : typeof m4.d + +export var f4 = m4.foo(); +>f4 : m4.d +>m4.foo() : m4.d +>m4.foo : () => m4.d +>m4 : typeof m4 +>foo : () => m4.d + +export module m1 { +>m1 : typeof m1 + + export var x2 = m4.x; +>x2 : m4.d +>m4.x : m4.d +>m4 : typeof m4 +>x : m4.d + + export var d2 = m4.d; +>d2 : typeof m4.d +>m4.d : typeof m4.d +>m4 : typeof m4 +>d : typeof m4.d + + export var f2 = m4.foo(); +>f2 : m4.d +>m4.foo() : m4.d +>m4.foo : () => m4.d +>m4 : typeof m4 +>foo : () => m4.d + + var x3 = m4.x; +>x3 : m4.d +>m4.x : m4.d +>m4 : typeof m4 +>x : m4.d + + var d3 = m4.d; +>d3 : typeof m4.d +>m4.d : typeof m4.d +>m4 : typeof m4 +>d : typeof m4.d + + var f3 = m4.foo(); +>f3 : m4.d +>m4.foo() : m4.d +>m4.foo : () => m4.d +>m4 : typeof m4 +>foo : () => m4.d +} + +//Emit global only usage +import glo_m4 = require("importDecl_require1"); +>glo_m4 : typeof glo_m4 + +export var useGlo_m4_d4 = glo_m4.d; +>useGlo_m4_d4 : typeof glo_m4.d +>glo_m4.d : typeof glo_m4.d +>glo_m4 : typeof glo_m4 +>d : typeof glo_m4.d + +export var useGlo_m4_f4 = glo_m4.foo(); +>useGlo_m4_f4 : glo_m4.d +>glo_m4.foo() : glo_m4.d +>glo_m4.foo : () => glo_m4.d +>glo_m4 : typeof glo_m4 +>foo : () => glo_m4.d + +//Emit even when used just in function type +import fncOnly_m4 = require("importDecl_require2"); +>fncOnly_m4 : typeof fncOnly_m4 + +export var useFncOnly_m4_f4 = fncOnly_m4.foo(); +>useFncOnly_m4_f4 : fncOnly_m4.d +>fncOnly_m4.foo() : fncOnly_m4.d +>fncOnly_m4.foo : () => fncOnly_m4.d +>fncOnly_m4 : typeof fncOnly_m4 +>foo : () => fncOnly_m4.d + +// only used privately no need to emit +import private_m4 = require("importDecl_require3"); +>private_m4 : typeof private_m4 + +export module usePrivate_m4_m1 { +>usePrivate_m4_m1 : typeof usePrivate_m4_m1 + + var x3 = private_m4.x; +>x3 : private_m4.d +>private_m4.x : private_m4.d +>private_m4 : typeof private_m4 +>x : private_m4.d + + var d3 = private_m4.d; +>d3 : typeof private_m4.d +>private_m4.d : typeof private_m4.d +>private_m4 : typeof private_m4 +>d : typeof private_m4.d + + var f3 = private_m4.foo(); +>f3 : private_m4.d +>private_m4.foo() : private_m4.d +>private_m4.foo : () => private_m4.d +>private_m4 : typeof private_m4 +>foo : () => private_m4.d +} + +// Do not emit unused import +import m5 = require("importDecl_require4"); +>m5 : typeof m5 + +export var d = m5.foo2(); +>d : m4.d +>m5.foo2() : m4.d +>m5.foo2 : () => m4.d +>m5 : typeof m5 +>foo2 : () => m4.d + +// Do not emit multiple used import statements +import multiImport_m4 = require("importDecl_require"); // Emit used +>multiImport_m4 : typeof m4 + +export var useMultiImport_m4_x4 = multiImport_m4.x; +>useMultiImport_m4_x4 : m4.d +>multiImport_m4.x : m4.d +>multiImport_m4 : typeof m4 +>x : m4.d + +export var useMultiImport_m4_d4 = multiImport_m4.d; +>useMultiImport_m4_d4 : typeof m4.d +>multiImport_m4.d : typeof m4.d +>multiImport_m4 : typeof m4 +>d : typeof m4.d + +export var useMultiImport_m4_f4 = multiImport_m4.foo(); +>useMultiImport_m4_f4 : m4.d +>multiImport_m4.foo() : m4.d +>multiImport_m4.foo : () => m4.d +>multiImport_m4 : typeof m4 +>foo : () => m4.d + +=== tests/cases/compiler/importDecl_require.ts === +export class d { +>d : d + + foo: string; +>foo : string +} +export var x: d; +>x : d +>d : d + +export function foo(): d { return null; } +>foo : () => d +>d : d + +=== tests/cases/compiler/importDecl_require1.ts === +export class d { +>d : d + + bar: string; +>bar : string +} +var x: d; +>x : d +>d : d + +export function foo(): d { return null; } +>foo : () => d +>d : d + +=== tests/cases/compiler/importDecl_require2.ts === +export class d { +>d : d + + baz: string; +>baz : string +} +export var x: d; +>x : d +>d : d + +export function foo(): d { return null; } +>foo : () => d +>d : d + +=== tests/cases/compiler/importDecl_require3.ts === +export class d { +>d : d + + bing: string; +>bing : string +} +export var x: d; +>x : d +>d : d + +export function foo(): d { return null; } +>foo : () => d +>d : d + +=== tests/cases/compiler/importDecl_require4.ts === +import m4 = require("importDecl_require"); +>m4 : typeof m4 + +export function foo2(): m4.d { return null; } +>foo2 : () => m4.d +>m4 : unknown +>d : m4.d + diff --git a/tests/baselines/reference/importDeclWithExportModifierInAmbientContext.types b/tests/baselines/reference/importDeclWithExportModifierInAmbientContext.types new file mode 100644 index 00000000000..6649b33bfe0 --- /dev/null +++ b/tests/baselines/reference/importDeclWithExportModifierInAmbientContext.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/importDeclWithExportModifierInAmbientContext.ts === +declare module "m" { + module x { +>x : unknown + + interface c { +>c : c + } + } + export import a = x.c; +>a : unknown +>x : unknown +>c : a + + var b: a; +>b : a +>a : a +} + diff --git a/tests/baselines/reference/importDeclarationUsedAsTypeQuery.js b/tests/baselines/reference/importDeclarationUsedAsTypeQuery.js index 9c6ca20eb06..6f6d9367278 100644 --- a/tests/baselines/reference/importDeclarationUsedAsTypeQuery.js +++ b/tests/baselines/reference/importDeclarationUsedAsTypeQuery.js @@ -27,6 +27,6 @@ export declare class B { id: number; } //// [importDeclarationUsedAsTypeQuery_1.d.ts] -/// +/// import a = require('importDeclarationUsedAsTypeQuery_require'); export declare var x: typeof a; diff --git a/tests/baselines/reference/importDeclarationUsedAsTypeQuery.types b/tests/baselines/reference/importDeclarationUsedAsTypeQuery.types new file mode 100644 index 00000000000..2f449c2aa87 --- /dev/null +++ b/tests/baselines/reference/importDeclarationUsedAsTypeQuery.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/importDeclarationUsedAsTypeQuery_1.ts === +/// +import a = require('importDeclarationUsedAsTypeQuery_require'); +>a : typeof a + +export var x: typeof a; +>x : typeof a +>a : typeof a + +=== tests/cases/compiler/importDeclarationUsedAsTypeQuery_require.ts === +export class B { +>B : B + + id: number; +>id : number +} + diff --git a/tests/baselines/reference/importImportOnlyModule.js b/tests/baselines/reference/importImportOnlyModule.js index 31efc6698f8..bbb450f2849 100644 --- a/tests/baselines/reference/importImportOnlyModule.js +++ b/tests/baselines/reference/importImportOnlyModule.js @@ -28,9 +28,9 @@ define(["require", "exports"], function (require, exports) { }); //// [foo_1.js] define(["require", "exports"], function (require, exports) { - var answer = 42; + var answer = 42; // No exports }); //// [foo_2.js] define(["require", "exports", "./foo_1"], function (require, exports, foo) { - var x = foo; + var x = foo; // Cause a runtime dependency }); diff --git a/tests/baselines/reference/importImportOnlyModule.types b/tests/baselines/reference/importImportOnlyModule.types new file mode 100644 index 00000000000..741d1b24859 --- /dev/null +++ b/tests/baselines/reference/importImportOnlyModule.types @@ -0,0 +1,26 @@ +=== tests/cases/conformance/externalModules/foo_2.ts === +import foo = require("./foo_1"); +>foo : typeof foo + +var x = foo; // Cause a runtime dependency +>x : typeof foo +>foo : typeof foo + +=== tests/cases/conformance/externalModules/foo_0.ts === +export class C1 { +>C1 : C1 + + m1 = 42; +>m1 : number + + static s1 = true; +>s1 : boolean +} + +=== tests/cases/conformance/externalModules/foo_1.ts === +import c1 = require('./foo_0'); // Makes this an external module +>c1 : typeof c1 + +var answer = 42; // No exports +>answer : number + diff --git a/tests/baselines/reference/importInTypePosition.js b/tests/baselines/reference/importInTypePosition.js index 087a341eef0..c0d64a4ef7b 100644 --- a/tests/baselines/reference/importInTypePosition.js +++ b/tests/baselines/reference/importInTypePosition.js @@ -34,6 +34,7 @@ var A; A.Point = Point; A.Origin = new Point(0, 0); })(A || (A = {})); +// no code gen expected var C; (function (C) { var m; diff --git a/tests/baselines/reference/importInTypePosition.types b/tests/baselines/reference/importInTypePosition.types new file mode 100644 index 00000000000..163ae1d3a62 --- /dev/null +++ b/tests/baselines/reference/importInTypePosition.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/importInTypePosition.ts === +module A { +>A : typeof A + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } + export var Origin = new Point(0, 0); +>Origin : Point +>new Point(0, 0) : Point +>Point : typeof Point +} + +// no code gen expected +module B { +>B : unknown + + import a = A; //Error generates 'var = ;' +>a : typeof a +>A : typeof a +} +// no code gen expected +module C { +>C : typeof C + + import a = A; //Error generates 'var = ;' +>a : typeof a +>A : typeof a + + var m: typeof a; +>m : typeof a +>a : typeof a + + var p: a.Point; +>p : a.Point +>a : unknown +>Point : a.Point + + var p = { x: 0, y: 0 }; +>p : a.Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number +} + diff --git a/tests/baselines/reference/importNonExternalModule.js b/tests/baselines/reference/importNonExternalModule.js index 9cdf1a6b94c..002c1da7dfc 100644 --- a/tests/baselines/reference/importNonExternalModule.js +++ b/tests/baselines/reference/importNonExternalModule.js @@ -20,6 +20,7 @@ var foo; })(foo || (foo = {})); //// [foo_1.js] define(["require", "exports", "./foo_0"], function (require, exports, foo) { + // Import should fail. foo_0 not an external module if (foo.answer === 42) { } }); diff --git a/tests/baselines/reference/importOnAliasedIdentifiers.js b/tests/baselines/reference/importOnAliasedIdentifiers.js index 8f92bed3350..7034f682bf3 100644 --- a/tests/baselines/reference/importOnAliasedIdentifiers.js +++ b/tests/baselines/reference/importOnAliasedIdentifiers.js @@ -17,6 +17,6 @@ var A; })(A || (A = {})); var B; (function (B) { - var Z = A.X; + var Z = A.X; // Alias for both type and member A.X var v = Z; })(B || (B = {})); diff --git a/tests/baselines/reference/importOnAliasedIdentifiers.types b/tests/baselines/reference/importOnAliasedIdentifiers.types new file mode 100644 index 00000000000..7772e909c99 --- /dev/null +++ b/tests/baselines/reference/importOnAliasedIdentifiers.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/importOnAliasedIdentifiers.ts === +module A { +>A : typeof A + + export interface X { s: string } +>X : X +>s : string + + export var X: X; +>X : X +>X : X +} +module B { +>B : typeof B + + interface A { n: number } +>A : A +>n : number + + import Y = A; // Alias only for module A +>Y : typeof Y +>A : typeof Y + + import Z = A.X; // Alias for both type and member A.X +>Z : Y.X +>A : typeof Y +>X : Y.X + + var v: Z = Z; +>v : Y.X +>Z : Y.X +>Z : Y.X +} diff --git a/tests/baselines/reference/importShadowsGlobalName.types b/tests/baselines/reference/importShadowsGlobalName.types new file mode 100644 index 00000000000..a1f1106f1b8 --- /dev/null +++ b/tests/baselines/reference/importShadowsGlobalName.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/Bar.ts === +import Error = require('Foo'); +>Error : typeof Error + +class Bar extends Error {} +>Bar : Bar +>Error : Error + +export = Bar; +>Bar : Bar + +=== tests/cases/compiler/Foo.ts === + +class Foo {} +>Foo : Foo + +export = Foo; +>Foo : Foo + diff --git a/tests/baselines/reference/importStatements.js b/tests/baselines/reference/importStatements.js index 2aeb665e0ec..b8d06a3546e 100644 --- a/tests/baselines/reference/importStatements.js +++ b/tests/baselines/reference/importStatements.js @@ -47,12 +47,14 @@ var A; A.Point = Point; A.Origin = new Point(0, 0); })(A || (A = {})); +// no code gen expected var C; (function (C) { var m; var p; var p = { x: 0, y: 0 }; })(C || (C = {})); +// code gen expected var D; (function (D) { var a = A; diff --git a/tests/baselines/reference/importStatements.types b/tests/baselines/reference/importStatements.types new file mode 100644 index 00000000000..5980a142f34 --- /dev/null +++ b/tests/baselines/reference/importStatements.types @@ -0,0 +1,93 @@ +=== tests/cases/conformance/internalModules/codeGeneration/importStatements.ts === +module A { +>A : typeof A + + export class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + } + + export var Origin = new Point(0, 0); +>Origin : Point +>new Point(0, 0) : Point +>Point : typeof Point +} + +// no code gen expected +module B { +>B : unknown + + import a = A; //Error generates 'var = ;' +>a : typeof a +>A : typeof a +} + +// no code gen expected +module C { +>C : typeof C + + import a = A; //Error generates 'var = ;' +>a : typeof a +>A : typeof a + + var m: typeof a; +>m : typeof a +>a : typeof a + + var p: a.Point; +>p : a.Point +>a : unknown +>Point : a.Point + + var p = {x:0, y:0 }; +>p : a.Point +>{x:0, y:0 } : { x: number; y: number; } +>x : number +>y : number +} + +// code gen expected +module D { +>D : typeof D + + import a = A; +>a : typeof a +>A : typeof a + + var p = new a.Point(1, 1); +>p : a.Point +>new a.Point(1, 1) : a.Point +>a.Point : typeof a.Point +>a : typeof a +>Point : typeof a.Point +} + +module E { +>E : typeof E + + import a = A; +>a : typeof a +>A : typeof a + + export function xDist(x: a.Point) { +>xDist : (x: a.Point) => number +>x : a.Point +>a : unknown +>Point : a.Point + + return (a.Origin.x - x.x); +>(a.Origin.x - x.x) : number +>a.Origin.x - x.x : number +>a.Origin.x : number +>a.Origin : a.Point +>a : typeof a +>Origin : a.Point +>x : number +>x.x : number +>x : a.Point +>x : number + } +} diff --git a/tests/baselines/reference/importStatementsInterfaces.js b/tests/baselines/reference/importStatementsInterfaces.js index 99cbaeaff37..4f7bb447565 100644 --- a/tests/baselines/reference/importStatementsInterfaces.js +++ b/tests/baselines/reference/importStatementsInterfaces.js @@ -42,16 +42,19 @@ module E { } //// [importStatementsInterfaces.js] +// no code gen expected var C; (function (C) { var m; var p; var p = { x: 0, y: 0, z: 0 }; })(C || (C = {})); +// no code gen expected var D; (function (D) { var p; })(D || (D = {})); +// no code gen expected var E; (function (E) { function xDist(x) { diff --git a/tests/baselines/reference/importTsBeforeDTs.js b/tests/baselines/reference/importTsBeforeDTs.js index 44908ac8d8f..138ff7b755a 100644 --- a/tests/baselines/reference/importTsBeforeDTs.js +++ b/tests/baselines/reference/importTsBeforeDTs.js @@ -17,5 +17,5 @@ var z2 = foo.y + 10; // Should resolve exports.y = 42; //// [foo_1.js] var foo = require("./foo_0"); -var z1 = foo.x + 10; -var z2 = foo.y + 10; +var z1 = foo.x + 10; // Should error, as .ts preferred over .d.ts +var z2 = foo.y + 10; // Should resolve diff --git a/tests/baselines/reference/importUsedInExtendsList1.js b/tests/baselines/reference/importUsedInExtendsList1.js index e9b7b142e16..3c9f296d2c2 100644 --- a/tests/baselines/reference/importUsedInExtendsList1.js +++ b/tests/baselines/reference/importUsedInExtendsList1.js @@ -25,6 +25,7 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; +/// var foo = require('importUsedInExtendsList1_require'); var Sub = (function (_super) { __extends(Sub, _super); diff --git a/tests/baselines/reference/importUsedInExtendsList1.types b/tests/baselines/reference/importUsedInExtendsList1.types new file mode 100644 index 00000000000..7261c34e75e --- /dev/null +++ b/tests/baselines/reference/importUsedInExtendsList1.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/importUsedInExtendsList1_1.ts === +/// +import foo = require('importUsedInExtendsList1_require'); +>foo : typeof foo + +class Sub extends foo.Super { } +>Sub : Sub +>foo : unknown +>Super : foo.Super + +var s: Sub; +>s : Sub +>Sub : Sub + +var r: string = s.foo; +>r : string +>s.foo : string +>s : Sub +>foo : string + +=== tests/cases/compiler/importUsedInExtendsList1_require.ts === +export class Super { foo: string; } +>Super : Super +>foo : string + diff --git a/tests/baselines/reference/import_reference-exported-alias.types b/tests/baselines/reference/import_reference-exported-alias.types new file mode 100644 index 00000000000..b935fb16cf2 --- /dev/null +++ b/tests/baselines/reference/import_reference-exported-alias.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/file2.ts === +import appJs = require("file1"); +>appJs : typeof appJs + +import Services = appJs.Services; +>Services : typeof appJs.Services +>appJs : typeof appJs +>Services : typeof appJs.Services + +import UserServices = Services.UserServices; +>UserServices : typeof Services.UserServices +>Services : typeof appJs.Services +>UserServices : Services.UserServices + +var x = new UserServices().getUserName(); +>x : string +>new UserServices().getUserName() : string +>new UserServices().getUserName : () => string +>new UserServices() : Services.UserServices +>UserServices : typeof Services.UserServices +>getUserName : () => string + +=== tests/cases/compiler/file1.ts === +module App { +>App : typeof App + + export module Services { +>Services : typeof Services + + export class UserServices { +>UserServices : UserServices + + public getUserName(): string { +>getUserName : () => string + + return "Bill Gates"; + } + } + } +} + +import Mod = App; +>Mod : typeof App +>App : typeof App + +export = Mod; +>Mod : typeof App + diff --git a/tests/baselines/reference/import_reference-to-type-alias.types b/tests/baselines/reference/import_reference-to-type-alias.types new file mode 100644 index 00000000000..e1da40b5bb4 --- /dev/null +++ b/tests/baselines/reference/import_reference-to-type-alias.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/file2.ts === +import appJs = require("file1"); +>appJs : typeof appJs + +import Services = appJs.App.Services; +>Services : typeof Services +>appJs : typeof appJs +>App : typeof appJs.App +>Services : typeof Services + +var x = new Services.UserServices().getUserName(); +>x : string +>new Services.UserServices().getUserName() : string +>new Services.UserServices().getUserName : () => string +>new Services.UserServices() : Services.UserServices +>Services.UserServices : typeof Services.UserServices +>Services : typeof Services +>UserServices : typeof Services.UserServices +>getUserName : () => string + +=== tests/cases/compiler/file1.ts === +export module App { +>App : typeof App + + export module Services { +>Services : typeof Services + + export class UserServices { +>UserServices : UserServices + + public getUserName(): string { +>getUserName : () => string + + return "Bill Gates"; + } + } + } +} + diff --git a/tests/baselines/reference/import_unneeded-require-when-referenecing-aliased-type-throug-array.types b/tests/baselines/reference/import_unneeded-require-when-referenecing-aliased-type-throug-array.types new file mode 100644 index 00000000000..0dfe8ca336b --- /dev/null +++ b/tests/baselines/reference/import_unneeded-require-when-referenecing-aliased-type-throug-array.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/a.ts === +/// +import ITest = require('ITest'); +>ITest : unknown + +var testData: ITest[]; +>testData : ITest[] +>ITest : ITest + +var p = testData[0].name; +>p : string +>testData[0].name : string +>testData[0] : ITest +>testData : ITest[] +>name : string + +=== tests/cases/compiler/b.ts === +declare module "ITest" { + interface Name { +>Name : Name + + name: string; +>name : string + } + export = Name; +>Name : Name +} + diff --git a/tests/baselines/reference/import_var-referencing-an-imported-module-alias.types b/tests/baselines/reference/import_var-referencing-an-imported-module-alias.types new file mode 100644 index 00000000000..137b339347a --- /dev/null +++ b/tests/baselines/reference/import_var-referencing-an-imported-module-alias.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/consumer.ts === + +import host = require("host"); +>host : typeof host + +var hostVar = host; +>hostVar : typeof host +>host : typeof host + +var v = new hostVar.Host(); +>v : host.Host +>new hostVar.Host() : host.Host +>hostVar.Host : typeof host.Host +>hostVar : typeof host +>Host : typeof host.Host + +=== tests/cases/compiler/host.ts === +export class Host { } +>Host : Host + diff --git a/tests/baselines/reference/importedModuleClassNameClash.types b/tests/baselines/reference/importedModuleClassNameClash.types new file mode 100644 index 00000000000..28cdee34167 --- /dev/null +++ b/tests/baselines/reference/importedModuleClassNameClash.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/importedModuleClassNameClash.ts === +import foo = m1; +>foo : typeof foo +>m1 : unknown + +export module m1 { } +>m1 : unknown + +class foo { } +>foo : foo + diff --git a/tests/baselines/reference/inOperatorWithFunction.types b/tests/baselines/reference/inOperatorWithFunction.types new file mode 100644 index 00000000000..9de7663011d --- /dev/null +++ b/tests/baselines/reference/inOperatorWithFunction.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/inOperatorWithFunction.ts === +var fn = function (val: boolean) { return val; } +>fn : (val: boolean) => boolean +>function (val: boolean) { return val; } : (val: boolean) => boolean +>val : boolean +>val : boolean + +fn("a" in { "a": true }); +>fn("a" in { "a": true }) : boolean +>fn : (val: boolean) => boolean +>"a" in { "a": true } : boolean +>{ "a": true } : { "a": boolean; } + diff --git a/tests/baselines/reference/inOperatorWithGeneric.types b/tests/baselines/reference/inOperatorWithGeneric.types new file mode 100644 index 00000000000..2048e11082a --- /dev/null +++ b/tests/baselines/reference/inOperatorWithGeneric.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/inOperatorWithGeneric.ts === +class C { +>C : C +>T : T + + foo(x:T) { +>foo : (x: T) => void +>x : T +>T : T + + for (var p in x) { +>p : any +>x : T + } + } +} diff --git a/tests/baselines/reference/inOperatorWithInvalidOperands.js b/tests/baselines/reference/inOperatorWithInvalidOperands.js index d8c99c072f8..eb117aafde3 100644 --- a/tests/baselines/reference/inOperatorWithInvalidOperands.js +++ b/tests/baselines/reference/inOperatorWithInvalidOperands.js @@ -46,6 +46,8 @@ var E; E[E["a"] = 0] = "a"; })(E || (E = {})); var x; +// invalid left operands +// the left operand is required to be of type Any, the String primitive type, or the Number primitive type var a1; var a2; var a3; @@ -59,6 +61,8 @@ var ra6 = undefined in x; var ra7 = 0 /* a */ in x; var ra8 = false in x; var ra9 = {} in x; +// invalid right operands +// the right operand is required to be of type Any, an object type, or a type parameter type var b1; var b2; var b3; @@ -72,4 +76,5 @@ var rb6 = x in false; var rb7 = x in ''; var rb8 = x in null; var rb9 = x in undefined; +// both operands are invalid var rc1 = {} in ''; diff --git a/tests/baselines/reference/inOperatorWithValidOperands.js b/tests/baselines/reference/inOperatorWithValidOperands.js index b9b40d75f55..16df96f22fb 100644 --- a/tests/baselines/reference/inOperatorWithValidOperands.js +++ b/tests/baselines/reference/inOperatorWithValidOperands.js @@ -25,6 +25,8 @@ function foo(t: T) { //// [inOperatorWithValidOperands.js] var x; +// valid left operands +// the left operand is required to be of type Any, the String primitive type, or the Number primitive type var a1; var a2; var ra1 = x in x; @@ -32,6 +34,8 @@ var ra2 = a1 in x; var ra3 = a2 in x; var ra4 = '' in x; var ra5 = 0 in x; +// valid right operands +// the right operand is required to be of type Any, an object type, or a type parameter type var b1; var rb1 = x in b1; var rb2 = x in {}; diff --git a/tests/baselines/reference/inOperatorWithValidOperands.types b/tests/baselines/reference/inOperatorWithValidOperands.types new file mode 100644 index 00000000000..f621c3bf55d --- /dev/null +++ b/tests/baselines/reference/inOperatorWithValidOperands.types @@ -0,0 +1,69 @@ +=== tests/cases/conformance/expressions/binaryOperators/inOperator/inOperatorWithValidOperands.ts === +var x: any; +>x : any + +// valid left operands +// the left operand is required to be of type Any, the String primitive type, or the Number primitive type +var a1: string; +>a1 : string + +var a2: number; +>a2 : number + +var ra1 = x in x; +>ra1 : boolean +>x in x : boolean +>x : any +>x : any + +var ra2 = a1 in x; +>ra2 : boolean +>a1 in x : boolean +>a1 : string +>x : any + +var ra3 = a2 in x; +>ra3 : boolean +>a2 in x : boolean +>a2 : number +>x : any + +var ra4 = '' in x; +>ra4 : boolean +>'' in x : boolean +>x : any + +var ra5 = 0 in x; +>ra5 : boolean +>0 in x : boolean +>x : any + +// valid right operands +// the right operand is required to be of type Any, an object type, or a type parameter type +var b1: {}; +>b1 : {} + +var rb1 = x in b1; +>rb1 : boolean +>x in b1 : boolean +>x : any +>b1 : {} + +var rb2 = x in {}; +>rb2 : boolean +>x in {} : boolean +>x : any +>{} : {} + +function foo(t: T) { +>foo : (t: T) => void +>T : T +>t : T +>T : T + + var rb3 = x in t; +>rb3 : boolean +>x in t : boolean +>x : any +>t : T +} diff --git a/tests/baselines/reference/incrementOperatorWithAnyOtherType.js b/tests/baselines/reference/incrementOperatorWithAnyOtherType.js index f7b9fb4effc..4c9d570d07f 100644 --- a/tests/baselines/reference/incrementOperatorWithAnyOtherType.js +++ b/tests/baselines/reference/incrementOperatorWithAnyOtherType.js @@ -49,6 +49,7 @@ objA.a++; M.n++; //// [incrementOperatorWithAnyOtherType.js] +// ++ operator on any type var ANY; var ANY1; var ANY2 = ["", ""]; @@ -63,10 +64,12 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// any type var var ResultIsNumber1 = ++ANY; var ResultIsNumber2 = ++ANY1; var ResultIsNumber3 = ANY1++; var ResultIsNumber4 = ANY1++; +// expressions var ResultIsNumber5 = ++ANY2[0]; var ResultIsNumber6 = ++obj.x; var ResultIsNumber7 = ++obj.y; @@ -77,6 +80,7 @@ var ResultIsNumber10 = obj.x++; var ResultIsNumber11 = obj.y++; var ResultIsNumber12 = objA.a++; var ResultIsNumber13 = M.n++; +// miss assignment opertors ++ANY; ++ANY1; ++ANY2[0]; diff --git a/tests/baselines/reference/incrementOperatorWithAnyOtherType.types b/tests/baselines/reference/incrementOperatorWithAnyOtherType.types new file mode 100644 index 00000000000..3d43764943a --- /dev/null +++ b/tests/baselines/reference/incrementOperatorWithAnyOtherType.types @@ -0,0 +1,191 @@ +=== tests/cases/conformance/expressions/unaryOperators/incrementOperator/incrementOperatorWithAnyOtherType.ts === +// ++ operator on any type + +var ANY: any; +>ANY : any + +var ANY1; +>ANY1 : any + +var ANY2: any[] = ["", ""]; +>ANY2 : any[] +>["", ""] : any[] + +var obj = {x:1,y:null}; +>obj : { x: number; y: any; } +>{x:1,y:null} : { x: number; y: null; } +>x : number +>y : any + +class A { +>A : A + + public a: any; +>a : any +} +module M { +>M : typeof M + + export var n: any; +>n : any +} +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// any type var +var ResultIsNumber1 = ++ANY; +>ResultIsNumber1 : number +>++ANY : number +>ANY : any + +var ResultIsNumber2 = ++ANY1; +>ResultIsNumber2 : number +>++ANY1 : number +>ANY1 : any + +var ResultIsNumber3 = ANY1++; +>ResultIsNumber3 : number +>ANY1++ : number +>ANY1 : any + +var ResultIsNumber4 = ANY1++; +>ResultIsNumber4 : number +>ANY1++ : number +>ANY1 : any + +// expressions +var ResultIsNumber5 = ++ANY2[0]; +>ResultIsNumber5 : number +>++ANY2[0] : number +>ANY2[0] : any +>ANY2 : any[] + +var ResultIsNumber6 = ++obj.x; +>ResultIsNumber6 : number +>++obj.x : number +>obj.x : number +>obj : { x: number; y: any; } +>x : number + +var ResultIsNumber7 = ++obj.y; +>ResultIsNumber7 : number +>++obj.y : number +>obj.y : any +>obj : { x: number; y: any; } +>y : any + +var ResultIsNumber8 = ++objA.a; +>ResultIsNumber8 : number +>++objA.a : number +>objA.a : any +>objA : A +>a : any + +var ResultIsNumber = ++M.n; +>ResultIsNumber : number +>++M.n : number +>M.n : any +>M : typeof M +>n : any + +var ResultIsNumber9 = ANY2[0]++; +>ResultIsNumber9 : number +>ANY2[0]++ : number +>ANY2[0] : any +>ANY2 : any[] + +var ResultIsNumber10 = obj.x++; +>ResultIsNumber10 : number +>obj.x++ : number +>obj.x : number +>obj : { x: number; y: any; } +>x : number + +var ResultIsNumber11 = obj.y++; +>ResultIsNumber11 : number +>obj.y++ : number +>obj.y : any +>obj : { x: number; y: any; } +>y : any + +var ResultIsNumber12 = objA.a++; +>ResultIsNumber12 : number +>objA.a++ : number +>objA.a : any +>objA : A +>a : any + +var ResultIsNumber13 = M.n++; +>ResultIsNumber13 : number +>M.n++ : number +>M.n : any +>M : typeof M +>n : any + +// miss assignment opertors +++ANY; +>++ANY : number +>ANY : any + +++ANY1; +>++ANY1 : number +>ANY1 : any + +++ANY2[0]; +>++ANY2[0] : number +>ANY2[0] : any +>ANY2 : any[] + +++ANY, ++ANY1; +>++ANY, ++ANY1 : number +>++ANY : number +>ANY : any +>++ANY1 : number +>ANY1 : any + +++objA.a; +>++objA.a : number +>objA.a : any +>objA : A +>a : any + +++M.n; +>++M.n : number +>M.n : any +>M : typeof M +>n : any + +ANY++; +>ANY++ : number +>ANY : any + +ANY1++; +>ANY1++ : number +>ANY1 : any + +ANY2[0]++; +>ANY2[0]++ : number +>ANY2[0] : any +>ANY2 : any[] + +ANY++, ANY1++; +>ANY++, ANY1++ : number +>ANY++ : number +>ANY : any +>ANY1++ : number +>ANY1 : any + +objA.a++; +>objA.a++ : number +>objA.a : any +>objA : A +>a : any + +M.n++; +>M.n++ : number +>M.n : any +>M : typeof M +>n : any + diff --git a/tests/baselines/reference/incrementOperatorWithAnyOtherTypeInvalidOperations.js b/tests/baselines/reference/incrementOperatorWithAnyOtherTypeInvalidOperations.js index 928f0a59e4d..9fb1c4e616e 100644 --- a/tests/baselines/reference/incrementOperatorWithAnyOtherTypeInvalidOperations.js +++ b/tests/baselines/reference/incrementOperatorWithAnyOtherTypeInvalidOperations.js @@ -70,6 +70,7 @@ ANY2++; ++ANY2[0]++; //// [incrementOperatorWithAnyOtherTypeInvalidOperations.js] +// ++ operator on any type var ANY1; var ANY2 = [1, 2]; var obj; @@ -93,6 +94,7 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// any type var var ResultIsNumber1 = ++ANY2; var ResultIsNumber2 = ++A; var ResultIsNumber3 = ++M; @@ -103,12 +105,14 @@ var ResultIsNumber7 = A++; var ResultIsNumber8 = M++; var ResultIsNumber9 = obj++; var ResultIsNumber10 = obj1++; +// any type literal var ResultIsNumber11 = ++{}; var ResultIsNumber12 = ++null; var ResultIsNumber13 = ++undefined; var ResultIsNumber14 = null++; var ResultIsNumber15 = {}++; var ResultIsNumber16 = undefined++; +// any type expressions var ResultIsNumber17 = ++foo(); var ResultIsNumber18 = ++A.foo(); var ResultIsNumber19 = ++(null + undefined); @@ -123,6 +127,7 @@ var ResultIsNumber27 = (null + null)++; var ResultIsNumber28 = (undefined + undefined)++; var ResultIsNumber29 = obj1.x++; var ResultIsNumber30 = obj1.y++; +// miss assignment operators ++ANY2; ANY2++; ++ANY1++; diff --git a/tests/baselines/reference/incrementOperatorWithEnumType.js b/tests/baselines/reference/incrementOperatorWithEnumType.js index 34faaf2201a..cdea036c335 100644 --- a/tests/baselines/reference/incrementOperatorWithEnumType.js +++ b/tests/baselines/reference/incrementOperatorWithEnumType.js @@ -13,6 +13,7 @@ var ResultIsNumber2 = ENUM1[1]++; ENUM1[1]++; //// [incrementOperatorWithEnumType.js] +// ++ operator on enum type var ENUM1; (function (ENUM1) { ENUM1[ENUM1["1"] = 0] = "1"; @@ -20,7 +21,9 @@ var ENUM1; ENUM1[ENUM1[""] = 2] = ""; })(ENUM1 || (ENUM1 = {})); ; +// expression var ResultIsNumber1 = ++ENUM1[1]; var ResultIsNumber2 = ENUM1[1]++; +// miss assignment operator ++ENUM1[1]; ENUM1[1]++; diff --git a/tests/baselines/reference/incrementOperatorWithEnumType.types b/tests/baselines/reference/incrementOperatorWithEnumType.types new file mode 100644 index 00000000000..3b13c01d5df --- /dev/null +++ b/tests/baselines/reference/incrementOperatorWithEnumType.types @@ -0,0 +1,30 @@ +=== tests/cases/conformance/expressions/unaryOperators/incrementOperator/incrementOperatorWithEnumType.ts === +// ++ operator on enum type + +enum ENUM1 { 1, 2, "" }; +>ENUM1 : ENUM1 + +// expression +var ResultIsNumber1 = ++ENUM1[1]; +>ResultIsNumber1 : number +>++ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +var ResultIsNumber2 = ENUM1[1]++; +>ResultIsNumber2 : number +>ENUM1[1]++ : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +// miss assignment operator +++ENUM1[1]; +>++ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +ENUM1[1]++; +>ENUM1[1]++ : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + diff --git a/tests/baselines/reference/incrementOperatorWithEnumTypeInvalidOperations.js b/tests/baselines/reference/incrementOperatorWithEnumTypeInvalidOperations.js index fa6e778c235..ed9b33e16bb 100644 --- a/tests/baselines/reference/incrementOperatorWithEnumTypeInvalidOperations.js +++ b/tests/baselines/reference/incrementOperatorWithEnumTypeInvalidOperations.js @@ -23,6 +23,7 @@ ENUM++; ENUM1++; //// [incrementOperatorWithEnumTypeInvalidOperations.js] +// ++ operator on enum type var ENUM; (function (ENUM) { })(ENUM || (ENUM = {})); @@ -34,12 +35,15 @@ var ENUM1; ENUM1[ENUM1[""] = 2] = ""; })(ENUM1 || (ENUM1 = {})); ; +// enum type var var ResultIsNumber1 = ++ENUM; var ResultIsNumber2 = ++ENUM1; var ResultIsNumber3 = ENUM++; var ResultIsNumber4 = ENUM1++; +// enum type expressions var ResultIsNumber5 = ++(ENUM[1] + ENUM[2]); var ResultIsNumber6 = (ENUM[1] + ENUM[2])++; +// miss assignment operator ++ENUM; ++ENUM1; ENUM++; diff --git a/tests/baselines/reference/incrementOperatorWithNumberType.js b/tests/baselines/reference/incrementOperatorWithNumberType.js index 90c23de9adc..09365833e3b 100644 --- a/tests/baselines/reference/incrementOperatorWithNumberType.js +++ b/tests/baselines/reference/incrementOperatorWithNumberType.js @@ -40,6 +40,7 @@ M.n++; objA.a++, M.n++; //// [incrementOperatorWithNumberType.js] +// ++ operator on number type var NUMBER; var NUMBER1 = [1, 2]; var A = (function () { @@ -52,13 +53,16 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// number type var var ResultIsNumber1 = ++NUMBER; var ResultIsNumber2 = NUMBER++; +// expressions var ResultIsNumber3 = ++objA.a; var ResultIsNumber4 = ++M.n; var ResultIsNumber5 = objA.a++; var ResultIsNumber6 = M.n++; var ResultIsNumber7 = NUMBER1[0]++; +// miss assignment operators ++NUMBER; ++NUMBER1[0]; ++objA.a; diff --git a/tests/baselines/reference/incrementOperatorWithNumberType.types b/tests/baselines/reference/incrementOperatorWithNumberType.types new file mode 100644 index 00000000000..ad6ea172ae3 --- /dev/null +++ b/tests/baselines/reference/incrementOperatorWithNumberType.types @@ -0,0 +1,137 @@ +=== tests/cases/conformance/expressions/unaryOperators/incrementOperator/incrementOperatorWithNumberType.ts === +// ++ operator on number type +var NUMBER: number; +>NUMBER : number + +var NUMBER1: number[] = [1, 2]; +>NUMBER1 : number[] +>[1, 2] : number[] + +class A { +>A : A + + public a: number; +>a : number +} +module M { +>M : typeof M + + export var n: number; +>n : number +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// number type var +var ResultIsNumber1 = ++NUMBER; +>ResultIsNumber1 : number +>++NUMBER : number +>NUMBER : number + +var ResultIsNumber2 = NUMBER++; +>ResultIsNumber2 : number +>NUMBER++ : number +>NUMBER : number + +// expressions +var ResultIsNumber3 = ++objA.a; +>ResultIsNumber3 : number +>++objA.a : number +>objA.a : number +>objA : A +>a : number + +var ResultIsNumber4 = ++M.n; +>ResultIsNumber4 : number +>++M.n : number +>M.n : number +>M : typeof M +>n : number + +var ResultIsNumber5 = objA.a++; +>ResultIsNumber5 : number +>objA.a++ : number +>objA.a : number +>objA : A +>a : number + +var ResultIsNumber6 = M.n++; +>ResultIsNumber6 : number +>M.n++ : number +>M.n : number +>M : typeof M +>n : number + +var ResultIsNumber7 = NUMBER1[0]++; +>ResultIsNumber7 : number +>NUMBER1[0]++ : number +>NUMBER1[0] : number +>NUMBER1 : number[] + +// miss assignment operators +++NUMBER; +>++NUMBER : number +>NUMBER : number + +++NUMBER1[0]; +>++NUMBER1[0] : number +>NUMBER1[0] : number +>NUMBER1 : number[] + +++objA.a; +>++objA.a : number +>objA.a : number +>objA : A +>a : number + +++M.n; +>++M.n : number +>M.n : number +>M : typeof M +>n : number + +++objA.a, M.n; +>++objA.a, M.n : number +>++objA.a : number +>objA.a : number +>objA : A +>a : number +>M.n : number +>M : typeof M +>n : number + +NUMBER++; +>NUMBER++ : number +>NUMBER : number + +NUMBER1[0]++; +>NUMBER1[0]++ : number +>NUMBER1[0] : number +>NUMBER1 : number[] + +objA.a++; +>objA.a++ : number +>objA.a : number +>objA : A +>a : number + +M.n++; +>M.n++ : number +>M.n : number +>M : typeof M +>n : number + +objA.a++, M.n++; +>objA.a++, M.n++ : number +>objA.a++ : number +>objA.a : number +>objA : A +>a : number +>M.n++ : number +>M.n : number +>M : typeof M +>n : number + diff --git a/tests/baselines/reference/incrementOperatorWithNumberTypeInvalidOperations.js b/tests/baselines/reference/incrementOperatorWithNumberTypeInvalidOperations.js index a328d49cf63..564516ead64 100644 --- a/tests/baselines/reference/incrementOperatorWithNumberTypeInvalidOperations.js +++ b/tests/baselines/reference/incrementOperatorWithNumberTypeInvalidOperations.js @@ -47,6 +47,7 @@ NUMBER1++; foo()++; //// [incrementOperatorWithNumberTypeInvalidOperations.js] +// ++ operator on number type var NUMBER; var NUMBER1 = [1, 2]; function foo() { @@ -65,8 +66,10 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +//number type var var ResultIsNumber1 = ++NUMBER1; var ResultIsNumber2 = NUMBER1++; +// number type literal var ResultIsNumber3 = ++1; var ResultIsNumber4 = ++{ x: 1, y: 2 }; var ResultIsNumber5 = ++{ x: 1, y: function (n) { @@ -77,12 +80,14 @@ var ResultIsNumber7 = { x: 1, y: 2 }++; var ResultIsNumber8 = { x: 1, y: function (n) { return n; } }++; +// number type expressions var ResultIsNumber9 = ++foo(); var ResultIsNumber10 = ++A.foo(); var ResultIsNumber11 = ++(NUMBER + NUMBER); var ResultIsNumber12 = foo()++; var ResultIsNumber13 = A.foo()++; var ResultIsNumber14 = (NUMBER + NUMBER)++; +// miss assignment operator ++1; ++NUMBER1; ++foo(); diff --git a/tests/baselines/reference/incrementOperatorWithUnsupportedBooleanType.js b/tests/baselines/reference/incrementOperatorWithUnsupportedBooleanType.js index f321ba1f238..6c0775b520f 100644 --- a/tests/baselines/reference/incrementOperatorWithUnsupportedBooleanType.js +++ b/tests/baselines/reference/incrementOperatorWithUnsupportedBooleanType.js @@ -55,6 +55,7 @@ M.n++; objA.a++, M.n++; //// [incrementOperatorWithUnsupportedBooleanType.js] +// ++ operator on boolean type var BOOLEAN; function foo() { return true; @@ -72,8 +73,10 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// boolean type var var ResultIsNumber1 = ++BOOLEAN; var ResultIsNumber2 = BOOLEAN++; +// boolean type literal var ResultIsNumber3 = ++true; var ResultIsNumber4 = ++{ x: true, y: false }; var ResultIsNumber5 = ++{ x: true, y: function (n) { @@ -84,6 +87,7 @@ var ResultIsNumber7 = { x: true, y: false }++; var ResultIsNumber8 = { x: true, y: function (n) { return n; } }++; +// boolean type expressions var ResultIsNumber9 = ++objA.a; var ResultIsNumber10 = ++M.n; var ResultIsNumber11 = ++foo(); @@ -92,6 +96,7 @@ var ResultIsNumber13 = foo()++; var ResultIsNumber14 = A.foo()++; var ResultIsNumber15 = objA.a++; var ResultIsNumber16 = M.n++; +// miss assignment operators ++true; ++BOOLEAN; ++foo(); diff --git a/tests/baselines/reference/incrementOperatorWithUnsupportedStringType.js b/tests/baselines/reference/incrementOperatorWithUnsupportedStringType.js index 1e426c964a1..065cf6ed5eb 100644 --- a/tests/baselines/reference/incrementOperatorWithUnsupportedStringType.js +++ b/tests/baselines/reference/incrementOperatorWithUnsupportedStringType.js @@ -66,6 +66,7 @@ M.n++; objA.a++, M.n++; //// [incrementOperatorWithUnsupportedStringType.js] +// ++ operator on string type var STRING; var STRING1 = ["", ""]; function foo() { @@ -84,10 +85,12 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// string type var var ResultIsNumber1 = ++STRING; var ResultIsNumber2 = ++STRING1; var ResultIsNumber3 = STRING++; var ResultIsNumber4 = STRING1++; +// string type literal var ResultIsNumber5 = ++""; var ResultIsNumber6 = ++{ x: "", y: "" }; var ResultIsNumber7 = ++{ x: "", y: function (s) { @@ -98,6 +101,7 @@ var ResultIsNumber9 = { x: "", y: "" }++; var ResultIsNumber10 = { x: "", y: function (s) { return s; } }++; +// string type expressions var ResultIsNumber11 = ++objA.a; var ResultIsNumber12 = ++M.n; var ResultIsNumber13 = ++STRING1[0]; @@ -110,6 +114,7 @@ var ResultIsNumber19 = STRING1[0]++; var ResultIsNumber20 = foo()++; var ResultIsNumber21 = A.foo()++; var ResultIsNumber22 = (STRING + STRING)++; +// miss assignment operators ++""; ++STRING; ++STRING1; diff --git a/tests/baselines/reference/indexClassByNumber.js b/tests/baselines/reference/indexClassByNumber.js index 7f4e7ab64d7..1725e5bf6a1 100644 --- a/tests/baselines/reference/indexClassByNumber.js +++ b/tests/baselines/reference/indexClassByNumber.js @@ -8,10 +8,11 @@ var f = new foo(); f[0] = 4; // Shouldn't be allowed //// [indexClassByNumber.js] +// Shouldn't be able to index a class instance by a number (unless it has declared a number index signature) var foo = (function () { function foo() { } return foo; })(); var f = new foo(); -f[0] = 4; +f[0] = 4; // Shouldn't be allowed diff --git a/tests/baselines/reference/indexClassByNumber.types b/tests/baselines/reference/indexClassByNumber.types new file mode 100644 index 00000000000..c58771d3256 --- /dev/null +++ b/tests/baselines/reference/indexClassByNumber.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/indexClassByNumber.ts === +// Shouldn't be able to index a class instance by a number (unless it has declared a number index signature) + +class foo { } +>foo : foo + +var f = new foo(); +>f : foo +>new foo() : foo +>foo : typeof foo + +f[0] = 4; // Shouldn't be allowed +>f[0] = 4 : number +>f[0] : any +>f : foo + diff --git a/tests/baselines/reference/indexIntoArraySubclass.js b/tests/baselines/reference/indexIntoArraySubclass.js index 051ec813465..b66271d3815 100644 --- a/tests/baselines/reference/indexIntoArraySubclass.js +++ b/tests/baselines/reference/indexIntoArraySubclass.js @@ -6,5 +6,5 @@ r = 0; //error //// [indexIntoArraySubclass.js] var x2; -var r = x2[0]; -r = 0; +var r = x2[0]; // string +r = 0; //error diff --git a/tests/baselines/reference/indexIntoEnum.types b/tests/baselines/reference/indexIntoEnum.types new file mode 100644 index 00000000000..39849566409 --- /dev/null +++ b/tests/baselines/reference/indexIntoEnum.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/indexIntoEnum.ts === +module M { +>M : typeof M + + enum E { } +>E : E + + var x = E[0]; +>x : string +>E[0] : string +>E : typeof E +} diff --git a/tests/baselines/reference/indexSignatureTypeInference.js b/tests/baselines/reference/indexSignatureTypeInference.js index a4f79801258..73458f9f8d9 100644 --- a/tests/baselines/reference/indexSignatureTypeInference.js +++ b/tests/baselines/reference/indexSignatureTypeInference.js @@ -24,7 +24,7 @@ var v1 = stringMapToArray(stringMap); // Ok var numberMap; var stringMap; var v1; -var v1 = numberMapToArray(numberMap); -var v1 = numberMapToArray(stringMap); -var v1 = stringMapToArray(numberMap); -var v1 = stringMapToArray(stringMap); +var v1 = numberMapToArray(numberMap); // Ok +var v1 = numberMapToArray(stringMap); // Ok +var v1 = stringMapToArray(numberMap); // Error expected here +var v1 = stringMapToArray(stringMap); // Ok diff --git a/tests/baselines/reference/indexSignaturesInferentialTyping.js b/tests/baselines/reference/indexSignaturesInferentialTyping.js index c9cc7293a1a..d8200338b62 100644 --- a/tests/baselines/reference/indexSignaturesInferentialTyping.js +++ b/tests/baselines/reference/indexSignaturesInferentialTyping.js @@ -15,7 +15,7 @@ function foo(items) { function bar(items) { return undefined; } -var x1 = foo({ 0: 0, 1: 1 }); +var x1 = foo({ 0: 0, 1: 1 }); // type should be number var x2 = foo({ zero: 0, one: 1 }); var x3 = bar({ 0: 0, 1: 1 }); -var x4 = bar({ zero: 0, one: 1 }); +var x4 = bar({ zero: 0, one: 1 }); // type should be number diff --git a/tests/baselines/reference/indexSignaturesInferentialTyping.types b/tests/baselines/reference/indexSignaturesInferentialTyping.types new file mode 100644 index 00000000000..3c16db3a2bf --- /dev/null +++ b/tests/baselines/reference/indexSignaturesInferentialTyping.types @@ -0,0 +1,47 @@ +=== tests/cases/compiler/indexSignaturesInferentialTyping.ts === +function foo(items: { [index: number]: T }): T { return undefined; } +>foo : (items: { [x: number]: T; }) => T +>T : T +>items : { [x: number]: T; } +>index : number +>T : T +>T : T +>undefined : undefined + +function bar(items: { [index: string]: T }): T { return undefined; } +>bar : (items: { [x: string]: T; }) => T +>T : T +>items : { [x: string]: T; } +>index : string +>T : T +>T : T +>undefined : undefined + +var x1 = foo({ 0: 0, 1: 1 }); // type should be number +>x1 : number +>foo({ 0: 0, 1: 1 }) : number +>foo : (items: { [x: number]: T; }) => T +>{ 0: 0, 1: 1 } : { [x: number]: number; 0: number; 1: number; } + +var x2 = foo({ zero: 0, one: 1 }); +>x2 : {} +>foo({ zero: 0, one: 1 }) : {} +>foo : (items: { [x: number]: T; }) => T +>{ zero: 0, one: 1 } : { [x: number]: {}; zero: number; one: number; } +>zero : number +>one : number + +var x3 = bar({ 0: 0, 1: 1 }); +>x3 : number +>bar({ 0: 0, 1: 1 }) : number +>bar : (items: { [x: string]: T; }) => T +>{ 0: 0, 1: 1 } : { [x: string]: number; 0: number; 1: number; } + +var x4 = bar({ zero: 0, one: 1 }); // type should be number +>x4 : number +>bar({ zero: 0, one: 1 }) : number +>bar : (items: { [x: string]: T; }) => T +>{ zero: 0, one: 1 } : { [x: string]: number; zero: number; one: number; } +>zero : number +>one : number + diff --git a/tests/baselines/reference/indexer.types b/tests/baselines/reference/indexer.types new file mode 100644 index 00000000000..236113cfaa8 --- /dev/null +++ b/tests/baselines/reference/indexer.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/indexer.ts === +interface JQueryElement { +>JQueryElement : JQueryElement + + id:string; +>id : string +} + +interface JQuery { +>JQuery : JQuery + + [n:number]:JQueryElement; +>n : number +>JQueryElement : JQueryElement +} + +var jq:JQuery={ 0: { id : "a" }, 1: { id : "b" } }; +>jq : JQuery +>JQuery : JQuery +>{ 0: { id : "a" }, 1: { id : "b" } } : { [x: number]: JQueryElement; 0: { id: string; }; 1: { id: string; }; } +>{ id : "a" } : { id: string; } +>id : string +>{ id : "b" } : { id: string; } +>id : string + +jq[0].id; +>jq[0].id : string +>jq[0] : JQueryElement +>jq : JQuery +>id : string + diff --git a/tests/baselines/reference/indexer2.types b/tests/baselines/reference/indexer2.types new file mode 100644 index 00000000000..498ade679a8 --- /dev/null +++ b/tests/baselines/reference/indexer2.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/indexer2.ts === +interface IHeapObjectProperty {} +>IHeapObjectProperty : IHeapObjectProperty + +interface IDirectChildrenMap { +>IDirectChildrenMap : IDirectChildrenMap + + hasOwnProperty(objectId: number) : boolean; +>hasOwnProperty : (objectId: number) => boolean +>objectId : number + + [objectId: number] : IHeapObjectProperty[]; +>objectId : number +>IHeapObjectProperty : IHeapObjectProperty +} +var directChildrenMap = {}; +>directChildrenMap : IDirectChildrenMap +>{} : IDirectChildrenMap +>IDirectChildrenMap : IDirectChildrenMap +>{} : { [x: number]: IHeapObjectProperty[]; } + diff --git a/tests/baselines/reference/indexer3.js b/tests/baselines/reference/indexer3.js index 85637e2ef20..a14418792cf 100644 --- a/tests/baselines/reference/indexer3.js +++ b/tests/baselines/reference/indexer3.js @@ -4,4 +4,4 @@ var r: Date = dateMap["hello"] // result type includes indexer using BCT //// [indexer3.js] var dateMap = {}; -var r = dateMap["hello"]; +var r = dateMap["hello"]; // result type includes indexer using BCT diff --git a/tests/baselines/reference/indexer3.types b/tests/baselines/reference/indexer3.types new file mode 100644 index 00000000000..2b23ac85885 --- /dev/null +++ b/tests/baselines/reference/indexer3.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/indexer3.ts === +var dateMap: { [x: string]: Date; } = {} +>dateMap : { [x: string]: Date; } +>x : string +>Date : Date +>{} : { [x: string]: Date; } + +var r: Date = dateMap["hello"] // result type includes indexer using BCT +>r : Date +>Date : Date +>dateMap["hello"] : Date +>dateMap : { [x: string]: Date; } + diff --git a/tests/baselines/reference/indexerA.types b/tests/baselines/reference/indexerA.types new file mode 100644 index 00000000000..7b409ecedc0 --- /dev/null +++ b/tests/baselines/reference/indexerA.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/indexerA.ts === +class JQueryElement { +>JQueryElement : JQueryElement + + id:string; +>id : string +} + +class JQuery { +>JQuery : JQuery + + [n:number]:JQueryElement +>n : number +>JQueryElement : JQueryElement +} + +var jq:JQuery={ 0: { id : "a" }, 1: { id : "b" } }; +>jq : JQuery +>JQuery : JQuery +>{ 0: { id : "a" }, 1: { id : "b" } } : { [x: number]: JQueryElement; 0: { id: string; }; 1: { id: string; }; } +>{ id : "a" } : { id: string; } +>id : string +>{ id : "b" } : { id: string; } +>id : string + +jq[0].id; +>jq[0].id : string +>jq[0] : JQueryElement +>jq : JQuery +>id : string + diff --git a/tests/baselines/reference/indexerConstraints2.js b/tests/baselines/reference/indexerConstraints2.js index 33bd7eb9612..df5dbf22f35 100644 --- a/tests/baselines/reference/indexerConstraints2.js +++ b/tests/baselines/reference/indexerConstraints2.js @@ -47,6 +47,7 @@ var B = (function (_super) { } return B; })(A); +// Inheritance var F = (function () { function F() { } @@ -59,6 +60,7 @@ var G = (function (_super) { } return G; })(F); +// Other way var H = (function () { function H() { } @@ -71,6 +73,7 @@ var I = (function (_super) { } return I; })(H); +// With hidden indexer var J = (function () { function J() { } diff --git a/tests/baselines/reference/indexerReturningTypeParameter1.types b/tests/baselines/reference/indexerReturningTypeParameter1.types new file mode 100644 index 00000000000..55155323c84 --- /dev/null +++ b/tests/baselines/reference/indexerReturningTypeParameter1.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/indexerReturningTypeParameter1.ts === +interface f { +>f : f + + groupBy(): { [key: string]: T[]; }; +>groupBy : () => { [x: string]: T[]; } +>T : T +>key : string +>T : T +} +var a: f; +>a : f +>f : f + +var r = a.groupBy(); +>r : { [x: string]: {}[]; } +>a.groupBy() : { [x: string]: {}[]; } +>a.groupBy : () => { [x: string]: T[]; } +>a : f +>groupBy : () => { [x: string]: T[]; } + +class c { +>c : c + + groupBy(): { [key: string]: T[]; } { +>groupBy : () => { [x: string]: T[]; } +>T : T +>key : string +>T : T + + return null; + } +} +var a2: c; +>a2 : c +>c : c + +var r2 = a2.groupBy(); +>r2 : { [x: string]: {}[]; } +>a2.groupBy() : { [x: string]: {}[]; } +>a2.groupBy : () => { [x: string]: T[]; } +>a2 : c +>groupBy : () => { [x: string]: T[]; } + diff --git a/tests/baselines/reference/indexersInClassType.types b/tests/baselines/reference/indexersInClassType.types new file mode 100644 index 00000000000..afc21b9ce8a --- /dev/null +++ b/tests/baselines/reference/indexersInClassType.types @@ -0,0 +1,49 @@ +=== tests/cases/conformance/classes/members/classTypes/indexersInClassType.ts === +class C { +>C : C + + [x: number]: Date; +>x : number +>Date : Date + + [x: string]: Object; +>x : string +>Object : Object + + 1: Date; +>Date : Date + + 'a': {} + + fn() { +>fn : () => C + + return this; +>this : C + } +} + +var c = new C(); +>c : C +>new C() : C +>C : typeof C + +var r = c.fn(); +>r : C +>c.fn() : C +>c.fn : () => C +>c : C +>fn : () => C + +var r2 = r[1]; +>r2 : Date +>r[1] : Date +>r : C + +var r3 = r.a +>r3 : {} +>r.a : {} +>r : C +>a : {} + + diff --git a/tests/baselines/reference/inferSecondaryParameter.js b/tests/baselines/reference/inferSecondaryParameter.js index a94b83e3244..9b32b33b52c 100644 --- a/tests/baselines/reference/inferSecondaryParameter.js +++ b/tests/baselines/reference/inferSecondaryParameter.js @@ -10,6 +10,7 @@ b.m("test", function (bug) { }); //// [inferSecondaryParameter.js] +// type inference on 'bug' should give 'any' var b = { m: function (test, fn) { } }; b.m("test", function (bug) { diff --git a/tests/baselines/reference/inferSecondaryParameter.types b/tests/baselines/reference/inferSecondaryParameter.types new file mode 100644 index 00000000000..e416cface90 --- /dev/null +++ b/tests/baselines/reference/inferSecondaryParameter.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/inferSecondaryParameter.ts === +// type inference on 'bug' should give 'any' + +interface Ib { m(test: string, fn: Function); } +>Ib : Ib +>m : (test: string, fn: Function) => any +>test : string +>fn : Function +>Function : Function + +var b: Ib = { m: function (test: string, fn: Function) { } }; +>b : Ib +>Ib : Ib +>{ m: function (test: string, fn: Function) { } } : { m: (test: string, fn: Function) => void; } +>m : (test: string, fn: Function) => void +>function (test: string, fn: Function) { } : (test: string, fn: Function) => void +>test : string +>fn : Function +>Function : Function + +b.m("test", function (bug) { +>b.m("test", function (bug) { var a: number = bug;}) : any +>b.m : (test: string, fn: Function) => any +>b : Ib +>m : (test: string, fn: Function) => any +>function (bug) { var a: number = bug;} : (bug: any) => void +>bug : any + + var a: number = bug; +>a : number +>bug : any + +}); diff --git a/tests/baselines/reference/inferTypeArgumentsInSignatureWithRestParameters.js b/tests/baselines/reference/inferTypeArgumentsInSignatureWithRestParameters.js index 1b7ab4f0843..1cc86829a6b 100644 --- a/tests/baselines/reference/inferTypeArgumentsInSignatureWithRestParameters.js +++ b/tests/baselines/reference/inferTypeArgumentsInSignatureWithRestParameters.js @@ -33,7 +33,7 @@ function h(nonarray) { function i(array, opt) { } var a = [1, 2, 3, 4, 5]; -f(a); -g(a); -h(a); -i(a); +f(a); // OK +g(a); // OK +h(a); // OK +i(a); // OK diff --git a/tests/baselines/reference/inferTypeArgumentsInSignatureWithRestParameters.types b/tests/baselines/reference/inferTypeArgumentsInSignatureWithRestParameters.types new file mode 100644 index 00000000000..5bf41c64b24 --- /dev/null +++ b/tests/baselines/reference/inferTypeArgumentsInSignatureWithRestParameters.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/inferTypeArgumentsInSignatureWithRestParameters.ts === +function f(array: T[], ...args) { } +>f : (array: T[], ...args: any[]) => void +>T : T +>array : T[] +>T : T +>args : any[] + +function g(array: number[], ...args) { } +>g : (array: number[], ...args: any[]) => void +>array : number[] +>args : any[] + +function h(nonarray: T, ...args) { } +>h : (nonarray: T, ...args: any[]) => void +>T : T +>nonarray : T +>T : T +>args : any[] + +function i(array: T[], opt?: any[]) { } +>i : (array: T[], opt?: any[]) => void +>T : T +>array : T[] +>T : T +>opt : any[] + +var a = [1, 2, 3, 4, 5]; +>a : number[] +>[1, 2, 3, 4, 5] : number[] + +f(a); // OK +>f(a) : void +>f : (array: T[], ...args: any[]) => void +>a : number[] + +g(a); // OK +>g(a) : void +>g : (array: number[], ...args: any[]) => void +>a : number[] + +h(a); // OK +>h(a) : void +>h : (nonarray: T, ...args: any[]) => void +>a : number[] + +i(a); // OK +>i(a) : void +>i : (array: T[], opt?: any[]) => void +>a : number[] + diff --git a/tests/baselines/reference/inferentialTypingWithFunctionType.types b/tests/baselines/reference/inferentialTypingWithFunctionType.types new file mode 100644 index 00000000000..9f1986c49ea --- /dev/null +++ b/tests/baselines/reference/inferentialTypingWithFunctionType.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/inferentialTypingWithFunctionType.ts === +declare function map(x: T, f: (s: T) => U): U; +>map : (x: T, f: (s: T) => U) => U +>T : T +>U : U +>x : T +>T : T +>f : (s: T) => U +>s : T +>T : T +>U : U +>U : U + +declare function identity(y: V): V; +>identity : (y: V) => V +>V : V +>y : V +>V : V +>V : V + +var s = map("", identity); +>s : string +>map("", identity) : string +>map : (x: T, f: (s: T) => U) => U +>identity : (y: V) => V + diff --git a/tests/baselines/reference/inferentialTypingWithFunctionType2.types b/tests/baselines/reference/inferentialTypingWithFunctionType2.types new file mode 100644 index 00000000000..a97bf2ab36c --- /dev/null +++ b/tests/baselines/reference/inferentialTypingWithFunctionType2.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/inferentialTypingWithFunctionType2.ts === +function identity(a: A): A { +>identity : (a: A) => A +>A : A +>a : A +>A : A +>A : A + + return a; +>a : A +} +var x = [1, 2, 3].map(identity)[0]; +>x : number +>[1, 2, 3].map(identity)[0] : number +>[1, 2, 3].map(identity) : number[] +>[1, 2, 3].map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>[1, 2, 3] : number[] +>map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>identity : (a: A) => A + diff --git a/tests/baselines/reference/inferentialTypingWithFunctionTypeNested.types b/tests/baselines/reference/inferentialTypingWithFunctionTypeNested.types new file mode 100644 index 00000000000..0596081ade3 --- /dev/null +++ b/tests/baselines/reference/inferentialTypingWithFunctionTypeNested.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/inferentialTypingWithFunctionTypeNested.ts === +declare function map(x: T, f: () => { x: (s: T) => U }): U; +>map : (x: T, f: () => { x: (s: T) => U; }) => U +>T : T +>U : U +>x : T +>T : T +>f : () => { x: (s: T) => U; } +>x : (s: T) => U +>s : T +>T : T +>U : U +>U : U + +declare function identity(y: V): V; +>identity : (y: V) => V +>V : V +>y : V +>V : V +>V : V + +var s = map("", () => { return { x: identity }; }); +>s : any +>map("", () => { return { x: identity }; }) : any +>map : (x: T, f: () => { x: (s: T) => U; }) => U +>() => { return { x: identity }; } : () => { x: (y: V) => V; } +>{ x: identity } : { x: (y: V) => V; } +>x : (y: V) => V +>identity : (y: V) => V + diff --git a/tests/baselines/reference/inferentialTypingWithFunctionTypeSyntacticScenarios.js b/tests/baselines/reference/inferentialTypingWithFunctionTypeSyntacticScenarios.js index 1894150ac27..2f5eea63a8a 100644 --- a/tests/baselines/reference/inferentialTypingWithFunctionTypeSyntacticScenarios.js +++ b/tests/baselines/reference/inferentialTypingWithFunctionTypeSyntacticScenarios.js @@ -35,14 +35,21 @@ s = map("", ("", identity)); //// [inferentialTypingWithFunctionTypeSyntacticScenarios.js] var s; +// dotted name var dottedIdentity = { x: identity }; s = map("", dottedIdentity.x); +// index expression s = map("", dottedIdentity['x']); +// function call s = map("", (function () { return identity; })()); var ic; s = map("", new ic()); +// assignment var t; s = map("", t = identity); +// type assertion s = map("", identity); +// parenthesized expression s = map("", (identity)); +// comma s = map("", ("", identity)); diff --git a/tests/baselines/reference/inferentialTypingWithFunctionTypeSyntacticScenarios.types b/tests/baselines/reference/inferentialTypingWithFunctionTypeSyntacticScenarios.types new file mode 100644 index 00000000000..115da50176f --- /dev/null +++ b/tests/baselines/reference/inferentialTypingWithFunctionTypeSyntacticScenarios.types @@ -0,0 +1,120 @@ +=== tests/cases/compiler/inferentialTypingWithFunctionTypeSyntacticScenarios.ts === +declare function map(array: T, func: (x: T) => U): U; +>map : (array: T, func: (x: T) => U) => U +>T : T +>U : U +>array : T +>T : T +>func : (x: T) => U +>x : T +>T : T +>U : U +>U : U + +declare function identity(y: V): V; +>identity : (y: V) => V +>V : V +>y : V +>V : V +>V : V + +var s: string; +>s : string + +// dotted name +var dottedIdentity = { x: identity }; +>dottedIdentity : { x: (y: V) => V; } +>{ x: identity } : { x: (y: V) => V; } +>x : (y: V) => V +>identity : (y: V) => V + +s = map("", dottedIdentity.x); +>s = map("", dottedIdentity.x) : string +>s : string +>map("", dottedIdentity.x) : string +>map : (array: T, func: (x: T) => U) => U +>dottedIdentity.x : (y: V) => V +>dottedIdentity : { x: (y: V) => V; } +>x : (y: V) => V + +// index expression +s = map("", dottedIdentity['x']); +>s = map("", dottedIdentity['x']) : string +>s : string +>map("", dottedIdentity['x']) : string +>map : (array: T, func: (x: T) => U) => U +>dottedIdentity['x'] : (y: V) => V +>dottedIdentity : { x: (y: V) => V; } + +// function call +s = map("", (() => identity)()); +>s = map("", (() => identity)()) : string +>s : string +>map("", (() => identity)()) : string +>map : (array: T, func: (x: T) => U) => U +>(() => identity)() : (y: V) => V +>(() => identity) : () => (y: V) => V +>() => identity : () => (y: V) => V +>identity : (y: V) => V + +// construct +interface IdentityConstructor { +>IdentityConstructor : IdentityConstructor + + new (): typeof identity; +>identity : (y: V) => V +} +var ic: IdentityConstructor; +>ic : IdentityConstructor +>IdentityConstructor : IdentityConstructor + +s = map("", new ic()); +>s = map("", new ic()) : string +>s : string +>map("", new ic()) : string +>map : (array: T, func: (x: T) => U) => U +>new ic() : (y: V) => V +>ic : IdentityConstructor + +// assignment +var t; +>t : any + +s = map("", t = identity); +>s = map("", t = identity) : string +>s : string +>map("", t = identity) : string +>map : (array: T, func: (x: T) => U) => U +>t = identity : (y: V) => V +>t : any +>identity : (y: V) => V + +// type assertion +s = map("", identity); +>s = map("", identity) : string +>s : string +>map("", identity) : string +>map : (array: T, func: (x: T) => U) => U +>identity : (y: V) => V +>identity : (y: V) => V +>identity : (y: V) => V + +// parenthesized expression +s = map("", (identity)); +>s = map("", (identity)) : string +>s : string +>map("", (identity)) : string +>map : (array: T, func: (x: T) => U) => U +>(identity) : (y: V) => V +>identity : (y: V) => V + +// comma +s = map("", ("", identity)); +>s = map("", ("", identity)) : string +>s : string +>map("", ("", identity)) : string +>map : (array: T, func: (x: T) => U) => U +>("", identity) : (y: V) => V +>"", identity : (y: V) => V +>identity : (y: V) => V + diff --git a/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.js b/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.js index e3150d457c1..35f0928378c 100644 --- a/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.js +++ b/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.js @@ -8,4 +8,4 @@ var i = result[0].x; // number var pair; var zipWith; var result = zipWith([1, 2], ['a', 'b'], pair); -var i = result[0].x; +var i = result[0].x; // number diff --git a/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.types b/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.types new file mode 100644 index 00000000000..11e017d6661 --- /dev/null +++ b/tests/baselines/reference/inferentialTypingWithFunctionTypeZip.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/inferentialTypingWithFunctionTypeZip.ts === +var pair: (x: T) => (y: S) => { x: T; y: S; } +>pair : (x: T) => (y: S) => { x: T; y: S; } +>T : T +>S : S +>x : T +>T : T +>y : S +>S : S +>x : T +>T : T +>y : S +>S : S + +var zipWith: (a: T[], b: S[], f: (x: T) => (y: S) => U) => U[]; +>zipWith : (a: T[], b: S[], f: (x: T) => (y: S) => U) => U[] +>T : T +>S : S +>U : U +>a : T[] +>T : T +>b : S[] +>S : S +>f : (x: T) => (y: S) => U +>x : T +>T : T +>y : S +>S : S +>U : U +>U : U + +var result = zipWith([1, 2], ['a', 'b'], pair); +>result : { x: number; y: {}; }[] +>zipWith([1, 2], ['a', 'b'], pair) : { x: number; y: {}; }[] +>zipWith : (a: T[], b: S[], f: (x: T) => (y: S) => U) => U[] +>[1, 2] : number[] +>['a', 'b'] : {}[] +>pair : (x: T) => (y: S) => { x: T; y: S; } + +var i = result[0].x; // number +>i : number +>result[0].x : number +>result[0] : { x: number; y: {}; } +>result : { x: number; y: {}; }[] +>x : number + diff --git a/tests/baselines/reference/inferentialTypingWithObjectLiteralProperties.js b/tests/baselines/reference/inferentialTypingWithObjectLiteralProperties.js index 970a3f72962..216604dd4d5 100644 --- a/tests/baselines/reference/inferentialTypingWithObjectLiteralProperties.js +++ b/tests/baselines/reference/inferentialTypingWithObjectLiteralProperties.js @@ -10,5 +10,5 @@ f({ x: [1] }, { x: [null] }).x[0] = "" // was error TS2011: Cannot convert 'stri function f(x, y) { return x; } -f({ x: [null] }, { x: [1] }).x[0] = ""; -f({ x: [1] }, { x: [null] }).x[0] = ""; +f({ x: [null] }, { x: [1] }).x[0] = ""; // ok +f({ x: [1] }, { x: [null] }).x[0] = ""; // was error TS2011: Cannot convert 'string' to 'number'. diff --git a/tests/baselines/reference/inferentiallyTypingAnEmptyArray.types b/tests/baselines/reference/inferentiallyTypingAnEmptyArray.types new file mode 100644 index 00000000000..c8f51c985e6 --- /dev/null +++ b/tests/baselines/reference/inferentiallyTypingAnEmptyArray.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/inferentiallyTypingAnEmptyArray.ts === +// April 2014, Section 4.6: +// In the absence of a contextual type, the type of an array literal is C[], where C is the +// Undefined type(section 3.2.6) if the array literal is empty, or the best common type of +// the element expressions if the array literal is not empty. +// When an array literal is contextually typed(section 4.19) by an object type containing a +// numeric index signature of type T, each element expression is contextually typed by T and +// the type of the array literal is the best common type of T and the types of the element +// expressions. +// +// While the spec does not say it, an inferential type causes an empty array literal to have +// the undefined[] type. In other words, the first clause from the excerpt above applies even +// though there is a "contextual type" present. This is the intention, even though the spec +// seems to imply the contrary. +// Therefore, the following access to bar should not cause an error because we infer +// the undefined[] type. +declare function foo(arr: T[]): T; +>foo : (arr: T[]) => T +>T : T +>arr : T[] +>T : T +>T : T + +foo([]).bar; +>foo([]).bar : any +>foo([]) : any +>foo : (arr: T[]) => T +>[] : any[] +>bar : any + diff --git a/tests/baselines/reference/infiniteExpandingTypeThroughInheritanceInstantiation.types b/tests/baselines/reference/infiniteExpandingTypeThroughInheritanceInstantiation.types new file mode 100644 index 00000000000..06416e6b02d --- /dev/null +++ b/tests/baselines/reference/infiniteExpandingTypeThroughInheritanceInstantiation.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/infiniteExpandingTypeThroughInheritanceInstantiation.ts === +interface A +>A : A +>T : T +{ + x: A> +>x : A> +>A : A +>B : B +>T : T +} + +interface B extends A // error +>B : B +>T : T +>A : A +>T : T +{ + x: B> +>x : B> +>B : B +>A : A +>T : T +} + diff --git a/tests/baselines/reference/infiniteExpansionThroughInstantiation.js b/tests/baselines/reference/infiniteExpansionThroughInstantiation.js index 8f6efb4e616..f480f2e784a 100644 --- a/tests/baselines/reference/infiniteExpansionThroughInstantiation.js +++ b/tests/baselines/reference/infiniteExpansionThroughInstantiation.js @@ -25,6 +25,7 @@ function other(x: T) { //// [infiniteExpansionThroughInstantiation.js] +// instantiating a derived type can cause an infinitely expanding type reference to be generated var list; var ownerList; list = ownerList; diff --git a/tests/baselines/reference/infiniteExpansionThroughInstantiation2.js b/tests/baselines/reference/infiniteExpansionThroughInstantiation2.js index e0615a78a7a..147606c12bb 100644 --- a/tests/baselines/reference/infiniteExpansionThroughInstantiation2.js +++ b/tests/baselines/reference/infiniteExpansionThroughInstantiation2.js @@ -12,3 +12,5 @@ interface BB extends AA> } //// [infiniteExpansionThroughInstantiation2.js] +// instantiating a derived type can cause an infinitely expanding type reference to be generated +// which could be used in an assignment check for constraint satisfaction diff --git a/tests/baselines/reference/infiniteExpansionThroughTypeInference.js b/tests/baselines/reference/infiniteExpansionThroughTypeInference.js index 269a4282f53..b5b3f9b85a5 100644 --- a/tests/baselines/reference/infiniteExpansionThroughTypeInference.js +++ b/tests/baselines/reference/infiniteExpansionThroughTypeInference.js @@ -12,5 +12,5 @@ function ff(g: G): void { //// [infiniteExpansionThroughTypeInference.js] function ff(g) { - ff(g); + ff(g); // when infering T here we need to make sure to not descend into the structure of G infinitely } diff --git a/tests/baselines/reference/infiniteExpansionThroughTypeInference.types b/tests/baselines/reference/infiniteExpansionThroughTypeInference.types new file mode 100644 index 00000000000..df818833aa0 --- /dev/null +++ b/tests/baselines/reference/infiniteExpansionThroughTypeInference.types @@ -0,0 +1,30 @@ +=== tests/cases/conformance/types/typeRelationships/recursiveTypes/infiniteExpansionThroughTypeInference.ts === +interface G { +>G : G +>T : T + + x: G> // infinitely expanding type reference +>x : G> +>G : G +>G : G +>T : T + + y: T +>y : T +>T : T +} + +function ff(g: G): void { +>ff : (g: G) => void +>T : T +>g : G +>G : G +>T : T + + ff(g) // when infering T here we need to make sure to not descend into the structure of G infinitely +>ff(g) : void +>ff : (g: G) => void +>g : G +} + + diff --git a/tests/baselines/reference/infinitelyExpandingBaseTypes1.types b/tests/baselines/reference/infinitelyExpandingBaseTypes1.types new file mode 100644 index 00000000000..a1d87a4a807 --- /dev/null +++ b/tests/baselines/reference/infinitelyExpandingBaseTypes1.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/infinitelyExpandingBaseTypes1.ts === +interface A +>A : A +>T : T +{ + x : A> +>x : A> +>A : A +>A : A +>T : T +} + +interface B +>B : B +>T : T +{ + x : B +>x : B +>B : B +>T : T +} + +interface C extends A, B { } +>C : C +>T : T +>A : A +>T : T +>B : B +>T : T + + + diff --git a/tests/baselines/reference/infinitelyExpandingBaseTypes2.types b/tests/baselines/reference/infinitelyExpandingBaseTypes2.types new file mode 100644 index 00000000000..8b258f5b2be --- /dev/null +++ b/tests/baselines/reference/infinitelyExpandingBaseTypes2.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/infinitelyExpandingBaseTypes2.ts === +interface A +>A : A +>T : T +{ + x : A<()=>T> +>x : A<() => T> +>A : A +>T : T +} + +interface B +>B : B +>T : T +{ + x : B<()=>T> +>x : B<() => T> +>B : B +>T : T +} + +var a: A +>a : A +>A : A + +var b: B = a +>b : B +>B : B +>a : A + diff --git a/tests/baselines/reference/infinitelyExpandingTypeAssignability.types b/tests/baselines/reference/infinitelyExpandingTypeAssignability.types new file mode 100644 index 00000000000..c145a60cdf1 --- /dev/null +++ b/tests/baselines/reference/infinitelyExpandingTypeAssignability.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/infinitelyExpandingTypeAssignability.ts === +interface A { +>A : A +>T : T + + x : T +>x : T +>T : T +} + +interface B extends A>>> { } +>B : B +>T : T +>A : A +>B : B +>B : B +>B : B +>T : T + +interface C extends A>>> { } +>C : C +>T : T +>A : A +>C : C +>C : C +>C : C +>T : T + +var x : B +>x : B +>B : B + +var y : C = x +>y : C +>C : C +>x : B + diff --git a/tests/baselines/reference/infinitelyExpandingTypes1.js b/tests/baselines/reference/infinitelyExpandingTypes1.js index d10634d3af0..409c2108579 100644 --- a/tests/baselines/reference/infinitelyExpandingTypes1.js +++ b/tests/baselines/reference/infinitelyExpandingTypes1.js @@ -26,7 +26,7 @@ l == l; // should not error //// [infinitelyExpandingTypes1.js] var l; var m; -l == m; +l == m; // should error var l2; -l == l2; -l == l; +l == l2; // should error; +l == l; // should not error diff --git a/tests/baselines/reference/infinitelyExpandingTypes2.js b/tests/baselines/reference/infinitelyExpandingTypes2.js index 73075e85246..b1eb04b5e0e 100644 --- a/tests/baselines/reference/infinitelyExpandingTypes2.js +++ b/tests/baselines/reference/infinitelyExpandingTypes2.js @@ -21,4 +21,4 @@ function f(p) { console.log(p); } var v = null; -f(v); +f(v); // should not error diff --git a/tests/baselines/reference/infinitelyExpandingTypes3.js b/tests/baselines/reference/infinitelyExpandingTypes3.js index b425a66c7dc..b6e05740ec0 100644 --- a/tests/baselines/reference/infinitelyExpandingTypes3.js +++ b/tests/baselines/reference/infinitelyExpandingTypes3.js @@ -21,4 +21,4 @@ o1 = o2; // should not error //// [infinitelyExpandingTypes3.js] var o1; var o2; -o1 = o2; +o1 = o2; // should not error diff --git a/tests/baselines/reference/infinitelyExpandingTypes3.types b/tests/baselines/reference/infinitelyExpandingTypes3.types new file mode 100644 index 00000000000..b63c8796253 --- /dev/null +++ b/tests/baselines/reference/infinitelyExpandingTypes3.types @@ -0,0 +1,55 @@ +=== tests/cases/compiler/infinitelyExpandingTypes3.ts === +interface List { +>List : List +>T : T + + data: T; +>data : T +>T : T + + next: List; // will be recursive reference when OwnerList is expanded +>next : List +>List : List +>T : T + + owner: OwnerList; +>owner : OwnerList +>OwnerList : OwnerList +>T : T +} + +interface OwnerList extends List> { +>OwnerList : OwnerList +>U : U +>List : List +>List : List +>U : U + + name: string; +>name : string +} + +interface OwnerList2 extends List> { +>OwnerList2 : OwnerList2 +>U : U +>List : List +>List : List +>U : U + + name: string; +>name : string +} + +var o1: OwnerList; +>o1 : OwnerList +>OwnerList : OwnerList + +var o2: OwnerList2; +>o2 : OwnerList2 +>OwnerList2 : OwnerList2 + +o1 = o2; // should not error +>o1 = o2 : OwnerList2 +>o1 : OwnerList +>o2 : OwnerList2 + diff --git a/tests/baselines/reference/infinitelyExpandingTypes4.js b/tests/baselines/reference/infinitelyExpandingTypes4.js index f80c52fc237..34b2ba229b2 100644 --- a/tests/baselines/reference/infinitelyExpandingTypes4.js +++ b/tests/baselines/reference/infinitelyExpandingTypes4.js @@ -27,5 +27,5 @@ q1 = q3; // should not error var q1; var q2; var q3; -q1 = q2; -q1 = q3; +q1 = q2; // should error +q1 = q3; // should not error diff --git a/tests/baselines/reference/infinitelyExpandingTypes4.types b/tests/baselines/reference/infinitelyExpandingTypes4.types new file mode 100644 index 00000000000..7309d709561 --- /dev/null +++ b/tests/baselines/reference/infinitelyExpandingTypes4.types @@ -0,0 +1,75 @@ +=== tests/cases/compiler/infinitelyExpandingTypes4.ts === +interface Query { +>Query : Query +>T : T + + // ... + groupBy(keySelector: (item: T) => K): Query>; +>groupBy : (keySelector: (item: T) => K) => Query> +>K : K +>keySelector : (item: T) => K +>item : T +>T : T +>K : K +>Query : Query +>Grouping : Grouping +>K : K +>T : T + + // ... +} + +interface QueryEnumerator { +>QueryEnumerator : QueryEnumerator +>T : T + + // ... + groupBy(keySelector: (item: T) => K): QueryEnumerator>; +>groupBy : (keySelector: (item: T) => K) => QueryEnumerator> +>K : K +>keySelector : (item: T) => K +>item : T +>T : T +>K : K +>QueryEnumerator : QueryEnumerator +>Grouping : Grouping +>K : K +>T : T + + // ... +} + +interface Grouping extends Query { +>Grouping : Grouping +>K : K +>T : T +>Query : Query +>T : T + + key(): K; +>key : () => K +>K : K +} + +var q1: Query; +>q1 : Query +>Query : Query + +var q2: QueryEnumerator; +>q2 : QueryEnumerator +>QueryEnumerator : QueryEnumerator + +var q3: Query; +>q3 : Query +>Query : Query + +q1 = q2; // should error +>q1 = q2 : QueryEnumerator +>q1 : Query +>q2 : QueryEnumerator + +q1 = q3; // should not error +>q1 = q3 : Query +>q1 : Query +>q3 : Query + diff --git a/tests/baselines/reference/infinitelyExpandingTypes5.types b/tests/baselines/reference/infinitelyExpandingTypes5.types new file mode 100644 index 00000000000..f145ff9539f --- /dev/null +++ b/tests/baselines/reference/infinitelyExpandingTypes5.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/infinitelyExpandingTypes5.ts === +interface Query { +>Query : Query +>T : T + + foo(x: T): Query; +>foo : (x: T) => Query +>x : T +>T : T +>Query : Query +>T : T +} + +interface Enumerator { +>Enumerator : Enumerator +>T : T + + (action: (item: T, index: number) => boolean): boolean; +>action : (item: T, index: number) => boolean +>item : T +>T : T +>index : number +} + +function from(array: T[]): Query; +>from : { (array: T[]): Query; (enumerator: Enumerator): Query; } +>T : T +>array : T[] +>T : T +>Query : Query +>T : T + +function from(enumerator: Enumerator): Query; +>from : { (array: T[]): Query; (enumerator: Enumerator): Query; } +>T : T +>enumerator : Enumerator +>Enumerator : Enumerator +>T : T +>Query : Query +>T : T + +function from(arg: any): any { +>from : { (array: T[]): Query; (enumerator: Enumerator): Query; } +>arg : any + + return undefined; +>undefined : undefined +} + diff --git a/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types b/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types new file mode 100644 index 00000000000..9190ef15779 --- /dev/null +++ b/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types @@ -0,0 +1,56 @@ +=== tests/cases/compiler/infinitelyExpandingTypesNonGenericBase.ts === +class Functionality { +>Functionality : Functionality +>V : V + + property: Options; +>property : Options +>Options : Options +>V : V +} + +class Base { +>Base : Base +} + +class A extends Base { +>A : A +>T : T +>Base : Base + + options: Options[]>; +>options : Options[]> +>Options : Options +>Functionality : Functionality +>T : T +} + +interface OptionsBase { +>OptionsBase : OptionsBase +>T : T + + Options: Options; +>Options : Options +>Options : Options +>T : T +} + +interface Options extends OptionsBase { +>Options : Options +>T : T +>OptionsBase : OptionsBase +>T : T +} + + +function o(type: new () => Base) { +>o : (type: new () => Base) => void +>type : new () => Base +>Base : Base +} + +o(A); +>o(A) : void +>o : (type: new () => Base) => void +>A : typeof A + diff --git a/tests/baselines/reference/infinitelyGenerativeInheritance1.types b/tests/baselines/reference/infinitelyGenerativeInheritance1.types new file mode 100644 index 00000000000..e46262d56bc --- /dev/null +++ b/tests/baselines/reference/infinitelyGenerativeInheritance1.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/infinitelyGenerativeInheritance1.ts === +interface Stack { +>Stack : Stack +>T : T + + pop(): T +>pop : () => T +>T : T + + zip(a: Stack): Stack<{ x: T; y: S }> +>zip : (a: Stack) => Stack<{ x: T; y: S; }> +>S : S +>a : Stack +>Stack : Stack +>S : S +>Stack : Stack +>x : T +>T : T +>y : S +>S : S +} + +interface MyStack extends Stack { +>MyStack : MyStack +>T : T +>Stack : Stack +>T : T + + zip(a: Stack): Stack<{ x: T; y: S }> +>zip : (a: Stack) => Stack<{ x: T; y: S; }> +>S : S +>a : Stack +>Stack : Stack +>S : S +>Stack : Stack +>x : T +>T : T +>y : S +>S : S +} + diff --git a/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types b/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types new file mode 100644 index 00000000000..e8f05ca474d --- /dev/null +++ b/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/inheritSameNamePrivatePropertiesFromSameOrigin.ts === +class B { +>B : B + + private x: number; +>x : number +} +class C extends B { } +>C : C +>B : B + +class C2 extends B { } +>C2 : C2 +>B : B + +interface A extends C, C2 { // ok +>A : A +>C : C +>C2 : C2 + + y: string; +>y : string +} diff --git a/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types b/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types new file mode 100644 index 00000000000..e30d307e943 --- /dev/null +++ b/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/inheritanceMemberFuncOverridingMethod.ts === +class a { +>a : a + + x() { +>x : () => string + + return "10"; + } +} + +class b extends a { +>b : b +>a : a + + x() { +>x : () => string + + return "20"; + } +} diff --git a/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types b/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types new file mode 100644 index 00000000000..d5f846187f8 --- /dev/null +++ b/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/inheritanceMemberPropertyOverridingProperty.ts === +class a { +>a : a + + x: () => string; +>x : () => string +} + +class b extends a { +>b : b +>a : a + + x: () => string; +>x : () => string +} diff --git a/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.js b/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.js index ca5f5c497b8..7c1eb291327 100644 --- a/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.js +++ b/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.js @@ -27,6 +27,6 @@ var B = (function (_super) { return B; })(A); var a = new A(); -var b1 = new B(); -var b2 = new B(); -var b3 = new B(); +var b1 = new B(); // no error +var b2 = new B(); // no error +var b3 = new B(); // error, could not select overload for 'new' expression diff --git a/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types b/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types new file mode 100644 index 00000000000..d18b02ec8d0 --- /dev/null +++ b/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/inheritanceOfGenericConstructorMethod1.ts === +class A { } +>A : A +>T : T + +class B extends A {} +>B : B +>T : T +>A : A +>T : T + +var a = new A(); +>a : A +>new A() : A +>A : typeof A +>Date : Date + +var b1 = new B(); // no error +>b1 : B<{}> +>new B() : B<{}> +>B : typeof B + +var b2: B = new B(); // no error +>b2 : B +>B : B +>Date : Date +>new B() : B +>B : typeof B +>Date : Date + +var b3 = new B(); // error, could not select overload for 'new' expression +>b3 : B +>new B() : B +>B : typeof B +>Date : Date + diff --git a/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.js b/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.js index 0e2fc8c7322..0db872e52dd 100644 --- a/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.js +++ b/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.js @@ -55,7 +55,7 @@ var N; })(M.C2); N.D2 = D2; })(N || (N = {})); -var c = new M.C2(); -var n = new N.D1(); -var n2 = new N.D2(); -var n3 = new N.D2(); +var c = new M.C2(); // no error +var n = new N.D1(); // no error +var n2 = new N.D2(); // error +var n3 = new N.D2(); // no error, D2 diff --git a/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types b/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types new file mode 100644 index 00000000000..2a71136613f --- /dev/null +++ b/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types @@ -0,0 +1,55 @@ +=== tests/cases/compiler/inheritanceOfGenericConstructorMethod2.ts === +module M { +>M : typeof M + + export class C1 { } +>C1 : C1 + + export class C2 { } +>C2 : C2 +>T : T +} +module N { +>N : typeof N + + export class D1 extends M.C1 { } +>D1 : D1 +>M : unknown +>C1 : M.C1 + + export class D2 extends M.C2 { } +>D2 : D2 +>T : T +>M : unknown +>C2 : M.C2 +>T : T +} + +var c = new M.C2(); // no error +>c : M.C2 +>new M.C2() : M.C2 +>M.C2 : typeof M.C2 +>M : typeof M +>C2 : typeof M.C2 + +var n = new N.D1(); // no error +>n : N.D1 +>new N.D1() : N.D1 +>N.D1 : typeof N.D1 +>N : typeof N +>D1 : typeof N.D1 + +var n2 = new N.D2(); // error +>n2 : N.D2 +>new N.D2() : N.D2 +>N.D2 : typeof N.D2 +>N : typeof N +>D2 : typeof N.D2 + +var n3 = new N.D2(); // no error, D2 +>n3 : N.D2<{}> +>new N.D2() : N.D2<{}> +>N.D2 : typeof N.D2 +>N : typeof N +>D2 : typeof N.D2 + diff --git a/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types b/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types new file mode 100644 index 00000000000..ec7b3f5bbf9 --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/inheritanceStaticFuncOverridingMethod.ts === +class a { +>a : a + + static x() { +>x : () => string + + return "10"; + } +} + +class b extends a { +>b : b +>a : a + + static x() { +>x : () => string + + return "20"; + } +} diff --git a/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types b/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types new file mode 100644 index 00000000000..842f9ffddf9 --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/inheritanceStaticFuncOverridingPropertyOfFuncType.ts === +class a { +>a : a + + static x: () => string; +>x : () => string +} + +class b extends a { +>b : b +>a : a + + static x() { +>x : () => string + + return "20"; + } +} diff --git a/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types b/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types new file mode 100644 index 00000000000..4742dde63f6 --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/inheritanceStaticFunctionOverridingInstanceProperty.ts === +class a { +>a : a + + x: string; +>x : string +} + +class b extends a { +>b : b +>a : a + + static x() { +>x : () => string + + return new b().x; +>new b().x : string +>new b() : b +>b : typeof b +>x : string + } +} diff --git a/tests/baselines/reference/inheritanceStaticMembersCompatible.types b/tests/baselines/reference/inheritanceStaticMembersCompatible.types new file mode 100644 index 00000000000..cab8be93785 --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticMembersCompatible.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/inheritanceStaticMembersCompatible.ts === +class a { +>a : a + + static x: a; +>x : a +>a : a +} + +class b extends a { +>b : b +>a : a + + static x: b; +>x : b +>b : b +} diff --git a/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types b/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types new file mode 100644 index 00000000000..958fb6723cc --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/inheritanceStaticPropertyOverridingProperty.ts === +class a { +>a : a + + static x: () => string; +>x : () => string +} + +class b extends a { +>b : b +>a : a + + static x: () => string; +>x : () => string +} diff --git a/tests/baselines/reference/inheritedConstructorWithRestParams.js b/tests/baselines/reference/inheritedConstructorWithRestParams.js index 6ab1f67013c..b924fe25db9 100644 --- a/tests/baselines/reference/inheritedConstructorWithRestParams.js +++ b/tests/baselines/reference/inheritedConstructorWithRestParams.js @@ -37,8 +37,10 @@ var Derived = (function (_super) { } return Derived; })(Base); +// Ok new Derived("", ""); new Derived(""); new Derived(); +// Errors new Derived("", 3); new Derived(3); diff --git a/tests/baselines/reference/inheritedConstructorWithRestParams2.js b/tests/baselines/reference/inheritedConstructorWithRestParams2.js index 2259d10dc15..2c59c91dde7 100644 --- a/tests/baselines/reference/inheritedConstructorWithRestParams2.js +++ b/tests/baselines/reference/inheritedConstructorWithRestParams2.js @@ -65,6 +65,7 @@ var Derived = (function (_super) { } return Derived; })(Base); +// Ok new Derived("", ""); new Derived("", 3); new Derived("", 3, 3); @@ -72,6 +73,7 @@ new Derived("", 3, 3, 3); new Derived("", 3, ""); new Derived("", "", 3); new Derived("", "", 3, 3); +// Errors new Derived(3); new Derived("", 3, "", 3); new Derived("", 3, "", ""); diff --git a/tests/baselines/reference/inheritedFunctionAssignmentCompatibility.types b/tests/baselines/reference/inheritedFunctionAssignmentCompatibility.types new file mode 100644 index 00000000000..c24c0545c3e --- /dev/null +++ b/tests/baselines/reference/inheritedFunctionAssignmentCompatibility.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/inheritedFunctionAssignmentCompatibility.ts === +interface IResultCallback extends Function { } +>IResultCallback : IResultCallback +>Function : Function + +function fn(cb: IResultCallback) { } +>fn : (cb: IResultCallback) => void +>cb : IResultCallback +>IResultCallback : IResultCallback + +fn((a, b) => true); +>fn((a, b) => true) : void +>fn : (cb: IResultCallback) => void +>(a, b) => true : (a: any, b: any) => boolean +>a : any +>b : any + +fn(function (a, b) { return true; }) +>fn(function (a, b) { return true; }) : void +>fn : (cb: IResultCallback) => void +>function (a, b) { return true; } : (a: any, b: any) => boolean +>a : any +>b : any + + diff --git a/tests/baselines/reference/inheritedGenericCallSignature.js b/tests/baselines/reference/inheritedGenericCallSignature.js index 67d653df1ce..2ee6e2149a9 100644 --- a/tests/baselines/reference/inheritedGenericCallSignature.js +++ b/tests/baselines/reference/inheritedGenericCallSignature.js @@ -31,4 +31,4 @@ y.length; // should not error //// [inheritedGenericCallSignature.js] var x; var y = x(undefined); -y.length; +y.length; // should not error diff --git a/tests/baselines/reference/inheritedGenericCallSignature.types b/tests/baselines/reference/inheritedGenericCallSignature.types new file mode 100644 index 00000000000..4382320862b --- /dev/null +++ b/tests/baselines/reference/inheritedGenericCallSignature.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/inheritedGenericCallSignature.ts === + +interface I1 { +>I1 : I1 +>T : T + + (a: T): T; +>a : T +>T : T +>T : T + +} + + +interface Object {} +>Object : Object + + + +interface I2 extends I1 { +>I2 : I2 +>T : T +>I1 : I1 +>T : T + + b: T; +>b : T +>T : T + +} + + + +var x: I2; +>x : I2 +>I2 : I2 +>Date : Date + + + +var y = x(undefined); +>y : Date[] +>x(undefined) : Date[] +>x : I2 +>undefined : undefined + +y.length; // should not error +>y.length : number +>y : Date[] +>length : number + diff --git a/tests/baselines/reference/inheritedMembersAndIndexSignaturesFromDifferentBases.errors.txt b/tests/baselines/reference/inheritedMembersAndIndexSignaturesFromDifferentBases.errors.txt index bd746054763..d02ddfbb148 100644 --- a/tests/baselines/reference/inheritedMembersAndIndexSignaturesFromDifferentBases.errors.txt +++ b/tests/baselines/reference/inheritedMembersAndIndexSignaturesFromDifferentBases.errors.txt @@ -25,16 +25,16 @@ interface F extends A, B, E { } // error because 0 is not a subtype of {a; b;} ~ -!!! Property '0' of type '{}' is not assignable to numeric index type '{ a: any; b: any; }'. - ~ !!! Property '0' of type '{}' is not assignable to string index type '{ a: any; }'. + ~ +!!! Property '0' of type '{}' is not assignable to numeric index type '{ a: any; b: any; }'. interface G extends A, B, C, E { } // should only report one error ~ -!!! Property '0' of type '{}' is not assignable to numeric index type '{ a: any; b: any; }'. - ~ !!! Property '0' of type '{}' is not assignable to string index type '{ a: any; }'. ~ !!! Property 'm' of type '{}' is not assignable to string index type '{ a: any; }'. + ~ +!!! Property '0' of type '{}' is not assignable to numeric index type '{ a: any; b: any; }'. interface H extends A, F { } // Should report no error at all because error is internal to F \ No newline at end of file diff --git a/tests/baselines/reference/inheritedMembersAndIndexSignaturesFromDifferentBases2.types b/tests/baselines/reference/inheritedMembersAndIndexSignaturesFromDifferentBases2.types new file mode 100644 index 00000000000..2899e964efd --- /dev/null +++ b/tests/baselines/reference/inheritedMembersAndIndexSignaturesFromDifferentBases2.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/inheritedMembersAndIndexSignaturesFromDifferentBases2.ts === +interface A { +>A : A +>T : T + + [n: number]: T; +>n : number +>T : T +} + +interface B { +>B : B + + foo: number; +>foo : number +} + +interface C extends B, A { } // Should succeed +>C : C +>B : B +>A : A + diff --git a/tests/baselines/reference/inheritedOverloadedSpecializedSignatures.js b/tests/baselines/reference/inheritedOverloadedSpecializedSignatures.js index 54089541fd3..792c9232fa2 100644 --- a/tests/baselines/reference/inheritedOverloadedSpecializedSignatures.js +++ b/tests/baselines/reference/inheritedOverloadedSpecializedSignatures.js @@ -38,8 +38,10 @@ var x5: void = b('A0'); //// [inheritedOverloadedSpecializedSignatures.js] var b; +// Should not error b('foo').charAt(0); var b; +// non of these lines should error var x1 = b('B2'); var x2 = b('B1'); var x3 = b('A2'); diff --git a/tests/baselines/reference/inheritedOverloadedSpecializedSignatures.types b/tests/baselines/reference/inheritedOverloadedSpecializedSignatures.types new file mode 100644 index 00000000000..0284fa4bc43 --- /dev/null +++ b/tests/baselines/reference/inheritedOverloadedSpecializedSignatures.types @@ -0,0 +1,90 @@ +=== tests/cases/compiler/inheritedOverloadedSpecializedSignatures.ts === +interface A { +>A : A + + (key:string):void; +>key : string +} + +interface B extends A { +>B : B +>A : A + + (key:'foo'):string; +>key : 'foo' +} + +var b:B; +>b : B +>B : B + +// Should not error +b('foo').charAt(0); +>b('foo').charAt(0) : string +>b('foo').charAt : (pos: number) => string +>b('foo') : string +>b : B +>charAt : (pos: number) => string + +interface A { +>A : A + + (x: 'A1'): string; +>x : 'A1' + + (x: string): void; +>x : string +} + +interface B extends A { +>B : B +>A : A + + (x: 'B1'): number; +>x : 'B1' +} + +interface A { +>A : A + + (x: 'A2'): boolean; +>x : 'A2' +} + +interface B { +>B : B + + (x: 'B2'): string[]; +>x : 'B2' +} + +var b: B; +>b : B +>B : B + +// non of these lines should error +var x1: string[] = b('B2'); +>x1 : string[] +>b('B2') : string[] +>b : B + +var x2: number = b('B1'); +>x2 : number +>b('B1') : number +>b : B + +var x3: boolean = b('A2'); +>x3 : boolean +>b('A2') : boolean +>b : B + +var x4: string = b('A1'); +>x4 : string +>b('A1') : string +>b : B + +var x5: void = b('A0'); +>x5 : void +>b('A0') : void +>b : B + diff --git a/tests/baselines/reference/initializersWidened.js b/tests/baselines/reference/initializersWidened.js index d16b6ec6889..fce0750a600 100644 --- a/tests/baselines/reference/initializersWidened.js +++ b/tests/baselines/reference/initializersWidened.js @@ -5,5 +5,6 @@ var x = null; var y = undefined; //// [initializersWidened.js] +// these are widened to any at the point of assignment var x = null; var y = undefined; diff --git a/tests/baselines/reference/initializersWidened.types b/tests/baselines/reference/initializersWidened.types new file mode 100644 index 00000000000..f09d43115c5 --- /dev/null +++ b/tests/baselines/reference/initializersWidened.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/types/typeRelationships/widenedTypes/initializersWidened.ts === +// these are widened to any at the point of assignment + +var x = null; +>x : any + +var y = undefined; +>y : any +>undefined : undefined + diff --git a/tests/baselines/reference/innerAliases2.types b/tests/baselines/reference/innerAliases2.types new file mode 100644 index 00000000000..ee8c18f93b4 --- /dev/null +++ b/tests/baselines/reference/innerAliases2.types @@ -0,0 +1,45 @@ +=== tests/cases/compiler/innerAliases2.ts === +module _provider { +>_provider : typeof _provider + + export class UsefulClass { +>UsefulClass : UsefulClass + + public foo() { +>foo : () => void + } + } +} + +module consumer { +>consumer : typeof consumer + + import provider = _provider; +>provider : typeof provider +>_provider : typeof provider + + var g:provider.UsefulClass= null; +>g : provider.UsefulClass +>provider : unknown +>UsefulClass : provider.UsefulClass + + function use():provider.UsefulClass { +>use : () => provider.UsefulClass +>provider : unknown +>UsefulClass : provider.UsefulClass + + var p2:provider.UsefulClass= new provider.UsefulClass(); +>p2 : provider.UsefulClass +>provider : unknown +>UsefulClass : provider.UsefulClass +>new provider.UsefulClass() : provider.UsefulClass +>provider.UsefulClass : typeof provider.UsefulClass +>provider : typeof provider +>UsefulClass : typeof provider.UsefulClass + + return p2; +>p2 : provider.UsefulClass + } +} + + diff --git a/tests/baselines/reference/innerBoundLambdaEmit.types b/tests/baselines/reference/innerBoundLambdaEmit.types new file mode 100644 index 00000000000..d68e6e81cb6 --- /dev/null +++ b/tests/baselines/reference/innerBoundLambdaEmit.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/innerBoundLambdaEmit.ts === +module M { +>M : typeof M + + export class Foo { +>Foo : Foo + } + var bar = () => { }; +>bar : () => void +>() => { } : () => void +} +interface Array { +>Array : T[] +>T : T + + toFoo(): M.Foo +>toFoo : () => M.Foo +>M : unknown +>Foo : M.Foo +} + diff --git a/tests/baselines/reference/innerExtern.types b/tests/baselines/reference/innerExtern.types new file mode 100644 index 00000000000..17ef88427b3 --- /dev/null +++ b/tests/baselines/reference/innerExtern.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/innerExtern.ts === +module A { +>A : typeof A + + export declare module BB { +>BB : typeof BB + + export var Elephant; +>Elephant : any + } + export module B { +>B : typeof B + + export class C { +>C : C + + x = BB.Elephant.X; +>x : any +>BB.Elephant.X : any +>BB.Elephant : any +>BB : typeof BB +>Elephant : any +>X : any + } + } +} + + + diff --git a/tests/baselines/reference/innerFunc.types b/tests/baselines/reference/innerFunc.types new file mode 100644 index 00000000000..8ca9e9d0a0b --- /dev/null +++ b/tests/baselines/reference/innerFunc.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/innerFunc.ts === +function salt() { +>salt : () => number + + function pepper() { return 5;} +>pepper : () => number + + return pepper(); +>pepper() : number +>pepper : () => number +} + +module M { +>M : typeof M + + export function tungsten() { +>tungsten : () => number + + function oxygen() { return 6; }; +>oxygen : () => number + + return oxygen(); +>oxygen() : number +>oxygen : () => number + } +} + diff --git a/tests/baselines/reference/innerOverloads.js b/tests/baselines/reference/innerOverloads.js index 3249ca0da26..184b644406e 100644 --- a/tests/baselines/reference/innerOverloads.js +++ b/tests/baselines/reference/innerOverloads.js @@ -19,4 +19,4 @@ function outer() { } return inner(0); } -var x = outer(); +var x = outer(); // should work diff --git a/tests/baselines/reference/innerOverloads.types b/tests/baselines/reference/innerOverloads.types new file mode 100644 index 00000000000..7168f6161f3 --- /dev/null +++ b/tests/baselines/reference/innerOverloads.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/innerOverloads.ts === + +function outer() { +>outer : () => any + + function inner(x:number); // should work +>inner : { (x: number): any; (x: string): any; } +>x : number + + function inner(x:string); +>inner : { (x: number): any; (x: string): any; } +>x : string + + function inner(a:any) { return a; } +>inner : { (x: number): any; (x: string): any; } +>a : any +>a : any + + return inner(0); +>inner(0) : any +>inner : { (x: number): any; (x: string): any; } +} + +var x = outer(); // should work +>x : any +>outer() : any +>outer : () => any + + diff --git a/tests/baselines/reference/innerTypeArgumentInference.types b/tests/baselines/reference/innerTypeArgumentInference.types new file mode 100644 index 00000000000..759b78aa75f --- /dev/null +++ b/tests/baselines/reference/innerTypeArgumentInference.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/innerTypeArgumentInference.ts === +interface Generator { (): T; } +>Generator : Generator +>T : T +>T : T + +function Generate(func: Generator): U { +>Generate : (func: Generator) => U +>U : U +>func : Generator +>Generator : Generator +>U : U +>U : U + + return Generate(func); +>Generate(func) : U +>Generate : (func: Generator) => U +>func : Generator +} diff --git a/tests/baselines/reference/innerTypeCheckOfLambdaArgument.js b/tests/baselines/reference/innerTypeCheckOfLambdaArgument.js index af530635e5e..ebe38a18f82 100644 --- a/tests/baselines/reference/innerTypeCheckOfLambdaArgument.js +++ b/tests/baselines/reference/innerTypeCheckOfLambdaArgument.js @@ -17,5 +17,7 @@ takesCallback( function takesCallback(callback) { } takesCallback(function inner(n) { + // this line should raise an error + // otherwise, there's a bug in overload resolution / partial typechecking var k = 10; }); diff --git a/tests/baselines/reference/innerTypeParameterShadowingOuterOne.js b/tests/baselines/reference/innerTypeParameterShadowingOuterOne.js index 5561c8f0143..81ed990532c 100644 --- a/tests/baselines/reference/innerTypeParameterShadowingOuterOne.js +++ b/tests/baselines/reference/innerTypeParameterShadowingOuterOne.js @@ -29,6 +29,8 @@ function f2() { //} //// [innerTypeParameterShadowingOuterOne.js] +// inner type parameters shadow outer ones of the same name +// no errors expected function f() { function g() { var x; diff --git a/tests/baselines/reference/innerTypeParameterShadowingOuterOne.types b/tests/baselines/reference/innerTypeParameterShadowingOuterOne.types new file mode 100644 index 00000000000..eb1ffb17217 --- /dev/null +++ b/tests/baselines/reference/innerTypeParameterShadowingOuterOne.types @@ -0,0 +1,77 @@ +=== tests/cases/conformance/types/typeParameters/typeParameterLists/innerTypeParameterShadowingOuterOne.ts === +// inner type parameters shadow outer ones of the same name +// no errors expected + +function f() { +>f : () => void +>T : T +>Date : Date + + function g() { +>g : () => void +>T : T +>Number : Number + + var x: T; +>x : T +>T : T + + x.toFixed(); +>x.toFixed() : string +>x.toFixed : (fractionDigits?: number) => string +>x : T +>toFixed : (fractionDigits?: number) => string + } + var x: T; +>x : T +>T : T + + x.getDate(); +>x.getDate() : number +>x.getDate : () => number +>x : T +>getDate : () => number +} + +function f2() { +>f2 : () => void +>T : T +>Date : Date +>U : U +>Date : Date + + function g() { +>g : () => void +>T : T +>Number : Number +>U : U +>Number : Number + + var x: U; +>x : U +>U : U + + x.toFixed(); +>x.toFixed() : string +>x.toFixed : (fractionDigits?: number) => string +>x : U +>toFixed : (fractionDigits?: number) => string + } + var x: U; +>x : U +>U : U + + x.getDate(); +>x.getDate() : number +>x.getDate : () => number +>x : U +>getDate : () => number +} +//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 25422256d94..8a5a9448f18 100644 --- a/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.js +++ b/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.js @@ -38,6 +38,8 @@ class C2 { //} //// [innerTypeParameterShadowingOuterOne2.js] +// inner type parameters shadow outer ones of the same name +// no errors expected var C = (function () { function C() { } diff --git a/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.types b/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.types new file mode 100644 index 00000000000..08e19fe7f1e --- /dev/null +++ b/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.types @@ -0,0 +1,90 @@ +=== tests/cases/conformance/types/typeParameters/typeParameterLists/innerTypeParameterShadowingOuterOne2.ts === +// inner type parameters shadow outer ones of the same name +// no errors expected + +class C { +>C : C +>T : T +>Date : Date + + g() { +>g : () => void +>T : T +>Number : Number + + var x: T; +>x : T +>T : T + + x.toFixed(); +>x.toFixed() : string +>x.toFixed : (fractionDigits?: number) => string +>x : T +>toFixed : (fractionDigits?: number) => string + } + + h() { +>h : () => void + + var x: T; +>x : T +>T : T + + x.getDate(); +>x.getDate() : number +>x.getDate : () => number +>x : T +>getDate : () => number + } +} + +class C2 { +>C2 : C2 +>T : T +>Date : Date +>U : U +>Date : Date + + g() { +>g : () => void +>T : T +>Number : Number +>U : U +>Number : Number + + var x: U; +>x : U +>U : U + + x.toFixed(); +>x.toFixed() : string +>x.toFixed : (fractionDigits?: number) => string +>x : U +>toFixed : (fractionDigits?: number) => string + } + + h() { +>h : () => void + + var x: U; +>x : U +>U : U + + x.getDate(); +>x.getDate() : number +>x.getDate : () => number +>x : U +>getDate : () => number + } +} +//class C2 { +// g() { +// var x: U; +// x.toFixed(); +// } + +// h() { +// var x: U; +// x.getDate(); +// } +//} diff --git a/tests/baselines/reference/instanceAndStaticDeclarations1.js b/tests/baselines/reference/instanceAndStaticDeclarations1.js index 02a54b12124..1396e2bcfa8 100644 --- a/tests/baselines/reference/instanceAndStaticDeclarations1.js +++ b/tests/baselines/reference/instanceAndStaticDeclarations1.js @@ -13,6 +13,7 @@ class Point { } //// [instanceAndStaticDeclarations1.js] +// from spec var Point = (function () { function Point(x, y) { this.x = x; diff --git a/tests/baselines/reference/instanceAndStaticDeclarations1.types b/tests/baselines/reference/instanceAndStaticDeclarations1.types new file mode 100644 index 00000000000..c80cf78e37a --- /dev/null +++ b/tests/baselines/reference/instanceAndStaticDeclarations1.types @@ -0,0 +1,65 @@ +=== tests/cases/compiler/instanceAndStaticDeclarations1.ts === +// from spec + +class Point { +>Point : Point + + constructor(public x: number, public y: number) { } +>x : number +>y : number + + public distance(p: Point) { +>distance : (p: Point) => number +>p : Point +>Point : Point + + var dx = this.x - p.x; +>dx : number +>this.x - p.x : number +>this.x : number +>this : Point +>x : number +>p.x : number +>p : Point +>x : number + + var dy = this.y - p.y; +>dy : number +>this.y - p.y : number +>this.y : number +>this : Point +>y : number +>p.y : number +>p : Point +>y : number + + return Math.sqrt(dx * dx + dy * dy); +>Math.sqrt(dx * dx + dy * dy) : number +>Math.sqrt : (x: number) => number +>Math : Math +>sqrt : (x: number) => number +>dx * dx + dy * dy : number +>dx * dx : number +>dx : number +>dx : number +>dy * dy : number +>dy : number +>dy : number + } + static origin = new Point(0, 0); +>origin : Point +>new Point(0, 0) : Point +>Point : typeof Point + + static distance(p1: Point, p2: Point) { return p1.distance(p2); } +>distance : (p1: Point, p2: Point) => number +>p1 : Point +>Point : Point +>p2 : Point +>Point : Point +>p1.distance(p2) : number +>p1.distance : (p: Point) => number +>p1 : Point +>distance : (p: Point) => number +>p2 : Point +} diff --git a/tests/baselines/reference/instanceMemberAssignsToClassPrototype.js b/tests/baselines/reference/instanceMemberAssignsToClassPrototype.js index 8ba9f1ea983..79535360b7a 100644 --- a/tests/baselines/reference/instanceMemberAssignsToClassPrototype.js +++ b/tests/baselines/reference/instanceMemberAssignsToClassPrototype.js @@ -22,9 +22,9 @@ var C = (function () { }; C.prototype.bar = function (x) { C.prototype.bar = function () { - }; - C.prototype.bar = function (x) { return x; }; - C.prototype.bar = function (x) { return 1; }; + }; // error + C.prototype.bar = function (x) { return x; }; // ok + C.prototype.bar = function (x) { return 1; }; // ok return 1; }; return C; diff --git a/tests/baselines/reference/instanceMemberInitialization.types b/tests/baselines/reference/instanceMemberInitialization.types new file mode 100644 index 00000000000..5e9d7df3706 --- /dev/null +++ b/tests/baselines/reference/instanceMemberInitialization.types @@ -0,0 +1,34 @@ +=== tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberInitialization.ts === +class C { +>C : C + + x = 1; +>x : number +} + +var c = new C(); +>c : C +>new C() : C +>C : typeof C + +c.x = 3; +>c.x = 3 : number +>c.x : number +>c : C +>x : number + +var c2 = new C(); +>c2 : C +>new C() : C +>C : typeof C + +var r = c.x === c2.x; +>r : boolean +>c.x === c2.x : boolean +>c.x : number +>c : C +>x : number +>c2.x : number +>c2 : C +>x : number + diff --git a/tests/baselines/reference/instanceOfInExternalModules.types b/tests/baselines/reference/instanceOfInExternalModules.types new file mode 100644 index 00000000000..6e2eb8c77aa --- /dev/null +++ b/tests/baselines/reference/instanceOfInExternalModules.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/instanceOfInExternalModules_1.ts === +/// +import Bar = require("instanceOfInExternalModules_require"); +>Bar : typeof Bar + +function IsFoo(value: any): boolean { +>IsFoo : (value: any) => boolean +>value : any + + return value instanceof Bar.Foo; +>value instanceof Bar.Foo : boolean +>value : any +>Bar.Foo : typeof Bar.Foo +>Bar : typeof Bar +>Foo : typeof Bar.Foo +} + +=== tests/cases/compiler/instanceOfInExternalModules_require.ts === +export class Foo { foo: string; } +>Foo : Foo +>foo : string + diff --git a/tests/baselines/reference/instanceSubtypeCheck1.types b/tests/baselines/reference/instanceSubtypeCheck1.types new file mode 100644 index 00000000000..f5c127e0025 --- /dev/null +++ b/tests/baselines/reference/instanceSubtypeCheck1.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/instanceSubtypeCheck1.ts === +interface A +>A : A +>T : T +{ + x: A> +>x : A> +>A : A +>B : B +>T : T +} + +interface B extends A +>B : B +>T : T +>A : A +>T : T +{ + x: B> +>x : B> +>B : B +>A : A +>T : T +} diff --git a/tests/baselines/reference/instanceofOperator.js b/tests/baselines/reference/instanceofOperator.js index d973550d6af..7620c3e83f4 100644 --- a/tests/baselines/reference/instanceofOperator.js +++ b/tests/baselines/reference/instanceofOperator.js @@ -23,6 +23,10 @@ undefined instanceof undefined; //// [instanceofOperator.js] +// Spec: +// The instanceof operator requires the left operand to be of type Any or an object type, and the right +// operand to be of type Any or a subtype of the ‘Function’ interface type. The result is always of the +// Boolean primitive type. var Object = (function () { function Object() { } @@ -30,8 +34,10 @@ var Object = (function () { })(); var obj; 4 instanceof null; +// Error and should be error obj instanceof 4; Object instanceof obj; +// Error on left hand side null instanceof null; obj instanceof Object; undefined instanceof undefined; diff --git a/tests/baselines/reference/instanceofOperatorWithAny.types b/tests/baselines/reference/instanceofOperatorWithAny.types new file mode 100644 index 00000000000..e53aa2d75ca --- /dev/null +++ b/tests/baselines/reference/instanceofOperatorWithAny.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithAny.ts === +var a: any; +>a : any + +var r: boolean = a instanceof a; +>r : boolean +>a instanceof a : boolean +>a : any +>a : any + diff --git a/tests/baselines/reference/instanceofOperatorWithInvalidOperands.js b/tests/baselines/reference/instanceofOperatorWithInvalidOperands.js index 0089ac167bc..8309b7e7c01 100644 --- a/tests/baselines/reference/instanceofOperatorWithInvalidOperands.js +++ b/tests/baselines/reference/instanceofOperatorWithInvalidOperands.js @@ -55,6 +55,8 @@ var C = (function () { return C; })(); var x; +// invalid left operand +// the left operand is required to be of type Any, an object type, or a type parameter type var a1; var a2; var a3; @@ -68,6 +70,8 @@ var ra6 = true instanceof x; var ra7 = '' instanceof x; var ra8 = null instanceof x; var ra9 = undefined instanceof x; +// invalid right operand +// the right operand to be of type Any or a subtype of the 'Function' interface type var b1; var b2; var b3; @@ -85,4 +89,5 @@ var rb7 = x instanceof ''; var rb8 = x instanceof o1; var rb9 = x instanceof o2; var rb10 = x instanceof o3; +// both operands are invalid var rc1 = '' instanceof {}; diff --git a/tests/baselines/reference/instanceofOperatorWithLHSIsObject.types b/tests/baselines/reference/instanceofOperatorWithLHSIsObject.types new file mode 100644 index 00000000000..26aea98028e --- /dev/null +++ b/tests/baselines/reference/instanceofOperatorWithLHSIsObject.types @@ -0,0 +1,40 @@ +=== tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithLHSIsObject.ts === +class C { } +>C : C + +var x1: any; +>x1 : any + +var x2: Function; +>x2 : Function +>Function : Function + +var a: {}; +>a : {} + +var b: Object; +>b : Object +>Object : Object + +var c: C; +>c : C +>C : C + +var r1 = a instanceof x1; +>r1 : boolean +>a instanceof x1 : boolean +>a : {} +>x1 : any + +var r2 = b instanceof x2; +>r2 : boolean +>b instanceof x2 : boolean +>b : Object +>x2 : Function + +var r3 = c instanceof x1; +>r3 : boolean +>c instanceof x1 : boolean +>c : C +>x1 : any + diff --git a/tests/baselines/reference/instanceofOperatorWithLHSIsTypeParameter.types b/tests/baselines/reference/instanceofOperatorWithLHSIsTypeParameter.types new file mode 100644 index 00000000000..d10c6c5cafa --- /dev/null +++ b/tests/baselines/reference/instanceofOperatorWithLHSIsTypeParameter.types @@ -0,0 +1,16 @@ +=== tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithLHSIsTypeParameter.ts === +function foo(t: T) { +>foo : (t: T) => void +>T : T +>t : T +>T : T + + var x: any; +>x : any + + var r = t instanceof x; +>r : boolean +>t instanceof x : boolean +>t : T +>x : any +} diff --git a/tests/baselines/reference/instanceofOperatorWithRHSIsSubtypeOfFunction.types b/tests/baselines/reference/instanceofOperatorWithRHSIsSubtypeOfFunction.types new file mode 100644 index 00000000000..2bcf91bb1ab --- /dev/null +++ b/tests/baselines/reference/instanceofOperatorWithRHSIsSubtypeOfFunction.types @@ -0,0 +1,57 @@ +=== tests/cases/conformance/expressions/binaryOperators/instanceofOperator/instanceofOperatorWithRHSIsSubtypeOfFunction.ts === +interface I extends Function { } +>I : I +>Function : Function + +var x: any; +>x : any + +var f1: Function; +>f1 : Function +>Function : Function + +var f2: I; +>f2 : I +>I : I + +var f3: { (): void }; +>f3 : () => void + +var f4: { new (): number }; +>f4 : new () => number + +var r1 = x instanceof f1; +>r1 : boolean +>x instanceof f1 : boolean +>x : any +>f1 : Function + +var r2 = x instanceof f2; +>r2 : boolean +>x instanceof f2 : boolean +>x : any +>f2 : I + +var r3 = x instanceof f3; +>r3 : boolean +>x instanceof f3 : boolean +>x : any +>f3 : () => void + +var r4 = x instanceof f4; +>r4 : boolean +>x instanceof f4 : boolean +>x : any +>f4 : new () => number + +var r5 = x instanceof null; +>r5 : boolean +>x instanceof null : boolean +>x : any + +var r6 = x instanceof undefined; +>r6 : boolean +>x instanceof undefined : boolean +>x : any +>undefined : undefined + diff --git a/tests/baselines/reference/instantiateGenericClassWithWrongNumberOfTypeArguments.js b/tests/baselines/reference/instantiateGenericClassWithWrongNumberOfTypeArguments.js index 5a83ab54f06..0602aec2dc1 100644 --- a/tests/baselines/reference/instantiateGenericClassWithWrongNumberOfTypeArguments.js +++ b/tests/baselines/reference/instantiateGenericClassWithWrongNumberOfTypeArguments.js @@ -17,6 +17,8 @@ class D { var d = new D(); //// [instantiateGenericClassWithWrongNumberOfTypeArguments.js] +// it is always an error to provide a type argument list whose count does not match the type parameter list +// both of these attempts to construct a type is an error var C = (function () { function C() { } @@ -28,4 +30,5 @@ var D = (function () { } return D; })(); +// BUG 794238 var d = new D(); diff --git a/tests/baselines/reference/instantiateGenericClassWithZeroTypeArguments.js b/tests/baselines/reference/instantiateGenericClassWithZeroTypeArguments.js index 11074248766..4ded030922a 100644 --- a/tests/baselines/reference/instantiateGenericClassWithZeroTypeArguments.js +++ b/tests/baselines/reference/instantiateGenericClassWithZeroTypeArguments.js @@ -16,6 +16,7 @@ var d = new D(); //// [instantiateGenericClassWithZeroTypeArguments.js] +// no errors expected when instantiating a generic type with no type arguments provided var C = (function () { function C() { } diff --git a/tests/baselines/reference/instantiateGenericClassWithZeroTypeArguments.types b/tests/baselines/reference/instantiateGenericClassWithZeroTypeArguments.types new file mode 100644 index 00000000000..0fe962e9c8f --- /dev/null +++ b/tests/baselines/reference/instantiateGenericClassWithZeroTypeArguments.types @@ -0,0 +1,36 @@ +=== tests/cases/conformance/types/typeParameters/typeArgumentLists/instantiateGenericClassWithZeroTypeArguments.ts === +// no errors expected when instantiating a generic type with no type arguments provided + +class C { +>C : C +>T : T + + x: T; +>x : T +>T : T +} + +var c = new C(); +>c : C<{}> +>new C() : C<{}> +>C : typeof C + +class D { +>D : D +>T : T +>U : U + + x: T +>x : T +>T : T + + y: U +>y : U +>U : U +} + +var d = new D(); +>d : D<{}, {}> +>new D() : D<{}, {}> +>D : typeof D + diff --git a/tests/baselines/reference/instantiateNonGenericTypeWithTypeArguments.js b/tests/baselines/reference/instantiateNonGenericTypeWithTypeArguments.js index 5faaaea027d..15e4239eb0a 100644 --- a/tests/baselines/reference/instantiateNonGenericTypeWithTypeArguments.js +++ b/tests/baselines/reference/instantiateNonGenericTypeWithTypeArguments.js @@ -19,6 +19,8 @@ var a: any; var r2 = new a(); //// [instantiateNonGenericTypeWithTypeArguments.js] +// it is an error to provide type arguments to a non-generic call +// all of these are errors var C = (function () { function C() { } @@ -31,4 +33,5 @@ var r = new Foo(); var f; var r2 = new f(); var a; +// BUG 790977 var r2 = new a(); diff --git a/tests/baselines/reference/instantiatedModule.js b/tests/baselines/reference/instantiatedModule.js index ab5081c7797..21411e09ff1 100644 --- a/tests/baselines/reference/instantiatedModule.js +++ b/tests/baselines/reference/instantiatedModule.js @@ -61,10 +61,12 @@ var p3 = m3.Color.Blue; //// [instantiatedModule.js] +// adding the var makes this an instantiated module var M; (function (M) { M.Point = 1; })(M || (M = {})); +// primary expression var m; var m = M; var a1; @@ -72,6 +74,8 @@ var a1 = M.Point; var a1 = m.Point; var p1; var p1; +// making the point a class instead of an interface +// makes this an instantiated mmodule var M2; (function (M2) { var Point = (function () { @@ -86,6 +90,7 @@ var M2; })(M2 || (M2 = {})); var m2; var m2 = M2; +// static side of the class var a2; var a2 = m2.Point; var a2 = M2.Point; diff --git a/tests/baselines/reference/instantiatedModule.types b/tests/baselines/reference/instantiatedModule.types new file mode 100644 index 00000000000..b3f4dc0d5a1 --- /dev/null +++ b/tests/baselines/reference/instantiatedModule.types @@ -0,0 +1,197 @@ +=== tests/cases/conformance/internalModules/moduleDeclarations/instantiatedModule.ts === +// adding the var makes this an instantiated module + +module M { +>M : typeof M + + export interface Point { x: number; y: number } +>Point : Point +>x : number +>y : number + + export var Point = 1; +>Point : number +} + +// primary expression +var m: typeof M; +>m : typeof M +>M : typeof M + +var m = M; +>m : typeof M +>M : typeof M + +var a1: number; +>a1 : number + +var a1 = M.Point; +>a1 : number +>M.Point : number +>M : typeof M +>Point : number + +var a1 = m.Point; +>a1 : number +>m.Point : number +>m : typeof M +>Point : number + +var p1: { x: number; y: number; } +>p1 : { x: number; y: number; } +>x : number +>y : number + +var p1: M.Point; +>p1 : { x: number; y: number; } +>M : unknown +>Point : M.Point + +// making the point a class instead of an interface +// makes this an instantiated mmodule +module M2 { +>M2 : typeof M2 + + export class Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + + static Origin(): Point { +>Origin : () => Point +>Point : Point + + return { x: 0, y: 0 }; +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + } + } +} + +var m2: typeof M2; +>m2 : typeof M2 +>M2 : typeof M2 + +var m2 = M2; +>m2 : typeof M2 +>M2 : typeof M2 + +// static side of the class +var a2: typeof M2.Point; +>a2 : typeof M2.Point +>M2 : typeof M2 +>Point : typeof M2.Point + +var a2 = m2.Point; +>a2 : typeof M2.Point +>m2.Point : typeof M2.Point +>m2 : typeof M2 +>Point : typeof M2.Point + +var a2 = M2.Point; +>a2 : typeof M2.Point +>M2.Point : typeof M2.Point +>M2 : typeof M2 +>Point : typeof M2.Point + +var o: M2.Point = a2.Origin(); +>o : M2.Point +>M2 : unknown +>Point : M2.Point +>a2.Origin() : M2.Point +>a2.Origin : () => M2.Point +>a2 : typeof M2.Point +>Origin : () => M2.Point + +var p2: { x: number; y: number } +>p2 : { x: number; y: number; } +>x : number +>y : number + +var p2: M2.Point; +>p2 : { x: number; y: number; } +>M2 : unknown +>Point : M2.Point + +var p2 = new m2.Point(); +>p2 : { x: number; y: number; } +>new m2.Point() : M2.Point +>m2.Point : typeof M2.Point +>m2 : typeof M2 +>Point : typeof M2.Point + +var p2 = new M2.Point(); +>p2 : { x: number; y: number; } +>new M2.Point() : M2.Point +>M2.Point : typeof M2.Point +>M2 : typeof M2 +>Point : typeof M2.Point + +module M3 { +>M3 : typeof M3 + + export enum Color { Blue, Red } +>Color : Color +>Blue : Color +>Red : Color +} + +var m3: typeof M3; +>m3 : typeof M3 +>M3 : typeof M3 + +var m3 = M3; +>m3 : typeof M3 +>M3 : typeof M3 + +var a3: typeof M3.Color; +>a3 : typeof M3.Color +>M3 : typeof M3 +>Color : typeof M3.Color + +var a3 = m3.Color; +>a3 : typeof M3.Color +>m3.Color : typeof M3.Color +>m3 : typeof M3 +>Color : typeof M3.Color + +var a3 = M3.Color; +>a3 : typeof M3.Color +>M3.Color : typeof M3.Color +>M3 : typeof M3 +>Color : typeof M3.Color + +var blue: M3.Color = a3.Blue; +>blue : M3.Color +>M3 : unknown +>Color : M3.Color +>a3.Blue : M3.Color +>a3 : typeof M3.Color +>Blue : M3.Color + +var p3: M3.Color; +>p3 : M3.Color +>M3 : unknown +>Color : M3.Color + +var p3 = M3.Color.Red; +>p3 : M3.Color +>M3.Color.Red : M3.Color +>M3.Color : typeof M3.Color +>M3 : typeof M3 +>Color : typeof M3.Color +>Red : M3.Color + +var p3 = m3.Color.Blue; +>p3 : M3.Color +>m3.Color.Blue : M3.Color +>m3.Color : typeof M3.Color +>m3 : typeof M3 +>Color : typeof M3.Color +>Blue : M3.Color + diff --git a/tests/baselines/reference/instantiatedReturnTypeContravariance.types b/tests/baselines/reference/instantiatedReturnTypeContravariance.types new file mode 100644 index 00000000000..8b7cb7b609e --- /dev/null +++ b/tests/baselines/reference/instantiatedReturnTypeContravariance.types @@ -0,0 +1,43 @@ +=== tests/cases/compiler/instantiatedReturnTypeContravariance.ts === +interface B { +>B : B +>T : T + +name: string; +>name : string + +x(): T; +>x : () => T +>T : T + +} + +class c { +>c : c + +foo(): B { +>foo : () => B +>B : B + +return null; + +} + +} + +class d extends c { +>d : d +>c : c + +foo(): B { +>foo : () => B +>B : B + +return null; + +} + +} + + + diff --git a/tests/baselines/reference/interMixingModulesInterfaces0.types b/tests/baselines/reference/interMixingModulesInterfaces0.types new file mode 100644 index 00000000000..977b02e15e8 --- /dev/null +++ b/tests/baselines/reference/interMixingModulesInterfaces0.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/interMixingModulesInterfaces0.ts === +module A { +>A : typeof A + + export module B { +>B : typeof B + + export function createB(): B { +>createB : () => B +>B : B + + return null; + } + } + + export interface B { +>B : B + + name: string; +>name : string + + value: number; +>value : number + } +} + +var x: A.B = A.B.createB(); +>x : A.B +>A : unknown +>B : A.B +>A.B.createB() : A.B +>A.B.createB : () => A.B +>A.B : typeof A.B +>A : typeof A +>B : typeof A.B +>createB : () => A.B + diff --git a/tests/baselines/reference/interMixingModulesInterfaces1.types b/tests/baselines/reference/interMixingModulesInterfaces1.types new file mode 100644 index 00000000000..c94cc80e5bf --- /dev/null +++ b/tests/baselines/reference/interMixingModulesInterfaces1.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/interMixingModulesInterfaces1.ts === +module A { +>A : typeof A + + export interface B { +>B : B + + name: string; +>name : string + + value: number; +>value : number + } + + export module B { +>B : typeof B + + export function createB(): B { +>createB : () => B +>B : B + + return null; + } + } +} + +var x: A.B = A.B.createB(); +>x : A.B +>A : unknown +>B : A.B +>A.B.createB() : A.B +>A.B.createB : () => A.B +>A.B : typeof A.B +>A : typeof A +>B : typeof A.B +>createB : () => A.B + diff --git a/tests/baselines/reference/interMixingModulesInterfaces2.types b/tests/baselines/reference/interMixingModulesInterfaces2.types new file mode 100644 index 00000000000..ff21c25358b --- /dev/null +++ b/tests/baselines/reference/interMixingModulesInterfaces2.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/interMixingModulesInterfaces2.ts === +module A { +>A : typeof A + + export interface B { +>B : B + + name: string; +>name : string + + value: number; +>value : number + } + + module B { +>B : typeof B + + export function createB(): B { +>createB : () => B +>B : B + + return null; + } + } +} + +var x: A.B = null; +>x : A.B +>A : unknown +>B : A.B + diff --git a/tests/baselines/reference/interMixingModulesInterfaces3.types b/tests/baselines/reference/interMixingModulesInterfaces3.types new file mode 100644 index 00000000000..123d609c365 --- /dev/null +++ b/tests/baselines/reference/interMixingModulesInterfaces3.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/interMixingModulesInterfaces3.ts === +module A { +>A : typeof A + + module B { +>B : typeof B + + export function createB(): B { +>createB : () => B +>B : B + + return null; + } + } + + export interface B { +>B : B + + name: string; +>name : string + + value: number; +>value : number + } +} + +var x: A.B = null; +>x : A.B +>A : unknown +>B : A.B + diff --git a/tests/baselines/reference/interMixingModulesInterfaces4.types b/tests/baselines/reference/interMixingModulesInterfaces4.types new file mode 100644 index 00000000000..e4e9bf385ac --- /dev/null +++ b/tests/baselines/reference/interMixingModulesInterfaces4.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/interMixingModulesInterfaces4.ts === +module A { +>A : typeof A + + export module B { +>B : typeof B + + export function createB(): number { +>createB : () => number + + return null; + } + } + + interface B { +>B : B + + name: string; +>name : string + + value: number; +>value : number + } +} + +var x : number = A.B.createB(); +>x : number +>A.B.createB() : number +>A.B.createB : () => number +>A.B : typeof A.B +>A : typeof A +>B : typeof A.B +>createB : () => number + diff --git a/tests/baselines/reference/interMixingModulesInterfaces5.types b/tests/baselines/reference/interMixingModulesInterfaces5.types new file mode 100644 index 00000000000..199b37b16eb --- /dev/null +++ b/tests/baselines/reference/interMixingModulesInterfaces5.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/interMixingModulesInterfaces5.ts === +module A { +>A : typeof A + + interface B { +>B : B + + name: string; +>name : string + + value: number; +>value : number + } + + export module B { +>B : typeof B + + export function createB(): number { +>createB : () => number + + return null; + } + } +} + +var x: number = A.B.createB(); +>x : number +>A.B.createB() : number +>A.B.createB : () => number +>A.B : typeof A.B +>A : typeof A +>B : typeof A.B +>createB : () => number + diff --git a/tests/baselines/reference/interface0.types b/tests/baselines/reference/interface0.types new file mode 100644 index 00000000000..ecbd2d212ed --- /dev/null +++ b/tests/baselines/reference/interface0.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/interface0.ts === +interface Generic { +>Generic : Generic +>T : T + + x: T; +>x : T +>T : T +} + +var y: Generic = { x: 3 }; +>y : Generic +>Generic : Generic +>{ x: 3 } : { x: number; } +>x : number + diff --git a/tests/baselines/reference/interfaceAssignmentCompat.js b/tests/baselines/reference/interfaceAssignmentCompat.js index d6ff0978735..1037df1769e 100644 --- a/tests/baselines/reference/interfaceAssignmentCompat.js +++ b/tests/baselines/reference/interfaceAssignmentCompat.js @@ -75,16 +75,17 @@ var M; x[0] = { color: 2 /* Brown */ }; x[1] = { color: 1 /* Blue */ }; x[2] = { color: 0 /* Green */ }; - x = x.sort(CompareYeux); - var z = x.sort(CompareEyes); + x = x.sort(CompareYeux); // parameter mismatch + // type of z inferred from specialized array type + var z = x.sort(CompareEyes); // ok for (var i = 0, len = z.length; i < len; i++) { result += ((Color._map[z[i].color]) + "\r\n"); } var eeks = []; for (var j = z.length = 1; j >= 0; j--) { - eeks[j] = z[j]; + eeks[j] = z[j]; // nope: element assignment } - eeks = z; + eeks = z; // nope: array assignment return result; } M.test = test; diff --git a/tests/baselines/reference/interfaceContextualType.types b/tests/baselines/reference/interfaceContextualType.types new file mode 100644 index 00000000000..88ba9dcbc24 --- /dev/null +++ b/tests/baselines/reference/interfaceContextualType.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/interfaceContextualType.ts === +export interface IOptions { +>IOptions : IOptions + + italic?: boolean; +>italic : boolean + + bold?: boolean; +>bold : boolean +} +export interface IMap { +>IMap : IMap + + [s: string]: IOptions; +>s : string +>IOptions : IOptions +} + +class Bug { +>Bug : Bug + + public values: IMap; +>values : IMap +>IMap : IMap + + ok() { +>ok : () => void + + this.values = {}; +>this.values = {} : { [x: string]: IOptions; } +>this.values : IMap +>this : Bug +>values : IMap +>{} : { [x: string]: IOptions; } + + this.values['comments'] = { italic: true }; +>this.values['comments'] = { italic: true } : { italic: boolean; } +>this.values['comments'] : IOptions +>this.values : IMap +>this : Bug +>values : IMap +>{ italic: true } : { italic: boolean; } +>italic : boolean + } + shouldBeOK() { +>shouldBeOK : () => void + + this.values = { +>this.values = { comments: { italic: true } } : { [x: string]: IOptions; comments: { italic: boolean; }; } +>this.values : IMap +>this : Bug +>values : IMap +>{ comments: { italic: true } } : { [x: string]: IOptions; comments: { italic: boolean; }; } + + comments: { italic: true } +>comments : { italic: boolean; } +>{ italic: true } : { italic: boolean; } +>italic : boolean + + }; + } +} + diff --git a/tests/baselines/reference/interfaceDeclaration5.types b/tests/baselines/reference/interfaceDeclaration5.types new file mode 100644 index 00000000000..0cad7652a28 --- /dev/null +++ b/tests/baselines/reference/interfaceDeclaration5.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/interfaceDeclaration5.ts === +export interface I1 { item:string; } +>I1 : I1 +>item : string + +export class C1 { } +>C1 : C1 + diff --git a/tests/baselines/reference/interfaceExtendingClass2.errors.txt b/tests/baselines/reference/interfaceExtendingClass2.errors.txt index d3de7666ea4..7bd8509ee2f 100644 --- a/tests/baselines/reference/interfaceExtendingClass2.errors.txt +++ b/tests/baselines/reference/interfaceExtendingClass2.errors.txt @@ -18,9 +18,9 @@ !!! Property 'a' of type '{ toString: () => {}; }' is not assignable to string index type 'Object'. return 1; ~~~~~~ -!!! Property or signature expected. - ~~~~~~ !!! A 'return' statement can only be used within a function body. + ~~~~~~ +!!! Property or signature expected. }; ~ !!! Declaration or statement expected. diff --git a/tests/baselines/reference/interfaceExtendingClassWithPrivates.js b/tests/baselines/reference/interfaceExtendingClassWithPrivates.js index 5304068fdd8..3634d088a98 100644 --- a/tests/baselines/reference/interfaceExtendingClassWithPrivates.js +++ b/tests/baselines/reference/interfaceExtendingClassWithPrivates.js @@ -23,4 +23,4 @@ var Foo = (function () { })(); var i; var r = i.y; -var r2 = i.x; +var r2 = i.x; // error diff --git a/tests/baselines/reference/interfaceExtendingClassWithPrivates2.js b/tests/baselines/reference/interfaceExtendingClassWithPrivates2.js index 06c1c040a96..6726d560a8c 100644 --- a/tests/baselines/reference/interfaceExtendingClassWithPrivates2.js +++ b/tests/baselines/reference/interfaceExtendingClassWithPrivates2.js @@ -45,5 +45,5 @@ var Baz = (function () { })(); var i; var r = i.z; -var r2 = i.x; -var r3 = i.y; +var r2 = i.x; // error +var r3 = i.y; // error diff --git a/tests/baselines/reference/interfaceExtendsClass1.types b/tests/baselines/reference/interfaceExtendsClass1.types new file mode 100644 index 00000000000..c2370f7fe7f --- /dev/null +++ b/tests/baselines/reference/interfaceExtendsClass1.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/interfaceExtendsClass1.ts === +class Control { +>Control : Control + + private state: any; +>state : any +} +interface SelectableControl extends Control { +>SelectableControl : SelectableControl +>Control : Control + + select(): void; +>select : () => void +} +class Button extends Control { +>Button : Button +>Control : Control + + select() { } +>select : () => void +} +class TextBox extends Control { +>TextBox : TextBox +>Control : Control + + select() { } +>select : () => void +} +class Image extends Control { +>Image : Image +>Control : Control +} +class Location { +>Location : Location + + select() { } +>select : () => void +} + diff --git a/tests/baselines/reference/interfaceExtendsClassWithPrivate1.js b/tests/baselines/reference/interfaceExtendsClassWithPrivate1.js index c609b9cf5a8..4cf0281ac7a 100644 --- a/tests/baselines/reference/interfaceExtendsClassWithPrivate1.js +++ b/tests/baselines/reference/interfaceExtendsClassWithPrivate1.js @@ -62,8 +62,8 @@ var c; var i; var d; c = i; -i = c; +i = c; // error i = d; -d = i; +d = i; // error c = d; -d = c; +d = c; // error diff --git a/tests/baselines/reference/interfaceImplementation1.js b/tests/baselines/reference/interfaceImplementation1.js index 6a7687e45f9..ce82a24f63d 100644 --- a/tests/baselines/reference/interfaceImplementation1.js +++ b/tests/baselines/reference/interfaceImplementation1.js @@ -64,6 +64,9 @@ var a = function () { return new C2(); }; new a(); +/*var b:I4 = C2; +new b(); +*/ var c; c[5]; c["foo"]; diff --git a/tests/baselines/reference/interfaceInReopenedModule.js b/tests/baselines/reference/interfaceInReopenedModule.js index fe9f6de3740..1f9d0981590 100644 --- a/tests/baselines/reference/interfaceInReopenedModule.js +++ b/tests/baselines/reference/interfaceInReopenedModule.js @@ -12,6 +12,7 @@ module m { //// [interfaceInReopenedModule.js] +// In second instance of same module, exported interface is not visible var m; (function (m) { var n = (function () { diff --git a/tests/baselines/reference/interfaceInReopenedModule.types b/tests/baselines/reference/interfaceInReopenedModule.types new file mode 100644 index 00000000000..e0ed40b186e --- /dev/null +++ b/tests/baselines/reference/interfaceInReopenedModule.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/interfaceInReopenedModule.ts === +module m { +>m : typeof m +} + +// In second instance of same module, exported interface is not visible +module m { +>m : typeof m + + interface f {} +>f : f + + export class n { +>n : n + + private n: f; +>n : f +>f : f + } +} + diff --git a/tests/baselines/reference/interfaceInheritance.js b/tests/baselines/reference/interfaceInheritance.js index 68c25cebc5d..beec0f35d86 100644 --- a/tests/baselines/reference/interfaceInheritance.js +++ b/tests/baselines/reference/interfaceInheritance.js @@ -50,9 +50,9 @@ var i2; var i1; var i3; i1 = i2; -i2 = i3; +i2 = i3; // should be an error - i3 does not implement the members of i1 var c1; var i4; var i5; -i4 = i5; -i5 = i4; +i4 = i5; // should be an error +i5 = i4; // should be an error diff --git a/tests/baselines/reference/interfaceInheritance2.types b/tests/baselines/reference/interfaceInheritance2.types new file mode 100644 index 00000000000..ac89931df61 --- /dev/null +++ b/tests/baselines/reference/interfaceInheritance2.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/interfaceInheritance2.ts === +interface I6 { +>I6 : I6 + + ():void; +} + +interface I7 extends I6 { } +>I7 : I7 +>I6 : I6 + +var v1:I7; +>v1 : I7 +>I7 : I7 + +v1(); +>v1() : void +>v1 : I7 + diff --git a/tests/baselines/reference/interfaceOnly.types b/tests/baselines/reference/interfaceOnly.types new file mode 100644 index 00000000000..0dc38bea01a --- /dev/null +++ b/tests/baselines/reference/interfaceOnly.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/interfaceOnly.ts === +interface foo { +>foo : foo + + foo(); +>foo : () => any + + f2 (f: ()=> void); +>f2 : (f: () => void) => any +>f : () => void +} diff --git a/tests/baselines/reference/interfacePropertiesWithSameName1.types b/tests/baselines/reference/interfacePropertiesWithSameName1.types new file mode 100644 index 00000000000..f034cd98255 --- /dev/null +++ b/tests/baselines/reference/interfacePropertiesWithSameName1.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/interfacePropertiesWithSameName1.ts === +interface Mover { +>Mover : Mover + + move(): void; +>move : () => void + + getStatus(): { speed: number; }; +>getStatus : () => { speed: number; } +>speed : number +} +interface Shaker { +>Shaker : Shaker + + shake(): void; +>shake : () => void + + getStatus(): { frequency: number; }; +>getStatus : () => { frequency: number; } +>frequency : number +} + +interface MoverShaker extends Mover, Shaker { +>MoverShaker : MoverShaker +>Mover : Mover +>Shaker : Shaker + + getStatus(): { speed: number; frequency: number; }; +>getStatus : () => { speed: number; frequency: number; } +>speed : number +>frequency : number +} + diff --git a/tests/baselines/reference/interfaceSubtyping.types b/tests/baselines/reference/interfaceSubtyping.types new file mode 100644 index 00000000000..d9b31a50df9 --- /dev/null +++ b/tests/baselines/reference/interfaceSubtyping.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/interfaceSubtyping.ts === +interface iface { +>iface : iface + + foo(): void; +>foo : () => void +} +class Camera implements iface{ +>Camera : Camera +>iface : iface + + constructor (public str: string) { +>str : string + } + foo() { return "s"; } +>foo : () => string +} + diff --git a/tests/baselines/reference/interfaceThatHidesBaseProperty.types b/tests/baselines/reference/interfaceThatHidesBaseProperty.types new file mode 100644 index 00000000000..f27ec5abfc8 --- /dev/null +++ b/tests/baselines/reference/interfaceThatHidesBaseProperty.types @@ -0,0 +1,22 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceThatHidesBaseProperty.ts === +interface Base { +>Base : Base + + x: { a: number }; +>x : { a: number; } +>a : number +} + +interface Derived extends Base { +>Derived : Derived +>Base : Base + + x: { +>x : { a: number; b: number; } + + a: number; b: number; +>a : number +>b : number + + }; +} diff --git a/tests/baselines/reference/interfaceWithCallAndConstructSignature.types b/tests/baselines/reference/interfaceWithCallAndConstructSignature.types new file mode 100644 index 00000000000..93d6bf7a419 --- /dev/null +++ b/tests/baselines/reference/interfaceWithCallAndConstructSignature.types @@ -0,0 +1,22 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithCallAndConstructSignature.ts === +interface Foo { +>Foo : Foo + + (): number; + new (): any; +} + +var f: Foo; +>f : Foo +>Foo : Foo + +var r = f(); +>r : number +>f() : number +>f : Foo + +var r2 = new f(); +>r2 : any +>new f() : any +>f : Foo + diff --git a/tests/baselines/reference/interfaceWithCallSignaturesThatHidesBaseSignature.types b/tests/baselines/reference/interfaceWithCallSignaturesThatHidesBaseSignature.types new file mode 100644 index 00000000000..63933b41bea --- /dev/null +++ b/tests/baselines/reference/interfaceWithCallSignaturesThatHidesBaseSignature.types @@ -0,0 +1,26 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithCallSignaturesThatHidesBaseSignature.ts === +interface Foo { +>Foo : Foo + + (): { a: number }; +>a : number +} + +interface Derived extends Foo { +>Derived : Derived +>Foo : Foo + + (): { a: number; b: number }; +>a : number +>b : number +} + +var d: Derived; +>d : Derived +>Derived : Derived + +var r = d(); +>r : { a: number; b: number; } +>d() : { a: number; b: number; } +>d : Derived + diff --git a/tests/baselines/reference/interfaceWithCallSignaturesThatHidesBaseSignature2.types b/tests/baselines/reference/interfaceWithCallSignaturesThatHidesBaseSignature2.types new file mode 100644 index 00000000000..c91d6864def --- /dev/null +++ b/tests/baselines/reference/interfaceWithCallSignaturesThatHidesBaseSignature2.types @@ -0,0 +1,26 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithCallSignaturesThatHidesBaseSignature2.ts === +interface Foo { +>Foo : Foo + + (): { a: number; b: number }; +>a : number +>b : number +} + +interface Derived extends Foo { // error +>Derived : Derived +>Foo : Foo + + (): { a: number }; +>a : number +} + +var d: Derived; +>d : Derived +>Derived : Derived + +var r = d(); +>r : { a: number; } +>d() : { a: number; } +>d : Derived + diff --git a/tests/baselines/reference/interfaceWithConstructSignaturesThatHidesBaseSignature.types b/tests/baselines/reference/interfaceWithConstructSignaturesThatHidesBaseSignature.types new file mode 100644 index 00000000000..45c14f60386 --- /dev/null +++ b/tests/baselines/reference/interfaceWithConstructSignaturesThatHidesBaseSignature.types @@ -0,0 +1,26 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithConstructSignaturesThatHidesBaseSignature.ts === +interface Foo { +>Foo : Foo + + new (): { a: number }; +>a : number +} + +interface Derived extends Foo { +>Derived : Derived +>Foo : Foo + + new (): { a: number; b: number }; +>a : number +>b : number +} + +var d: Derived; +>d : Derived +>Derived : Derived + +var r = new d(); +>r : { a: number; b: number; } +>new d() : { a: number; b: number; } +>d : Derived + diff --git a/tests/baselines/reference/interfaceWithConstructSignaturesThatHidesBaseSignature2.types b/tests/baselines/reference/interfaceWithConstructSignaturesThatHidesBaseSignature2.types new file mode 100644 index 00000000000..635625d5696 --- /dev/null +++ b/tests/baselines/reference/interfaceWithConstructSignaturesThatHidesBaseSignature2.types @@ -0,0 +1,26 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithConstructSignaturesThatHidesBaseSignature2.ts === +interface Foo { +>Foo : Foo + + new (): { a: number; b: number }; +>a : number +>b : number +} + +interface Derived extends Foo { +>Derived : Derived +>Foo : Foo + + new (): { a: number }; // constructors not checked for conformance like a call signature is +>a : number +} + +var d: Derived; +>d : Derived +>Derived : Derived + +var r = new d(); +>r : { a: number; } +>new d() : { a: number; } +>d : Derived + diff --git a/tests/baselines/reference/interfaceWithMultipleBaseTypes.js b/tests/baselines/reference/interfaceWithMultipleBaseTypes.js index fa58257fbd8..6073ce259b1 100644 --- a/tests/baselines/reference/interfaceWithMultipleBaseTypes.js +++ b/tests/baselines/reference/interfaceWithMultipleBaseTypes.js @@ -64,3 +64,4 @@ module Generic { } //// [interfaceWithMultipleBaseTypes.js] +// an interface may have multiple bases with properties of the same name as long as the interface's implementation satisfies all base type versions diff --git a/tests/baselines/reference/interfaceWithOptionalProperty.types b/tests/baselines/reference/interfaceWithOptionalProperty.types new file mode 100644 index 00000000000..862857483da --- /dev/null +++ b/tests/baselines/reference/interfaceWithOptionalProperty.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/interfaceWithOptionalProperty.ts === + +interface I { +>I : I + + x?: number; +>x : number +} diff --git a/tests/baselines/reference/interfaceWithOverloadedCallAndConstructSignatures.types b/tests/baselines/reference/interfaceWithOverloadedCallAndConstructSignatures.types new file mode 100644 index 00000000000..1172f10a3dd --- /dev/null +++ b/tests/baselines/reference/interfaceWithOverloadedCallAndConstructSignatures.types @@ -0,0 +1,38 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithOverloadedCallAndConstructSignatures.ts === +interface Foo { +>Foo : Foo + + (): number; + (x: string): number; +>x : string + + new (): any; + new (x: string): Object; +>x : string +>Object : Object +} + +var f: Foo; +>f : Foo +>Foo : Foo + +var r1 = f(); +>r1 : number +>f() : number +>f : Foo + +var r2 = f(''); +>r2 : number +>f('') : number +>f : Foo + +var r3 = new f(); +>r3 : any +>new f() : any +>f : Foo + +var r4 = new f(''); +>r4 : Object +>new f('') : Object +>f : Foo + diff --git a/tests/baselines/reference/interfaceWithPropertyOfEveryType.types b/tests/baselines/reference/interfaceWithPropertyOfEveryType.types new file mode 100644 index 00000000000..69ad29374a2 --- /dev/null +++ b/tests/baselines/reference/interfaceWithPropertyOfEveryType.types @@ -0,0 +1,148 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithPropertyOfEveryType.ts === +class C { foo: string; } +>C : C +>foo : string + +function f1() { } +>f1 : () => void + +module M { +>M : typeof M + + export var y = 1; +>y : number +} +enum E { A } +>E : E +>A : E + +interface Foo { +>Foo : Foo + + a: number; +>a : number + + b: string; +>b : string + + c: boolean; +>c : boolean + + d: any; +>d : any + + e: void; +>e : void + + f: number[]; +>f : number[] + + g: Object; +>g : Object +>Object : Object + + h: (x: number) => number; +>h : (x: number) => number +>x : number + + i: (x: T) => T; +>i : (x: T) => T +>T : T +>x : T +>T : T +>T : T + + j: Foo; +>j : Foo +>Foo : Foo + + k: C; +>k : C +>C : C + + l: typeof f1; +>l : () => void +>f1 : () => void + + m: typeof M; +>m : typeof M +>M : typeof M + + n: {}; +>n : {} + + o: E; +>o : E +>E : E +} + +var a: Foo = { +>a : Foo +>Foo : Foo +>{ a: 1, b: '', c: true, d: {}, e: null , f: [1], g: {}, h: (x: number) => 1, i: (x: T) => x, j: null, k: new C(), l: f1, m: M, n: {}, o: E.A} : { a: number; b: string; c: boolean; d: {}; e: null; f: number[]; g: {}; h: (x: number) => number; i: (x: T) => T; j: Foo; k: C; l: () => void; m: typeof M; n: {}; o: E; } + + a: 1, +>a : number + + b: '', +>b : string + + c: true, +>c : boolean + + d: {}, +>d : {} +>{} : {} + + e: null , +>e : any + + f: [1], +>f : number[] +>[1] : number[] + + g: {}, +>g : {} +>{} : {} + + h: (x: number) => 1, +>h : (x: number) => number +>(x: number) => 1 : (x: number) => number +>x : number + + i: (x: T) => x, +>i : (x: T) => T +>(x: T) => x : (x: T) => T +>T : T +>x : T +>T : T +>x : T + + j: null, +>j : Foo +>null : Foo +>Foo : Foo + + k: new C(), +>k : C +>new C() : C +>C : typeof C + + l: f1, +>l : () => void +>f1 : () => void + + m: M, +>m : typeof M +>M : typeof M + + n: {}, +>n : {} +>{} : {} + + o: E.A +>o : E +>E.A : E +>E : typeof E +>A : E +} diff --git a/tests/baselines/reference/interfaceWithSpecializedCallAndConstructSignatures.types b/tests/baselines/reference/interfaceWithSpecializedCallAndConstructSignatures.types new file mode 100644 index 00000000000..e9bc0cd2889 --- /dev/null +++ b/tests/baselines/reference/interfaceWithSpecializedCallAndConstructSignatures.types @@ -0,0 +1,42 @@ +=== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithSpecializedCallAndConstructSignatures.ts === +interface Foo { +>Foo : Foo + + (x: 'a'): number; +>x : 'a' + + (x: string): any; +>x : string + + new (x: 'a'): any; +>x : 'a' + + new (x: string): Object; +>x : string +>Object : Object +} + +var f: Foo; +>f : Foo +>Foo : Foo + +var r = f('a'); +>r : number +>f('a') : number +>f : Foo + +var r2 = f('A'); +>r2 : any +>f('A') : any +>f : Foo + +var r3 = new f('a'); +>r3 : any +>new f('a') : any +>f : Foo + +var r4 = new f('A'); +>r4 : Object +>new f('A') : Object +>f : Foo + diff --git a/tests/baselines/reference/interfacedecl.types b/tests/baselines/reference/interfacedecl.types new file mode 100644 index 00000000000..377e4f28639 --- /dev/null +++ b/tests/baselines/reference/interfacedecl.types @@ -0,0 +1,95 @@ +=== tests/cases/compiler/interfacedecl.ts === +interface a0 { +>a0 : a0 + + (): string; + (a, b, c?: string): number; +>a : any +>b : any +>c : string + + new (): string; + new (s: string); +>s : string + + [n: number]: ()=>string; +>n : number + + [s: string]: any; +>s : string + + p1; +>p1 : any + + p2: string; +>p2 : string + + p3?; +>p3 : any + + p4?: number; +>p4 : number + + p5: (s: number) =>string; +>p5 : (s: number) => string +>s : number + + f1(); +>f1 : () => any + + f2? (); +>f2 : () => any + + f3(a: string): number; +>f3 : (a: string) => number +>a : string + + f4? (s: number): string; +>f4 : (s: number) => string +>s : number +} + + +interface a1 { +>a1 : a1 + + [n: number]: number; +>n : number +} + +interface a2 { +>a2 : a2 + + [s: string]: number; +>s : string +} + +interface a { +>a : a +} + +interface b extends a { +>b : b +>a : a +} + +interface c extends a, b { +>c : c +>a : a +>b : b +} + +interface d extends a { +>d : d +>a : a +} + +class c1 implements a { +>c1 : c1 +>a : a +} +var instance2 = new c1(); +>instance2 : c1 +>new c1() : c1 +>c1 : typeof c1 + diff --git a/tests/baselines/reference/internalAliasClass.types b/tests/baselines/reference/internalAliasClass.types new file mode 100644 index 00000000000..8531714b5e8 --- /dev/null +++ b/tests/baselines/reference/internalAliasClass.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/internalAliasClass.ts === +module a { +>a : typeof a + + export class c { +>c : c + } +} + +module c { +>c : typeof c + + import b = a.c; +>b : typeof b +>a : typeof a +>c : b + + export var x: b = new b(); +>x : b +>b : b +>new b() : b +>b : typeof b +} diff --git a/tests/baselines/reference/internalAliasClassInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasClassInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..3f6f5845fda --- /dev/null +++ b/tests/baselines/reference/internalAliasClassInsideLocalModuleWithExport.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/internalAliasClassInsideLocalModuleWithExport.ts === +export module x { +>x : typeof x + + export class c { +>c : c + + foo(a: number) { +>foo : (a: number) => number +>a : number + + return a; +>a : number + } + } +} + +export module m2 { +>m2 : typeof m2 + + export module m3 { +>m3 : typeof m3 + + export import c = x.c; +>c : typeof c +>x : typeof x +>c : c + + export var cProp = new c(); +>cProp : c +>new c() : c +>c : typeof c + + var cReturnVal = cProp.foo(10); +>cReturnVal : number +>cProp.foo(10) : number +>cProp.foo : (a: number) => number +>cProp : c +>foo : (a: number) => number + } +} + +export var d = new m2.m3.c(); +>d : x.c +>new m2.m3.c() : x.c +>m2.m3.c : typeof x.c +>m2.m3 : typeof m2.m3 +>m2 : typeof m2 +>m3 : typeof m2.m3 +>c : typeof x.c + diff --git a/tests/baselines/reference/internalAliasClassInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasClassInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..4f916d5689c --- /dev/null +++ b/tests/baselines/reference/internalAliasClassInsideLocalModuleWithoutExport.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/internalAliasClassInsideLocalModuleWithoutExport.ts === +export module x { +>x : typeof x + + export class c { +>c : c + + foo(a: number) { +>foo : (a: number) => number +>a : number + + return a; +>a : number + } + } +} + +export module m2 { +>m2 : typeof m2 + + export module m3 { +>m3 : typeof m3 + + import c = x.c; +>c : typeof c +>x : typeof x +>c : c + + export var cProp = new c(); +>cProp : c +>new c() : c +>c : typeof c + + var cReturnVal = cProp.foo(10); +>cReturnVal : number +>cProp.foo(10) : number +>cProp.foo : (a: number) => number +>cProp : c +>foo : (a: number) => number + } +} diff --git a/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..6a25f03c2e9 --- /dev/null +++ b/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithExport.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/internalAliasClassInsideTopLevelModuleWithExport.ts === +export module x { +>x : typeof x + + export class c { +>c : c + + foo(a: number) { +>foo : (a: number) => number +>a : number + + return a; +>a : number + } + } +} + +export import xc = x.c; +>xc : typeof xc +>x : typeof x +>c : xc + +export var cProp = new xc(); +>cProp : xc +>new xc() : xc +>xc : typeof xc + +var cReturnVal = cProp.foo(10); +>cReturnVal : number +>cProp.foo(10) : number +>cProp.foo : (a: number) => number +>cProp : xc +>foo : (a: number) => number + diff --git a/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..4e086f86054 --- /dev/null +++ b/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/internalAliasClassInsideTopLevelModuleWithoutExport.ts === +export module x { +>x : typeof x + + export class c { +>c : c + + foo(a: number) { +>foo : (a: number) => number +>a : number + + return a; +>a : number + } + } +} + +import xc = x.c; +>xc : typeof xc +>x : typeof x +>c : xc + +export var cProp = new xc(); +>cProp : xc +>new xc() : xc +>xc : typeof xc + +var cReturnVal = cProp.foo(10); +>cReturnVal : number +>cProp.foo(10) : number +>cProp.foo : (a: number) => number +>cProp : xc +>foo : (a: number) => number + diff --git a/tests/baselines/reference/internalAliasEnum.types b/tests/baselines/reference/internalAliasEnum.types new file mode 100644 index 00000000000..87cab6cc56d --- /dev/null +++ b/tests/baselines/reference/internalAliasEnum.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/internalAliasEnum.ts === +module a { +>a : typeof a + + export enum weekend { +>weekend : weekend + + Friday, +>Friday : weekend + + Saturday, +>Saturday : weekend + + Sunday +>Sunday : weekend + } +} + +module c { +>c : typeof c + + import b = a.weekend; +>b : typeof b +>a : typeof a +>weekend : b + + export var bVal: b = b.Sunday; +>bVal : b +>b : b +>b.Sunday : b +>b : typeof b +>Sunday : b +} + diff --git a/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..0d09b930f95 --- /dev/null +++ b/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithExport.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/internalAliasEnumInsideLocalModuleWithExport.ts === +export module a { +>a : typeof a + + export enum weekend { +>weekend : weekend + + Friday, +>Friday : weekend + + Saturday, +>Saturday : weekend + + Sunday +>Sunday : weekend + } +} + +export module c { +>c : typeof c + + export import b = a.weekend; +>b : typeof b +>a : typeof a +>weekend : b + + export var bVal: b = b.Sunday; +>bVal : b +>b : b +>b.Sunday : b +>b : typeof b +>Sunday : b +} + diff --git a/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..881e51324af --- /dev/null +++ b/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/internalAliasEnumInsideLocalModuleWithoutExport.ts === +export module a { +>a : typeof a + + export enum weekend { +>weekend : weekend + + Friday, +>Friday : weekend + + Saturday, +>Saturday : weekend + + Sunday +>Sunday : weekend + } +} + +export module c { +>c : typeof c + + import b = a.weekend; +>b : typeof b +>a : typeof a +>weekend : b + + export var bVal: b = b.Sunday; +>bVal : b +>b : b +>b.Sunday : b +>b : typeof b +>Sunday : b +} + diff --git a/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..8458d885738 --- /dev/null +++ b/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithExport.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithExport.ts === +export module a { +>a : typeof a + + export enum weekend { +>weekend : weekend + + Friday, +>Friday : weekend + + Saturday, +>Saturday : weekend + + Sunday +>Sunday : weekend + } +} + +export import b = a.weekend; +>b : typeof b +>a : typeof a +>weekend : b + +export var bVal: b = b.Sunday; +>bVal : b +>b : b +>b.Sunday : b +>b : typeof b +>Sunday : b + diff --git a/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..6e75bd81bdf --- /dev/null +++ b/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.ts === +export module a { +>a : typeof a + + export enum weekend { +>weekend : weekend + + Friday, +>Friday : weekend + + Saturday, +>Saturday : weekend + + Sunday +>Sunday : weekend + } +} + +import b = a.weekend; +>b : typeof b +>a : typeof a +>weekend : b + +export var bVal: b = b.Sunday; +>bVal : b +>b : b +>b.Sunday : b +>b : typeof b +>Sunday : b + diff --git a/tests/baselines/reference/internalAliasFunction.types b/tests/baselines/reference/internalAliasFunction.types new file mode 100644 index 00000000000..ed297ce1b4e --- /dev/null +++ b/tests/baselines/reference/internalAliasFunction.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/internalAliasFunction.ts === +module a { +>a : typeof a + + export function foo(x: number) { +>foo : (x: number) => number +>x : number + + return x; +>x : number + } +} + +module c { +>c : typeof c + + import b = a.foo; +>b : (x: number) => number +>a : typeof a +>foo : (x: number) => number + + export var bVal = b(10); +>bVal : number +>b(10) : number +>b : (x: number) => number + + export var bVal2 = b; +>bVal2 : (x: number) => number +>b : (x: number) => number +} + diff --git a/tests/baselines/reference/internalAliasFunctionInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasFunctionInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..b3140e7b09a --- /dev/null +++ b/tests/baselines/reference/internalAliasFunctionInsideLocalModuleWithExport.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/internalAliasFunctionInsideLocalModuleWithExport.ts === +export module a { +>a : typeof a + + export function foo(x: number) { +>foo : (x: number) => number +>x : number + + return x; +>x : number + } +} + +export module c { +>c : typeof c + + export import b = a.foo; +>b : (x: number) => number +>a : typeof a +>foo : (x: number) => number + + export var bVal = b(10); +>bVal : number +>b(10) : number +>b : (x: number) => number + + export var bVal2 = b; +>bVal2 : (x: number) => number +>b : (x: number) => number +} + diff --git a/tests/baselines/reference/internalAliasFunctionInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasFunctionInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..c78b5040495 --- /dev/null +++ b/tests/baselines/reference/internalAliasFunctionInsideLocalModuleWithoutExport.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/internalAliasFunctionInsideLocalModuleWithoutExport.ts === +export module a { +>a : typeof a + + export function foo(x: number) { +>foo : (x: number) => number +>x : number + + return x; +>x : number + } +} + +export module c { +>c : typeof c + + import b = a.foo; +>b : (x: number) => number +>a : typeof a +>foo : (x: number) => number + + var bVal = b(10); +>bVal : number +>b(10) : number +>b : (x: number) => number + + export var bVal2 = b; +>bVal2 : (x: number) => number +>b : (x: number) => number +} + diff --git a/tests/baselines/reference/internalAliasFunctionInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasFunctionInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..365f0edeb27 --- /dev/null +++ b/tests/baselines/reference/internalAliasFunctionInsideTopLevelModuleWithExport.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.ts === +export module a { +>a : typeof a + + export function foo(x: number) { +>foo : (x: number) => number +>x : number + + return x; +>x : number + } +} + +export import b = a.foo; +>b : (x: number) => number +>a : typeof a +>foo : (x: number) => number + +export var bVal = b(10); +>bVal : number +>b(10) : number +>b : (x: number) => number + +export var bVal2 = b; +>bVal2 : (x: number) => number +>b : (x: number) => number + diff --git a/tests/baselines/reference/internalAliasFunctionInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasFunctionInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..c2f06c66f76 --- /dev/null +++ b/tests/baselines/reference/internalAliasFunctionInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/internalAliasFunctionInsideTopLevelModuleWithoutExport.ts === +export module a { +>a : typeof a + + export function foo(x: number) { +>foo : (x: number) => number +>x : number + + return x; +>x : number + } +} + +import b = a.foo; +>b : (x: number) => number +>a : typeof a +>foo : (x: number) => number + +export var bVal = b(10); +>bVal : number +>b(10) : number +>b : (x: number) => number + +export var bVal2 = b; +>bVal2 : (x: number) => number +>b : (x: number) => number + diff --git a/tests/baselines/reference/internalAliasInitializedModule.types b/tests/baselines/reference/internalAliasInitializedModule.types new file mode 100644 index 00000000000..dacc2f148bd --- /dev/null +++ b/tests/baselines/reference/internalAliasInitializedModule.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/internalAliasInitializedModule.ts === +module a { +>a : typeof a + + export module b { +>b : typeof b + + export class c { +>c : c + } + } +} + +module c { +>c : typeof c + + import b = a.b; +>b : typeof b +>a : typeof a +>b : typeof b + + export var x: b.c = new b.c(); +>x : b.c +>b : unknown +>c : b.c +>new b.c() : b.c +>b.c : typeof b.c +>b : typeof b +>c : typeof b.c +} diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..973003d2c49 --- /dev/null +++ b/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithExport.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.ts === +export module a { +>a : typeof a + + export module b { +>b : typeof b + + export class c { +>c : c + } + } +} + +export module c { +>c : typeof c + + export import b = a.b; +>b : typeof b +>a : typeof a +>b : typeof b + + export var x: b.c = new b.c(); +>x : b.c +>b : unknown +>c : b.c +>new b.c() : b.c +>b.c : typeof b.c +>b : typeof b +>c : typeof b.c +} diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..540883209de --- /dev/null +++ b/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/internalAliasInitializedModuleInsideLocalModuleWithoutExport.ts === +export module a { +>a : typeof a + + export module b { +>b : typeof b + + export class c { +>c : c + } + } +} + +export module c { +>c : typeof c + + import b = a.b; +>b : typeof b +>a : typeof a +>b : typeof b + + export var x: b.c = new b.c(); +>x : b.c +>b : unknown +>c : b.c +>new b.c() : b.c +>b.c : typeof b.c +>b : typeof b +>c : typeof b.c +} diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..aa9944787d6 --- /dev/null +++ b/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithExport.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithExport.ts === +export module a { +>a : typeof a + + export module b { +>b : typeof b + + export class c { +>c : c + } + } +} + +export import b = a.b; +>b : typeof b +>a : typeof a +>b : typeof b + +export var x: b.c = new b.c(); +>x : b.c +>b : unknown +>c : b.c +>new b.c() : b.c +>b.c : typeof b.c +>b : typeof b +>c : typeof b.c + diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..e17fcdba2a7 --- /dev/null +++ b/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts === +export module a { +>a : typeof a + + export module b { +>b : typeof b + + export class c { +>c : c + } + } +} + +import b = a.b; +>b : typeof b +>a : typeof a +>b : typeof b + +export var x: b.c = new b.c(); +>x : b.c +>b : unknown +>c : b.c +>new b.c() : b.c +>b.c : typeof b.c +>b : typeof b +>c : typeof b.c + diff --git a/tests/baselines/reference/internalAliasInterface.types b/tests/baselines/reference/internalAliasInterface.types new file mode 100644 index 00000000000..310c568104d --- /dev/null +++ b/tests/baselines/reference/internalAliasInterface.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/internalAliasInterface.ts === +module a { +>a : unknown + + export interface I { +>I : I + } +} + +module c { +>c : typeof c + + import b = a.I; +>b : unknown +>a : unknown +>I : b + + export var x: b; +>x : b +>b : b +} + diff --git a/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..9667fd125d5 --- /dev/null +++ b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithExport.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithExport.ts === +export module a { +>a : unknown + + export interface I { +>I : I + } +} + +export module c { +>c : typeof c + + export import b = a.I; +>b : unknown +>a : unknown +>I : b + + export var x: b; +>x : b +>b : b +} + diff --git a/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..2f9368bc6a9 --- /dev/null +++ b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.ts === +export module a { +>a : unknown + + export interface I { +>I : I + } +} + +export module c { +>c : typeof c + + import b = a.I; +>b : unknown +>a : unknown +>I : b + + export var x: b; +>x : b +>b : b +} + diff --git a/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..9197d1e0215 --- /dev/null +++ b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithExport.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/internalAliasInterfaceInsideTopLevelModuleWithExport.ts === +export module a { +>a : unknown + + export interface I { +>I : I + } +} + +export import b = a.I; +>b : unknown +>a : unknown +>I : b + +export var x: b; +>x : b +>b : b + diff --git a/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..58be03b6a3c --- /dev/null +++ b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts === +export module a { +>a : unknown + + export interface I { +>I : I + } +} + +import b = a.I; +>b : unknown +>a : unknown +>I : b + +export var x: b; +>x : b +>b : b + diff --git a/tests/baselines/reference/internalAliasUninitializedModule.types b/tests/baselines/reference/internalAliasUninitializedModule.types new file mode 100644 index 00000000000..408a2467e03 --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModule.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/internalAliasUninitializedModule.ts === +module a { +>a : unknown + + export module b { +>b : unknown + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +module c { +>c : typeof c + + import b = a.b; +>b : unknown +>a : unknown +>b : unknown + + export var x: b.I; +>x : b.I +>b : unknown +>I : b.I + + x.foo(); +>x.foo() : any +>x.foo : () => any +>x : b.I +>foo : () => any +} diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..f7bbc68dac0 --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithExport.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/internalAliasUninitializedModuleInsideLocalModuleWithExport.ts === +export module a { +>a : unknown + + export module b { +>b : unknown + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +export module c { +>c : typeof c + + export import b = a.b; +>b : unknown +>a : unknown +>b : unknown + + export var x: b.I; +>x : b.I +>b : unknown +>I : b.I + + x.foo(); +>x.foo() : any +>x.foo : () => any +>x : b.I +>foo : () => any +} diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..cf9a85a712f --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.ts === +export module a { +>a : unknown + + export module b { +>b : unknown + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +export module c { +>c : typeof c + + import b = a.b; +>b : unknown +>a : unknown +>b : unknown + + export var x: b.I; +>x : b.I +>b : unknown +>I : b.I + + x.foo(); +>x.foo() : any +>x.foo : () => any +>x : b.I +>foo : () => any +} diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..015ec48fe6a --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts === +export module a { +>a : unknown + + export module b { +>b : unknown + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +export import b = a.b; +>b : unknown +>a : unknown +>b : unknown + +export var x: b.I; +>x : b.I +>b : unknown +>I : b.I + +x.foo(); +>x.foo() : any +>x.foo : () => any +>x : b.I +>foo : () => any + diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..71a2f535816 --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.ts === +export module a { +>a : unknown + + export module b { +>b : unknown + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +import b = a.b; +>b : unknown +>a : unknown +>b : unknown + +export var x: b.I; +>x : b.I +>b : unknown +>I : b.I + +x.foo(); +>x.foo() : any +>x.foo : () => any +>x : b.I +>foo : () => any + diff --git a/tests/baselines/reference/internalAliasVar.types b/tests/baselines/reference/internalAliasVar.types new file mode 100644 index 00000000000..d284b064d83 --- /dev/null +++ b/tests/baselines/reference/internalAliasVar.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/internalAliasVar.ts === +module a { +>a : typeof a + + export var x = 10; +>x : number +} + +module c { +>c : typeof c + + import b = a.x; +>b : number +>a : typeof a +>x : number + + export var bVal = b; +>bVal : number +>b : number +} + diff --git a/tests/baselines/reference/internalAliasVarInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasVarInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..b8d94c9ebbd --- /dev/null +++ b/tests/baselines/reference/internalAliasVarInsideLocalModuleWithExport.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/internalAliasVarInsideLocalModuleWithExport.ts === +export module a { +>a : typeof a + + export var x = 10; +>x : number +} + +export module c { +>c : typeof c + + export import b = a.x; +>b : number +>a : typeof a +>x : number + + export var bVal = b; +>bVal : number +>b : number +} + diff --git a/tests/baselines/reference/internalAliasVarInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasVarInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..c9e2897befb --- /dev/null +++ b/tests/baselines/reference/internalAliasVarInsideLocalModuleWithoutExport.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/internalAliasVarInsideLocalModuleWithoutExport.ts === +export module a { +>a : typeof a + + export var x = 10; +>x : number +} + +export module c { +>c : typeof c + + import b = a.x; +>b : number +>a : typeof a +>x : number + + export var bVal = b; +>bVal : number +>b : number +} + diff --git a/tests/baselines/reference/internalAliasVarInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasVarInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..22335c7d8c0 --- /dev/null +++ b/tests/baselines/reference/internalAliasVarInsideTopLevelModuleWithExport.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/internalAliasVarInsideTopLevelModuleWithExport.ts === +export module a { +>a : typeof a + + export var x = 10; +>x : number +} + +export import b = a.x; +>b : number +>a : typeof a +>x : number + +export var bVal = b; +>bVal : number +>b : number + + diff --git a/tests/baselines/reference/internalAliasVarInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasVarInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..1474735c62d --- /dev/null +++ b/tests/baselines/reference/internalAliasVarInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/internalAliasVarInsideTopLevelModuleWithoutExport.ts === +export module a { +>a : typeof a + + export var x = 10; +>x : number +} + +import b = a.x; +>b : number +>a : typeof a +>x : number + +export var bVal = b; +>bVal : number +>b : number + + diff --git a/tests/baselines/reference/internalAliasWithDottedNameEmit.types b/tests/baselines/reference/internalAliasWithDottedNameEmit.types new file mode 100644 index 00000000000..2b66ec9541b --- /dev/null +++ b/tests/baselines/reference/internalAliasWithDottedNameEmit.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/internalAliasWithDottedNameEmit.ts === +module a.b.c { +>a : typeof a +>b : typeof b +>c : typeof c + + export var d; +>d : any +} +module a.e.f { +>a : typeof a +>e : unknown +>f : unknown + + import g = b.c; +>g : typeof g +>b : typeof b +>c : typeof g +} + diff --git a/tests/baselines/reference/internalImportInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types b/tests/baselines/reference/internalImportInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types new file mode 100644 index 00000000000..3ec8770f17c --- /dev/null +++ b/tests/baselines/reference/internalImportInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/internalImportInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.ts === +class A { +>A : A + + aProp: string; +>aProp : string +} +module A { +>A : typeof A + + export interface X { s: string } +>X : X +>s : string + + export var a = 10; +>a : number +} + +module B { +>B : unknown + + import Y = A; +>Y : typeof Y +>A : Y +} + diff --git a/tests/baselines/reference/internalImportUnInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types b/tests/baselines/reference/internalImportUnInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types new file mode 100644 index 00000000000..c07fc1c4955 --- /dev/null +++ b/tests/baselines/reference/internalImportUnInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/internalImportUnInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.ts === +class A { +>A : A + + aProp: string; +>aProp : string +} +module A { +>A : typeof A + + export interface X { s: string } +>X : X +>s : string +} + +module B { +>B : unknown + + import Y = A; +>Y : typeof Y +>A : Y +} + diff --git a/tests/baselines/reference/internalImportUnInstantiatedModuleNotReferencingInstanceNoConflict.types b/tests/baselines/reference/internalImportUnInstantiatedModuleNotReferencingInstanceNoConflict.types new file mode 100644 index 00000000000..0bff332846a --- /dev/null +++ b/tests/baselines/reference/internalImportUnInstantiatedModuleNotReferencingInstanceNoConflict.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/internalImportUnInstantiatedModuleNotReferencingInstanceNoConflict.ts === +module A { +>A : unknown + + export interface X { s: string } +>X : X +>s : string +} + +module B { +>B : typeof B + + var A = 1; +>A : number + + import Y = A; +>Y : unknown +>A : unknown +} + diff --git a/tests/baselines/reference/intrinsics.js b/tests/baselines/reference/intrinsics.js index c1cea70db86..5e608b7fd6a 100644 --- a/tests/baselines/reference/intrinsics.js +++ b/tests/baselines/reference/intrinsics.js @@ -16,7 +16,7 @@ class Foo<__proto__> { } var foo: (__proto__: number) => void; //// [intrinsics.js] -var hasOwnProperty; +var hasOwnProperty; // Error var m1; (function (m1) { m1.__proto__; @@ -26,7 +26,7 @@ var m1; return C; })(); })(m1 || (m1 = {})); -__proto__ = 0; +__proto__ = 0; // Error, __proto__ not defined m1.__proto__ = 0; var Foo = (function () { function Foo() { diff --git a/tests/baselines/reference/invalidBooleanAssignments.js b/tests/baselines/reference/invalidBooleanAssignments.js index 803f553c4d2..d47787b4bf4 100644 --- a/tests/baselines/reference/invalidBooleanAssignments.js +++ b/tests/baselines/reference/invalidBooleanAssignments.js @@ -45,7 +45,7 @@ var C = (function () { var f = x; var g = x; var h = x; -var h2 = x; +var h2 = x; // no error var M; (function (M) { M.a = 1; diff --git a/tests/baselines/reference/invalidConstraint1.js b/tests/baselines/reference/invalidConstraint1.js index f98e5777dc6..330cabfcc80 100644 --- a/tests/baselines/reference/invalidConstraint1.js +++ b/tests/baselines/reference/invalidConstraint1.js @@ -10,4 +10,4 @@ f(); // should error function f() { return undefined; } -f(); +f(); // should error diff --git a/tests/baselines/reference/invalidImportAliasIdentifiers.js b/tests/baselines/reference/invalidImportAliasIdentifiers.js index c0b6092fd1e..2b31f5abebd 100644 --- a/tests/baselines/reference/invalidImportAliasIdentifiers.js +++ b/tests/baselines/reference/invalidImportAliasIdentifiers.js @@ -25,6 +25,7 @@ import i = I; //// [invalidImportAliasIdentifiers.js] +// none of these should work, since non are actually modules var V = 12; var C = (function () { function C() { diff --git a/tests/baselines/reference/invalidInstantiatedModule.js b/tests/baselines/reference/invalidInstantiatedModule.js index c180d1c7b4a..13e46c800ca 100644 --- a/tests/baselines/reference/invalidInstantiatedModule.js +++ b/tests/baselines/reference/invalidInstantiatedModule.js @@ -24,11 +24,11 @@ var M; return Point; })(); M.Point = Point; - M.Point = 1; + M.Point = 1; // Error })(M || (M = {})); var M2; (function (M2) { M2.Point = 1; })(M2 || (M2 = {})); var m = M2; -var p; +var p; // Error diff --git a/tests/baselines/reference/invalidMultipleVariableDeclarations.js b/tests/baselines/reference/invalidMultipleVariableDeclarations.js index bf8261cbaa8..fe3d62c4ba5 100644 --- a/tests/baselines/reference/invalidMultipleVariableDeclarations.js +++ b/tests/baselines/reference/invalidMultipleVariableDeclarations.js @@ -93,6 +93,7 @@ var M; } M.F2 = F2; })(M || (M = {})); +// all of these are errors var a; var a = 1; var a = 'a string'; diff --git a/tests/baselines/reference/invalidNestedModules.js b/tests/baselines/reference/invalidNestedModules.js index ece1aeeaa7f..83e82ec656c 100644 --- a/tests/baselines/reference/invalidNestedModules.js +++ b/tests/baselines/reference/invalidNestedModules.js @@ -72,7 +72,7 @@ var M2; var M2; (function (M2) { (function (X) { - X.Point; + X.Point; // Error })(M2.X || (M2.X = {})); var X = M2.X; })(M2 || (M2 = {})); diff --git a/tests/baselines/reference/invalidReferenceSyntax1.errors.txt b/tests/baselines/reference/invalidReferenceSyntax1.errors.txt index 58fbc197af4..cad7a35eb02 100644 --- a/tests/baselines/reference/invalidReferenceSyntax1.errors.txt +++ b/tests/baselines/reference/invalidReferenceSyntax1.errors.txt @@ -1,7 +1,7 @@ ==== tests/cases/compiler/invalidReferenceSyntax1.ts (1 errors) ==== /// Windows : unknown +>Foundation : unknown + + export interface IPromise { +>IPromise : IPromise +>T : T + + then(success?: (value: T) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void ): Windows.Foundation.IPromise; +>then : { (success?: (value: T) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: T) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: T) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } +>U : U +>success : (value: T) => IPromise +>value : T +>T : T +>IPromise : IPromise +>U : U +>error : (error: any) => IPromise +>error : any +>IPromise : IPromise +>U : U +>progress : (progress: any) => void +>progress : any +>Windows : unknown +>Foundation : unknown +>IPromise : IPromise +>U : U + + then(success?: (value: T) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void ): Windows.Foundation.IPromise; +>then : { (success?: (value: T) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: T) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: T) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } +>U : U +>success : (value: T) => IPromise +>value : T +>T : T +>IPromise : IPromise +>U : U +>error : (error: any) => U +>error : any +>U : U +>progress : (progress: any) => void +>progress : any +>Windows : unknown +>Foundation : unknown +>IPromise : IPromise +>U : U + + then(success?: (value: T) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void ): Windows.Foundation.IPromise; +>then : { (success?: (value: T) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: T) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: T) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } +>U : U +>success : (value: T) => U +>value : T +>T : T +>U : U +>error : (error: any) => IPromise +>error : any +>IPromise : IPromise +>U : U +>progress : (progress: any) => void +>progress : any +>Windows : unknown +>Foundation : unknown +>IPromise : IPromise +>U : U + + then(success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void ): Windows.Foundation.IPromise; +>then : { (success?: (value: T) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: T) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: T) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: T) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } +>U : U +>success : (value: T) => U +>value : T +>T : T +>U : U +>error : (error: any) => U +>error : any +>U : U +>progress : (progress: any) => void +>progress : any +>Windows : unknown +>Foundation : unknown +>IPromise : IPromise +>U : U + + done? (success?: (value: T) => any, error?: (error: any) => any, progress?: (progress: any) => void ): void; +>done : (success?: (value: T) => any, error?: (error: any) => any, progress?: (progress: any) => void) => void +>U : U +>success : (value: T) => any +>value : T +>T : T +>error : (error: any) => any +>error : any +>progress : (progress: any) => void +>progress : any + } +} + +var p: Windows.Foundation.IPromise = null; +>p : Windows.Foundation.IPromise +>Windows : unknown +>Foundation : unknown +>IPromise : Windows.Foundation.IPromise + +p.then(function (x) { } ); // should not error +>p.then(function (x) { } ) : Windows.Foundation.IPromise +>p.then : { (success?: (value: number) => Windows.Foundation.IPromise, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => Windows.Foundation.IPromise, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => U, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => U, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; } +>p : Windows.Foundation.IPromise +>then : { (success?: (value: number) => Windows.Foundation.IPromise, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => Windows.Foundation.IPromise, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => U, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => U, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; } +>function (x) { } : (x: number) => void +>x : number + +p.then(function (x) { return "hello"; } ).then(function (x) { return x } ); // should not error +>p.then(function (x) { return "hello"; } ).then(function (x) { return x } ) : Windows.Foundation.IPromise +>p.then(function (x) { return "hello"; } ).then : { (success?: (value: string) => Windows.Foundation.IPromise, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: string) => Windows.Foundation.IPromise, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: string) => U, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: string) => U, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; } +>p.then(function (x) { return "hello"; } ) : Windows.Foundation.IPromise +>p.then : { (success?: (value: number) => Windows.Foundation.IPromise, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => Windows.Foundation.IPromise, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => U, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => U, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; } +>p : Windows.Foundation.IPromise +>then : { (success?: (value: number) => Windows.Foundation.IPromise, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => Windows.Foundation.IPromise, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => U, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: number) => U, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; } +>function (x) { return "hello"; } : (x: number) => string +>x : number +>then : { (success?: (value: string) => Windows.Foundation.IPromise, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: string) => Windows.Foundation.IPromise, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: string) => U, error?: (error: any) => Windows.Foundation.IPromise, progress?: (progress: any) => void): Windows.Foundation.IPromise; (success?: (value: string) => U, error?: (error: any) => U, progress?: (progress: any) => void): Windows.Foundation.IPromise; } +>function (x) { return x } : (x: string) => string +>x : string +>x : string + + diff --git a/tests/baselines/reference/isLiteral1.types b/tests/baselines/reference/isLiteral1.types new file mode 100644 index 00000000000..f26eab098b4 --- /dev/null +++ b/tests/baselines/reference/isLiteral1.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/isLiteral1.ts === +var x: number = 02343; +>x : number + diff --git a/tests/baselines/reference/isLiteral2.types b/tests/baselines/reference/isLiteral2.types new file mode 100644 index 00000000000..32c1b29f13e --- /dev/null +++ b/tests/baselines/reference/isLiteral2.types @@ -0,0 +1,4 @@ +=== tests/cases/compiler/isLiteral2.ts === +var x: number = 02343 +>x : number + diff --git a/tests/baselines/reference/keywordField.types b/tests/baselines/reference/keywordField.types new file mode 100644 index 00000000000..a5c465ae39c --- /dev/null +++ b/tests/baselines/reference/keywordField.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/keywordField.ts === +var obj:any = {}; +>obj : any +>{} : {} + +obj.if = 1; +>obj.if = 1 : number +>obj.if : any +>obj : any +>if : any + +var a = { if: "test" } +>a : { if: string; } +>{ if: "test" } : { if: string; } +>if : string + +var n = a.if +>n : string +>a.if : string +>a : { if: string; } +>if : string + +var q = a["if"]; +>q : string +>a["if"] : string +>a : { if: string; } + diff --git a/tests/baselines/reference/lambdaASIEmit.types b/tests/baselines/reference/lambdaASIEmit.types new file mode 100644 index 00000000000..b72a805cd12 --- /dev/null +++ b/tests/baselines/reference/lambdaASIEmit.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/lambdaASIEmit.ts === + +function Foo(x: any) +>Foo : (x: any) => void +>x : any +{ +} + +Foo(() => +>Foo(() => // do something 127) : void +>Foo : (x: any) => void +>() => // do something 127 : () => number + + // do something + 127); + diff --git a/tests/baselines/reference/lambdaArgCrash.js b/tests/baselines/reference/lambdaArgCrash.js index 49121f63ba1..d3de40dcb0b 100644 --- a/tests/baselines/reference/lambdaArgCrash.js +++ b/tests/baselines/reference/lambdaArgCrash.js @@ -43,10 +43,13 @@ var __extends = this.__extends || function (d, b) { }; var Event = (function () { function Event() { + // TODO: remove this._listeners = []; this._listeners = []; } Event.prototype.add = function (listener) { + /// Registers a new listener for the event. + /// The callback function to register. this._listeners.push(listener); }; return Event; diff --git a/tests/baselines/reference/lambdaExpression.js b/tests/baselines/reference/lambdaExpression.js index 65636b87dd1..dc5c94c8b33 100644 --- a/tests/baselines/reference/lambdaExpression.js +++ b/tests/baselines/reference/lambdaExpression.js @@ -6,7 +6,7 @@ var x = 0; //// [lambdaExpression.js] -(function () { return 0; }); +(function () { return 0; }); // Needs to be wrapped in parens to be a valid expression (not declaration) var y = 0; (function () { return 0; }); var x = 0; diff --git a/tests/baselines/reference/lambdaExpression.types b/tests/baselines/reference/lambdaExpression.types new file mode 100644 index 00000000000..d550781ebf7 --- /dev/null +++ b/tests/baselines/reference/lambdaExpression.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/lambdaExpression.ts === +() => 0; // Needs to be wrapped in parens to be a valid expression (not declaration) +>() => 0 : () => number + +var y = 0; +>y : number + +(()=>0); +>(()=>0) : () => number +>()=>0 : () => number + +var x = 0; +>x : number + diff --git a/tests/baselines/reference/lambdaParamTypes.js b/tests/baselines/reference/lambdaParamTypes.js index c1457565d3c..3bd212512e4 100644 --- a/tests/baselines/reference/lambdaParamTypes.js +++ b/tests/baselines/reference/lambdaParamTypes.js @@ -25,13 +25,15 @@ thing.doSomething((x, y) => y.name.toExponential(0)); //// [lambdaParamTypes.js] var thing = create([{ name: "bob", id: 24 }, { name: "doug", id: 32 }]); -thing.doSomething(function (x, y) { return x.name.charAt(0); }); -thing.doSomething(function (x, y) { return x.id.toExponential(0); }); -thing.doSomething(function (x, y) { return y.name.charAt(0); }); -thing.doSomething(function (x, y) { return y.id.toExponential(0); }); -thing.doSomething(function (x, y) { return x.foo; }); -thing.doSomething(function (x, y) { return y.foo; }); -thing.doSomething(function (x, y) { return x.id.charAt(0); }); -thing.doSomething(function (x, y) { return x.name.toExponential(0); }); +// Below should all be OK +thing.doSomething(function (x, y) { return x.name.charAt(0); }); // x.name should be string, so should be OK +thing.doSomething(function (x, y) { return x.id.toExponential(0); }); // x.id should be string, so should be OK +thing.doSomething(function (x, y) { return y.name.charAt(0); }); // x.name should be string, so should be OK +thing.doSomething(function (x, y) { return y.id.toExponential(0); }); // x.id should be string, so should be OK +// Below should all be in error +thing.doSomething(function (x, y) { return x.foo; }); // no such property on x +thing.doSomething(function (x, y) { return y.foo; }); // no such property on y +thing.doSomething(function (x, y) { return x.id.charAt(0); }); // x.id should be number, no charAt member +thing.doSomething(function (x, y) { return x.name.toExponential(0); }); // x.name should be string, no toExponential member thing.doSomething(function (x, y) { return y.id.charAt(0); }); thing.doSomething(function (x, y) { return y.name.toExponential(0); }); diff --git a/tests/baselines/reference/libdtsFix.types b/tests/baselines/reference/libdtsFix.types new file mode 100644 index 00000000000..4f94635d998 --- /dev/null +++ b/tests/baselines/reference/libdtsFix.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/libdtsFix.ts === +interface HTMLElement { +>HTMLElement : HTMLElement + + type: string; +>type : string +} + diff --git a/tests/baselines/reference/library_ArraySlice.js b/tests/baselines/reference/library_ArraySlice.js index 89e4134237d..e4f2222d1fe 100644 --- a/tests/baselines/reference/library_ArraySlice.js +++ b/tests/baselines/reference/library_ArraySlice.js @@ -5,6 +5,7 @@ Array.prototype.slice(0); Array.prototype.slice(0, 1); //// [library_ArraySlice.js] +// Array.prototype.slice can have zero, one, or two arguments Array.prototype.slice(); Array.prototype.slice(0); Array.prototype.slice(0, 1); diff --git a/tests/baselines/reference/library_ArraySlice.types b/tests/baselines/reference/library_ArraySlice.types new file mode 100644 index 00000000000..f1309844913 --- /dev/null +++ b/tests/baselines/reference/library_ArraySlice.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/library_ArraySlice.ts === +// Array.prototype.slice can have zero, one, or two arguments +Array.prototype.slice(); +>Array.prototype.slice() : any[] +>Array.prototype.slice : (start?: number, end?: number) => any[] +>Array.prototype : any[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } +>prototype : any[] +>slice : (start?: number, end?: number) => any[] + +Array.prototype.slice(0); +>Array.prototype.slice(0) : any[] +>Array.prototype.slice : (start?: number, end?: number) => any[] +>Array.prototype : any[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } +>prototype : any[] +>slice : (start?: number, end?: number) => any[] + +Array.prototype.slice(0, 1); +>Array.prototype.slice(0, 1) : any[] +>Array.prototype.slice : (start?: number, end?: number) => any[] +>Array.prototype : any[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } +>prototype : any[] +>slice : (start?: number, end?: number) => any[] + diff --git a/tests/baselines/reference/library_DatePrototypeProperties.js b/tests/baselines/reference/library_DatePrototypeProperties.js index 4a9b9269dfa..8619fd17d17 100644 --- a/tests/baselines/reference/library_DatePrototypeProperties.js +++ b/tests/baselines/reference/library_DatePrototypeProperties.js @@ -50,6 +50,8 @@ Date.prototype.toISOString(); Date.prototype.toJSON(null); //// [library_DatePrototypeProperties.js] +// Properties of the Date prototype object as per ES5 spec +// http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5 Date.prototype.constructor; Date.prototype.toString(); Date.prototype.toDateString(); diff --git a/tests/baselines/reference/library_DatePrototypeProperties.types b/tests/baselines/reference/library_DatePrototypeProperties.types new file mode 100644 index 00000000000..15f4c860fa5 --- /dev/null +++ b/tests/baselines/reference/library_DatePrototypeProperties.types @@ -0,0 +1,354 @@ +=== tests/cases/compiler/library_DatePrototypeProperties.ts === +// Properties of the Date prototype object as per ES5 spec +// http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5 +Date.prototype.constructor; +>Date.prototype.constructor : Function +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>constructor : Function + +Date.prototype.toString(); +>Date.prototype.toString() : string +>Date.prototype.toString : () => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toString : () => string + +Date.prototype.toDateString(); +>Date.prototype.toDateString() : string +>Date.prototype.toDateString : () => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toDateString : () => string + +Date.prototype.toTimeString(); +>Date.prototype.toTimeString() : string +>Date.prototype.toTimeString : () => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toTimeString : () => string + +Date.prototype.toLocaleString(); +>Date.prototype.toLocaleString() : string +>Date.prototype.toLocaleString : () => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toLocaleString : () => string + +Date.prototype.toLocaleDateString(); +>Date.prototype.toLocaleDateString() : string +>Date.prototype.toLocaleDateString : () => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toLocaleDateString : () => string + +Date.prototype.toLocaleTimeString(); +>Date.prototype.toLocaleTimeString() : string +>Date.prototype.toLocaleTimeString : () => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toLocaleTimeString : () => string + +Date.prototype.valueOf(); +>Date.prototype.valueOf() : number +>Date.prototype.valueOf : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>valueOf : () => number + +Date.prototype.getTime(); +>Date.prototype.getTime() : number +>Date.prototype.getTime : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getTime : () => number + +Date.prototype.getFullYear(); +>Date.prototype.getFullYear() : number +>Date.prototype.getFullYear : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getFullYear : () => number + +Date.prototype.getUTCFullYear(); +>Date.prototype.getUTCFullYear() : number +>Date.prototype.getUTCFullYear : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getUTCFullYear : () => number + +Date.prototype.getMonth(); +>Date.prototype.getMonth() : number +>Date.prototype.getMonth : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getMonth : () => number + +Date.prototype.getUTCMonth(); +>Date.prototype.getUTCMonth() : number +>Date.prototype.getUTCMonth : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getUTCMonth : () => number + +Date.prototype.getDate(); +>Date.prototype.getDate() : number +>Date.prototype.getDate : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getDate : () => number + +Date.prototype.getUTCDate(); +>Date.prototype.getUTCDate() : number +>Date.prototype.getUTCDate : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getUTCDate : () => number + +Date.prototype.getDay(); +>Date.prototype.getDay() : number +>Date.prototype.getDay : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getDay : () => number + +Date.prototype.getUTCDay(); +>Date.prototype.getUTCDay() : number +>Date.prototype.getUTCDay : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getUTCDay : () => number + +Date.prototype.getHours(); +>Date.prototype.getHours() : number +>Date.prototype.getHours : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getHours : () => number + +Date.prototype.getUTCHours(); +>Date.prototype.getUTCHours() : number +>Date.prototype.getUTCHours : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getUTCHours : () => number + +Date.prototype.getMinutes(); +>Date.prototype.getMinutes() : number +>Date.prototype.getMinutes : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getMinutes : () => number + +Date.prototype.getUTCMinutes(); +>Date.prototype.getUTCMinutes() : number +>Date.prototype.getUTCMinutes : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getUTCMinutes : () => number + +Date.prototype.getSeconds(); +>Date.prototype.getSeconds() : number +>Date.prototype.getSeconds : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getSeconds : () => number + +Date.prototype.getUTCSeconds(); +>Date.prototype.getUTCSeconds() : number +>Date.prototype.getUTCSeconds : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getUTCSeconds : () => number + +Date.prototype.getMilliseconds(); +>Date.prototype.getMilliseconds() : number +>Date.prototype.getMilliseconds : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getMilliseconds : () => number + +Date.prototype.getUTCMilliseconds(); +>Date.prototype.getUTCMilliseconds() : number +>Date.prototype.getUTCMilliseconds : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getUTCMilliseconds : () => number + +Date.prototype.getTimezoneOffset(); +>Date.prototype.getTimezoneOffset() : number +>Date.prototype.getTimezoneOffset : () => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>getTimezoneOffset : () => number + +Date.prototype.setTime(0); +>Date.prototype.setTime(0) : number +>Date.prototype.setTime : (time: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setTime : (time: number) => number + +Date.prototype.setMilliseconds(0); +>Date.prototype.setMilliseconds(0) : number +>Date.prototype.setMilliseconds : (ms: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setMilliseconds : (ms: number) => number + +Date.prototype.setUTCMilliseconds(0); +>Date.prototype.setUTCMilliseconds(0) : number +>Date.prototype.setUTCMilliseconds : (ms: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setUTCMilliseconds : (ms: number) => number + +Date.prototype.setSeconds(0); +>Date.prototype.setSeconds(0) : number +>Date.prototype.setSeconds : (sec: number, ms?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setSeconds : (sec: number, ms?: number) => number + +Date.prototype.setUTCSeconds(0); +>Date.prototype.setUTCSeconds(0) : number +>Date.prototype.setUTCSeconds : (sec: number, ms?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setUTCSeconds : (sec: number, ms?: number) => number + +Date.prototype.setMinutes(0); +>Date.prototype.setMinutes(0) : number +>Date.prototype.setMinutes : (min: number, sec?: number, ms?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setMinutes : (min: number, sec?: number, ms?: number) => number + +Date.prototype.setUTCMinutes(0); +>Date.prototype.setUTCMinutes(0) : number +>Date.prototype.setUTCMinutes : (min: number, sec?: number, ms?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setUTCMinutes : (min: number, sec?: number, ms?: number) => number + +Date.prototype.setHours(0); +>Date.prototype.setHours(0) : number +>Date.prototype.setHours : (hours: number, min?: number, sec?: number, ms?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setHours : (hours: number, min?: number, sec?: number, ms?: number) => number + +Date.prototype.setUTCHours(0); +>Date.prototype.setUTCHours(0) : number +>Date.prototype.setUTCHours : (hours: number, min?: number, sec?: number, ms?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setUTCHours : (hours: number, min?: number, sec?: number, ms?: number) => number + +Date.prototype.setDate(0); +>Date.prototype.setDate(0) : number +>Date.prototype.setDate : (date: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setDate : (date: number) => number + +Date.prototype.setUTCDate(0); +>Date.prototype.setUTCDate(0) : number +>Date.prototype.setUTCDate : (date: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setUTCDate : (date: number) => number + +Date.prototype.setMonth(0); +>Date.prototype.setMonth(0) : number +>Date.prototype.setMonth : (month: number, date?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setMonth : (month: number, date?: number) => number + +Date.prototype.setUTCMonth(0); +>Date.prototype.setUTCMonth(0) : number +>Date.prototype.setUTCMonth : (month: number, date?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setUTCMonth : (month: number, date?: number) => number + +Date.prototype.setFullYear(0); +>Date.prototype.setFullYear(0) : number +>Date.prototype.setFullYear : (year: number, month?: number, date?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setFullYear : (year: number, month?: number, date?: number) => number + +Date.prototype.setUTCFullYear(0); +>Date.prototype.setUTCFullYear(0) : number +>Date.prototype.setUTCFullYear : (year: number, month?: number, date?: number) => number +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>setUTCFullYear : (year: number, month?: number, date?: number) => number + +Date.prototype.toUTCString(); +>Date.prototype.toUTCString() : string +>Date.prototype.toUTCString : () => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toUTCString : () => string + +Date.prototype.toISOString(); +>Date.prototype.toISOString() : string +>Date.prototype.toISOString : () => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toISOString : () => string + +Date.prototype.toJSON(null); +>Date.prototype.toJSON(null) : string +>Date.prototype.toJSON : (key?: any) => string +>Date.prototype : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } +>prototype : Date +>toJSON : (key?: any) => string + diff --git a/tests/baselines/reference/library_ObjectPrototypeProperties.js b/tests/baselines/reference/library_ObjectPrototypeProperties.js index ce3b18b28b6..59ef1a9f6f7 100644 --- a/tests/baselines/reference/library_ObjectPrototypeProperties.js +++ b/tests/baselines/reference/library_ObjectPrototypeProperties.js @@ -10,6 +10,8 @@ Object.prototype.isPrototypeOf(Object); Object.prototype.propertyIsEnumerable("string"); //// [library_ObjectPrototypeProperties.js] +// Properties of the Object Prototype Object as per ES5 spec +// http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.4 Object.prototype.constructor; Object.prototype.toString(); Object.prototype.toLocaleString(); diff --git a/tests/baselines/reference/library_ObjectPrototypeProperties.types b/tests/baselines/reference/library_ObjectPrototypeProperties.types new file mode 100644 index 00000000000..447d855778f --- /dev/null +++ b/tests/baselines/reference/library_ObjectPrototypeProperties.types @@ -0,0 +1,59 @@ +=== tests/cases/compiler/library_ObjectPrototypeProperties.ts === +// Properties of the Object Prototype Object as per ES5 spec +// http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.4 +Object.prototype.constructor; +>Object.prototype.constructor : Function +>Object.prototype : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>prototype : Object +>constructor : Function + +Object.prototype.toString(); +>Object.prototype.toString() : string +>Object.prototype.toString : () => string +>Object.prototype : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>prototype : Object +>toString : () => string + +Object.prototype.toLocaleString(); +>Object.prototype.toLocaleString() : string +>Object.prototype.toLocaleString : () => string +>Object.prototype : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>prototype : Object +>toLocaleString : () => string + +Object.prototype.valueOf(); +>Object.prototype.valueOf() : Object +>Object.prototype.valueOf : () => Object +>Object.prototype : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>prototype : Object +>valueOf : () => Object + +Object.prototype.hasOwnProperty("string"); +>Object.prototype.hasOwnProperty("string") : boolean +>Object.prototype.hasOwnProperty : (v: string) => boolean +>Object.prototype : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>prototype : Object +>hasOwnProperty : (v: string) => boolean + +Object.prototype.isPrototypeOf(Object); +>Object.prototype.isPrototypeOf(Object) : boolean +>Object.prototype.isPrototypeOf : (v: Object) => boolean +>Object.prototype : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>prototype : Object +>isPrototypeOf : (v: Object) => boolean +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + +Object.prototype.propertyIsEnumerable("string"); +>Object.prototype.propertyIsEnumerable("string") : boolean +>Object.prototype.propertyIsEnumerable : (v: string) => boolean +>Object.prototype : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>prototype : Object +>propertyIsEnumerable : (v: string) => boolean + diff --git a/tests/baselines/reference/library_RegExpExecArraySlice.js b/tests/baselines/reference/library_RegExpExecArraySlice.js index f5a07524726..ae510e90dcb 100644 --- a/tests/baselines/reference/library_RegExpExecArraySlice.js +++ b/tests/baselines/reference/library_RegExpExecArraySlice.js @@ -6,6 +6,7 @@ regExpExecArrayValue.slice(0); regExpExecArrayValue.slice(0,1); //// [library_RegExpExecArraySlice.js] +// RegExpExecArray.slice can have zero, one, or two arguments var regExpExecArrayValue; regExpExecArrayValue.slice(); regExpExecArrayValue.slice(0); diff --git a/tests/baselines/reference/library_RegExpExecArraySlice.types b/tests/baselines/reference/library_RegExpExecArraySlice.types new file mode 100644 index 00000000000..ba5c3ccfb21 --- /dev/null +++ b/tests/baselines/reference/library_RegExpExecArraySlice.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/library_RegExpExecArraySlice.ts === +// RegExpExecArray.slice can have zero, one, or two arguments +var regExpExecArrayValue: RegExpExecArray; +>regExpExecArrayValue : RegExpExecArray +>RegExpExecArray : RegExpExecArray + +regExpExecArrayValue.slice(); +>regExpExecArrayValue.slice() : string[] +>regExpExecArrayValue.slice : (start?: number, end?: number) => string[] +>regExpExecArrayValue : RegExpExecArray +>slice : (start?: number, end?: number) => string[] + +regExpExecArrayValue.slice(0); +>regExpExecArrayValue.slice(0) : string[] +>regExpExecArrayValue.slice : (start?: number, end?: number) => string[] +>regExpExecArrayValue : RegExpExecArray +>slice : (start?: number, end?: number) => string[] + +regExpExecArrayValue.slice(0,1); +>regExpExecArrayValue.slice(0,1) : string[] +>regExpExecArrayValue.slice : (start?: number, end?: number) => string[] +>regExpExecArrayValue : RegExpExecArray +>slice : (start?: number, end?: number) => string[] + diff --git a/tests/baselines/reference/library_StringSlice.js b/tests/baselines/reference/library_StringSlice.js index 28a0b27b902..9fd7774e772 100644 --- a/tests/baselines/reference/library_StringSlice.js +++ b/tests/baselines/reference/library_StringSlice.js @@ -6,6 +6,7 @@ String.prototype.slice(0,1); //// [library_StringSlice.js] +// String.prototype.slice can have zero, one, or two arguments String.prototype.slice(); String.prototype.slice(0); String.prototype.slice(0, 1); diff --git a/tests/baselines/reference/library_StringSlice.types b/tests/baselines/reference/library_StringSlice.types new file mode 100644 index 00000000000..4733ab39908 --- /dev/null +++ b/tests/baselines/reference/library_StringSlice.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/library_StringSlice.ts === +// String.prototype.slice can have zero, one, or two arguments +String.prototype.slice(); +>String.prototype.slice() : string +>String.prototype.slice : (start?: number, end?: number) => string +>String.prototype : String +>String : { (value?: any): string; new (value?: any): String; prototype: String; fromCharCode(...codes: number[]): string; } +>prototype : String +>slice : (start?: number, end?: number) => string + +String.prototype.slice(0); +>String.prototype.slice(0) : string +>String.prototype.slice : (start?: number, end?: number) => string +>String.prototype : String +>String : { (value?: any): string; new (value?: any): String; prototype: String; fromCharCode(...codes: number[]): string; } +>prototype : String +>slice : (start?: number, end?: number) => string + +String.prototype.slice(0,1); +>String.prototype.slice(0,1) : string +>String.prototype.slice : (start?: number, end?: number) => string +>String.prototype : String +>String : { (value?: any): string; new (value?: any): String; prototype: String; fromCharCode(...codes: number[]): string; } +>prototype : String +>slice : (start?: number, end?: number) => string + diff --git a/tests/baselines/reference/listFailure.types b/tests/baselines/reference/listFailure.types new file mode 100644 index 00000000000..de3c33bbfad --- /dev/null +++ b/tests/baselines/reference/listFailure.types @@ -0,0 +1,127 @@ +=== tests/cases/compiler/listFailure.ts === +module Editor { +>Editor : typeof Editor + + export class Buffer { +>Buffer : Buffer + + lines: List = ListMakeHead(); +>lines : List +>List : List +>Line : Line +>ListMakeHead() : List +>ListMakeHead : () => List +>Line : Line + + addLine(lineText: string): List { +>addLine : (lineText: string) => List +>lineText : string +>List : List +>Line : Line + + var line: Line = new Line(); +>line : Line +>Line : Line +>new Line() : Line +>Line : typeof Line + + var lineEntry = this.lines.add(line); +>lineEntry : List +>this.lines.add(line) : List +>this.lines.add : (data: Line) => List +>this.lines : List +>this : Buffer +>lines : List +>add : (data: Line) => List +>line : Line + + return lineEntry; +>lineEntry : List + } + } + + export function ListRemoveEntry(entry: List): List { +>ListRemoveEntry : (entry: List) => List +>U : U +>entry : List +>List : List +>U : U +>List : List +>U : U + + return entry; +>entry : List + } + + export function ListMakeHead(): List { +>ListMakeHead : () => List +>U : U +>List : List +>U : U + + return null; + } + + export function ListMakeEntry(data: U): List { +>ListMakeEntry : (data: U) => List +>U : U +>data : U +>U : U +>List : List +>U : U + + return null; + } + + class List { +>List : List +>T : T + + public next: List; +>next : List +>List : List +>T : T + + add(data: T): List { +>add : (data: T) => List +>data : T +>T : T +>List : List +>T : T + + this.next = ListMakeEntry(data); +>this.next = ListMakeEntry(data) : List +>this.next : List +>this : List +>next : List +>ListMakeEntry(data) : List +>ListMakeEntry : (data: U) => List +>data : T + + return this.next; +>this.next : List +>this : List +>next : List + } + + popEntry(head: List): List { +>popEntry : (head: List) => List +>head : List +>List : List +>T : T +>List : List +>T : T + + return (ListRemoveEntry(this.next)); +>(ListRemoveEntry(this.next)) : List +>ListRemoveEntry(this.next) : List +>ListRemoveEntry : (entry: List) => List +>this.next : List +>this : List +>next : List + } + } + + export class Line {} +>Line : Line +} diff --git a/tests/baselines/reference/literals-negative.js b/tests/baselines/reference/literals-negative.js index a16e1524e8c..c0c9624e6f2 100644 --- a/tests/baselines/reference/literals-negative.js +++ b/tests/baselines/reference/literals-negative.js @@ -12,10 +12,13 @@ if(null === isVoid()) { } //// [literals-negative.js] +// Type type of the null literal is the Null type. +// Null can be converted to anything except Void var n = (null); var s = (null); var b = (n); function isVoid() { } +// Expected error: Values of type null and void cannot be compared if (null === isVoid()) { } diff --git a/tests/baselines/reference/literals1.types b/tests/baselines/reference/literals1.types new file mode 100644 index 00000000000..f1d6736fdca --- /dev/null +++ b/tests/baselines/reference/literals1.types @@ -0,0 +1,43 @@ +=== tests/cases/compiler/literals1.ts === +var a = 42; +>a : number + +var b = 0xFA34; +>b : number + +var c = 0.1715; +>c : number + +var d = 3.14E5; +>d : number + +var e = 8.14e-5; +>e : number + +var f = true; +>f : boolean + +var g = false; +>g : boolean + +var h = ""; +>h : string + +var i = "hi"; +>i : string + +var j = ''; +>j : string + +var k = 'q\tq'; +>k : string + +var m = /q/; +>m : RegExp + +var n = /\d+/g; +>n : RegExp + +var o = /[3-5]+/i; +>o : RegExp + diff --git a/tests/baselines/reference/localAliasExportAssignment.js b/tests/baselines/reference/localAliasExportAssignment.js index 66f30c04e36..ce0f57d57cb 100644 --- a/tests/baselines/reference/localAliasExportAssignment.js +++ b/tests/baselines/reference/localAliasExportAssignment.js @@ -20,5 +20,6 @@ connect(); var server; module.exports = server; //// [localAliasExportAssignment_1.js] +/// var connect = require('localAliasExportAssignment_0'); connect(); diff --git a/tests/baselines/reference/localAliasExportAssignment.types b/tests/baselines/reference/localAliasExportAssignment.types new file mode 100644 index 00000000000..5ea0d3085c1 --- /dev/null +++ b/tests/baselines/reference/localAliasExportAssignment.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/localAliasExportAssignment_1.ts === +/// +import connect = require('localAliasExportAssignment_0'); +>connect : () => any + +connect(); +>connect() : any +>connect : () => any + + + +=== tests/cases/compiler/localAliasExportAssignment_0.ts === +var server: { +>server : () => any + + (): any; +}; + +export = server; +>server : () => any + diff --git a/tests/baselines/reference/localImportNameVsGlobalName.types b/tests/baselines/reference/localImportNameVsGlobalName.types new file mode 100644 index 00000000000..7cb45208e81 --- /dev/null +++ b/tests/baselines/reference/localImportNameVsGlobalName.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/localImportNameVsGlobalName.ts === +module Keyboard { +>Keyboard : typeof Keyboard + + export enum Key { UP, DOWN, LEFT, RIGHT } +>Key : Key +>UP : Key +>DOWN : Key +>LEFT : Key +>RIGHT : Key +} + +module App { +>App : typeof App + + import Key = Keyboard.Key; +>Key : typeof Key +>Keyboard : typeof Keyboard +>Key : Key + + export function foo(key: Key): void {} +>foo : (key: Key) => void +>key : Key +>Key : Key + + foo(Key.UP); +>foo(Key.UP) : void +>foo : (key: Key) => void +>Key.UP : Key +>Key : typeof Key +>UP : Key + + foo(Key.DOWN); +>foo(Key.DOWN) : void +>foo : (key: Key) => void +>Key.DOWN : Key +>Key : typeof Key +>DOWN : Key + + foo(Key.LEFT); +>foo(Key.LEFT) : void +>foo : (key: Key) => void +>Key.LEFT : Key +>Key : typeof Key +>LEFT : Key +} diff --git a/tests/baselines/reference/localVariablesReturnedFromCatchBlocks.js b/tests/baselines/reference/localVariablesReturnedFromCatchBlocks.js index ed020ceed32..a68143c44af 100644 --- a/tests/baselines/reference/localVariablesReturnedFromCatchBlocks.js +++ b/tests/baselines/reference/localVariablesReturnedFromCatchBlocks.js @@ -13,6 +13,6 @@ function f() { } catch (e) { var stack2 = e.stack; - return stack2; + return stack2; //error TS2095: Could not find symbol 'stack2'. } } diff --git a/tests/baselines/reference/localVariablesReturnedFromCatchBlocks.types b/tests/baselines/reference/localVariablesReturnedFromCatchBlocks.types new file mode 100644 index 00000000000..81ee0ddc74a --- /dev/null +++ b/tests/baselines/reference/localVariablesReturnedFromCatchBlocks.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/localVariablesReturnedFromCatchBlocks.ts === +function f() { +>f : () => any + + try { + } catch (e) { +>e : any + + var stack2 = e.stack; +>stack2 : any +>e.stack : any +>e : any +>stack : any + + return stack2; //error TS2095: Could not find symbol 'stack2'. +>stack2 : any + } +} diff --git a/tests/baselines/reference/logicalAndOperatorWithEveryType.js b/tests/baselines/reference/logicalAndOperatorWithEveryType.js index a9e714e8820..12bc06e8357 100644 --- a/tests/baselines/reference/logicalAndOperatorWithEveryType.js +++ b/tests/baselines/reference/logicalAndOperatorWithEveryType.js @@ -124,6 +124,8 @@ var rj9 = null && undefined; var rj10 = undefined && undefined; //// [logicalAndOperatorWithEveryType.js] +// The && operator permits the operands to be of any type and produces a result of the same +// type as the second operand. var E; (function (E) { E[E["a"] = 0] = "a"; diff --git a/tests/baselines/reference/logicalAndOperatorWithEveryType.types b/tests/baselines/reference/logicalAndOperatorWithEveryType.types new file mode 100644 index 00000000000..54f04926e98 --- /dev/null +++ b/tests/baselines/reference/logicalAndOperatorWithEveryType.types @@ -0,0 +1,615 @@ +=== tests/cases/conformance/expressions/binaryOperators/logicalAndOperator/logicalAndOperatorWithEveryType.ts === +// The && operator permits the operands to be of any type and produces a result of the same +// type as the second operand. + +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a1: any; +>a1 : any + +var a2: boolean; +>a2 : boolean + +var a3: number +>a3 : number + +var a4: string; +>a4 : string + +var a5: void; +>a5 : void + +var a6: E; +>a6 : E +>E : E + +var a7: {}; +>a7 : {} + +var a8: string[]; +>a8 : string[] + +var ra1 = a1 && a1; +>ra1 : any +>a1 && a1 : any +>a1 : any +>a1 : any + +var ra2 = a2 && a1; +>ra2 : any +>a2 && a1 : any +>a2 : boolean +>a1 : any + +var ra3 = a3 && a1; +>ra3 : any +>a3 && a1 : any +>a3 : number +>a1 : any + +var ra4 = a4 && a1; +>ra4 : any +>a4 && a1 : any +>a4 : string +>a1 : any + +var ra5 = a5 && a1; +>ra5 : any +>a5 && a1 : any +>a5 : void +>a1 : any + +var ra6 = a6 && a1; +>ra6 : any +>a6 && a1 : any +>a6 : E +>a1 : any + +var ra7 = a7 && a1; +>ra7 : any +>a7 && a1 : any +>a7 : {} +>a1 : any + +var ra8 = a8 && a1; +>ra8 : any +>a8 && a1 : any +>a8 : string[] +>a1 : any + +var ra9 = null && a1; +>ra9 : any +>null && a1 : any +>a1 : any + +var ra10 = undefined && a1; +>ra10 : any +>undefined && a1 : any +>undefined : undefined +>a1 : any + +var rb1 = a1 && a2; +>rb1 : boolean +>a1 && a2 : boolean +>a1 : any +>a2 : boolean + +var rb2 = a2 && a2; +>rb2 : boolean +>a2 && a2 : boolean +>a2 : boolean +>a2 : boolean + +var rb3 = a3 && a2; +>rb3 : boolean +>a3 && a2 : boolean +>a3 : number +>a2 : boolean + +var rb4 = a4 && a2; +>rb4 : boolean +>a4 && a2 : boolean +>a4 : string +>a2 : boolean + +var rb5 = a5 && a2; +>rb5 : boolean +>a5 && a2 : boolean +>a5 : void +>a2 : boolean + +var rb6 = a6 && a2; +>rb6 : boolean +>a6 && a2 : boolean +>a6 : E +>a2 : boolean + +var rb7 = a7 && a2; +>rb7 : boolean +>a7 && a2 : boolean +>a7 : {} +>a2 : boolean + +var rb8 = a8 && a2; +>rb8 : boolean +>a8 && a2 : boolean +>a8 : string[] +>a2 : boolean + +var rb9 = null && a2; +>rb9 : boolean +>null && a2 : boolean +>a2 : boolean + +var rb10 = undefined && a2; +>rb10 : boolean +>undefined && a2 : boolean +>undefined : undefined +>a2 : boolean + +var rc1 = a1 && a3; +>rc1 : number +>a1 && a3 : number +>a1 : any +>a3 : number + +var rc2 = a2 && a3; +>rc2 : number +>a2 && a3 : number +>a2 : boolean +>a3 : number + +var rc3 = a3 && a3; +>rc3 : number +>a3 && a3 : number +>a3 : number +>a3 : number + +var rc4 = a4 && a3; +>rc4 : number +>a4 && a3 : number +>a4 : string +>a3 : number + +var rc5 = a5 && a3; +>rc5 : number +>a5 && a3 : number +>a5 : void +>a3 : number + +var rc6 = a6 && a3; +>rc6 : number +>a6 && a3 : number +>a6 : E +>a3 : number + +var rc7 = a7 && a3; +>rc7 : number +>a7 && a3 : number +>a7 : {} +>a3 : number + +var rc8 = a8 && a3; +>rc8 : number +>a8 && a3 : number +>a8 : string[] +>a3 : number + +var rc9 = null && a3; +>rc9 : number +>null && a3 : number +>a3 : number + +var rc10 = undefined && a3; +>rc10 : number +>undefined && a3 : number +>undefined : undefined +>a3 : number + +var rd1 = a1 && a4; +>rd1 : string +>a1 && a4 : string +>a1 : any +>a4 : string + +var rd2 = a2 && a4; +>rd2 : string +>a2 && a4 : string +>a2 : boolean +>a4 : string + +var rd3 = a3 && a4; +>rd3 : string +>a3 && a4 : string +>a3 : number +>a4 : string + +var rd4 = a4 && a4; +>rd4 : string +>a4 && a4 : string +>a4 : string +>a4 : string + +var rd5 = a5 && a4; +>rd5 : string +>a5 && a4 : string +>a5 : void +>a4 : string + +var rd6 = a6 && a4; +>rd6 : string +>a6 && a4 : string +>a6 : E +>a4 : string + +var rd7 = a7 && a4; +>rd7 : string +>a7 && a4 : string +>a7 : {} +>a4 : string + +var rd8 = a8 && a4; +>rd8 : string +>a8 && a4 : string +>a8 : string[] +>a4 : string + +var rd9 = null && a4; +>rd9 : string +>null && a4 : string +>a4 : string + +var rd10 = undefined && a4; +>rd10 : string +>undefined && a4 : string +>undefined : undefined +>a4 : string + +var re1 = a1 && a5; +>re1 : void +>a1 && a5 : void +>a1 : any +>a5 : void + +var re2 = a2 && a5; +>re2 : void +>a2 && a5 : void +>a2 : boolean +>a5 : void + +var re3 = a3 && a5; +>re3 : void +>a3 && a5 : void +>a3 : number +>a5 : void + +var re4 = a4 && a5; +>re4 : void +>a4 && a5 : void +>a4 : string +>a5 : void + +var re5 = a5 && a5; +>re5 : void +>a5 && a5 : void +>a5 : void +>a5 : void + +var re6 = a6 && a5; +>re6 : void +>a6 && a5 : void +>a6 : E +>a5 : void + +var re7 = a7 && a5; +>re7 : void +>a7 && a5 : void +>a7 : {} +>a5 : void + +var re8 = a8 && a5; +>re8 : void +>a8 && a5 : void +>a8 : string[] +>a5 : void + +var re9 = null && a5; +>re9 : void +>null && a5 : void +>a5 : void + +var re10 = undefined && a5; +>re10 : void +>undefined && a5 : void +>undefined : undefined +>a5 : void + +var rf1 = a1 && a6; +>rf1 : E +>a1 && a6 : E +>a1 : any +>a6 : E + +var rf2 = a2 && a6; +>rf2 : E +>a2 && a6 : E +>a2 : boolean +>a6 : E + +var rf3 = a3 && a6; +>rf3 : E +>a3 && a6 : E +>a3 : number +>a6 : E + +var rf4 = a4 && a6; +>rf4 : E +>a4 && a6 : E +>a4 : string +>a6 : E + +var rf5 = a5 && a6; +>rf5 : E +>a5 && a6 : E +>a5 : void +>a6 : E + +var rf6 = a6 && a6; +>rf6 : E +>a6 && a6 : E +>a6 : E +>a6 : E + +var rf7 = a7 && a6; +>rf7 : E +>a7 && a6 : E +>a7 : {} +>a6 : E + +var rf8 = a8 && a6; +>rf8 : E +>a8 && a6 : E +>a8 : string[] +>a6 : E + +var rf9 = null && a6; +>rf9 : E +>null && a6 : E +>a6 : E + +var rf10 = undefined && a6; +>rf10 : E +>undefined && a6 : E +>undefined : undefined +>a6 : E + +var rg1 = a1 && a7; +>rg1 : {} +>a1 && a7 : {} +>a1 : any +>a7 : {} + +var rg2 = a2 && a7; +>rg2 : {} +>a2 && a7 : {} +>a2 : boolean +>a7 : {} + +var rg3 = a3 && a7; +>rg3 : {} +>a3 && a7 : {} +>a3 : number +>a7 : {} + +var rg4 = a4 && a7; +>rg4 : {} +>a4 && a7 : {} +>a4 : string +>a7 : {} + +var rg5 = a5 && a7; +>rg5 : {} +>a5 && a7 : {} +>a5 : void +>a7 : {} + +var rg6 = a6 && a7; +>rg6 : {} +>a6 && a7 : {} +>a6 : E +>a7 : {} + +var rg7 = a7 && a7; +>rg7 : {} +>a7 && a7 : {} +>a7 : {} +>a7 : {} + +var rg8 = a8 && a7; +>rg8 : {} +>a8 && a7 : {} +>a8 : string[] +>a7 : {} + +var rg9 = null && a7; +>rg9 : {} +>null && a7 : {} +>a7 : {} + +var rg10 = undefined && a7; +>rg10 : {} +>undefined && a7 : {} +>undefined : undefined +>a7 : {} + +var rh1 = a1 && a8; +>rh1 : string[] +>a1 && a8 : string[] +>a1 : any +>a8 : string[] + +var rh2 = a2 && a8; +>rh2 : string[] +>a2 && a8 : string[] +>a2 : boolean +>a8 : string[] + +var rh3 = a3 && a8; +>rh3 : string[] +>a3 && a8 : string[] +>a3 : number +>a8 : string[] + +var rh4 = a4 && a8; +>rh4 : string[] +>a4 && a8 : string[] +>a4 : string +>a8 : string[] + +var rh5 = a5 && a8; +>rh5 : string[] +>a5 && a8 : string[] +>a5 : void +>a8 : string[] + +var rh6 = a6 && a8; +>rh6 : string[] +>a6 && a8 : string[] +>a6 : E +>a8 : string[] + +var rh7 = a7 && a8; +>rh7 : string[] +>a7 && a8 : string[] +>a7 : {} +>a8 : string[] + +var rh8 = a8 && a8; +>rh8 : string[] +>a8 && a8 : string[] +>a8 : string[] +>a8 : string[] + +var rh9 = null && a8; +>rh9 : string[] +>null && a8 : string[] +>a8 : string[] + +var rh10 = undefined && a8; +>rh10 : string[] +>undefined && a8 : string[] +>undefined : undefined +>a8 : string[] + +var ri1 = a1 && null; +>ri1 : any +>a1 && null : null +>a1 : any + +var ri2 = a2 && null; +>ri2 : any +>a2 && null : null +>a2 : boolean + +var ri3 = a3 && null; +>ri3 : any +>a3 && null : null +>a3 : number + +var ri4 = a4 && null; +>ri4 : any +>a4 && null : null +>a4 : string + +var ri5 = a5 && null; +>ri5 : any +>a5 && null : null +>a5 : void + +var ri6 = a6 && null; +>ri6 : any +>a6 && null : null +>a6 : E + +var ri7 = a7 && null; +>ri7 : any +>a7 && null : null +>a7 : {} + +var ri8 = a8 && null; +>ri8 : any +>a8 && null : null +>a8 : string[] + +var ri9 = null && null; +>ri9 : any +>null && null : null + +var ri10 = undefined && null; +>ri10 : any +>undefined && null : null +>undefined : undefined + +var rj1 = a1 && undefined; +>rj1 : any +>a1 && undefined : undefined +>a1 : any +>undefined : undefined + +var rj2 = a2 && undefined; +>rj2 : any +>a2 && undefined : undefined +>a2 : boolean +>undefined : undefined + +var rj3 = a3 && undefined; +>rj3 : any +>a3 && undefined : undefined +>a3 : number +>undefined : undefined + +var rj4 = a4 && undefined; +>rj4 : any +>a4 && undefined : undefined +>a4 : string +>undefined : undefined + +var rj5 = a5 && undefined; +>rj5 : any +>a5 && undefined : undefined +>a5 : void +>undefined : undefined + +var rj6 = a6 && undefined; +>rj6 : any +>a6 && undefined : undefined +>a6 : E +>undefined : undefined + +var rj7 = a7 && undefined; +>rj7 : any +>a7 && undefined : undefined +>a7 : {} +>undefined : undefined + +var rj8 = a8 && undefined; +>rj8 : any +>a8 && undefined : undefined +>a8 : string[] +>undefined : undefined + +var rj9 = null && undefined; +>rj9 : any +>null && undefined : undefined +>undefined : undefined + +var rj10 = undefined && undefined; +>rj10 : any +>undefined && undefined : undefined +>undefined : undefined +>undefined : undefined + diff --git a/tests/baselines/reference/logicalAndOperatorWithTypeParameters.js b/tests/baselines/reference/logicalAndOperatorWithTypeParameters.js index 006b1a093c1..d60f8230b01 100644 --- a/tests/baselines/reference/logicalAndOperatorWithTypeParameters.js +++ b/tests/baselines/reference/logicalAndOperatorWithTypeParameters.js @@ -20,6 +20,8 @@ function foo(t: T, u: U, v: V) { } //// [logicalAndOperatorWithTypeParameters.js] +// The && operator permits the operands to be of any type and produces a result of the same +// type as the second operand. function foo(t, u, v) { var r1 = t && t; var r2 = u && t; diff --git a/tests/baselines/reference/logicalAndOperatorWithTypeParameters.types b/tests/baselines/reference/logicalAndOperatorWithTypeParameters.types new file mode 100644 index 00000000000..f77b231c6bc --- /dev/null +++ b/tests/baselines/reference/logicalAndOperatorWithTypeParameters.types @@ -0,0 +1,79 @@ +=== tests/cases/conformance/expressions/binaryOperators/logicalAndOperator/logicalAndOperatorWithTypeParameters.ts === +// The && operator permits the operands to be of any type and produces a result of the same +// type as the second operand. + +function foo(t: T, u: U, v: V) { +>foo : (t: T, u: U, v: V) => void +>T : T +>U : U +>V : V +>t : T +>T : T +>u : U +>U : U +>v : V +>V : V + + var r1 = t && t; +>r1 : T +>t && t : T +>t : T +>t : T + + var r2 = u && t; +>r2 : T +>u && t : T +>u : U +>t : T + + var r3 = v && t; +>r3 : T +>v && t : T +>v : V +>t : T + + var r4 = t && u; +>r4 : U +>t && u : U +>t : T +>u : U + + var r5 = u && u; +>r5 : U +>u && u : U +>u : U +>u : U + + var r6 = v && u; +>r6 : U +>v && u : U +>v : V +>u : U + + var r7 = t && v; +>r7 : V +>t && v : V +>t : T +>v : V + + var r8 = u && v; +>r8 : V +>u && v : V +>u : U +>v : V + + var r9 = v && v; +>r9 : V +>v && v : V +>v : V +>v : V + + var a: number; +>a : number + + var r10 = t && a; +>r10 : number +>t && a : number +>t : T +>a : number +} diff --git a/tests/baselines/reference/logicalNotOperatorWithAnyOtherType.js b/tests/baselines/reference/logicalNotOperatorWithAnyOtherType.js index 555f6f95e6e..04317151f86 100644 --- a/tests/baselines/reference/logicalNotOperatorWithAnyOtherType.js +++ b/tests/baselines/reference/logicalNotOperatorWithAnyOtherType.js @@ -60,6 +60,7 @@ var ResultIsBoolean21 = !!!(ANY + ANY1); !M.n; //// [logicalNotOperatorWithAnyOtherType.js] +// ! operator on any type var ANY; var ANY1; var ANY2 = ["", ""]; @@ -84,14 +85,17 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// any type var var ResultIsBoolean1 = !ANY1; var ResultIsBoolean2 = !ANY2; var ResultIsBoolean3 = !A; var ResultIsBoolean4 = !M; var ResultIsBoolean5 = !obj; var ResultIsBoolean6 = !obj1; +// any type literal var ResultIsBoolean7 = !undefined; var ResultIsBoolean8 = !null; +// any type expressions var ResultIsBoolean9 = !ANY2[0]; var ResultIsBoolean10 = !obj1.x; var ResultIsBoolean11 = !obj1.y; @@ -103,8 +107,10 @@ var ResultIsBoolean16 = !(ANY + ANY1); var ResultIsBoolean17 = !(null + undefined); var ResultIsBoolean18 = !(null + null); var ResultIsBoolean19 = !(undefined + undefined); +// multiple ! operators var ResultIsBoolean20 = !!ANY; var ResultIsBoolean21 = !!!(ANY + ANY1); +// miss assignment operators !ANY; !ANY1; !ANY2[0]; diff --git a/tests/baselines/reference/logicalNotOperatorWithBooleanType.js b/tests/baselines/reference/logicalNotOperatorWithBooleanType.js index 9b7e774138f..0f3c39a09ff 100644 --- a/tests/baselines/reference/logicalNotOperatorWithBooleanType.js +++ b/tests/baselines/reference/logicalNotOperatorWithBooleanType.js @@ -39,6 +39,7 @@ var ResultIsBoolean = !!BOOLEAN; !M.n; //// [logicalNotOperatorWithBooleanType.js] +// ! operator on boolean type var BOOLEAN; function foo() { return true; @@ -56,14 +57,19 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// boolean type var var ResultIsBoolean1 = !BOOLEAN; +// boolean type literal var ResultIsBoolean2 = !true; var ResultIsBoolean3 = !{ x: true, y: false }; +// boolean type expressions var ResultIsBoolean4 = !objA.a; var ResultIsBoolean5 = !M.n; var ResultIsBoolean6 = !foo(); var ResultIsBoolean7 = !A.foo(); +// multiple ! operators var ResultIsBoolean = !!BOOLEAN; +// miss assignment operators !true; !BOOLEAN; !foo(); diff --git a/tests/baselines/reference/logicalNotOperatorWithBooleanType.types b/tests/baselines/reference/logicalNotOperatorWithBooleanType.types new file mode 100644 index 00000000000..e232ae2af80 --- /dev/null +++ b/tests/baselines/reference/logicalNotOperatorWithBooleanType.types @@ -0,0 +1,112 @@ +=== tests/cases/conformance/expressions/unaryOperators/logicalNotOperator/logicalNotOperatorWithBooleanType.ts === +// ! operator on boolean type +var BOOLEAN: boolean; +>BOOLEAN : boolean + +function foo(): boolean { return true; } +>foo : () => boolean + +class A { +>A : A + + public a: boolean; +>a : boolean + + static foo() { return false; } +>foo : () => boolean +} +module M { +>M : typeof M + + export var n: boolean; +>n : boolean +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// boolean type var +var ResultIsBoolean1 = !BOOLEAN; +>ResultIsBoolean1 : boolean +>!BOOLEAN : boolean +>BOOLEAN : boolean + +// boolean type literal +var ResultIsBoolean2 = !true; +>ResultIsBoolean2 : boolean +>!true : boolean + +var ResultIsBoolean3 = !{ x: true, y: false }; +>ResultIsBoolean3 : boolean +>!{ x: true, y: false } : boolean +>{ x: true, y: false } : { x: boolean; y: boolean; } +>x : boolean +>y : boolean + +// boolean type expressions +var ResultIsBoolean4 = !objA.a; +>ResultIsBoolean4 : boolean +>!objA.a : boolean +>objA.a : boolean +>objA : A +>a : boolean + +var ResultIsBoolean5 = !M.n; +>ResultIsBoolean5 : boolean +>!M.n : boolean +>M.n : boolean +>M : typeof M +>n : boolean + +var ResultIsBoolean6 = !foo(); +>ResultIsBoolean6 : boolean +>!foo() : boolean +>foo() : boolean +>foo : () => boolean + +var ResultIsBoolean7 = !A.foo(); +>ResultIsBoolean7 : boolean +>!A.foo() : boolean +>A.foo() : boolean +>A.foo : () => boolean +>A : typeof A +>foo : () => boolean + +// multiple ! operators +var ResultIsBoolean = !!BOOLEAN; +>ResultIsBoolean : boolean +>!!BOOLEAN : boolean +>!BOOLEAN : boolean +>BOOLEAN : boolean + +// miss assignment operators +!true; +>!true : boolean + +!BOOLEAN; +>!BOOLEAN : boolean +>BOOLEAN : boolean + +!foo(); +>!foo() : boolean +>foo() : boolean +>foo : () => boolean + +!true, false; +>!true, false : boolean +>!true : boolean + +!objA.a; +>!objA.a : boolean +>objA.a : boolean +>objA : A +>a : boolean + +!M.n; +>!M.n : boolean +>M.n : boolean +>M : typeof M +>n : boolean + diff --git a/tests/baselines/reference/logicalNotOperatorWithEnumType.js b/tests/baselines/reference/logicalNotOperatorWithEnumType.js index 2c5ddc04e58..19efcc979ad 100644 --- a/tests/baselines/reference/logicalNotOperatorWithEnumType.js +++ b/tests/baselines/reference/logicalNotOperatorWithEnumType.js @@ -22,6 +22,7 @@ var ResultIsBoolean5 = !!!(ENUM[1] + ENUM[2]); !ENUM, ENUM1; //// [logicalNotOperatorWithEnumType.js] +// ! operator on enum type var ENUM; (function (ENUM) { ENUM[ENUM["1"] = 0] = "1"; @@ -33,11 +34,15 @@ var ENUM1; (function (ENUM1) { })(ENUM1 || (ENUM1 = {})); ; +// enum type var var ResultIsBoolean1 = !ENUM; +// enum type expressions var ResultIsBoolean2 = !ENUM[1]; var ResultIsBoolean3 = !(ENUM[1] + ENUM[2]); +// multiple ! operators var ResultIsBoolean4 = !!ENUM; var ResultIsBoolean5 = !!!(ENUM[1] + ENUM[2]); +// miss assignment operators !ENUM; !ENUM1; !ENUM[1]; diff --git a/tests/baselines/reference/logicalNotOperatorWithEnumType.types b/tests/baselines/reference/logicalNotOperatorWithEnumType.types new file mode 100644 index 00000000000..27cbb24d3bb --- /dev/null +++ b/tests/baselines/reference/logicalNotOperatorWithEnumType.types @@ -0,0 +1,71 @@ +=== tests/cases/conformance/expressions/unaryOperators/logicalNotOperator/logicalNotOperatorWithEnumType.ts === +// ! operator on enum type + +enum ENUM { 1, 2, 3 }; +>ENUM : ENUM + +enum ENUM1 { }; +>ENUM1 : ENUM1 + +// enum type var +var ResultIsBoolean1 = !ENUM; +>ResultIsBoolean1 : boolean +>!ENUM : boolean +>ENUM : typeof ENUM + +// enum type expressions +var ResultIsBoolean2 = !ENUM[1]; +>ResultIsBoolean2 : boolean +>!ENUM[1] : boolean +>ENUM[1] : ENUM +>ENUM : typeof ENUM + +var ResultIsBoolean3 = !(ENUM[1] + ENUM[2]); +>ResultIsBoolean3 : boolean +>!(ENUM[1] + ENUM[2]) : boolean +>(ENUM[1] + ENUM[2]) : number +>ENUM[1] + ENUM[2] : number +>ENUM[1] : ENUM +>ENUM : typeof ENUM +>ENUM[2] : ENUM +>ENUM : typeof ENUM + +// multiple ! operators +var ResultIsBoolean4 = !!ENUM; +>ResultIsBoolean4 : boolean +>!!ENUM : boolean +>!ENUM : boolean +>ENUM : typeof ENUM + +var ResultIsBoolean5 = !!!(ENUM[1] + ENUM[2]); +>ResultIsBoolean5 : boolean +>!!!(ENUM[1] + ENUM[2]) : boolean +>!!(ENUM[1] + ENUM[2]) : boolean +>!(ENUM[1] + ENUM[2]) : boolean +>(ENUM[1] + ENUM[2]) : number +>ENUM[1] + ENUM[2] : number +>ENUM[1] : ENUM +>ENUM : typeof ENUM +>ENUM[2] : ENUM +>ENUM : typeof ENUM + +// miss assignment operators +!ENUM; +>!ENUM : boolean +>ENUM : typeof ENUM + +!ENUM1; +>!ENUM1 : boolean +>ENUM1 : typeof ENUM1 + +!ENUM[1]; +>!ENUM[1] : boolean +>ENUM[1] : ENUM +>ENUM : typeof ENUM + +!ENUM, ENUM1; +>!ENUM, ENUM1 : typeof ENUM1 +>!ENUM : boolean +>ENUM : typeof ENUM +>ENUM1 : typeof ENUM1 + diff --git a/tests/baselines/reference/logicalNotOperatorWithNumberType.js b/tests/baselines/reference/logicalNotOperatorWithNumberType.js index 6ab8b76a81e..48e1468285e 100644 --- a/tests/baselines/reference/logicalNotOperatorWithNumberType.js +++ b/tests/baselines/reference/logicalNotOperatorWithNumberType.js @@ -46,6 +46,7 @@ var ResultIsBoolean13 = !!!(NUMBER + NUMBER); !objA.a, M.n; //// [logicalNotOperatorWithNumberType.js] +// ! operator on number type var NUMBER; var NUMBER1 = [1, 2]; function foo() { @@ -64,21 +65,26 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// number type var var ResultIsBoolean1 = !NUMBER; var ResultIsBoolean2 = !NUMBER1; +// number type literal var ResultIsBoolean3 = !1; var ResultIsBoolean4 = !{ x: 1, y: 2 }; var ResultIsBoolean5 = !{ x: 1, y: function (n) { return n; } }; +// number type expressions var ResultIsBoolean6 = !objA.a; var ResultIsBoolean7 = !M.n; var ResultIsBoolean8 = !NUMBER1[0]; var ResultIsBoolean9 = !foo(); var ResultIsBoolean10 = !A.foo(); var ResultIsBoolean11 = !(NUMBER + NUMBER); +// multiple ! operator var ResultIsBoolean12 = !!NUMBER; var ResultIsBoolean13 = !!!(NUMBER + NUMBER); +// miss assignment operators !1; !NUMBER; !NUMBER1; diff --git a/tests/baselines/reference/logicalNotOperatorWithNumberType.types b/tests/baselines/reference/logicalNotOperatorWithNumberType.types new file mode 100644 index 00000000000..4bcc8a14041 --- /dev/null +++ b/tests/baselines/reference/logicalNotOperatorWithNumberType.types @@ -0,0 +1,165 @@ +=== tests/cases/conformance/expressions/unaryOperators/logicalNotOperator/logicalNotOperatorWithNumberType.ts === +// ! operator on number type +var NUMBER: number; +>NUMBER : number + +var NUMBER1: number[] = [1, 2]; +>NUMBER1 : number[] +>[1, 2] : number[] + +function foo(): number { return 1; } +>foo : () => number + +class A { +>A : A + + public a: number; +>a : number + + static foo() { return 1; } +>foo : () => number +} +module M { +>M : typeof M + + export var n: number; +>n : number +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// number type var +var ResultIsBoolean1 = !NUMBER; +>ResultIsBoolean1 : boolean +>!NUMBER : boolean +>NUMBER : number + +var ResultIsBoolean2 = !NUMBER1; +>ResultIsBoolean2 : boolean +>!NUMBER1 : boolean +>NUMBER1 : number[] + +// number type literal +var ResultIsBoolean3 = !1; +>ResultIsBoolean3 : boolean +>!1 : boolean + +var ResultIsBoolean4 = !{ x: 1, y: 2}; +>ResultIsBoolean4 : boolean +>!{ x: 1, y: 2} : boolean +>{ x: 1, y: 2} : { x: number; y: number; } +>x : number +>y : number + +var ResultIsBoolean5 = !{ x: 1, y: (n: number) => { return n; } }; +>ResultIsBoolean5 : boolean +>!{ x: 1, y: (n: number) => { return n; } } : boolean +>{ x: 1, y: (n: number) => { return n; } } : { x: number; y: (n: number) => number; } +>x : number +>y : (n: number) => number +>(n: number) => { return n; } : (n: number) => number +>n : number +>n : number + +// number type expressions +var ResultIsBoolean6 = !objA.a; +>ResultIsBoolean6 : boolean +>!objA.a : boolean +>objA.a : number +>objA : A +>a : number + +var ResultIsBoolean7 = !M.n; +>ResultIsBoolean7 : boolean +>!M.n : boolean +>M.n : number +>M : typeof M +>n : number + +var ResultIsBoolean8 = !NUMBER1[0]; +>ResultIsBoolean8 : boolean +>!NUMBER1[0] : boolean +>NUMBER1[0] : number +>NUMBER1 : number[] + +var ResultIsBoolean9 = !foo(); +>ResultIsBoolean9 : boolean +>!foo() : boolean +>foo() : number +>foo : () => number + +var ResultIsBoolean10 = !A.foo(); +>ResultIsBoolean10 : boolean +>!A.foo() : boolean +>A.foo() : number +>A.foo : () => number +>A : typeof A +>foo : () => number + +var ResultIsBoolean11 = !(NUMBER + NUMBER); +>ResultIsBoolean11 : boolean +>!(NUMBER + NUMBER) : boolean +>(NUMBER + NUMBER) : number +>NUMBER + NUMBER : number +>NUMBER : number +>NUMBER : number + +// multiple ! operator +var ResultIsBoolean12 = !!NUMBER; +>ResultIsBoolean12 : boolean +>!!NUMBER : boolean +>!NUMBER : boolean +>NUMBER : number + +var ResultIsBoolean13 = !!!(NUMBER + NUMBER); +>ResultIsBoolean13 : boolean +>!!!(NUMBER + NUMBER) : boolean +>!!(NUMBER + NUMBER) : boolean +>!(NUMBER + NUMBER) : boolean +>(NUMBER + NUMBER) : number +>NUMBER + NUMBER : number +>NUMBER : number +>NUMBER : number + +// miss assignment operators +!1; +>!1 : boolean + +!NUMBER; +>!NUMBER : boolean +>NUMBER : number + +!NUMBER1; +>!NUMBER1 : boolean +>NUMBER1 : number[] + +!foo(); +>!foo() : boolean +>foo() : number +>foo : () => number + +!objA.a; +>!objA.a : boolean +>objA.a : number +>objA : A +>a : number + +!M.n; +>!M.n : boolean +>M.n : number +>M : typeof M +>n : number + +!objA.a, M.n; +>!objA.a, M.n : number +>!objA.a : boolean +>objA.a : number +>objA : A +>a : number +>M.n : number +>M : typeof M +>n : number + diff --git a/tests/baselines/reference/logicalNotOperatorWithStringType.js b/tests/baselines/reference/logicalNotOperatorWithStringType.js index e259741e2f4..1bab5de239d 100644 --- a/tests/baselines/reference/logicalNotOperatorWithStringType.js +++ b/tests/baselines/reference/logicalNotOperatorWithStringType.js @@ -45,6 +45,7 @@ var ResultIsBoolean14 = !!!(STRING + STRING); !objA.a,M.n; //// [logicalNotOperatorWithStringType.js] +// ! operator on string type var STRING; var STRING1 = ["", "abc"]; function foo() { @@ -63,13 +64,16 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// string type var var ResultIsBoolean1 = !STRING; var ResultIsBoolean2 = !STRING1; +// string type literal var ResultIsBoolean3 = !""; var ResultIsBoolean4 = !{ x: "", y: "" }; var ResultIsBoolean5 = !{ x: "", y: function (s) { return s; } }; +// string type expressions var ResultIsBoolean6 = !objA.a; var ResultIsBoolean7 = !M.n; var ResultIsBoolean8 = !STRING1[0]; @@ -77,8 +81,10 @@ var ResultIsBoolean9 = !foo(); var ResultIsBoolean10 = !A.foo(); var ResultIsBoolean11 = !(STRING + STRING); var ResultIsBoolean12 = !STRING.charAt(0); +// multiple ! operator var ResultIsBoolean13 = !!STRING; var ResultIsBoolean14 = !!!(STRING + STRING); +// miss assignment operators !""; !STRING; !STRING1; diff --git a/tests/baselines/reference/logicalNotOperatorWithStringType.types b/tests/baselines/reference/logicalNotOperatorWithStringType.types new file mode 100644 index 00000000000..2decb1ade18 --- /dev/null +++ b/tests/baselines/reference/logicalNotOperatorWithStringType.types @@ -0,0 +1,161 @@ +=== tests/cases/conformance/expressions/unaryOperators/logicalNotOperator/logicalNotOperatorWithStringType.ts === +// ! operator on string type +var STRING: string; +>STRING : string + +var STRING1: string[] = ["", "abc"]; +>STRING1 : string[] +>["", "abc"] : string[] + +function foo(): string { return "abc"; } +>foo : () => string + +class A { +>A : A + + public a: string; +>a : string + + static foo() { return ""; } +>foo : () => string +} +module M { +>M : typeof M + + export var n: string; +>n : string +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// string type var +var ResultIsBoolean1 = !STRING; +>ResultIsBoolean1 : boolean +>!STRING : boolean +>STRING : string + +var ResultIsBoolean2 = !STRING1; +>ResultIsBoolean2 : boolean +>!STRING1 : boolean +>STRING1 : string[] + +// string type literal +var ResultIsBoolean3 = !""; +>ResultIsBoolean3 : boolean +>!"" : boolean + +var ResultIsBoolean4 = !{ x: "", y: "" }; +>ResultIsBoolean4 : boolean +>!{ x: "", y: "" } : boolean +>{ x: "", y: "" } : { x: string; y: string; } +>x : string +>y : string + +var ResultIsBoolean5 = !{ x: "", y: (s: string) => { return s; } }; +>ResultIsBoolean5 : boolean +>!{ x: "", y: (s: string) => { return s; } } : boolean +>{ x: "", y: (s: string) => { return s; } } : { x: string; y: (s: string) => string; } +>x : string +>y : (s: string) => string +>(s: string) => { return s; } : (s: string) => string +>s : string +>s : string + +// string type expressions +var ResultIsBoolean6 = !objA.a; +>ResultIsBoolean6 : boolean +>!objA.a : boolean +>objA.a : string +>objA : A +>a : string + +var ResultIsBoolean7 = !M.n; +>ResultIsBoolean7 : boolean +>!M.n : boolean +>M.n : string +>M : typeof M +>n : string + +var ResultIsBoolean8 = !STRING1[0]; +>ResultIsBoolean8 : boolean +>!STRING1[0] : boolean +>STRING1[0] : string +>STRING1 : string[] + +var ResultIsBoolean9 = !foo(); +>ResultIsBoolean9 : boolean +>!foo() : boolean +>foo() : string +>foo : () => string + +var ResultIsBoolean10 = !A.foo(); +>ResultIsBoolean10 : boolean +>!A.foo() : boolean +>A.foo() : string +>A.foo : () => string +>A : typeof A +>foo : () => string + +var ResultIsBoolean11 = !(STRING + STRING); +>ResultIsBoolean11 : boolean +>!(STRING + STRING) : boolean +>(STRING + STRING) : string +>STRING + STRING : string +>STRING : string +>STRING : string + +var ResultIsBoolean12 = !STRING.charAt(0); +>ResultIsBoolean12 : boolean +>!STRING.charAt(0) : boolean +>STRING.charAt(0) : string +>STRING.charAt : (pos: number) => string +>STRING : string +>charAt : (pos: number) => string + +// multiple ! operator +var ResultIsBoolean13 = !!STRING; +>ResultIsBoolean13 : boolean +>!!STRING : boolean +>!STRING : boolean +>STRING : string + +var ResultIsBoolean14 = !!!(STRING + STRING); +>ResultIsBoolean14 : boolean +>!!!(STRING + STRING) : boolean +>!!(STRING + STRING) : boolean +>!(STRING + STRING) : boolean +>(STRING + STRING) : string +>STRING + STRING : string +>STRING : string +>STRING : string + +// miss assignment operators +!""; +>!"" : boolean + +!STRING; +>!STRING : boolean +>STRING : string + +!STRING1; +>!STRING1 : boolean +>STRING1 : string[] + +!foo(); +>!foo() : boolean +>foo() : string +>foo : () => string + +!objA.a,M.n; +>!objA.a,M.n : string +>!objA.a : boolean +>objA.a : string +>objA : A +>a : string +>M.n : string +>M : typeof M +>n : string + diff --git a/tests/baselines/reference/logicalOrExpressionIsContextuallyTyped.js b/tests/baselines/reference/logicalOrExpressionIsContextuallyTyped.js index 7997ecb0f2b..64bdc871571 100644 --- a/tests/baselines/reference/logicalOrExpressionIsContextuallyTyped.js +++ b/tests/baselines/reference/logicalOrExpressionIsContextuallyTyped.js @@ -7,4 +7,8 @@ var r: { a: string } = { a: '', b: 123 } || { a: '', b: true }; //// [logicalOrExpressionIsContextuallyTyped.js] +// The || operator permits the operands to be of any type. +// If the || expression is contextually typed, the operands are contextually typed by the +// same type and the result is of the best common type of the contextual type and the two +// operand types. var r = { a: '', b: 123 } || { a: '', b: true }; diff --git a/tests/baselines/reference/logicalOrExpressionIsContextuallyTyped.types b/tests/baselines/reference/logicalOrExpressionIsContextuallyTyped.types new file mode 100644 index 00000000000..d44b220e818 --- /dev/null +++ b/tests/baselines/reference/logicalOrExpressionIsContextuallyTyped.types @@ -0,0 +1,17 @@ +=== tests/cases/conformance/expressions/binaryOperators/logicalOrOperator/logicalOrExpressionIsContextuallyTyped.ts === +// The || operator permits the operands to be of any type. +// If the || expression is contextually typed, the operands are contextually typed by the +// same type and the result is of the best common type of the contextual type and the two +// operand types. + +var r: { a: string } = { a: '', b: 123 } || { a: '', b: true }; +>r : { a: string; } +>a : string +>{ a: '', b: 123 } || { a: '', b: true } : { a: string; } +>{ a: '', b: 123 } : { a: string; b: number; } +>a : string +>b : number +>{ a: '', b: true } : { a: string; b: boolean; } +>a : string +>b : boolean + diff --git a/tests/baselines/reference/logicalOrExpressionIsNotContextuallyTyped.js b/tests/baselines/reference/logicalOrExpressionIsNotContextuallyTyped.js index 8de01245b31..73e1c33a4e0 100644 --- a/tests/baselines/reference/logicalOrExpressionIsNotContextuallyTyped.js +++ b/tests/baselines/reference/logicalOrExpressionIsNotContextuallyTyped.js @@ -11,5 +11,10 @@ var a: (a: string) => string; var r = a || ((a) => a.toLowerCase()); //// [logicalOrExpressionIsNotContextuallyTyped.js] +// The || operator permits the operands to be of any type. +// If the || expression is not contextually typed, the right operand is contextually typed +// by the type of the left operand and the result is of the best common type of the two +// operand types. var a; +// bug 786110 var r = a || (function (a) { return a.toLowerCase(); }); diff --git a/tests/baselines/reference/logicalOrExpressionIsNotContextuallyTyped.types b/tests/baselines/reference/logicalOrExpressionIsNotContextuallyTyped.types new file mode 100644 index 00000000000..f450307758d --- /dev/null +++ b/tests/baselines/reference/logicalOrExpressionIsNotContextuallyTyped.types @@ -0,0 +1,24 @@ +=== tests/cases/conformance/expressions/binaryOperators/logicalOrOperator/logicalOrExpressionIsNotContextuallyTyped.ts === +// The || operator permits the operands to be of any type. +// If the || expression is not contextually typed, the right operand is contextually typed +// by the type of the left operand and the result is of the best common type of the two +// operand types. + + +var a: (a: string) => string; +>a : (a: string) => string +>a : string + +// bug 786110 +var r = a || ((a) => a.toLowerCase()); +>r : (a: any) => any +>a || ((a) => a.toLowerCase()) : (a: any) => any +>a : (a: string) => string +>((a) => a.toLowerCase()) : (a: any) => any +>(a) => a.toLowerCase() : (a: any) => any +>a : any +>a.toLowerCase() : any +>a.toLowerCase : any +>a : any +>toLowerCase : any + diff --git a/tests/baselines/reference/logicalOrOperatorWithEveryType.js b/tests/baselines/reference/logicalOrOperatorWithEveryType.js index 47b88946cc0..bf7a641882e 100644 --- a/tests/baselines/reference/logicalOrOperatorWithEveryType.js +++ b/tests/baselines/reference/logicalOrOperatorWithEveryType.js @@ -126,6 +126,10 @@ var rf9 = null || undefined; // null || undefined is any var rf10 = undefined || undefined; // undefined || undefined is any //// [logicalOrOperatorWithEveryType.js] +// The || operator permits the operands to be of any type. +// If the || expression is not contextually typed, the right operand is contextually typed +// by the type of the left operand and the result is of the best common type of the two +// operand types. var E; (function (E) { E[E["a"] = 0] = "a"; @@ -140,103 +144,103 @@ var a5; var a6; var a7; var a8; -var ra1 = a1 || a1; -var ra2 = a2 || a1; -var ra3 = a3 || a1; -var ra4 = a4 || a1; -var ra5 = a5 || a1; -var ra6 = a6 || a1; -var ra7 = a7 || a1; -var ra8 = a8 || a1; -var ra9 = null || a1; -var ra10 = undefined || a1; -var rb1 = a1 || a2; -var rb2 = a2 || a2; -var rb3 = a3 || a2; -var rb4 = a4 || a2; -var rb5 = a5 || a2; -var rb6 = a6 || a2; -var rb7 = a7 || a2; -var rb8 = a8 || a2; -var rb9 = null || a2; -var rb10 = undefined || a2; -var rc1 = a1 || a3; -var rc2 = a2 || a3; -var rc3 = a3 || a3; -var rc4 = a4 || a3; -var rc5 = a5 || a3; -var rc6 = a6 || a3; -var rc7 = a7 || a3; -var rc8 = a8 || a3; -var rc9 = null || a3; -var rc10 = undefined || a3; -var rd1 = a1 || a4; -var rd2 = a2 || a4; -var rd3 = a3 || a4; -var rd4 = a4 || a4; -var rd5 = a5 || a4; -var rd6 = a6 || a4; -var rd7 = a7 || a4; -var rd8 = a8 || a4; -var rd9 = null || a4; -var rd10 = undefined || a4; -var re1 = a1 || a5; -var re2 = a2 || a5; -var re3 = a3 || a5; -var re4 = a4 || a5; -var re5 = a5 || a5; -var re6 = a6 || a5; -var re7 = a7 || a5; -var re8 = a8 || a5; -var re9 = null || a5; -var re10 = undefined || a5; -var rg1 = a1 || a6; -var rg2 = a2 || a6; -var rg3 = a3 || a6; -var rg4 = a4 || a6; -var rg5 = a5 || a6; -var rg6 = a6 || a6; -var rg7 = a7 || a6; -var rg8 = a8 || a6; -var rg9 = null || a6; -var rg10 = undefined || a6; -var rh1 = a1 || a7; -var rh2 = a2 || a7; -var rh3 = a3 || a7; -var rh4 = a4 || a7; -var rh5 = a5 || a7; -var rh6 = a6 || a7; -var rh7 = a7 || a7; -var rh8 = a8 || a7; -var rh9 = null || a7; -var rh10 = undefined || a7; -var ri1 = a1 || a8; -var ri2 = a2 || a8; -var ri3 = a3 || a8; -var ri4 = a4 || a8; -var ri5 = a5 || a8; -var ri6 = a6 || a8; -var ri7 = a7 || a8; -var ri8 = a8 || a8; -var ri9 = null || a8; -var ri10 = undefined || a8; -var rj1 = a1 || null; -var rj2 = a2 || null; -var rj3 = a3 || null; -var rj4 = a4 || null; -var rj5 = a5 || null; -var rj6 = a6 || null; -var rj7 = a7 || null; -var rj8 = a8 || null; -var rj9 = null || null; -var rj10 = undefined || null; -var rf1 = a1 || undefined; -var rf2 = a2 || undefined; -var rf3 = a3 || undefined; -var rf4 = a4 || undefined; -var rf5 = a5 || undefined; -var rf6 = a6 || undefined; -var rf7 = a7 || undefined; -var rf8 = a8 || undefined; -var rf9 = null || undefined; -var rf10 = undefined || undefined; +var ra1 = a1 || a1; // any || any is any +var ra2 = a2 || a1; // boolean || any is any +var ra3 = a3 || a1; // number || any is any +var ra4 = a4 || a1; // string || any is any +var ra5 = a5 || a1; // void || any is any +var ra6 = a6 || a1; // enum || any is any +var ra7 = a7 || a1; // object || any is any +var ra8 = a8 || a1; // array || any is any +var ra9 = null || a1; // null || any is any +var ra10 = undefined || a1; // undefined || any is any +var rb1 = a1 || a2; // any || boolean is any +var rb2 = a2 || a2; // boolean || boolean is boolean +var rb3 = a3 || a2; // number || boolean is {} +var rb4 = a4 || a2; // string || boolean is {} +var rb5 = a5 || a2; // void || boolean is {} +var rb6 = a6 || a2; // enum || boolean is {} +var rb7 = a7 || a2; // object || boolean is {} +var rb8 = a8 || a2; // array || boolean is {} +var rb9 = null || a2; // null || boolean is boolean +var rb10 = undefined || a2; // undefined || boolean is boolean +var rc1 = a1 || a3; // any || number is any +var rc2 = a2 || a3; // boolean || number is {} +var rc3 = a3 || a3; // number || number is number +var rc4 = a4 || a3; // string || number is {} +var rc5 = a5 || a3; // void || number is {} +var rc6 = a6 || a3; // enum || number is number +var rc7 = a7 || a3; // object || number is {} +var rc8 = a8 || a3; // array || number is {} +var rc9 = null || a3; // null || number is number +var rc10 = undefined || a3; // undefined || number is number +var rd1 = a1 || a4; // any || string is any +var rd2 = a2 || a4; // boolean || string is {} +var rd3 = a3 || a4; // number || string is {} +var rd4 = a4 || a4; // string || string is string +var rd5 = a5 || a4; // void || string is {} +var rd6 = a6 || a4; // enum || string is {} +var rd7 = a7 || a4; // object || string is {} +var rd8 = a8 || a4; // array || string is {} +var rd9 = null || a4; // null || string is string +var rd10 = undefined || a4; // undefined || string is string +var re1 = a1 || a5; // any || void is any +var re2 = a2 || a5; // boolean || void is {} +var re3 = a3 || a5; // number || void is {} +var re4 = a4 || a5; // string || void is {} +var re5 = a5 || a5; // void || void is void +var re6 = a6 || a5; // enum || void is {} +var re7 = a7 || a5; // object || void is {} +var re8 = a8 || a5; // array || void is {} +var re9 = null || a5; // null || void is void +var re10 = undefined || a5; // undefined || void is void +var rg1 = a1 || a6; // any || enum is any +var rg2 = a2 || a6; // boolean || enum is {} +var rg3 = a3 || a6; // number || enum is number +var rg4 = a4 || a6; // string || enum is {} +var rg5 = a5 || a6; // void || enum is {} +var rg6 = a6 || a6; // enum || enum is E +var rg7 = a7 || a6; // object || enum is {} +var rg8 = a8 || a6; // array || enum is {} +var rg9 = null || a6; // null || enum is E +var rg10 = undefined || a6; // undefined || enum is E +var rh1 = a1 || a7; // any || object is any +var rh2 = a2 || a7; // boolean || object is {} +var rh3 = a3 || a7; // number || object is {} +var rh4 = a4 || a7; // string || object is {} +var rh5 = a5 || a7; // void || object is {} +var rh6 = a6 || a7; // enum || object is {} +var rh7 = a7 || a7; // object || object is object +var rh8 = a8 || a7; // array || object is {} +var rh9 = null || a7; // null || object is object +var rh10 = undefined || a7; // undefined || object is object +var ri1 = a1 || a8; // any || array is any +var ri2 = a2 || a8; // boolean || array is {} +var ri3 = a3 || a8; // number || array is {} +var ri4 = a4 || a8; // string || array is {} +var ri5 = a5 || a8; // void || array is {} +var ri6 = a6 || a8; // enum || array is {} +var ri7 = a7 || a8; // object || array is {} +var ri8 = a8 || a8; // array || array is array +var ri9 = null || a8; // null || array is array +var ri10 = undefined || a8; // undefined || array is array +var rj1 = a1 || null; // any || null is any +var rj2 = a2 || null; // boolean || null is boolean +var rj3 = a3 || null; // number || null is number +var rj4 = a4 || null; // string || null is string +var rj5 = a5 || null; // void || null is void +var rj6 = a6 || null; // enum || null is E +var rj7 = a7 || null; // object || null is object +var rj8 = a8 || null; // array || null is array +var rj9 = null || null; // null || null is any +var rj10 = undefined || null; // undefined || null is any +var rf1 = a1 || undefined; // any || undefined is any +var rf2 = a2 || undefined; // boolean || undefined is boolean +var rf3 = a3 || undefined; // number || undefined is number +var rf4 = a4 || undefined; // string || undefined is string +var rf5 = a5 || undefined; // void || undefined is void +var rf6 = a6 || undefined; // enum || undefined is E +var rf7 = a7 || undefined; // object || undefined is object +var rf8 = a8 || undefined; // array || undefined is array +var rf9 = null || undefined; // null || undefined is any +var rf10 = undefined || undefined; // undefined || undefined is any diff --git a/tests/baselines/reference/logicalOrOperatorWithEveryType.types b/tests/baselines/reference/logicalOrOperatorWithEveryType.types new file mode 100644 index 00000000000..3cf0399f437 --- /dev/null +++ b/tests/baselines/reference/logicalOrOperatorWithEveryType.types @@ -0,0 +1,618 @@ +=== tests/cases/conformance/expressions/binaryOperators/logicalOrOperator/logicalOrOperatorWithEveryType.ts === +// The || operator permits the operands to be of any type. +// If the || expression is not contextually typed, the right operand is contextually typed +// by the type of the left operand and the result is of the best common type of the two +// operand types. + +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a1: any; +>a1 : any + +var a2: boolean; +>a2 : boolean + +var a3: number +>a3 : number + +var a4: string; +>a4 : string + +var a5: void; +>a5 : void + +var a6: E; +>a6 : E +>E : E + +var a7: {a: string}; +>a7 : { a: string; } +>a : string + +var a8: string[]; +>a8 : string[] + +var ra1 = a1 || a1; // any || any is any +>ra1 : any +>a1 || a1 : any +>a1 : any +>a1 : any + +var ra2 = a2 || a1; // boolean || any is any +>ra2 : any +>a2 || a1 : any +>a2 : boolean +>a1 : any + +var ra3 = a3 || a1; // number || any is any +>ra3 : any +>a3 || a1 : any +>a3 : number +>a1 : any + +var ra4 = a4 || a1; // string || any is any +>ra4 : any +>a4 || a1 : any +>a4 : string +>a1 : any + +var ra5 = a5 || a1; // void || any is any +>ra5 : any +>a5 || a1 : any +>a5 : void +>a1 : any + +var ra6 = a6 || a1; // enum || any is any +>ra6 : any +>a6 || a1 : any +>a6 : E +>a1 : any + +var ra7 = a7 || a1; // object || any is any +>ra7 : any +>a7 || a1 : any +>a7 : { a: string; } +>a1 : any + +var ra8 = a8 || a1; // array || any is any +>ra8 : any +>a8 || a1 : any +>a8 : string[] +>a1 : any + +var ra9 = null || a1; // null || any is any +>ra9 : any +>null || a1 : any +>a1 : any + +var ra10 = undefined || a1; // undefined || any is any +>ra10 : any +>undefined || a1 : any +>undefined : undefined +>a1 : any + +var rb1 = a1 || a2; // any || boolean is any +>rb1 : any +>a1 || a2 : any +>a1 : any +>a2 : boolean + +var rb2 = a2 || a2; // boolean || boolean is boolean +>rb2 : boolean +>a2 || a2 : boolean +>a2 : boolean +>a2 : boolean + +var rb3 = a3 || a2; // number || boolean is {} +>rb3 : {} +>a3 || a2 : {} +>a3 : number +>a2 : boolean + +var rb4 = a4 || a2; // string || boolean is {} +>rb4 : {} +>a4 || a2 : {} +>a4 : string +>a2 : boolean + +var rb5 = a5 || a2; // void || boolean is {} +>rb5 : {} +>a5 || a2 : {} +>a5 : void +>a2 : boolean + +var rb6 = a6 || a2; // enum || boolean is {} +>rb6 : {} +>a6 || a2 : {} +>a6 : E +>a2 : boolean + +var rb7 = a7 || a2; // object || boolean is {} +>rb7 : {} +>a7 || a2 : {} +>a7 : { a: string; } +>a2 : boolean + +var rb8 = a8 || a2; // array || boolean is {} +>rb8 : {} +>a8 || a2 : {} +>a8 : string[] +>a2 : boolean + +var rb9 = null || a2; // null || boolean is boolean +>rb9 : boolean +>null || a2 : boolean +>a2 : boolean + +var rb10= undefined || a2; // undefined || boolean is boolean +>rb10 : boolean +>undefined || a2 : boolean +>undefined : undefined +>a2 : boolean + +var rc1 = a1 || a3; // any || number is any +>rc1 : any +>a1 || a3 : any +>a1 : any +>a3 : number + +var rc2 = a2 || a3; // boolean || number is {} +>rc2 : {} +>a2 || a3 : {} +>a2 : boolean +>a3 : number + +var rc3 = a3 || a3; // number || number is number +>rc3 : number +>a3 || a3 : number +>a3 : number +>a3 : number + +var rc4 = a4 || a3; // string || number is {} +>rc4 : {} +>a4 || a3 : {} +>a4 : string +>a3 : number + +var rc5 = a5 || a3; // void || number is {} +>rc5 : {} +>a5 || a3 : {} +>a5 : void +>a3 : number + +var rc6 = a6 || a3; // enum || number is number +>rc6 : number +>a6 || a3 : number +>a6 : E +>a3 : number + +var rc7 = a7 || a3; // object || number is {} +>rc7 : {} +>a7 || a3 : {} +>a7 : { a: string; } +>a3 : number + +var rc8 = a8 || a3; // array || number is {} +>rc8 : {} +>a8 || a3 : {} +>a8 : string[] +>a3 : number + +var rc9 = null || a3; // null || number is number +>rc9 : number +>null || a3 : number +>a3 : number + +var rc10 = undefined || a3; // undefined || number is number +>rc10 : number +>undefined || a3 : number +>undefined : undefined +>a3 : number + +var rd1 = a1 || a4; // any || string is any +>rd1 : any +>a1 || a4 : any +>a1 : any +>a4 : string + +var rd2 = a2 || a4; // boolean || string is {} +>rd2 : {} +>a2 || a4 : {} +>a2 : boolean +>a4 : string + +var rd3 = a3 || a4; // number || string is {} +>rd3 : {} +>a3 || a4 : {} +>a3 : number +>a4 : string + +var rd4 = a4 || a4; // string || string is string +>rd4 : string +>a4 || a4 : string +>a4 : string +>a4 : string + +var rd5 = a5 || a4; // void || string is {} +>rd5 : {} +>a5 || a4 : {} +>a5 : void +>a4 : string + +var rd6 = a6 || a4; // enum || string is {} +>rd6 : {} +>a6 || a4 : {} +>a6 : E +>a4 : string + +var rd7 = a7 || a4; // object || string is {} +>rd7 : {} +>a7 || a4 : {} +>a7 : { a: string; } +>a4 : string + +var rd8 = a8 || a4; // array || string is {} +>rd8 : {} +>a8 || a4 : {} +>a8 : string[] +>a4 : string + +var rd9 = null || a4; // null || string is string +>rd9 : string +>null || a4 : string +>a4 : string + +var rd10 = undefined || a4; // undefined || string is string +>rd10 : string +>undefined || a4 : string +>undefined : undefined +>a4 : string + +var re1 = a1 || a5; // any || void is any +>re1 : any +>a1 || a5 : any +>a1 : any +>a5 : void + +var re2 = a2 || a5; // boolean || void is {} +>re2 : {} +>a2 || a5 : {} +>a2 : boolean +>a5 : void + +var re3 = a3 || a5; // number || void is {} +>re3 : {} +>a3 || a5 : {} +>a3 : number +>a5 : void + +var re4 = a4 || a5; // string || void is {} +>re4 : {} +>a4 || a5 : {} +>a4 : string +>a5 : void + +var re5 = a5 || a5; // void || void is void +>re5 : void +>a5 || a5 : void +>a5 : void +>a5 : void + +var re6 = a6 || a5; // enum || void is {} +>re6 : {} +>a6 || a5 : {} +>a6 : E +>a5 : void + +var re7 = a7 || a5; // object || void is {} +>re7 : {} +>a7 || a5 : {} +>a7 : { a: string; } +>a5 : void + +var re8 = a8 || a5; // array || void is {} +>re8 : {} +>a8 || a5 : {} +>a8 : string[] +>a5 : void + +var re9 = null || a5; // null || void is void +>re9 : void +>null || a5 : void +>a5 : void + +var re10 = undefined || a5; // undefined || void is void +>re10 : void +>undefined || a5 : void +>undefined : undefined +>a5 : void + +var rg1 = a1 || a6; // any || enum is any +>rg1 : any +>a1 || a6 : any +>a1 : any +>a6 : E + +var rg2 = a2 || a6; // boolean || enum is {} +>rg2 : {} +>a2 || a6 : {} +>a2 : boolean +>a6 : E + +var rg3 = a3 || a6; // number || enum is number +>rg3 : number +>a3 || a6 : number +>a3 : number +>a6 : E + +var rg4 = a4 || a6; // string || enum is {} +>rg4 : {} +>a4 || a6 : {} +>a4 : string +>a6 : E + +var rg5 = a5 || a6; // void || enum is {} +>rg5 : {} +>a5 || a6 : {} +>a5 : void +>a6 : E + +var rg6 = a6 || a6; // enum || enum is E +>rg6 : E +>a6 || a6 : E +>a6 : E +>a6 : E + +var rg7 = a7 || a6; // object || enum is {} +>rg7 : {} +>a7 || a6 : {} +>a7 : { a: string; } +>a6 : E + +var rg8 = a8 || a6; // array || enum is {} +>rg8 : {} +>a8 || a6 : {} +>a8 : string[] +>a6 : E + +var rg9 = null || a6; // null || enum is E +>rg9 : E +>null || a6 : E +>a6 : E + +var rg10 = undefined || a6; // undefined || enum is E +>rg10 : E +>undefined || a6 : E +>undefined : undefined +>a6 : E + +var rh1 = a1 || a7; // any || object is any +>rh1 : any +>a1 || a7 : any +>a1 : any +>a7 : { a: string; } + +var rh2 = a2 || a7; // boolean || object is {} +>rh2 : {} +>a2 || a7 : {} +>a2 : boolean +>a7 : { a: string; } + +var rh3 = a3 || a7; // number || object is {} +>rh3 : {} +>a3 || a7 : {} +>a3 : number +>a7 : { a: string; } + +var rh4 = a4 || a7; // string || object is {} +>rh4 : {} +>a4 || a7 : {} +>a4 : string +>a7 : { a: string; } + +var rh5 = a5 || a7; // void || object is {} +>rh5 : {} +>a5 || a7 : {} +>a5 : void +>a7 : { a: string; } + +var rh6 = a6 || a7; // enum || object is {} +>rh6 : {} +>a6 || a7 : {} +>a6 : E +>a7 : { a: string; } + +var rh7 = a7 || a7; // object || object is object +>rh7 : { a: string; } +>a7 || a7 : { a: string; } +>a7 : { a: string; } +>a7 : { a: string; } + +var rh8 = a8 || a7; // array || object is {} +>rh8 : {} +>a8 || a7 : {} +>a8 : string[] +>a7 : { a: string; } + +var rh9 = null || a7; // null || object is object +>rh9 : { a: string; } +>null || a7 : { a: string; } +>a7 : { a: string; } + +var rh10 = undefined || a7; // undefined || object is object +>rh10 : { a: string; } +>undefined || a7 : { a: string; } +>undefined : undefined +>a7 : { a: string; } + +var ri1 = a1 || a8; // any || array is any +>ri1 : any +>a1 || a8 : any +>a1 : any +>a8 : string[] + +var ri2 = a2 || a8; // boolean || array is {} +>ri2 : {} +>a2 || a8 : {} +>a2 : boolean +>a8 : string[] + +var ri3 = a3 || a8; // number || array is {} +>ri3 : {} +>a3 || a8 : {} +>a3 : number +>a8 : string[] + +var ri4 = a4 || a8; // string || array is {} +>ri4 : {} +>a4 || a8 : {} +>a4 : string +>a8 : string[] + +var ri5 = a5 || a8; // void || array is {} +>ri5 : {} +>a5 || a8 : {} +>a5 : void +>a8 : string[] + +var ri6 = a6 || a8; // enum || array is {} +>ri6 : {} +>a6 || a8 : {} +>a6 : E +>a8 : string[] + +var ri7 = a7 || a8; // object || array is {} +>ri7 : {} +>a7 || a8 : {} +>a7 : { a: string; } +>a8 : string[] + +var ri8 = a8 || a8; // array || array is array +>ri8 : string[] +>a8 || a8 : string[] +>a8 : string[] +>a8 : string[] + +var ri9 = null || a8; // null || array is array +>ri9 : string[] +>null || a8 : string[] +>a8 : string[] + +var ri10 = undefined || a8; // undefined || array is array +>ri10 : string[] +>undefined || a8 : string[] +>undefined : undefined +>a8 : string[] + +var rj1 = a1 || null; // any || null is any +>rj1 : any +>a1 || null : any +>a1 : any + +var rj2 = a2 || null; // boolean || null is boolean +>rj2 : boolean +>a2 || null : boolean +>a2 : boolean + +var rj3 = a3 || null; // number || null is number +>rj3 : number +>a3 || null : number +>a3 : number + +var rj4 = a4 || null; // string || null is string +>rj4 : string +>a4 || null : string +>a4 : string + +var rj5 = a5 || null; // void || null is void +>rj5 : void +>a5 || null : void +>a5 : void + +var rj6 = a6 || null; // enum || null is E +>rj6 : E +>a6 || null : E +>a6 : E + +var rj7 = a7 || null; // object || null is object +>rj7 : { a: string; } +>a7 || null : { a: string; } +>a7 : { a: string; } + +var rj8 = a8 || null; // array || null is array +>rj8 : string[] +>a8 || null : string[] +>a8 : string[] + +var rj9 = null || null; // null || null is any +>rj9 : any +>null || null : null + +var rj10 = undefined || null; // undefined || null is any +>rj10 : any +>undefined || null : null +>undefined : undefined + +var rf1 = a1 || undefined; // any || undefined is any +>rf1 : any +>a1 || undefined : any +>a1 : any +>undefined : undefined + +var rf2 = a2 || undefined; // boolean || undefined is boolean +>rf2 : boolean +>a2 || undefined : boolean +>a2 : boolean +>undefined : undefined + +var rf3 = a3 || undefined; // number || undefined is number +>rf3 : number +>a3 || undefined : number +>a3 : number +>undefined : undefined + +var rf4 = a4 || undefined; // string || undefined is string +>rf4 : string +>a4 || undefined : string +>a4 : string +>undefined : undefined + +var rf5 = a5 || undefined; // void || undefined is void +>rf5 : void +>a5 || undefined : void +>a5 : void +>undefined : undefined + +var rf6 = a6 || undefined; // enum || undefined is E +>rf6 : E +>a6 || undefined : E +>a6 : E +>undefined : undefined + +var rf7 = a7 || undefined; // object || undefined is object +>rf7 : { a: string; } +>a7 || undefined : { a: string; } +>a7 : { a: string; } +>undefined : undefined + +var rf8 = a8 || undefined; // array || undefined is array +>rf8 : string[] +>a8 || undefined : string[] +>a8 : string[] +>undefined : undefined + +var rf9 = null || undefined; // null || undefined is any +>rf9 : any +>null || undefined : null +>undefined : undefined + +var rf10 = undefined || undefined; // undefined || undefined is any +>rf10 : any +>undefined || undefined : undefined +>undefined : undefined +>undefined : undefined + diff --git a/tests/baselines/reference/logicalOrOperatorWithTypeParameters.js b/tests/baselines/reference/logicalOrOperatorWithTypeParameters.js index 0a246ea49b4..e0fca87efa8 100644 --- a/tests/baselines/reference/logicalOrOperatorWithTypeParameters.js +++ b/tests/baselines/reference/logicalOrOperatorWithTypeParameters.js @@ -32,10 +32,12 @@ function fn1(t, u) { } function fn2(t, u, v) { var r1 = t || u; + //var r2: T = t || u; var r3 = u || u; var r4 = u || u; var r5 = u || v; var r6 = u || v; + //var r7: T = u || v; } function fn3(t, u) { var r1 = t || u; diff --git a/tests/baselines/reference/logicalOrOperatorWithTypeParameters.types b/tests/baselines/reference/logicalOrOperatorWithTypeParameters.types new file mode 100644 index 00000000000..ff0e0ce568a --- /dev/null +++ b/tests/baselines/reference/logicalOrOperatorWithTypeParameters.types @@ -0,0 +1,122 @@ +=== tests/cases/conformance/expressions/binaryOperators/logicalOrOperator/logicalOrOperatorWithTypeParameters.ts === +function fn1(t: T, u: U) { +>fn1 : (t: T, u: U) => void +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U + + var r1 = t || t; +>r1 : T +>t || t : T +>t : T +>t : T + + var r2: T = t || t; +>r2 : T +>T : T +>t || t : T +>t : T +>t : T + + var r3 = t || u; +>r3 : {} +>t || u : {} +>t : T +>u : U + + var r4: {} = t || u; +>r4 : {} +>t || u : {} +>t : T +>u : U +} + +function fn2(t: T, u: U, v: V) { +>fn2 : (t: T, u: U, v: V) => void +>T : T +>U : U +>V : V +>t : T +>T : T +>u : U +>U : U +>v : V +>V : V + + var r1 = t || u; +>r1 : {} +>t || u : {} +>t : T +>u : U + + //var r2: T = t || u; + var r3 = u || u; +>r3 : U +>u || u : U +>u : U +>u : U + + var r4: U = u || u; +>r4 : U +>U : U +>u || u : U +>u : U +>u : U + + var r5 = u || v; +>r5 : {} +>u || v : {} +>u : U +>v : V + + var r6: {} = u || v; +>r6 : {} +>u || v : {} +>u : U +>v : V + + //var r7: T = u || v; +} + +function fn3(t: T, u: U) { +>fn3 : (t: T, u: U) => void +>T : T +>a : string +>b : string +>U : U +>a : string +>b : number +>t : T +>T : T +>u : U +>U : U + + var r1 = t || u; +>r1 : {} +>t || u : {} +>t : T +>u : U + + var r2: {} = t || u; +>r2 : {} +>t || u : {} +>t : T +>u : U + + var r3 = t || { a: '' }; +>r3 : { a: string; } +>t || { a: '' } : { a: string; } +>t : T +>{ a: '' } : { a: string; } +>a : string + + var r4: { a: string } = t || u; +>r4 : { a: string; } +>a : string +>t || u : { a: string; } +>t : T +>u : U +} diff --git a/tests/baselines/reference/m7Bugs.types b/tests/baselines/reference/m7Bugs.types new file mode 100644 index 00000000000..fa627f20cf7 --- /dev/null +++ b/tests/baselines/reference/m7Bugs.types @@ -0,0 +1,67 @@ +=== tests/cases/compiler/m7Bugs.ts === +// scenario 1 +interface ISomething { +>ISomething : ISomething + + something: number; +>something : number +} + +var s: ISomething = ({ }); +>s : ISomething +>ISomething : ISomething +>({ }) : ISomething +>ISomething : ISomething +>({ }) : {} +>{ } : {} + + +// scenario 2 +interface A { x: string; } +>A : A +>x : string + +interface B extends A { } +>B : B +>A : A + +var x: B = { }; +>x : B +>B : B +>{ } : B +>B : B +>{ } : {} + +class C1 { +>C1 : C1 + + public x: string; +>x : string +} + +class C2 extends C1 {} +>C2 : C2 +>C1 : C1 + +var y1: C1 = new C2(); +>y1 : C1 +>C1 : C1 +>new C2() : C2 +>C2 : typeof C2 + +var y2: C1 = new C2(); +>y2 : C1 +>C1 : C1 +> new C2() : C1 +>C1 : C1 +>new C2() : C2 +>C2 : typeof C2 + +var y3: C1 = {}; +>y3 : C1 +>C1 : C1 +> {} : C1 +>C1 : C1 +>{} : {} + + diff --git a/tests/baselines/reference/matchReturnTypeInAllBranches.js b/tests/baselines/reference/matchReturnTypeInAllBranches.js index dfcd55b847f..5e9b88f61ac 100644 --- a/tests/baselines/reference/matchReturnTypeInAllBranches.js +++ b/tests/baselines/reference/matchReturnTypeInAllBranches.js @@ -36,6 +36,7 @@ var cookieMonster: IceCreamMonster; cookieMonster = new IceCreamMonster("Chocolate Chip", false, "COOOOOKIE", "Cookie Monster"); //// [matchReturnTypeInAllBranches.js] +// Represents a monster who enjoys ice cream var IceCreamMonster = (function () { function IceCreamMonster(iceCreamFlavor, wantsSprinkles, soundsWhenEating, name) { this.iceCreamFlavor = iceCreamFlavor; @@ -44,6 +45,12 @@ var IceCreamMonster = (function () { this.soundsWhenEating = soundsWhenEating; this.name = name; } + /** +* Tells the IceCreamMonster to eat their ice cre am! +* +* @param {number} amount The amount of ice cream to e at. +* @return {boolean} True if ice cream remains, false if there is no more ice cream le ft. +*/ IceCreamMonster.prototype.eatIceCream = function (amount) { this.iceCreamRemaining -= amount; if (this.iceCreamRemaining <= 0) { diff --git a/tests/baselines/reference/memberAccessMustUseModuleInstances.types b/tests/baselines/reference/memberAccessMustUseModuleInstances.types new file mode 100644 index 00000000000..4e95362f782 --- /dev/null +++ b/tests/baselines/reference/memberAccessMustUseModuleInstances.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/memberAccessMustUseModuleInstances_1.ts === +/// +import WinJS = require('memberAccessMustUseModuleInstances_0'); +>WinJS : typeof WinJS + +WinJS.Promise.timeout(10); +>WinJS.Promise.timeout(10) : WinJS.Promise +>WinJS.Promise.timeout : (delay: number) => WinJS.Promise +>WinJS.Promise : typeof WinJS.Promise +>WinJS : typeof WinJS +>Promise : typeof WinJS.Promise +>timeout : (delay: number) => WinJS.Promise + +=== tests/cases/compiler/memberAccessMustUseModuleInstances_0.ts === +export class Promise { +>Promise : Promise + + static timeout(delay: number): Promise { +>timeout : (delay: number) => Promise +>delay : number +>Promise : Promise + + return null; + } +} + diff --git a/tests/baselines/reference/memberAccessOnConstructorType.types b/tests/baselines/reference/memberAccessOnConstructorType.types new file mode 100644 index 00000000000..d4d722619d4 --- /dev/null +++ b/tests/baselines/reference/memberAccessOnConstructorType.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/memberAccessOnConstructorType.ts === +var f: new () => void; +>f : new () => void + +f.arguments == 0; +>f.arguments == 0 : boolean +>f.arguments : any +>f : new () => void +>arguments : any + diff --git a/tests/baselines/reference/memberFunctionOverloadMixingStaticAndInstance.errors.txt b/tests/baselines/reference/memberFunctionOverloadMixingStaticAndInstance.errors.txt index 69fc3e37231..d0b707c9ff1 100644 --- a/tests/baselines/reference/memberFunctionOverloadMixingStaticAndInstance.errors.txt +++ b/tests/baselines/reference/memberFunctionOverloadMixingStaticAndInstance.errors.txt @@ -3,34 +3,34 @@ foo(); static foo(); // error ~~~ -!!! Function implementation is missing or not immediately following the declaration. - ~~~ !!! Function overload must not be static. + ~~~ +!!! Function implementation is missing or not immediately following the declaration. } class D { static foo(); foo(); // error ~~~ -!!! Function implementation is missing or not immediately following the declaration. - ~~~ !!! Function overload must be static. + ~~~ +!!! Function implementation is missing or not immediately following the declaration. } class E { foo(x: T); static foo(x: number); // error ~~~ -!!! Function implementation is missing or not immediately following the declaration. - ~~~ !!! Function overload must not be static. + ~~~ +!!! Function implementation is missing or not immediately following the declaration. } class F { static foo(x: number); foo(x: T); // error ~~~ -!!! Function implementation is missing or not immediately following the declaration. - ~~~ !!! Function overload must be static. + ~~~ +!!! Function implementation is missing or not immediately following the declaration. } \ No newline at end of file diff --git a/tests/baselines/reference/memberFunctionsWithPrivateOverloads.js b/tests/baselines/reference/memberFunctionsWithPrivateOverloads.js index cfd5d46a4a1..dc347e95580 100644 --- a/tests/baselines/reference/memberFunctionsWithPrivateOverloads.js +++ b/tests/baselines/reference/memberFunctionsWithPrivateOverloads.js @@ -77,8 +77,8 @@ var D = (function () { return D; })(); var c; -var r = c.foo(1); +var r = c.foo(1); // error var d; -var r2 = d.foo(2); -var r3 = C.foo(1); -var r4 = D.bar(''); +var r2 = d.foo(2); // error +var r3 = C.foo(1); // error +var r4 = D.bar(''); // error diff --git a/tests/baselines/reference/memberFunctionsWithPublicOverloads.types b/tests/baselines/reference/memberFunctionsWithPublicOverloads.types new file mode 100644 index 00000000000..7cbc2aca1ff --- /dev/null +++ b/tests/baselines/reference/memberFunctionsWithPublicOverloads.types @@ -0,0 +1,142 @@ +=== tests/cases/conformance/classes/propertyMemberDeclarations/memberFunctionDeclarations/memberFunctionsWithPublicOverloads.ts === +class C { +>C : C + + public foo(x: number); +>foo : { (x: number): any; (x: number, y: string): any; } +>x : number + + public foo(x: number, y: string); +>foo : { (x: number): any; (x: number, y: string): any; } +>x : number +>y : string + + public foo(x: any, y?: any) { } +>foo : { (x: number): any; (x: number, y: string): any; } +>x : any +>y : any + + public bar(x: 'hi'); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : 'hi' + + public bar(x: string); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : string + + public bar(x: number, y: string); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : number +>y : string + + public bar(x: any, y?: any) { } +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : any +>y : any + + public static foo(x: number); +>foo : { (x: number): any; (x: number, y: string): any; } +>x : number + + public static foo(x: number, y: string); +>foo : { (x: number): any; (x: number, y: string): any; } +>x : number +>y : string + + public static foo(x: any, y?: any) { } +>foo : { (x: number): any; (x: number, y: string): any; } +>x : any +>y : any + + public static bar(x: 'hi'); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : 'hi' + + public static bar(x: string); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : string + + public static bar(x: number, y: string); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : number +>y : string + + public static bar(x: any, y?: any) { } +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : any +>y : any +} + +class D { +>D : D +>T : T + + public foo(x: number); +>foo : { (x: number): any; (x: T, y: T): any; } +>x : number + + public foo(x: T, y: T); +>foo : { (x: number): any; (x: T, y: T): any; } +>x : T +>T : T +>y : T +>T : T + + public foo(x: any, y?: any) { } +>foo : { (x: number): any; (x: T, y: T): any; } +>x : any +>y : any + + public bar(x: 'hi'); +>bar : { (x: 'hi'): any; (x: string): any; (x: T, y: T): any; } +>x : 'hi' + + public bar(x: string); +>bar : { (x: 'hi'): any; (x: string): any; (x: T, y: T): any; } +>x : string + + public bar(x: T, y: T); +>bar : { (x: 'hi'): any; (x: string): any; (x: T, y: T): any; } +>x : T +>T : T +>y : T +>T : T + + public bar(x: any, y?: any) { } +>bar : { (x: 'hi'): any; (x: string): any; (x: T, y: T): any; } +>x : any +>y : any + + public static foo(x: number); +>foo : { (x: number): any; (x: number, y: string): any; } +>x : number + + public static foo(x: number, y: string); +>foo : { (x: number): any; (x: number, y: string): any; } +>x : number +>y : string + + public static foo(x: any, y?: any) { } +>foo : { (x: number): any; (x: number, y: string): any; } +>x : any +>y : any + + public static bar(x: 'hi'); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : 'hi' + + public static bar(x: string); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : string + + public static bar(x: number, y: string); +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : number +>y : string + + public static bar(x: any, y?: any) { } +>bar : { (x: 'hi'): any; (x: string): any; (x: number, y: string): any; } +>x : any +>y : any + +} diff --git a/tests/baselines/reference/memberFunctionsWithPublicPrivateOverloads.js b/tests/baselines/reference/memberFunctionsWithPublicPrivateOverloads.js index 2f4ff52b541..27e3bb5e85d 100644 --- a/tests/baselines/reference/memberFunctionsWithPublicPrivateOverloads.js +++ b/tests/baselines/reference/memberFunctionsWithPublicPrivateOverloads.js @@ -73,6 +73,6 @@ var D = (function () { return D; })(); var c; -var r = c.foo(1); +var r = c.foo(1); // error var d; -var r2 = d.foo(2); +var r2 = d.foo(2); // error diff --git a/tests/baselines/reference/memberOverride.js b/tests/baselines/reference/memberOverride.js index aadeff78e8a..6191652131a 100644 --- a/tests/baselines/reference/memberOverride.js +++ b/tests/baselines/reference/memberOverride.js @@ -9,6 +9,8 @@ var x = { var n: number = x.a; //// [memberOverride.js] +// An object initialiser accepts the first definition for the same property with a different type signature +// Should compile, since the second declaration of a overrides the first var x = { a: "", a: 5 diff --git a/tests/baselines/reference/memberVariableDeclarations1.js b/tests/baselines/reference/memberVariableDeclarations1.js index f11ef9ca555..7fceee20d2d 100644 --- a/tests/baselines/reference/memberVariableDeclarations1.js +++ b/tests/baselines/reference/memberVariableDeclarations1.js @@ -28,6 +28,7 @@ e1 = e2; e2 = e1; //// [memberVariableDeclarations1.js] +// from spec var Employee = (function () { function Employee() { this.retired = false; diff --git a/tests/baselines/reference/memberVariableDeclarations1.types b/tests/baselines/reference/memberVariableDeclarations1.types new file mode 100644 index 00000000000..10ec78d69dc --- /dev/null +++ b/tests/baselines/reference/memberVariableDeclarations1.types @@ -0,0 +1,85 @@ +=== tests/cases/compiler/memberVariableDeclarations1.ts === +// from spec + +class Employee { +>Employee : Employee + + public name: string; +>name : string + + public address: string; +>address : string + + public retired = false; +>retired : boolean + + public manager: Employee = null; +>manager : Employee +>Employee : Employee + + public reports: Employee[] = []; +>reports : Employee[] +>Employee : Employee +>[] : Employee[] +} + +class Employee2 { +>Employee2 : Employee2 + + public name: string; +>name : string + + public address: string; +>address : string + + public retired: boolean; +>retired : boolean + + public manager: Employee; +>manager : Employee +>Employee : Employee + + public reports: Employee[]; +>reports : Employee[] +>Employee : Employee + + constructor() { + this.retired = false; +>this.retired = false : boolean +>this.retired : boolean +>this : Employee2 +>retired : boolean + + this.manager = null; +>this.manager = null : null +>this.manager : Employee +>this : Employee2 +>manager : Employee + + this.reports = []; +>this.reports = [] : Employee[] +>this.reports : Employee[] +>this : Employee2 +>reports : Employee[] +>[] : Employee[] + } +} + +var e1: Employee; +>e1 : Employee +>Employee : Employee + +var e2: Employee2; +>e2 : Employee2 +>Employee2 : Employee2 + +e1 = e2; +>e1 = e2 : Employee2 +>e1 : Employee +>e2 : Employee2 + +e2 = e1; +>e2 = e1 : Employee +>e2 : Employee2 +>e1 : Employee + diff --git a/tests/baselines/reference/mergeThreeInterfaces.js b/tests/baselines/reference/mergeThreeInterfaces.js index e31395b5837..7c887e4fc7c 100644 --- a/tests/baselines/reference/mergeThreeInterfaces.js +++ b/tests/baselines/reference/mergeThreeInterfaces.js @@ -79,6 +79,7 @@ module M { } //// [mergeThreeInterfaces.js] +// interfaces with the same root module should merge var a; var r1 = a.foo; var r2 = a.bar; @@ -87,14 +88,19 @@ var b; var r4 = b.foo; var r5 = b.bar; var r6 = b.baz; +// basic non-generic and generic case inside a module var M; (function (M) { var a; var r1 = a.foo; - var r2 = a.bar; - var r3 = a.baz; + // BUG 856491 + var r2 = a.bar; // any, should be number + // BUG 856491 + var r3 = a.baz; // any, should be boolean var b; var r4 = b.foo; - var r5 = b.bar; - var r6 = b.baz; + // BUG 856491 + var r5 = b.bar; // any, should be number + // BUG 856491 + var r6 = b.baz; // any, should be boolean })(M || (M = {})); diff --git a/tests/baselines/reference/mergeThreeInterfaces.types b/tests/baselines/reference/mergeThreeInterfaces.types new file mode 100644 index 00000000000..4f4fba64358 --- /dev/null +++ b/tests/baselines/reference/mergeThreeInterfaces.types @@ -0,0 +1,197 @@ +=== tests/cases/conformance/interfaces/declarationMerging/mergeThreeInterfaces.ts === +// interfaces with the same root module should merge + +// basic case +interface A { +>A : A + + foo: string; +>foo : string +} + +interface A { +>A : A + + bar: number; +>bar : number +} + +interface A { +>A : A + + baz: boolean; +>baz : boolean +} + +var a: A; +>a : A +>A : A + +var r1 = a.foo +>r1 : string +>a.foo : string +>a : A +>foo : string + +var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number + +var r3 = a.baz; +>r3 : boolean +>a.baz : boolean +>a : A +>baz : boolean + +// basic generic case +interface B { +>B : B +>T : T + + foo: T; +>foo : T +>T : T +} + +interface B { +>B : B +>T : T + + bar: T; +>bar : T +>T : T +} + +interface B { +>B : B +>T : T + + baz: T; +>baz : T +>T : T +} + +var b: B; +>b : B +>B : B + +var r4 = b.foo +>r4 : string +>b.foo : string +>b : B +>foo : string + +var r5 = b.bar; +>r5 : string +>b.bar : string +>b : B +>bar : string + +var r6 = b.baz; +>r6 : string +>b.baz : string +>b : B +>baz : string + +// basic non-generic and generic case inside a module +module M { +>M : typeof M + + interface A { +>A : A + + foo: string; +>foo : string + } + + interface A { +>A : A + + bar: number; +>bar : number + } + + interface A { +>A : A + + baz: boolean; +>baz : boolean + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo; +>r1 : string +>a.foo : string +>a : A +>foo : string + + // BUG 856491 + var r2 = a.bar; // any, should be number +>r2 : number +>a.bar : number +>a : A +>bar : number + + // BUG 856491 + var r3 = a.baz; // any, should be boolean +>r3 : boolean +>a.baz : boolean +>a : A +>baz : boolean + + interface B { +>B : B +>T : T + + foo: T; +>foo : T +>T : T + } + + interface B { +>B : B +>T : T + + bar: T; +>bar : T +>T : T + } + + interface B { +>B : B +>T : T + + baz: T; +>baz : T +>T : T + } + + var b: B; +>b : B +>B : B + + var r4 = b.foo +>r4 : string +>b.foo : string +>b : B +>foo : string + + // BUG 856491 + var r5 = b.bar; // any, should be number +>r5 : string +>b.bar : string +>b : B +>bar : string + + // BUG 856491 + var r6 = b.baz; // any, should be boolean +>r6 : string +>b.baz : string +>b : B +>baz : string +} diff --git a/tests/baselines/reference/mergeThreeInterfaces2.js b/tests/baselines/reference/mergeThreeInterfaces2.js index 7ab7f0fd473..cab0019a641 100644 --- a/tests/baselines/reference/mergeThreeInterfaces2.js +++ b/tests/baselines/reference/mergeThreeInterfaces2.js @@ -68,6 +68,8 @@ module M2 { } //// [mergeThreeInterfaces2.js] +// two interfaces with the same root module should merge +// root module now multiple module declarations var M2; (function (M2) { var a; @@ -81,6 +83,7 @@ var M2; var r2 = a.bar; var r3 = a.baz; })(M2 || (M2 = {})); +// same as above but with an additional level of nesting and third module declaration var M2; (function (M2) { (function (M3) { diff --git a/tests/baselines/reference/mergeThreeInterfaces2.types b/tests/baselines/reference/mergeThreeInterfaces2.types new file mode 100644 index 00000000000..31339187e3d --- /dev/null +++ b/tests/baselines/reference/mergeThreeInterfaces2.types @@ -0,0 +1,176 @@ +=== tests/cases/conformance/interfaces/declarationMerging/mergeThreeInterfaces2.ts === +// two interfaces with the same root module should merge + +// root module now multiple module declarations +module M2 { +>M2 : typeof M2 + + export interface A { +>A : A + + foo: string; +>foo : string + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo; +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number +} + +module M2 { +>M2 : typeof M2 + + export interface A { +>A : A + + bar: number; +>bar : number + } + + export interface A { +>A : A + + baz: boolean; +>baz : boolean + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo; +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number + + var r3 = a.baz; +>r3 : boolean +>a.baz : boolean +>a : A +>baz : boolean +} + +// same as above but with an additional level of nesting and third module declaration +module M2 { +>M2 : typeof M2 + + export module M3 { +>M3 : typeof M3 + + export interface A { +>A : A + + foo: string; +>foo : string + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo; +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number + } +} + +module M2 { +>M2 : typeof M2 + + export module M3 { +>M3 : typeof M3 + + export interface A { +>A : A + + bar: number; +>bar : number + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number + + var r3 = a.baz; +>r3 : boolean +>a.baz : boolean +>a : A +>baz : boolean + } +} + +module M2 { +>M2 : typeof M2 + + export module M3 { +>M3 : typeof M3 + + export interface A { +>A : A + + baz: boolean; +>baz : boolean + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number + + var r3 = a.baz; +>r3 : boolean +>a.baz : boolean +>a : A +>baz : boolean + } +} diff --git a/tests/baselines/reference/mergeTwoInterfaces.js b/tests/baselines/reference/mergeTwoInterfaces.js index eb5bc7b621d..3396c62ec07 100644 --- a/tests/baselines/reference/mergeTwoInterfaces.js +++ b/tests/baselines/reference/mergeTwoInterfaces.js @@ -58,18 +58,22 @@ module M { } //// [mergeTwoInterfaces.js] +// two interfaces with the same root module should merge var a; var r1 = a.foo; var r2 = a.bar; var b; var r3 = b.foo; var r4 = b.bar; +// basic non-generic and generic case inside a module var M; (function (M) { var a; var r1 = a.foo; - var r2 = a.bar; + // BUG 856491 + var r2 = a.bar; // any, should be number var b; var r3 = b.foo; - var r4 = b.bar; + // BUG 856491 + var r4 = b.bar; // any, should be string })(M || (M = {})); diff --git a/tests/baselines/reference/mergeTwoInterfaces.types b/tests/baselines/reference/mergeTwoInterfaces.types new file mode 100644 index 00000000000..539f01d4240 --- /dev/null +++ b/tests/baselines/reference/mergeTwoInterfaces.types @@ -0,0 +1,142 @@ +=== tests/cases/conformance/interfaces/declarationMerging/mergeTwoInterfaces.ts === +// two interfaces with the same root module should merge + +// basic case +interface A { +>A : A + + foo: string; +>foo : string +} + +interface A { +>A : A + + bar: number; +>bar : number +} + +var a: A; +>a : A +>A : A + +var r1 = a.foo +>r1 : string +>a.foo : string +>a : A +>foo : string + +var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number + +// basic generic case +interface B { +>B : B +>T : T + + baz: string; +>baz : string + + foo: T; +>foo : T +>T : T +} + +interface B { +>B : B +>T : T + + bar: T; +>bar : T +>T : T +} + +var b: B; +>b : B +>B : B + +var r3 = b.foo +>r3 : string +>b.foo : string +>b : B +>foo : string + +var r4 = b.bar; +>r4 : string +>b.bar : string +>b : B +>bar : string + +// basic non-generic and generic case inside a module +module M { +>M : typeof M + + interface A { +>A : A + + foo: string; +>foo : string + } + + interface A { +>A : A + + bar: number; +>bar : number + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo; +>r1 : string +>a.foo : string +>a : A +>foo : string + + // BUG 856491 + var r2 = a.bar; // any, should be number +>r2 : number +>a.bar : number +>a : A +>bar : number + + interface B { +>B : B +>T : T + + foo: T; +>foo : T +>T : T + } + + interface B { +>B : B +>T : T + + bar: T; +>bar : T +>T : T + } + + var b: B; +>b : B +>B : B + + var r3 = b.foo +>r3 : string +>b.foo : string +>b : B +>foo : string + + // BUG 856491 + var r4 = b.bar; // any, should be string +>r4 : string +>b.bar : string +>b : B +>bar : string +} diff --git a/tests/baselines/reference/mergeTwoInterfaces2.js b/tests/baselines/reference/mergeTwoInterfaces2.js index 73423602569..cdc414b3ccd 100644 --- a/tests/baselines/reference/mergeTwoInterfaces2.js +++ b/tests/baselines/reference/mergeTwoInterfaces2.js @@ -48,6 +48,8 @@ module M2 { } //// [mergeTwoInterfaces2.js] +// two interfaces with the same root module should merge +// root module now multiple module declarations var M2; (function (M2) { var a; @@ -60,6 +62,7 @@ var M2; var r1 = a.foo; var r2 = a.bar; })(M2 || (M2 = {})); +// same as above but with an additional level of nesting var M2; (function (M2) { (function (M3) { diff --git a/tests/baselines/reference/mergeTwoInterfaces2.types b/tests/baselines/reference/mergeTwoInterfaces2.types new file mode 100644 index 00000000000..f3908a6fe67 --- /dev/null +++ b/tests/baselines/reference/mergeTwoInterfaces2.types @@ -0,0 +1,120 @@ +=== tests/cases/conformance/interfaces/declarationMerging/mergeTwoInterfaces2.ts === +// two interfaces with the same root module should merge + +// root module now multiple module declarations +module M2 { +>M2 : typeof M2 + + export interface A { +>A : A + + foo: string; +>foo : string + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number +} + +module M2 { +>M2 : typeof M2 + + export interface A { +>A : A + + bar: number; +>bar : number + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number +} + +// same as above but with an additional level of nesting +module M2 { +>M2 : typeof M2 + + export module M3 { +>M3 : typeof M3 + + export interface A { +>A : A + + foo: string; +>foo : string + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number + } +} + +module M2 { +>M2 : typeof M2 + + export module M3 { +>M3 : typeof M3 + + export interface A { +>A : A + + bar: number; +>bar : number + } + + var a: A; +>a : A +>A : A + + var r1 = a.foo +>r1 : string +>a.foo : string +>a : A +>foo : string + + var r2 = a.bar; +>r2 : number +>a.bar : number +>a : A +>bar : number + } +} diff --git a/tests/baselines/reference/mergedDeclarations1.types b/tests/baselines/reference/mergedDeclarations1.types new file mode 100644 index 00000000000..20249ab94e1 --- /dev/null +++ b/tests/baselines/reference/mergedDeclarations1.types @@ -0,0 +1,76 @@ +=== tests/cases/compiler/mergedDeclarations1.ts === +interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number +} +function point(x: number, y: number): Point { +>point : typeof point +>x : number +>y : number +>Point : Point + + return { x: x, y: y }; +>{ x: x, y: y } : { x: number; y: number; } +>x : number +>x : number +>y : number +>y : number +} +module point { +>point : typeof point + + export var origin = point(0, 0); +>origin : Point +>point(0, 0) : Point +>point : typeof point + + export function equals(p1: Point, p2: Point) { +>equals : (p1: Point, p2: Point) => boolean +>p1 : Point +>Point : Point +>p2 : Point +>Point : Point + + return p1.x == p2.x && p1.y == p2.y; +>p1.x == p2.x && p1.y == p2.y : boolean +>p1.x == p2.x : boolean +>p1.x : number +>p1 : Point +>x : number +>p2.x : number +>p2 : Point +>x : number +>p1.y == p2.y : boolean +>p1.y : number +>p1 : Point +>y : number +>p2.y : number +>p2 : Point +>y : number + } +} +var p1 = point(0, 0); +>p1 : Point +>point(0, 0) : Point +>point : typeof point + +var p2 = point.origin; +>p2 : Point +>point.origin : Point +>point : typeof point +>origin : Point + +var b = point.equals(p1, p2); +>b : boolean +>point.equals(p1, p2) : boolean +>point.equals : (p1: Point, p2: Point) => boolean +>point : typeof point +>equals : (p1: Point, p2: Point) => boolean +>p1 : Point +>p2 : Point + diff --git a/tests/baselines/reference/mergedDeclarations3.js b/tests/baselines/reference/mergedDeclarations3.js index 2c606288a98..c86fa204669 100644 --- a/tests/baselines/reference/mergedDeclarations3.js +++ b/tests/baselines/reference/mergedDeclarations3.js @@ -55,7 +55,7 @@ var M; })(M.Color || (M.Color = {})); var Color = M.Color; })(M || (M = {})); -var p = M.Color.Blue; +var p = M.Color.Blue; // ok var M; (function (M) { function foo() { @@ -83,7 +83,7 @@ var M; foo.z = 1; })(foo || (foo = {})); })(M || (M = {})); -M.foo(); -M.foo.x; -M.foo.y; -M.foo.z; +M.foo(); // ok +M.foo.x; // error +M.foo.y; // ok +M.foo.z; // error diff --git a/tests/baselines/reference/mergedDeclarations4.types b/tests/baselines/reference/mergedDeclarations4.types new file mode 100644 index 00000000000..068a08d35f5 --- /dev/null +++ b/tests/baselines/reference/mergedDeclarations4.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/mergedDeclarations4.ts === +module M { +>M : typeof M + + export function f() { } +>f : typeof f + + f(); +>f() : void +>f : typeof f + + M.f(); +>M.f() : void +>M.f : typeof f +>M : typeof M +>f : typeof f + + var r = f.hello; +>r : number +>f.hello : number +>f : typeof f +>hello : number +} + +module M { +>M : typeof M + + export module f { +>f : typeof f + + export var hello = 1; +>hello : number + } + f(); +>f() : void +>f : typeof f + + M.f(); +>M.f() : void +>M.f : typeof f +>M : typeof M +>f : typeof f + + var r = f.hello; +>r : number +>f.hello : number +>f : typeof f +>hello : number +} + +M.f(); +>M.f() : void +>M.f : typeof M.f +>M : typeof M +>f : typeof M.f + +M.f.hello; +>M.f.hello : number +>M.f : typeof M.f +>M : typeof M +>f : typeof M.f +>hello : number + diff --git a/tests/baselines/reference/mergedEnumDeclarationCodeGen.types b/tests/baselines/reference/mergedEnumDeclarationCodeGen.types new file mode 100644 index 00000000000..84e6a8237e5 --- /dev/null +++ b/tests/baselines/reference/mergedEnumDeclarationCodeGen.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/mergedEnumDeclarationCodeGen.ts === +enum E { +>E : E + + a, +>a : E + + b = a +>b : E +>a : E +} +enum E { +>E : E + + c = a +>c : E +>a : E +} diff --git a/tests/baselines/reference/mergedInterfaceFromMultipleFiles1.js b/tests/baselines/reference/mergedInterfaceFromMultipleFiles1.js index 8ac1ed79571..ab1eafa1c9c 100644 --- a/tests/baselines/reference/mergedInterfaceFromMultipleFiles1.js +++ b/tests/baselines/reference/mergedInterfaceFromMultipleFiles1.js @@ -25,6 +25,7 @@ var e: Date = c.b(); //// [mergedInterfaceFromMultipleFiles1_0.js] //// [mergedInterfaceFromMultipleFiles1_1.js] +/// var c; var a = c.foo(); var b = c.bar(); diff --git a/tests/baselines/reference/mergedInterfaceFromMultipleFiles1.types b/tests/baselines/reference/mergedInterfaceFromMultipleFiles1.types new file mode 100644 index 00000000000..ad6b07f0312 --- /dev/null +++ b/tests/baselines/reference/mergedInterfaceFromMultipleFiles1.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/mergedInterfaceFromMultipleFiles1_1.ts === +/// + +interface D { bar(): number; } +>D : D +>bar : () => number + +interface C extends D { +>C : C +>D : D + + b(): Date; +>b : () => Date +>Date : Date +} + +var c:C; +>c : C +>C : C + +var a: string = c.foo(); +>a : string +>c.foo() : string +>c.foo : () => string +>c : C +>foo : () => string + +var b: number = c.bar(); +>b : number +>c.bar() : number +>c.bar : () => number +>c : C +>bar : () => number + +var d: number = c.a(); +>d : number +>c.a() : number +>c.a : () => number +>c : C +>a : () => number + +var e: Date = c.b(); +>e : Date +>Date : Date +>c.b() : Date +>c.b : () => Date +>c : C +>b : () => Date + +=== tests/cases/compiler/mergedInterfaceFromMultipleFiles1_0.ts === + +interface I { foo(): string; } +>I : I +>foo : () => string + +interface C extends I { +>C : C +>I : I + + a(): number; +>a : () => number +} + diff --git a/tests/baselines/reference/mergedInterfacesWithIndexers.js b/tests/baselines/reference/mergedInterfacesWithIndexers.js index 83f4638c94c..476bcd383e1 100644 --- a/tests/baselines/reference/mergedInterfacesWithIndexers.js +++ b/tests/baselines/reference/mergedInterfacesWithIndexers.js @@ -16,6 +16,7 @@ var r2 = a['1']; var r3 = a['hi']; //// [mergedInterfacesWithIndexers.js] +// indexers should behave like other members when merging interface declarations var a; var r = a[1]; var r2 = a['1']; diff --git a/tests/baselines/reference/mergedInterfacesWithIndexers.types b/tests/baselines/reference/mergedInterfacesWithIndexers.types new file mode 100644 index 00000000000..cd082153626 --- /dev/null +++ b/tests/baselines/reference/mergedInterfacesWithIndexers.types @@ -0,0 +1,38 @@ +=== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithIndexers.ts === +// indexers should behave like other members when merging interface declarations + +interface A { +>A : A + + [x: number]: string; +>x : number +} + + +interface A { +>A : A + + [x: string]: { length: number }; +>x : string +>length : number +} + +var a: A; +>a : A +>A : A + +var r = a[1]; +>r : string +>a[1] : string +>a : A + +var r2 = a['1']; +>r2 : { length: number; } +>a['1'] : { length: number; } +>a : A + +var r3 = a['hi']; +>r3 : { length: number; } +>a['hi'] : { length: number; } +>a : A + diff --git a/tests/baselines/reference/mergedInterfacesWithIndexers2.js b/tests/baselines/reference/mergedInterfacesWithIndexers2.js index fa7edd08d54..e1ecde8994e 100644 --- a/tests/baselines/reference/mergedInterfacesWithIndexers2.js +++ b/tests/baselines/reference/mergedInterfacesWithIndexers2.js @@ -23,3 +23,4 @@ interface A2 { //// [mergedInterfacesWithIndexers2.js] +// indexers should behave like other members when merging interface declarations diff --git a/tests/baselines/reference/mergedInterfacesWithInheritedPrivates.js b/tests/baselines/reference/mergedInterfacesWithInheritedPrivates.js index 527df77b0c6..2502b46b06b 100644 --- a/tests/baselines/reference/mergedInterfacesWithInheritedPrivates.js +++ b/tests/baselines/reference/mergedInterfacesWithInheritedPrivates.js @@ -43,4 +43,4 @@ var E = (function () { return E; })(); var a; -var r = a.x; +var r = a.x; // error diff --git a/tests/baselines/reference/mergedInterfacesWithInheritedPrivates2.js b/tests/baselines/reference/mergedInterfacesWithInheritedPrivates2.js index 98fa868bb53..e9f16103535 100644 --- a/tests/baselines/reference/mergedInterfacesWithInheritedPrivates2.js +++ b/tests/baselines/reference/mergedInterfacesWithInheritedPrivates2.js @@ -63,5 +63,5 @@ var E = (function (_super) { return E; })(C2); var a; -var r = a.x; -var r2 = a.w; +var r = a.x; // error +var r2 = a.w; // error diff --git a/tests/baselines/reference/mergedInterfacesWithMultipleBases.js b/tests/baselines/reference/mergedInterfacesWithMultipleBases.js index 1df74ff7ebb..56a0b2dd90f 100644 --- a/tests/baselines/reference/mergedInterfacesWithMultipleBases.js +++ b/tests/baselines/reference/mergedInterfacesWithMultipleBases.js @@ -55,6 +55,8 @@ module M { } //// [mergedInterfacesWithMultipleBases.js] +// merged interfaces behave as if all extends clauses from each declaration are merged together +// no errors expected var C = (function () { function C() { } @@ -72,6 +74,7 @@ var D = (function () { })(); var a; var r = a.a; +// generic interfaces in a module var M; (function (M) { var C = (function () { diff --git a/tests/baselines/reference/mergedInterfacesWithMultipleBases.types b/tests/baselines/reference/mergedInterfacesWithMultipleBases.types new file mode 100644 index 00000000000..4fb955dab2e --- /dev/null +++ b/tests/baselines/reference/mergedInterfacesWithMultipleBases.types @@ -0,0 +1,121 @@ +=== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithMultipleBases.ts === +// merged interfaces behave as if all extends clauses from each declaration are merged together +// no errors expected + +class C { +>C : C + + a: number; +>a : number +} + +class C2 { +>C2 : C2 + + b: number; +>b : number +} + +interface A extends C { +>A : A +>C : C + + y: string; +>y : string +} + +interface A extends C2 { +>A : A +>C2 : C2 + + z: string; +>z : string +} + +class D implements A { +>D : D +>A : A + + a: number; +>a : number + + b: number; +>b : number + + y: string; +>y : string + + z: string; +>z : string +} + +var a: A; +>a : A +>A : A + +var r = a.a; +>r : number +>a.a : number +>a : A +>a : number + +// generic interfaces in a module +module M { +>M : typeof M + + class C { +>C : C +>T : T + + a: T; +>a : T +>T : T + } + + class C2 { +>C2 : C2 +>T : T + + b: T; +>b : T +>T : T + } + + interface A extends C { +>A : A +>T : T +>C : C +>T : T + + y: T; +>y : T +>T : T + } + + interface A extends C2 { +>A : A +>T : T +>C2 : C2 + + z: T; +>z : T +>T : T + } + + class D implements A { +>D : D +>A : A + + a: boolean; +>a : boolean + + b: string; +>b : string + + y: boolean; +>y : boolean + + z: boolean; +>z : boolean + } +} diff --git a/tests/baselines/reference/mergedInterfacesWithMultipleBases2.js b/tests/baselines/reference/mergedInterfacesWithMultipleBases2.js index 896b9e07a2e..47438374333 100644 --- a/tests/baselines/reference/mergedInterfacesWithMultipleBases2.js +++ b/tests/baselines/reference/mergedInterfacesWithMultipleBases2.js @@ -76,6 +76,8 @@ module M { } //// [mergedInterfacesWithMultipleBases2.js] +// merged interfaces behave as if all extends clauses from each declaration are merged together +// no errors expected var C = (function () { function C() { } @@ -103,6 +105,7 @@ var D = (function () { })(); var a; var r = a.a; +// generic interfaces in a module var M; (function (M) { var C = (function () { diff --git a/tests/baselines/reference/mergedInterfacesWithMultipleBases2.types b/tests/baselines/reference/mergedInterfacesWithMultipleBases2.types new file mode 100644 index 00000000000..b8dfec64bae --- /dev/null +++ b/tests/baselines/reference/mergedInterfacesWithMultipleBases2.types @@ -0,0 +1,171 @@ +=== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithMultipleBases2.ts === +// merged interfaces behave as if all extends clauses from each declaration are merged together +// no errors expected + +class C { +>C : C + + a: number; +>a : number +} + +class C2 { +>C2 : C2 + + b: number; +>b : number +} + +class C3 { +>C3 : C3 + + c: string; +>c : string +} + +class C4 { +>C4 : C4 + + d: string; +>d : string +} + + +interface A extends C, C3 { +>A : A +>C : C +>C3 : C3 + + y: string; +>y : string +} + +interface A extends C2, C4 { +>A : A +>C2 : C2 +>C4 : C4 + + z: string; +>z : string +} + +class D implements A { +>D : D +>A : A + + a: number; +>a : number + + b: number; +>b : number + + c: string; +>c : string + + d: string; +>d : string + + y: string; +>y : string + + z: string; +>z : string +} + +var a: A; +>a : A +>A : A + +var r = a.a; +>r : number +>a.a : number +>a : A +>a : number + +// generic interfaces in a module +module M { +>M : typeof M + + class C { +>C : C +>T : T + + a: T; +>a : T +>T : T + } + + class C2 { +>C2 : C2 +>T : T + + b: T; +>b : T +>T : T + } + + class C3 { +>C3 : C3 +>T : T + + c: T; +>c : T +>T : T + } + + class C4 { +>C4 : C4 +>T : T + + d: T; +>d : T +>T : T + } + + interface A extends C, C3 { +>A : A +>T : T +>C : C +>T : T +>C3 : C3 +>T : T + + y: T; +>y : T +>T : T + } + + interface A extends C2, C4 { +>A : A +>T : T +>C2 : C2 +>C4 : C4 + + z: T; +>z : T +>T : T + } + + class D implements A { +>D : D +>A : A + + a: boolean; +>a : boolean + + b: string; +>b : string + + c: boolean; +>c : boolean + + d: string; +>d : string + + y: boolean; +>y : boolean + + z: boolean; +>z : boolean + } +} diff --git a/tests/baselines/reference/mergedInterfacesWithMultipleBases3.js b/tests/baselines/reference/mergedInterfacesWithMultipleBases3.js index c1afde0ef41..23260e13c45 100644 --- a/tests/baselines/reference/mergedInterfacesWithMultipleBases3.js +++ b/tests/baselines/reference/mergedInterfacesWithMultipleBases3.js @@ -36,6 +36,8 @@ class D implements A { } //// [mergedInterfacesWithMultipleBases3.js] +// merged interfaces behave as if all extends clauses from each declaration are merged together +// no errors expected var C = (function () { function C() { } diff --git a/tests/baselines/reference/mergedInterfacesWithMultipleBases3.types b/tests/baselines/reference/mergedInterfacesWithMultipleBases3.types new file mode 100644 index 00000000000..f5951008932 --- /dev/null +++ b/tests/baselines/reference/mergedInterfacesWithMultipleBases3.types @@ -0,0 +1,85 @@ +=== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithMultipleBases3.ts === +// merged interfaces behave as if all extends clauses from each declaration are merged together +// no errors expected + +class C { +>C : C +>T : T + + a: T; +>a : T +>T : T +} + +class C2 { +>C2 : C2 +>T : T + + b: T; +>b : T +>T : T +} + +class C3 { +>C3 : C3 +>T : T + + c: T; +>c : T +>T : T +} + +class C4 { +>C4 : C4 +>T : T + + d: T; +>d : T +>T : T +} + +interface A extends C, C3 { +>A : A +>T : T +>C : C +>C3 : C3 + + y: T; +>y : T +>T : T +} + +interface A extends C, C4 { +>A : A +>T : T +>C : C +>C4 : C4 + + z: T; +>z : T +>T : T +} + +class D implements A { +>D : D +>A : A + + a: string; +>a : string + + b: Date; +>b : Date +>Date : Date + + c: string; +>c : string + + d: string; +>d : string + + y: boolean; +>y : boolean + + z: boolean; +>z : boolean +} diff --git a/tests/baselines/reference/mergedInterfacesWithMultipleBases4.js b/tests/baselines/reference/mergedInterfacesWithMultipleBases4.js index 81421e79bf3..2ee7ba892c2 100644 --- a/tests/baselines/reference/mergedInterfacesWithMultipleBases4.js +++ b/tests/baselines/reference/mergedInterfacesWithMultipleBases4.js @@ -35,6 +35,7 @@ class D implements A { } //// [mergedInterfacesWithMultipleBases4.js] +// merged interfaces behave as if all extends clauses from each declaration are merged together var C = (function () { function C() { } diff --git a/tests/baselines/reference/mergedModuleDeclarationCodeGen2.types b/tests/baselines/reference/mergedModuleDeclarationCodeGen2.types new file mode 100644 index 00000000000..790ec8d9377 --- /dev/null +++ b/tests/baselines/reference/mergedModuleDeclarationCodeGen2.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/mergedModuleDeclarationCodeGen2.ts === +module my.data.foo { +>my : typeof my +>data : typeof data +>foo : typeof foo + + export function buz() { } +>buz : () => void +} +module my.data { +>my : typeof my +>data : typeof my.data + + function data(my) { +>data : (my: any) => void +>my : any + + foo.buz(); +>foo.buz() : void +>foo.buz : () => void +>foo : typeof foo +>buz : () => void + } +} diff --git a/tests/baselines/reference/mergedModuleDeclarationCodeGen3.types b/tests/baselines/reference/mergedModuleDeclarationCodeGen3.types new file mode 100644 index 00000000000..45f652fe3c0 --- /dev/null +++ b/tests/baselines/reference/mergedModuleDeclarationCodeGen3.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/mergedModuleDeclarationCodeGen3.ts === +module my.data { +>my : typeof my +>data : typeof data + + export function buz() { } +>buz : () => void +} +module my.data.foo { +>my : typeof my +>data : typeof data +>foo : typeof foo + + function data(my, foo) { +>data : (my: any, foo: any) => void +>my : any +>foo : any + + buz(); +>buz() : void +>buz : () => void + } +} diff --git a/tests/baselines/reference/mergedModuleDeclarationCodeGen4.types b/tests/baselines/reference/mergedModuleDeclarationCodeGen4.types new file mode 100644 index 00000000000..0907a21a969 --- /dev/null +++ b/tests/baselines/reference/mergedModuleDeclarationCodeGen4.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/mergedModuleDeclarationCodeGen4.ts === +module superContain { +>superContain : typeof superContain + + export module contain { +>contain : typeof contain + + export module my.buz { +>my : typeof my +>buz : typeof buz + + export module data { +>data : typeof data + + export function foo() { } +>foo : () => void + } + } + export module my.buz { +>my : typeof my +>buz : typeof buz + + export module data { +>data : typeof data + + export function bar(contain, my, buz, data) { +>bar : (contain: any, my: any, buz: any, data: any) => void +>contain : any +>my : any +>buz : any +>data : any + + foo(); +>foo() : void +>foo : () => void + } + } + } + } +} diff --git a/tests/baselines/reference/mergedModuleDeclarationCodeGen5.js b/tests/baselines/reference/mergedModuleDeclarationCodeGen5.js index 70e8de4c62a..f521b6d8d11 100644 --- a/tests/baselines/reference/mergedModuleDeclarationCodeGen5.js +++ b/tests/baselines/reference/mergedModuleDeclarationCodeGen5.js @@ -51,12 +51,13 @@ var M; (function (plop) { })(_plop.plop || (_plop.plop = {})); var plop = _plop.plop; - var v1 = gunk; - var v2 = buz; - _plop.v3 = _plop.doom; - _plop.v4 = _plop.M; - _plop.v5 = fudge; - _plop.v6 = plop; + // Emit these references as follows + var v1 = gunk; // gunk + var v2 = buz; // buz + _plop.v3 = _plop.doom; // _plop.doom + _plop.v4 = _plop.M; // _plop.M + _plop.v5 = fudge; // fudge + _plop.v6 = plop; // plop })(_buz.plop || (_buz.plop = {})); var plop = _buz.plop; })(M.buz || (M.buz = {})); diff --git a/tests/baselines/reference/mergedModuleDeclarationCodeGen5.types b/tests/baselines/reference/mergedModuleDeclarationCodeGen5.types new file mode 100644 index 00000000000..ab4203d7951 --- /dev/null +++ b/tests/baselines/reference/mergedModuleDeclarationCodeGen5.types @@ -0,0 +1,54 @@ +=== tests/cases/compiler/mergedModuleDeclarationCodeGen5.ts === +module M.buz.plop { +>M : typeof M +>buz : typeof buz +>plop : typeof buz.plop + + export function doom() { } +>doom : () => void + + export function M() { } +>M : () => void +} +module M.buz.plop { +>M : typeof M +>buz : typeof buz +>plop : typeof M.buz.plop + + function gunk() { } +>gunk : () => void + + function buz() { } +>buz : () => void + + export class fudge { } +>fudge : fudge + + export enum plop { } +>plop : plop + + // Emit these references as follows + var v1 = gunk; // gunk +>v1 : () => void +>gunk : () => void + + var v2 = buz; // buz +>v2 : () => void +>buz : () => void + + export var v3 = doom; // _plop.doom +>v3 : () => void +>doom : () => void + + export var v4 = M; // _plop.M +>v4 : () => void +>M : () => void + + export var v5 = fudge; // fudge +>v5 : typeof fudge +>fudge : typeof fudge + + export var v6 = plop; // plop +>v6 : typeof plop +>plop : typeof plop +} diff --git a/tests/baselines/reference/mergedModuleDeclarationWithSharedExportedVar.types b/tests/baselines/reference/mergedModuleDeclarationWithSharedExportedVar.types new file mode 100644 index 00000000000..89d155861a5 --- /dev/null +++ b/tests/baselines/reference/mergedModuleDeclarationWithSharedExportedVar.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/mergedModuleDeclarationWithSharedExportedVar.ts === +module M { +>M : typeof M + + export var v = 10; +>v : number + + v; +>v : number +} +module M { +>M : typeof M + + v; +>v : number +} diff --git a/tests/baselines/reference/methodContainingLocalFunction.js b/tests/baselines/reference/methodContainingLocalFunction.js index b7838d3b06c..36487e3ad7c 100644 --- a/tests/baselines/reference/methodContainingLocalFunction.js +++ b/tests/baselines/reference/methodContainingLocalFunction.js @@ -51,6 +51,7 @@ enum E { } //// [methodContainingLocalFunction.js] +// The first case here (BugExhibition) caused a crash. Try with different permutations of features. var BugExhibition = (function () { function BugExhibition() { } diff --git a/tests/baselines/reference/methodContainingLocalFunction.types b/tests/baselines/reference/methodContainingLocalFunction.types new file mode 100644 index 00000000000..48c4be12631 --- /dev/null +++ b/tests/baselines/reference/methodContainingLocalFunction.types @@ -0,0 +1,132 @@ +=== tests/cases/compiler/methodContainingLocalFunction.ts === +// The first case here (BugExhibition) caused a crash. Try with different permutations of features. +class BugExhibition { +>BugExhibition : BugExhibition +>T : T + + public exhibitBug() { +>exhibitBug : () => void + + function localFunction() { } +>localFunction : () => void + + var x: { (): void; }; +>x : () => void + + x = localFunction; +>x = localFunction : () => void +>x : () => void +>localFunction : () => void + } +} + +class BugExhibition2 { +>BugExhibition2 : BugExhibition2 +>T : T + + private static get exhibitBug() { +>exhibitBug : any + + function localFunction() { } +>localFunction : () => void + + var x: { (): void; }; +>x : () => void + + x = localFunction; +>x = localFunction : () => void +>x : () => void +>localFunction : () => void + + return null; + } +} + +class BugExhibition3 { +>BugExhibition3 : BugExhibition3 +>T : T + + public exhibitBug() { +>exhibitBug : () => void + + function localGenericFunction(u?: U) { } +>localGenericFunction : (u?: U) => void +>U : U +>u : U +>U : U + + var x: { (): void; }; +>x : () => void + + x = localGenericFunction; +>x = localGenericFunction : (u?: U) => void +>x : () => void +>localGenericFunction : (u?: U) => void + } +} + +class C { +>C : C + + exhibit() { +>exhibit : () => void + + var funcExpr = (u?: U) => { }; +>funcExpr : (u?: U) => void +>(u?: U) => { } : (u?: U) => void +>U : U +>u : U +>U : U + + var x: { (): void; }; +>x : () => void + + x = funcExpr; +>x = funcExpr : (u?: U) => void +>x : () => void +>funcExpr : (u?: U) => void + } +} + +module M { +>M : typeof M + + export function exhibitBug() { +>exhibitBug : () => void + + function localFunction() { } +>localFunction : () => void + + var x: { (): void; }; +>x : () => void + + x = localFunction; +>x = localFunction : () => void +>x : () => void +>localFunction : () => void + } +} + +enum E { +>E : E + + A = (() => { +>A : E +>(() => { function localFunction() { } var x: { (): void; }; x = localFunction; return 0; })() : number +>(() => { function localFunction() { } var x: { (): void; }; x = localFunction; return 0; }) : () => number +>() => { function localFunction() { } var x: { (): void; }; x = localFunction; return 0; } : () => number + + function localFunction() { } +>localFunction : () => void + + var x: { (): void; }; +>x : () => void + + x = localFunction; +>x = localFunction : () => void +>x : () => void +>localFunction : () => void + + return 0; + })() +} diff --git a/tests/baselines/reference/methodSignatureDeclarationEmit1.types b/tests/baselines/reference/methodSignatureDeclarationEmit1.types new file mode 100644 index 00000000000..30bcf0661b6 --- /dev/null +++ b/tests/baselines/reference/methodSignatureDeclarationEmit1.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/methodSignatureDeclarationEmit1.ts === +class C { +>C : C + + public foo(n: number): void; +>foo : { (n: number): void; (s: string): void; } +>n : number + + public foo(s: string): void; +>foo : { (n: number): void; (s: string): void; } +>s : string + + public foo(a: any): void { +>foo : { (n: number): void; (s: string): void; } +>a : any + } +} diff --git a/tests/baselines/reference/methodSignaturesWithOverloads.js b/tests/baselines/reference/methodSignaturesWithOverloads.js index bbff03bcc75..7f80ecbb2d0 100644 --- a/tests/baselines/reference/methodSignaturesWithOverloads.js +++ b/tests/baselines/reference/methodSignaturesWithOverloads.js @@ -20,5 +20,6 @@ var c2: { }; //// [methodSignaturesWithOverloads.js] +// Object type literals permit overloads with optionality but they must match var c; var c2; diff --git a/tests/baselines/reference/methodSignaturesWithOverloads2.js b/tests/baselines/reference/methodSignaturesWithOverloads2.js index 95f642e6b54..a51ec01c41b 100644 --- a/tests/baselines/reference/methodSignaturesWithOverloads2.js +++ b/tests/baselines/reference/methodSignaturesWithOverloads2.js @@ -29,9 +29,12 @@ c2.func4 = c2.func5; c2.func5 = c2.func4; //// [methodSignaturesWithOverloads2.js] +// Object type literals permit overloads with optionality but they must match var c; +// no errors c.func4 = c.func5; c.func5 = c.func4; var c2; +// no errors c2.func4 = c2.func5; c2.func5 = c2.func4; diff --git a/tests/baselines/reference/methodSignaturesWithOverloads2.types b/tests/baselines/reference/methodSignaturesWithOverloads2.types new file mode 100644 index 00000000000..1c0a44db753 --- /dev/null +++ b/tests/baselines/reference/methodSignaturesWithOverloads2.types @@ -0,0 +1,96 @@ +=== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/methodSignaturesWithOverloads2.ts === +// Object type literals permit overloads with optionality but they must match + +var c: { +>c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string; }; } + + func4?(x: number): number; +>func4 : { (x: number): number; (s: string): string; } +>x : number + + func4?(s: string): string; +>func4 : { (x: number): number; (s: string): string; } +>s : string + + func5?: { +>func5 : { (x: number): number; (s: string): string; } + + (x: number): number; +>x : number + + (s: string): string; +>s : string + + }; +}; + +// no errors +c.func4 = c.func5; +>c.func4 = c.func5 : { (x: number): number; (s: string): string; } +>c.func4 : { (x: number): number; (s: string): string; } +>c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string; }; } +>func4 : { (x: number): number; (s: string): string; } +>c.func5 : { (x: number): number; (s: string): string; } +>c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string; }; } +>func5 : { (x: number): number; (s: string): string; } + +c.func5 = c.func4; +>c.func5 = c.func4 : { (x: number): number; (s: string): string; } +>c.func5 : { (x: number): number; (s: string): string; } +>c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string; }; } +>func5 : { (x: number): number; (s: string): string; } +>c.func4 : { (x: number): number; (s: string): string; } +>c : { func4?(x: number): number; func4?(s: string): string; func5?: { (x: number): number; (s: string): string; }; } +>func4 : { (x: number): number; (s: string): string; } + + +var c2: { +>c2 : { func4?(x: T): number; func4?(s: T): string; func5?: { (x: T): number; (s: T): string; }; } + + func4?(x: T): number; +>func4 : { (x: T): number; (s: T): string; } +>T : T +>x : T +>T : T + + func4? (s: T): string; +>func4 : { (x: T): number; (s: T): string; } +>T : T +>s : T +>T : T + + func5?: { +>func5 : { (x: T): number; (s: T): string; } + + (x: T): number; +>T : T +>x : T +>T : T + + (s: T): string; +>T : T +>s : T +>T : T + + }; +}; + +// no errors +c2.func4 = c2.func5; +>c2.func4 = c2.func5 : { (x: T): number; (s: T): string; } +>c2.func4 : { (x: T): number; (s: T): string; } +>c2 : { func4?(x: T): number; func4?(s: T): string; func5?: { (x: T): number; (s: T): string; }; } +>func4 : { (x: T): number; (s: T): string; } +>c2.func5 : { (x: T): number; (s: T): string; } +>c2 : { func4?(x: T): number; func4?(s: T): string; func5?: { (x: T): number; (s: T): string; }; } +>func5 : { (x: T): number; (s: T): string; } + +c2.func5 = c2.func4; +>c2.func5 = c2.func4 : { (x: T): number; (s: T): string; } +>c2.func5 : { (x: T): number; (s: T): string; } +>c2 : { func4?(x: T): number; func4?(s: T): string; func5?: { (x: T): number; (s: T): string; }; } +>func5 : { (x: T): number; (s: T): string; } +>c2.func4 : { (x: T): number; (s: T): string; } +>c2 : { func4?(x: T): number; func4?(s: T): string; func5?: { (x: T): number; (s: T): string; }; } +>func4 : { (x: T): number; (s: T): string; } + diff --git a/tests/baselines/reference/mismatchedExplicitTypeParameterAndArgumentType.js b/tests/baselines/reference/mismatchedExplicitTypeParameterAndArgumentType.js index 64c801b5af4..0465ea46f55 100644 --- a/tests/baselines/reference/mismatchedExplicitTypeParameterAndArgumentType.js +++ b/tests/baselines/reference/mismatchedExplicitTypeParameterAndArgumentType.js @@ -21,6 +21,6 @@ function map(xs, f) { var r0 = map([1, ""], function (x) { return x.toString(); }); var r5 = map([1, ""], function (x) { return x.toString(); }); var r6 = map([1, ""], function (x) { return x.toString(); }); -var r7 = map([1, ""], function (x) { return x.toString(); }); -var r7b = map([1, ""], function (x) { return x.toString(); }); +var r7 = map([1, ""], function (x) { return x.toString(); }); // error +var r7b = map([1, ""], function (x) { return x.toString(); }); // error var r8 = map([1, ""], function (x) { return x.toString(); }); diff --git a/tests/baselines/reference/mismatchedGenericArguments1.types b/tests/baselines/reference/mismatchedGenericArguments1.types new file mode 100644 index 00000000000..4d4d216bef1 --- /dev/null +++ b/tests/baselines/reference/mismatchedGenericArguments1.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/mismatchedGenericArguments1.ts === +interface IFoo { +>IFoo : IFoo +>T : T + + foo(x: T): T; +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} +class C implements IFoo { +>C : C +>T : T +>IFoo : IFoo +>T : T + + foo(x: string): number { +>foo : (x: string) => number +>x : string + + return null; + } +} + +class C2 implements IFoo { +>C2 : C2 +>T : T +>IFoo : IFoo +>T : T + + foo(x: string): number { +>foo : (x: string) => number +>U : U +>x : string + + return null; + } +} + diff --git a/tests/baselines/reference/missingImportAfterModuleImport.js b/tests/baselines/reference/missingImportAfterModuleImport.js index 29e3ba3929a..1d4f55a4df1 100644 --- a/tests/baselines/reference/missingImportAfterModuleImport.js +++ b/tests/baselines/reference/missingImportAfterModuleImport.js @@ -43,7 +43,7 @@ declare module "SubModule" { export = SubModule; } //// [missingImportAfterModuleImport_1.d.ts] -/// +/// import SubModule = require('SubModule'); declare class MainModule { SubModule: SubModule; diff --git a/tests/baselines/reference/missingImportAfterModuleImport.types b/tests/baselines/reference/missingImportAfterModuleImport.types new file mode 100644 index 00000000000..b8602ca06d0 --- /dev/null +++ b/tests/baselines/reference/missingImportAfterModuleImport.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/missingImportAfterModuleImport_1.ts === +/// +import SubModule = require('SubModule'); +>SubModule : typeof SubModule + +class MainModule { +>MainModule : MainModule + + // public static SubModule: SubModule; + public SubModule: SubModule; +>SubModule : SubModule +>SubModule : SubModule + + constructor() { } +} +export = MainModule; +>MainModule : MainModule + + +=== tests/cases/compiler/missingImportAfterModuleImport_0.ts === + +declare module "SubModule" { + class SubModule { +>SubModule : SubModule + + public static StaticVar: number; +>StaticVar : number + + public InstanceVar: number; +>InstanceVar : number + + constructor(); + } + export = SubModule; +>SubModule : SubModule +} + diff --git a/tests/baselines/reference/missingRequiredDeclare.d.errors.txt b/tests/baselines/reference/missingRequiredDeclare.d.errors.txt new file mode 100644 index 00000000000..932512ba8d8 --- /dev/null +++ b/tests/baselines/reference/missingRequiredDeclare.d.errors.txt @@ -0,0 +1,6 @@ +==== tests/cases/compiler/missingRequiredDeclare.d.ts (2 errors) ==== + var x = 1; + ~~~ +!!! A 'declare' modifier is required for a top level declaration in a .d.ts file. + ~ +!!! Initializers are not allowed in ambient contexts. \ No newline at end of file diff --git a/tests/baselines/reference/missingReturnStatement1.js b/tests/baselines/reference/missingReturnStatement1.js index 91cc673dfd0..665194cd5fe 100644 --- a/tests/baselines/reference/missingReturnStatement1.js +++ b/tests/baselines/reference/missingReturnStatement1.js @@ -11,6 +11,7 @@ var Foo = (function () { function Foo() { } Foo.prototype.foo = function () { + //return 4; }; return Foo; })(); diff --git a/tests/baselines/reference/missingSelf.types b/tests/baselines/reference/missingSelf.types new file mode 100644 index 00000000000..5b46bf85db1 --- /dev/null +++ b/tests/baselines/reference/missingSelf.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/missingSelf.ts === +class CalcButton +>CalcButton : CalcButton +{ + public a() { this.onClick(); } +>a : () => void +>this.onClick() : void +>this.onClick : () => void +>this : CalcButton +>onClick : () => void + + public onClick() { } +>onClick : () => void +} + +class CalcButton2 +>CalcButton2 : CalcButton2 +{ + public b() { () => this.onClick(); } +>b : () => void +>() => this.onClick() : () => void +>this.onClick() : void +>this.onClick : () => void +>this : CalcButton2 +>onClick : () => void + + public onClick() { } +>onClick : () => void +} + +var c = new CalcButton(); +>c : CalcButton +>new CalcButton() : CalcButton +>CalcButton : typeof CalcButton + +c.a(); +>c.a() : void +>c.a : () => void +>c : CalcButton +>a : () => void + +var c2 = new CalcButton2(); +>c2 : CalcButton2 +>new CalcButton2() : CalcButton2 +>CalcButton2 : typeof CalcButton2 + +c2.b(); +>c2.b() : void +>c2.b : () => void +>c2 : CalcButton2 +>b : () => void + + diff --git a/tests/baselines/reference/missingTypeArguments3.types b/tests/baselines/reference/missingTypeArguments3.types new file mode 100644 index 00000000000..ec6d9944924 --- /dev/null +++ b/tests/baselines/reference/missingTypeArguments3.types @@ -0,0 +1,172 @@ +=== tests/cases/compiler/missingTypeArguments3.ts === +declare module linq { +>linq : unknown + + interface Enumerable { +>Enumerable : Enumerable +>T : T + + OrderByDescending(keySelector?: string): OrderedEnumerable; +>OrderByDescending : (keySelector?: string) => OrderedEnumerable +>keySelector : string +>OrderedEnumerable : OrderedEnumerable +>T : T + + GroupBy(keySelector: (element: T) => TKey): Enumerable>; +>GroupBy : { (keySelector: (element: T) => TKey): Enumerable>; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement): Enumerable>; } +>TKey : TKey +>keySelector : (element: T) => TKey +>element : T +>T : T +>TKey : TKey +>Enumerable : Enumerable +>Grouping : Grouping +>TKey : TKey +>T : T + + GroupBy(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement): Enumerable>; +>GroupBy : { (keySelector: (element: T) => TKey): Enumerable>; (keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement): Enumerable>; } +>TKey : TKey +>TElement : TElement +>keySelector : (element: T) => TKey +>element : T +>T : T +>TKey : TKey +>elementSelector : (element: T) => TElement +>element : T +>T : T +>TElement : TElement +>Enumerable : Enumerable +>Grouping : Grouping +>TKey : TKey +>TElement : TElement + + ToDictionary(keySelector: (element: T) => TKey): Dictionary; +>ToDictionary : (keySelector: (element: T) => TKey) => Dictionary +>TKey : TKey +>keySelector : (element: T) => TKey +>element : T +>T : T +>TKey : TKey +>Dictionary : Dictionary +>TKey : TKey +>T : T + } + + interface OrderedEnumerable extends Enumerable { +>OrderedEnumerable : OrderedEnumerable +>T : T +>Enumerable : Enumerable +>T : T + + ThenBy(keySelector: (element: T) => TCompare): OrderedEnumerable; // used to incorrectly think this was missing a type argument +>ThenBy : (keySelector: (element: T) => TCompare) => OrderedEnumerable +>TCompare : TCompare +>keySelector : (element: T) => TCompare +>element : T +>T : T +>TCompare : TCompare +>OrderedEnumerable : OrderedEnumerable +>T : T + } + + interface Grouping extends Enumerable { +>Grouping : Grouping +>TKey : TKey +>TElement : TElement +>Enumerable : Enumerable +>TElement : TElement + + Key(): TKey; +>Key : () => TKey +>TKey : TKey + } + + interface Lookup { +>Lookup : Lookup +>TKey : TKey +>TElement : TElement + + Count(): number; +>Count : () => number + + Get(key): Enumerable; +>Get : (key: any) => Enumerable +>key : any +>Enumerable : Enumerable + + Contains(key): boolean; +>Contains : (key: any) => boolean +>key : any + + ToEnumerable(): Enumerable>; +>ToEnumerable : () => Enumerable> +>Enumerable : Enumerable +>Grouping : Grouping +>TKey : TKey + } + + interface Dictionary { +>Dictionary : Dictionary +>TKey : TKey +>TValue : TValue + + Add(key: TKey, value: TValue): void; +>Add : (key: TKey, value: TValue) => void +>key : TKey +>TKey : TKey +>value : TValue +>TValue : TValue + + Get(ke: TKey): TValue; +>Get : (ke: TKey) => TValue +>ke : TKey +>TKey : TKey +>TValue : TValue + + Set(key: TKey, value: TValue): boolean; +>Set : (key: TKey, value: TValue) => boolean +>key : TKey +>TKey : TKey +>value : TValue +>TValue : TValue + + Contains(key: TKey): boolean; +>Contains : (key: TKey) => boolean +>key : TKey +>TKey : TKey + + Clear(): void; +>Clear : () => void + + Remove(key: TKey): void; +>Remove : (key: TKey) => void +>key : TKey +>TKey : TKey + + Count(): number; +>Count : () => number + + ToEnumerable(): Enumerable>; +>ToEnumerable : () => Enumerable> +>Enumerable : Enumerable +>KeyValuePair : KeyValuePair +>TKey : TKey +>TValue : TValue + } + + interface KeyValuePair { +>KeyValuePair : KeyValuePair +>TKey : TKey +>TValue : TValue + + Key: TKey; +>Key : TKey +>TKey : TKey + + Value: TValue; +>Value : TValue +>TValue : TValue + } +} + diff --git a/tests/baselines/reference/mixedExports.types b/tests/baselines/reference/mixedExports.types new file mode 100644 index 00000000000..f7ff0a13c34 --- /dev/null +++ b/tests/baselines/reference/mixedExports.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/mixedExports.ts === +declare module M { +>M : typeof M + + function foo(); +>foo : { (): any; (): any; (): any; } + + export function foo(); +>foo : { (): any; (): any; (): any; } + + function foo(); +>foo : { (): any; (): any; (): any; } +} + +declare module M1 { +>M1 : unknown + + export interface Foo {} +>Foo : Foo + + interface Foo {} +>Foo : Foo +} + +module A { +>A : unknown + + interface X {x} +>X : X +>x : any + + export module X {} +>X : unknown + + interface X {y} +>X : X +>y : any +} diff --git a/tests/baselines/reference/mixingFunctionAndAmbientModule1.types b/tests/baselines/reference/mixingFunctionAndAmbientModule1.types new file mode 100644 index 00000000000..c9e2e1167a9 --- /dev/null +++ b/tests/baselines/reference/mixingFunctionAndAmbientModule1.types @@ -0,0 +1,90 @@ +=== tests/cases/compiler/mixingFunctionAndAmbientModule1.ts === +module A { +>A : typeof A + + declare module My { +>My : typeof My + + export var x: number; +>x : number + } + function My(s: string) { } +>My : typeof My +>s : string +} + +module B { +>B : typeof B + + declare module My { +>My : typeof My + + export var x: number; +>x : number + } + function My(s: boolean); +>My : typeof My +>s : boolean + + function My(s: any) { } +>My : typeof My +>s : any +} + +module C { +>C : typeof C + + declare module My { +>My : typeof My + + export var x: number; +>x : number + } + declare function My(s: boolean); +>My : typeof My +>s : boolean +} + +module D { +>D : typeof D + + declare module My { +>My : typeof My + + export var x: number; +>x : number + } + declare function My(s: boolean); +>My : typeof My +>s : boolean + + declare function My(s: any); +>My : typeof My +>s : any +} + + +module E { +>E : typeof E + + declare module My { +>My : typeof My + + export var x: number; +>x : number + } + declare function My(s: boolean); +>My : typeof My +>s : boolean + + declare module My { +>My : typeof My + + export var y: number; +>y : number + } + declare function My(s: any); +>My : typeof My +>s : any +} + diff --git a/tests/baselines/reference/modFunctionCrash.types b/tests/baselines/reference/modFunctionCrash.types new file mode 100644 index 00000000000..596dac999a1 --- /dev/null +++ b/tests/baselines/reference/modFunctionCrash.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/modFunctionCrash.ts === +declare module Q { +>Q : typeof Q + + function f(fn:()=>void); // typechecking the function type shouldnot crash the compiler +>f : (fn: () => void) => any +>fn : () => void +} + + +Q.f(function() {this;}); +>Q.f(function() {this;}) : any +>Q.f : (fn: () => void) => any +>Q : typeof Q +>f : (fn: () => void) => any +>function() {this;} : () => void +>this : any + diff --git a/tests/baselines/reference/modKeyword.types b/tests/baselines/reference/modKeyword.types new file mode 100644 index 00000000000..6c11fed31fc --- /dev/null +++ b/tests/baselines/reference/modKeyword.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/modKeyword.ts === +var module:any; +>module : any + +var foo:any; +>foo : any + +var _ = module.exports = foo +>_ : any +>module.exports = foo : any +>module.exports : any +>module : any +>exports : any +>foo : any + diff --git a/tests/baselines/reference/moduleAliasAsFunctionArgument.js b/tests/baselines/reference/moduleAliasAsFunctionArgument.js index df6487d5753..4cf9114a26d 100644 --- a/tests/baselines/reference/moduleAliasAsFunctionArgument.js +++ b/tests/baselines/reference/moduleAliasAsFunctionArgument.js @@ -22,6 +22,6 @@ define(["require", "exports"], function (require, exports) { define(["require", "exports", 'moduleAliasAsFunctionArgument_0'], function (require, exports, a) { function fn(arg) { } - a.x; - fn(a); + a.x; // OK + fn(a); // Error: property 'x' is missing from 'a' }); diff --git a/tests/baselines/reference/moduleAliasAsFunctionArgument.types b/tests/baselines/reference/moduleAliasAsFunctionArgument.types new file mode 100644 index 00000000000..dc621aa5dbf --- /dev/null +++ b/tests/baselines/reference/moduleAliasAsFunctionArgument.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/moduleAliasAsFunctionArgument_1.ts === +/// +import a = require('moduleAliasAsFunctionArgument_0'); +>a : typeof a + +function fn(arg: { x: number }) { +>fn : (arg: { x: number; }) => void +>arg : { x: number; } +>x : number +} + +a.x; // OK +>a.x : number +>a : typeof a +>x : number + +fn(a); // Error: property 'x' is missing from 'a' +>fn(a) : void +>fn : (arg: { x: number; }) => void +>a : typeof a + +=== tests/cases/compiler/moduleAliasAsFunctionArgument_0.ts === +export var x: number; +>x : number + diff --git a/tests/baselines/reference/moduleAliasInterface.js b/tests/baselines/reference/moduleAliasInterface.js index fc24795b994..0678656bb02 100644 --- a/tests/baselines/reference/moduleAliasInterface.js +++ b/tests/baselines/reference/moduleAliasInterface.js @@ -65,12 +65,14 @@ var _modes; })(); _modes.Mode = Mode; })(_modes || (_modes = {})); +// _modes. // produces an internal error - please implement in derived class var editor; (function (editor) { var i; + // If you just use p1:modes, the compiler accepts it - should be an error var Bug = (function () { function Bug(p1, p2) { - } + } // should be an error on p2 - it's not exported Bug.prototype.foo = function (p1) { }; return Bug; @@ -82,7 +84,7 @@ var editor2; var i; var Bug = (function () { function Bug(p1, p2) { - } + } // no error here, since modesOuter is declared externally return Bug; })(); var Foo; diff --git a/tests/baselines/reference/moduleAliasInterface.types b/tests/baselines/reference/moduleAliasInterface.types new file mode 100644 index 00000000000..6d3b11197cb --- /dev/null +++ b/tests/baselines/reference/moduleAliasInterface.types @@ -0,0 +1,121 @@ +=== tests/cases/compiler/moduleAliasInterface.ts === +module _modes { +>_modes : typeof _modes + + export interface IMode { +>IMode : IMode + + } + + export class Mode { +>Mode : Mode + + } +} + +// _modes. // produces an internal error - please implement in derived class + +module editor { +>editor : typeof editor + + import modes = _modes; +>modes : typeof modes +>_modes : typeof modes + + var i : modes.IMode; +>i : modes.IMode +>modes : unknown +>IMode : modes.IMode + + // If you just use p1:modes, the compiler accepts it - should be an error + class Bug { +>Bug : Bug + + constructor(p1: modes.IMode, p2: modes.Mode) { }// should be an error on p2 - it's not exported +>p1 : modes.IMode +>modes : unknown +>IMode : modes.IMode +>p2 : modes.Mode +>modes : unknown +>Mode : modes.Mode + + public foo(p1:modes.IMode) { +>foo : (p1: modes.IMode) => void +>p1 : modes.IMode +>modes : unknown +>IMode : modes.IMode + + } + } +} + +import modesOuter = _modes; +>modesOuter : typeof _modes +>_modes : typeof _modes + +module editor2 { +>editor2 : typeof editor2 + + var i : modesOuter.IMode; +>i : modesOuter.IMode +>modesOuter : unknown +>IMode : modesOuter.IMode + + class Bug { +>Bug : Bug + + constructor(p1: modesOuter.IMode, p2: modesOuter.Mode) { }// no error here, since modesOuter is declared externally +>p1 : modesOuter.IMode +>modesOuter : unknown +>IMode : modesOuter.IMode +>p2 : modesOuter.Mode +>modesOuter : unknown +>Mode : modesOuter.Mode + + } + + module Foo { export class Bar{} } +>Foo : typeof Foo +>Bar : Bar + + class Bug2 { +>Bug2 : Bug2 + + constructor(p1: Foo.Bar, p2: modesOuter.Mode) { } +>p1 : Foo.Bar +>Foo : unknown +>Bar : Foo.Bar +>p2 : modesOuter.Mode +>modesOuter : unknown +>Mode : modesOuter.Mode + } +} + +module A1 { +>A1 : typeof A1 + + export interface A1I1 {} +>A1I1 : A1I1 + + export class A1C1 {} +>A1C1 : A1C1 +} + +module B1 { +>B1 : typeof B1 + + import A1Alias1 = A1; +>A1Alias1 : typeof A1Alias1 +>A1 : typeof A1Alias1 + + var i : A1Alias1.A1I1; +>i : A1Alias1.A1I1 +>A1Alias1 : unknown +>A1I1 : A1Alias1.A1I1 + + var c : A1Alias1.A1C1; +>c : A1Alias1.A1C1 +>A1Alias1 : unknown +>A1C1 : A1Alias1.A1C1 +} + diff --git a/tests/baselines/reference/moduleAndInterfaceSharingName.types b/tests/baselines/reference/moduleAndInterfaceSharingName.types new file mode 100644 index 00000000000..6a4f8998fe6 --- /dev/null +++ b/tests/baselines/reference/moduleAndInterfaceSharingName.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/moduleAndInterfaceSharingName.ts === +module X { +>X : unknown + + export module Y { +>Y : unknown + + export interface Z { } +>Z : Z + } + export interface Y { } +>Y : Y +} +var z: X.Y.Z = null; +>z : X.Y.Z +>X : unknown +>Y : unknown +>Z : X.Y.Z + +var z2: X.Y; +>z2 : X.Y +>X : unknown +>Y : X.Y + diff --git a/tests/baselines/reference/moduleAndInterfaceSharingName3.types b/tests/baselines/reference/moduleAndInterfaceSharingName3.types new file mode 100644 index 00000000000..1b9aabea630 --- /dev/null +++ b/tests/baselines/reference/moduleAndInterfaceSharingName3.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/moduleAndInterfaceSharingName3.ts === +module X { +>X : unknown + + export module Y { +>Y : unknown + + export interface Z { } +>Z : Z + } + export interface Y { } +>Y : Y +>T : T +} +var z: X.Y.Z = null; +>z : X.Y.Z +>X : unknown +>Y : unknown +>Z : X.Y.Z + +var z2: X.Y; +>z2 : X.Y +>X : unknown +>Y : X.Y + diff --git a/tests/baselines/reference/moduleAndInterfaceSharingName4.types b/tests/baselines/reference/moduleAndInterfaceSharingName4.types new file mode 100644 index 00000000000..8ad5a15a4ff --- /dev/null +++ b/tests/baselines/reference/moduleAndInterfaceSharingName4.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/moduleAndInterfaceSharingName4.ts === +declare module D3 { +>D3 : typeof D3 + + var x: D3.Color.Color; +>x : Color.Color +>D3 : unknown +>Color : unknown +>Color : Color.Color + + module Color { +>Color : unknown + + export interface Color { +>Color : Color + + darker: Color; +>darker : Color +>Color : Color + } + } +} diff --git a/tests/baselines/reference/moduleAndInterfaceWithSameName.js b/tests/baselines/reference/moduleAndInterfaceWithSameName.js index c88292bbb18..b7754c354c7 100644 --- a/tests/baselines/reference/moduleAndInterfaceWithSameName.js +++ b/tests/baselines/reference/moduleAndInterfaceWithSameName.js @@ -46,7 +46,7 @@ var Foo2; Bar.x = 42; })(Bar || (Bar = {})); })(Foo2 || (Foo2 = {})); -var z2 = Foo2.Bar.y; +var z2 = Foo2.Bar.y; // Error for using interface name as a value. var Foo3; (function (Foo3) { (function (Bar) { diff --git a/tests/baselines/reference/moduleAssignmentCompat1.js b/tests/baselines/reference/moduleAssignmentCompat1.js index 704b7640f15..9df11af7270 100644 --- a/tests/baselines/reference/moduleAssignmentCompat1.js +++ b/tests/baselines/reference/moduleAssignmentCompat1.js @@ -42,5 +42,6 @@ var B; })(B || (B = {})); var a; var b; +// no error a = b; b = a; diff --git a/tests/baselines/reference/moduleAssignmentCompat2.js b/tests/baselines/reference/moduleAssignmentCompat2.js index 0b63b83dcac..2e54ba565ee 100644 --- a/tests/baselines/reference/moduleAssignmentCompat2.js +++ b/tests/baselines/reference/moduleAssignmentCompat2.js @@ -41,4 +41,4 @@ var B; var a; var b; a = b; -b = a; +b = a; // error diff --git a/tests/baselines/reference/moduleAssignmentCompat3.js b/tests/baselines/reference/moduleAssignmentCompat3.js index e57119cc446..7115faea9df 100644 --- a/tests/baselines/reference/moduleAssignmentCompat3.js +++ b/tests/baselines/reference/moduleAssignmentCompat3.js @@ -25,5 +25,6 @@ var B; })(B || (B = {})); var a; var b; +// both errors a = b; b = a; diff --git a/tests/baselines/reference/moduleAssignmentCompat4.js b/tests/baselines/reference/moduleAssignmentCompat4.js index 1f349443bf5..2f7fa110ee6 100644 --- a/tests/baselines/reference/moduleAssignmentCompat4.js +++ b/tests/baselines/reference/moduleAssignmentCompat4.js @@ -43,4 +43,4 @@ var B; var a; var b; a = b; -b = a; +b = a; // error diff --git a/tests/baselines/reference/moduleClassArrayCodeGenTest.js b/tests/baselines/reference/moduleClassArrayCodeGenTest.js index 69e10171080..569adcf672a 100644 --- a/tests/baselines/reference/moduleClassArrayCodeGenTest.js +++ b/tests/baselines/reference/moduleClassArrayCodeGenTest.js @@ -11,6 +11,7 @@ var t: M.A[] = []; var t2: M.B[] = []; //// [moduleClassArrayCodeGenTest.js] +// Invalid code gen for Array of Module class var M; (function (M) { var A = (function () { diff --git a/tests/baselines/reference/moduleCodeGenTest3.types b/tests/baselines/reference/moduleCodeGenTest3.types new file mode 100644 index 00000000000..d5e10130c0d --- /dev/null +++ b/tests/baselines/reference/moduleCodeGenTest3.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/moduleCodeGenTest3.ts === +module Baz { export var x = "hello"; } +>Baz : typeof Baz +>x : string + +Baz.x = "goodbye"; +>Baz.x = "goodbye" : string +>Baz.x : string +>Baz : typeof Baz +>x : string + diff --git a/tests/baselines/reference/moduleCodeGenTest5.types b/tests/baselines/reference/moduleCodeGenTest5.types new file mode 100644 index 00000000000..40161509aff --- /dev/null +++ b/tests/baselines/reference/moduleCodeGenTest5.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/moduleCodeGenTest5.ts === +export var x = 0; +>x : number + +var y = 0; +>y : number + +export function f1() {} +>f1 : () => void + +function f2() {} +>f2 : () => void + +export class C1 { +>C1 : C1 + + public p1 = 0; +>p1 : number + + public p2() {} +>p2 : () => void +} +class C2{ +>C2 : C2 + + public p1 = 0; +>p1 : number + + public p2() {} +>p2 : () => void +} + +export enum E1 {A=0} +>E1 : E1 +>A : E1 + +var u = E1.A; +>u : E1 +>E1.A : E1 +>E1 : typeof E1 +>A : E1 + +enum E2 {B=0} +>E2 : E2 +>B : E2 + +var v = E2.B; +>v : E2 +>E2.B : E2 +>E2 : typeof E2 +>B : E2 + + diff --git a/tests/baselines/reference/moduleCodegenTest4.types b/tests/baselines/reference/moduleCodegenTest4.types new file mode 100644 index 00000000000..7b9229a46c1 --- /dev/null +++ b/tests/baselines/reference/moduleCodegenTest4.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/moduleCodegenTest4.ts === +export module Baz { export var x = "hello"; } +>Baz : typeof Baz +>x : string + +Baz.x = "goodbye"; +>Baz.x = "goodbye" : string +>Baz.x : string +>Baz : typeof Baz +>x : string + +void 0; +>void 0 : undefined + diff --git a/tests/baselines/reference/moduleIdentifiers.js b/tests/baselines/reference/moduleIdentifiers.js index 61298825f04..e2050d98f5d 100644 --- a/tests/baselines/reference/moduleIdentifiers.js +++ b/tests/baselines/reference/moduleIdentifiers.js @@ -15,4 +15,6 @@ var M; (function (M) { M.a = 1; })(M || (M = {})); +//var p: M.P; +//var m: M = M; var x1 = M.a; diff --git a/tests/baselines/reference/moduleIdentifiers.types b/tests/baselines/reference/moduleIdentifiers.types new file mode 100644 index 00000000000..db8b1c3f720 --- /dev/null +++ b/tests/baselines/reference/moduleIdentifiers.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/moduleIdentifiers.ts === +module M { +>M : typeof M + + interface P { x: number; y: number; } +>P : P +>x : number +>y : number + + export var a = 1 +>a : number +} + +//var p: M.P; +//var m: M = M; +var x1 = M.a; +>x1 : number +>M.a : number +>M : typeof M +>a : number + +//var x2 = m.a; +//var q: m.P; diff --git a/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types b/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types new file mode 100644 index 00000000000..c5c3f427377 --- /dev/null +++ b/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/moduleImportedForTypeArgumentPosition_1.ts === +/**This is on import declaration*/ +import M2 = require("moduleImportedForTypeArgumentPosition_0"); +>M2 : typeof M2 + +class C1{ } +>C1 : C1 +>T : T + +class Test1 extends C1 { +>Test1 : Test1 +>C1 : C1 +>M2 : unknown +>M2C : M2.M2C +} + +=== tests/cases/compiler/moduleImportedForTypeArgumentPosition_0.ts === +export interface M2C { } +>M2C : M2C + diff --git a/tests/baselines/reference/moduleMemberWithoutTypeAnnotation1.types b/tests/baselines/reference/moduleMemberWithoutTypeAnnotation1.types new file mode 100644 index 00000000000..d8f6083b2c9 --- /dev/null +++ b/tests/baselines/reference/moduleMemberWithoutTypeAnnotation1.types @@ -0,0 +1,116 @@ +=== tests/cases/compiler/moduleMemberWithoutTypeAnnotation1.ts === +module TypeScript.Parser { +>TypeScript : typeof TypeScript +>Parser : typeof Parser + + class SyntaxCursor { +>SyntaxCursor : SyntaxCursor + + public currentNode(): SyntaxNode { +>currentNode : () => SyntaxNode +>SyntaxNode : SyntaxNode + + return null; + } + } +} + +module TypeScript { +>TypeScript : typeof TypeScript + + export interface ISyntaxElement { }; +>ISyntaxElement : ISyntaxElement + + export interface ISyntaxToken { }; +>ISyntaxToken : ISyntaxToken + + export class PositionedElement { +>PositionedElement : PositionedElement + + public childIndex(child: ISyntaxElement) { +>childIndex : (child: ISyntaxElement) => void +>child : ISyntaxElement +>ISyntaxElement : ISyntaxElement + + return Syntax.childIndex(); +>Syntax.childIndex() : void +>Syntax.childIndex : () => void +>Syntax : typeof Syntax +>childIndex : () => void + } + } + + export class PositionedToken { +>PositionedToken : PositionedToken + + constructor(parent: PositionedElement, token: ISyntaxToken, fullStart: number) { +>parent : PositionedElement +>PositionedElement : PositionedElement +>token : ISyntaxToken +>ISyntaxToken : ISyntaxToken +>fullStart : number + } + } +} + +module TypeScript { +>TypeScript : typeof TypeScript + + export class SyntaxNode { +>SyntaxNode : SyntaxNode + + public findToken(position: number, includeSkippedTokens: boolean = false): PositionedToken { +>findToken : (position: number, includeSkippedTokens?: boolean) => PositionedToken +>position : number +>includeSkippedTokens : boolean +>PositionedToken : PositionedToken + + var positionedToken = this.findTokenInternal(null, position, 0); +>positionedToken : any +>this.findTokenInternal(null, position, 0) : any +>this.findTokenInternal : (x: any, y: any, z: any) => any +>this : SyntaxNode +>findTokenInternal : (x: any, y: any, z: any) => any +>position : number + + return null; + } + findTokenInternal(x, y, z) { +>findTokenInternal : (x: any, y: any, z: any) => any +>x : any +>y : any +>z : any + + return null; + } + } +} + +module TypeScript.Syntax { +>TypeScript : typeof TypeScript +>Syntax : typeof Syntax + + export function childIndex() { } +>childIndex : () => void + + export class VariableWidthTokenWithTrailingTrivia implements ISyntaxToken { +>VariableWidthTokenWithTrailingTrivia : VariableWidthTokenWithTrailingTrivia +>ISyntaxToken : ISyntaxToken + + private findTokenInternal(parent: PositionedElement, position: number, fullStart: number) { +>findTokenInternal : (parent: PositionedElement, position: number, fullStart: number) => PositionedToken +>parent : PositionedElement +>PositionedElement : PositionedElement +>position : number +>fullStart : number + + return new PositionedToken(parent, this, fullStart); +>new PositionedToken(parent, this, fullStart) : PositionedToken +>PositionedToken : typeof PositionedToken +>parent : PositionedElement +>this : VariableWidthTokenWithTrailingTrivia +>fullStart : number + } + } +} + diff --git a/tests/baselines/reference/moduleMemberWithoutTypeAnnotation2.types b/tests/baselines/reference/moduleMemberWithoutTypeAnnotation2.types new file mode 100644 index 00000000000..2a5d2c76e76 --- /dev/null +++ b/tests/baselines/reference/moduleMemberWithoutTypeAnnotation2.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/moduleMemberWithoutTypeAnnotation2.ts === +module TypeScript { +>TypeScript : typeof TypeScript + + export module CompilerDiagnostics { +>CompilerDiagnostics : typeof CompilerDiagnostics + + export interface IDiagnosticWriter { +>IDiagnosticWriter : IDiagnosticWriter + + Alert(output: string): void; +>Alert : (output: string) => void +>output : string + } + + export var diagnosticWriter = null; +>diagnosticWriter : any + + export function Alert(output: string) { +>Alert : (output: string) => void +>output : string + + if (diagnosticWriter) { +>diagnosticWriter : any + + diagnosticWriter.Alert(output); +>diagnosticWriter.Alert(output) : any +>diagnosticWriter.Alert : any +>diagnosticWriter : any +>Alert : any +>output : string + } + } + } +} + diff --git a/tests/baselines/reference/moduleMerge.js b/tests/baselines/reference/moduleMerge.js index e939230daef..aa06bae1597 100644 --- a/tests/baselines/reference/moduleMerge.js +++ b/tests/baselines/reference/moduleMerge.js @@ -24,6 +24,7 @@ module A } //// [moduleMerge.js] +// This should not compile both B classes are in the same module this should be a collission var A; (function (A) { var B = (function () { diff --git a/tests/baselines/reference/moduleMerge.types b/tests/baselines/reference/moduleMerge.types new file mode 100644 index 00000000000..b70f786b7a2 --- /dev/null +++ b/tests/baselines/reference/moduleMerge.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/moduleMerge.ts === +// This should not compile both B classes are in the same module this should be a collission + +module A +>A : typeof A +{ + class B +>B : B + { + public Hello(): string +>Hello : () => string + { + return "from private B"; + } + } +} + +module A +>A : typeof A +{ + export class B +>B : B + { + public Hello(): string +>Hello : () => string + { + return "from export B"; + } + } +} diff --git a/tests/baselines/reference/moduleNewExportBug.js b/tests/baselines/reference/moduleNewExportBug.js index 4fbc9e0ad25..51e1bb24144 100644 --- a/tests/baselines/reference/moduleNewExportBug.js +++ b/tests/baselines/reference/moduleNewExportBug.js @@ -24,4 +24,4 @@ var mod1; return C; })(); })(mod1 || (mod1 = {})); -var c; +var c; // ERROR: C should not be visible diff --git a/tests/baselines/reference/moduleNoEmit.types b/tests/baselines/reference/moduleNoEmit.types new file mode 100644 index 00000000000..7fb6b6164d6 --- /dev/null +++ b/tests/baselines/reference/moduleNoEmit.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/moduleNoEmit.ts === +module Foo { +>Foo : typeof Foo + + 1+1; +>1+1 : number +} diff --git a/tests/baselines/reference/moduleOuterQualification.types b/tests/baselines/reference/moduleOuterQualification.types new file mode 100644 index 00000000000..95a18f58bcd --- /dev/null +++ b/tests/baselines/reference/moduleOuterQualification.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/moduleOuterQualification.ts === + +declare module outer { +>outer : unknown + + interface Beta { } +>Beta : Beta + + module inner { +>inner : unknown + + // .d.ts emit: should be 'extends outer.Beta' + export interface Beta extends outer.Beta { } +>Beta : Beta +>outer : unknown +>Beta : outer.Beta + } +} + diff --git a/tests/baselines/reference/moduleProperty2.js b/tests/baselines/reference/moduleProperty2.js index d8027d8d67b..715577b6458 100644 --- a/tests/baselines/reference/moduleProperty2.js +++ b/tests/baselines/reference/moduleProperty2.js @@ -23,10 +23,10 @@ var M; var y; M.z; var test1 = x; - var test2 = y; + var test2 = y; // y visible because same module })(M || (M = {})); var N; (function (N) { - var test3 = M.y; - var test4 = M.z; + var test3 = M.y; // nope y private property of M + var test4 = M.z; // ok public property of M })(N || (N = {})); diff --git a/tests/baselines/reference/moduleRedifinitionErrors.types b/tests/baselines/reference/moduleRedifinitionErrors.types new file mode 100644 index 00000000000..34a5f428596 --- /dev/null +++ b/tests/baselines/reference/moduleRedifinitionErrors.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/moduleRedifinitionErrors.ts === +class A { +>A : A +} +module A { +>A : typeof A +} + diff --git a/tests/baselines/reference/moduleReopenedTypeOtherBlock.types b/tests/baselines/reference/moduleReopenedTypeOtherBlock.types new file mode 100644 index 00000000000..f98c069c338 --- /dev/null +++ b/tests/baselines/reference/moduleReopenedTypeOtherBlock.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/moduleReopenedTypeOtherBlock.ts === +module M { +>M : typeof M + + export class C1 { } +>C1 : C1 + + export interface I { n: number; } +>I : I +>n : number +} +module M { +>M : typeof M + + export class C2 { f(): I { return null; } } +>C2 : C2 +>f : () => I +>I : I +} + diff --git a/tests/baselines/reference/moduleReopenedTypeSameBlock.types b/tests/baselines/reference/moduleReopenedTypeSameBlock.types new file mode 100644 index 00000000000..8f119fff60c --- /dev/null +++ b/tests/baselines/reference/moduleReopenedTypeSameBlock.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/moduleReopenedTypeSameBlock.ts === +module M { export class C1 { } } +>M : typeof M +>C1 : C1 + +module M { +>M : typeof M + + export interface I { n: number; } +>I : I +>n : number + + export class C2 { f(): I { return null; } } +>C2 : C2 +>f : () => I +>I : I +} + diff --git a/tests/baselines/reference/moduleScopingBug.js b/tests/baselines/reference/moduleScopingBug.js index 45ac72055a4..d9ac55e2b88 100644 --- a/tests/baselines/reference/moduleScopingBug.js +++ b/tests/baselines/reference/moduleScopingBug.js @@ -34,16 +34,16 @@ var M; (function (M) { var outer; function f() { - var inner = outer; + var inner = outer; // Ok } var C = (function () { function C() { - var inner = outer; + var inner = outer; // Ok } return C; })(); var X; (function (X) { - var inner = outer; + var inner = outer; // Error: outer not visible })(X || (X = {})); })(M || (M = {})); diff --git a/tests/baselines/reference/moduleScopingBug.types b/tests/baselines/reference/moduleScopingBug.types new file mode 100644 index 00000000000..b92b8de0c81 --- /dev/null +++ b/tests/baselines/reference/moduleScopingBug.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/moduleScopingBug.ts === +module M +>M : typeof M + +{ + + var outer: number; +>outer : number + + function f() { +>f : () => void + + var inner = outer; // Ok +>inner : number +>outer : number + + } + + class C { +>C : C + + constructor() { + var inner = outer; // Ok +>inner : number +>outer : number + } + + } + + module X { +>X : typeof X + + var inner = outer; // Error: outer not visible +>inner : number +>outer : number + + } + +} + + diff --git a/tests/baselines/reference/moduleSymbolMerging.js b/tests/baselines/reference/moduleSymbolMerging.js new file mode 100644 index 00000000000..0a812a62e09 --- /dev/null +++ b/tests/baselines/reference/moduleSymbolMerging.js @@ -0,0 +1,43 @@ +//// [tests/cases/compiler/moduleSymbolMerging.ts] //// + +//// [A.ts] + +module A { export interface I {} } + +//// [B.ts] +/// +module A { ; } +module B { + export function f(): A.I { return null; } +} + + + +//// [A.js] +//// [B.js] +/// +var A; +(function (A) { + ; +})(A || (A = {})); +var B; +(function (B) { + function f() { + return null; + } + B.f = f; +})(B || (B = {})); + + +//// [A.d.ts] +declare module A { + interface I { + } +} +//// [B.d.ts] +/// +declare module A { +} +declare module B { + function f(): A.I; +} diff --git a/tests/baselines/reference/moduleSymbolMerging.types b/tests/baselines/reference/moduleSymbolMerging.types new file mode 100644 index 00000000000..c6b0f58ef46 --- /dev/null +++ b/tests/baselines/reference/moduleSymbolMerging.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/B.ts === +/// +module A { ; } +>A : typeof A + +module B { +>B : typeof B + + export function f(): A.I { return null; } +>f : () => A.I +>A : unknown +>I : A.I +} + + +=== tests/cases/compiler/A.ts === + +module A { export interface I {} } +>A : typeof A +>I : I + diff --git a/tests/baselines/reference/moduleUnassignedVariable.js b/tests/baselines/reference/moduleUnassignedVariable.js index 8a6866c3877..179a2577adf 100644 --- a/tests/baselines/reference/moduleUnassignedVariable.js +++ b/tests/baselines/reference/moduleUnassignedVariable.js @@ -14,9 +14,9 @@ var Bar; Bar.a = 1; function fooA() { return Bar.a; - } + } // Correct: return Bar.a Bar.b; function fooB() { return Bar.b; - } + } // Incorrect: return b })(Bar || (Bar = {})); diff --git a/tests/baselines/reference/moduleUnassignedVariable.types b/tests/baselines/reference/moduleUnassignedVariable.types new file mode 100644 index 00000000000..7d1dd8600cf --- /dev/null +++ b/tests/baselines/reference/moduleUnassignedVariable.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/moduleUnassignedVariable.ts === +module Bar { +>Bar : typeof Bar + + export var a = 1; +>a : number + + function fooA() { return a; } // Correct: return Bar.a +>fooA : () => number +>a : number + + export var b; +>b : any + + function fooB() { return b; } // Incorrect: return b +>fooB : () => any +>b : any +} + diff --git a/tests/baselines/reference/moduleVariableArrayIndexer.js b/tests/baselines/reference/moduleVariableArrayIndexer.js index 47a2ba5158f..fce3bf081a0 100644 --- a/tests/baselines/reference/moduleVariableArrayIndexer.js +++ b/tests/baselines/reference/moduleVariableArrayIndexer.js @@ -9,5 +9,5 @@ module Bar { var Bar; (function (Bar) { Bar.a = 1; - var t = undefined[Bar.a][Bar.a]; + var t = undefined[Bar.a][Bar.a]; // CG: var t = undefined[Bar.a][a]; })(Bar || (Bar = {})); diff --git a/tests/baselines/reference/moduleVariableArrayIndexer.types b/tests/baselines/reference/moduleVariableArrayIndexer.types new file mode 100644 index 00000000000..564de3ff972 --- /dev/null +++ b/tests/baselines/reference/moduleVariableArrayIndexer.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/moduleVariableArrayIndexer.ts === +module Bar { +>Bar : typeof Bar + + export var a = 1; +>a : number + + var t = undefined[a][a]; // CG: var t = undefined[Bar.a][a]; +>t : any +>undefined[a][a] : any +>undefined[a] : any +>undefined : undefined +>a : number +>a : number +} + diff --git a/tests/baselines/reference/moduleVariables.js b/tests/baselines/reference/moduleVariables.js index 428c4803890..e127fec768f 100644 --- a/tests/baselines/reference/moduleVariables.js +++ b/tests/baselines/reference/moduleVariables.js @@ -22,14 +22,14 @@ var x = 1; var M; (function (M) { M.x = 2; - console.log(M.x); + console.log(M.x); // 2 })(M || (M = {})); var M; (function (M) { - console.log(M.x); + console.log(M.x); // 2 })(M || (M = {})); var M; (function (M) { var x = 3; - console.log(x); + console.log(x); // 3 })(M || (M = {})); diff --git a/tests/baselines/reference/moduleVariables.types b/tests/baselines/reference/moduleVariables.types new file mode 100644 index 00000000000..2c00df87f56 --- /dev/null +++ b/tests/baselines/reference/moduleVariables.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/moduleVariables.ts === +declare var console: any; +>console : any + +var x = 1; +>x : number + +module M { +>M : typeof M + + export var x = 2; +>x : number + + console.log(x); // 2 +>console.log(x) : any +>console.log : any +>console : any +>log : any +>x : number +} + +module M { +>M : typeof M + + console.log(x); // 2 +>console.log(x) : any +>console.log : any +>console : any +>log : any +>x : number +} + +module M { +>M : typeof M + + var x = 3; +>x : number + + console.log(x); // 3 +>console.log(x) : any +>console.log : any +>console : any +>log : any +>x : number +} + diff --git a/tests/baselines/reference/moduleVisibilityTest1.types b/tests/baselines/reference/moduleVisibilityTest1.types new file mode 100644 index 00000000000..8c22f792049 --- /dev/null +++ b/tests/baselines/reference/moduleVisibilityTest1.types @@ -0,0 +1,175 @@ +=== tests/cases/compiler/moduleVisibilityTest1.ts === + + +module OuterMod { +>OuterMod : typeof OuterMod + + export function someExportedOuterFunc() { return -1; } +>someExportedOuterFunc : () => number +>-1 : number + + export module OuterInnerMod { +>OuterInnerMod : typeof OuterInnerMod + + export function someExportedOuterInnerFunc() { return "foo"; } +>someExportedOuterInnerFunc : () => string + } +} + +import OuterInnerAlias = OuterMod.OuterInnerMod; +>OuterInnerAlias : typeof OuterInnerAlias +>OuterMod : typeof OuterMod +>OuterInnerMod : typeof OuterInnerAlias + +module M { +>M : typeof M + + export module InnerMod { +>InnerMod : typeof InnerMod + + export function someExportedInnerFunc() { return -2; } +>someExportedInnerFunc : () => number +>-2 : number + } + + export enum E { +>E : E + + A, +>A : E + + B, +>B : E + + C, +>C : E + } + + export var x = 5; +>x : number + + export declare var exported_var; +>exported_var : any + + var y = x + x; +>y : number +>x + x : number +>x : number +>x : number + + + export interface I { +>I : I + + someMethod():number; +>someMethod : () => number + } + + class B {public b = 0;} +>B : B +>b : number + + export class C implements I { +>C : C +>I : I + + public someMethodThatCallsAnOuterMethod() {return OuterInnerAlias.someExportedOuterInnerFunc();} +>someMethodThatCallsAnOuterMethod : () => string +>OuterInnerAlias.someExportedOuterInnerFunc() : string +>OuterInnerAlias.someExportedOuterInnerFunc : () => string +>OuterInnerAlias : typeof OuterInnerAlias +>someExportedOuterInnerFunc : () => string + + public someMethodThatCallsAnInnerMethod() {return InnerMod.someExportedInnerFunc();} +>someMethodThatCallsAnInnerMethod : () => number +>InnerMod.someExportedInnerFunc() : number +>InnerMod.someExportedInnerFunc : () => number +>InnerMod : typeof InnerMod +>someExportedInnerFunc : () => number + + public someMethodThatCallsAnOuterInnerMethod() {return OuterMod.someExportedOuterFunc();} +>someMethodThatCallsAnOuterInnerMethod : () => number +>OuterMod.someExportedOuterFunc() : number +>OuterMod.someExportedOuterFunc : () => number +>OuterMod : typeof OuterMod +>someExportedOuterFunc : () => number + + public someMethod() { return 0; } +>someMethod : () => number + + public someProp = 1; +>someProp : number + + constructor() { + function someInnerFunc() { return 2; } +>someInnerFunc : () => number + + var someInnerVar = 3; +>someInnerVar : number + } + } + + var someModuleVar = 4; +>someModuleVar : number + + function someModuleFunction() { return 5;} +>someModuleFunction : () => number +} + +module M { +>M : typeof M + + export var c = x; +>c : number +>x : number + + export var meb = M.E.B; +>meb : E +>M.E.B : E +>M.E : typeof E +>M : typeof M +>E : typeof E +>B : E +} + +var cprime : M.I = null; +>cprime : M.I +>M : unknown +>I : M.I +>null : M.I +>M : unknown +>I : M.I + +var c = new M.C(); +>c : M.C +>new M.C() : M.C +>M.C : typeof M.C +>M : typeof M +>C : typeof M.C + +var z = M.x; +>z : number +>M.x : number +>M : typeof M +>x : number + +var alpha = M.E.A; +>alpha : M.E +>M.E.A : M.E +>M.E : typeof M.E +>M : typeof M +>E : typeof M.E +>A : M.E + +var omega = M.exported_var; +>omega : any +>M.exported_var : any +>M : typeof M +>exported_var : any + +c.someMethodThatCallsAnOuterMethod(); +>c.someMethodThatCallsAnOuterMethod() : string +>c.someMethodThatCallsAnOuterMethod : () => string +>c : M.C +>someMethodThatCallsAnOuterMethod : () => string + diff --git a/tests/baselines/reference/moduleVisibilityTest3.js b/tests/baselines/reference/moduleVisibilityTest3.js index 57743b9df24..7032c8dc3d7 100644 --- a/tests/baselines/reference/moduleVisibilityTest3.js +++ b/tests/baselines/reference/moduleVisibilityTest3.js @@ -35,9 +35,11 @@ var _modes; return Mode; })(); })(_modes || (_modes = {})); +//_modes. // produces an internal error - please implement in derived class var editor; (function (editor) { var i; + // If you just use p1:modes, the compiler accepts it - should be an error var Bug = (function () { function Bug(p1, p2) { var x; diff --git a/tests/baselines/reference/moduleWithNoValuesAsType.js b/tests/baselines/reference/moduleWithNoValuesAsType.js index eeeabf23c71..415ed1f7286 100644 --- a/tests/baselines/reference/moduleWithNoValuesAsType.js +++ b/tests/baselines/reference/moduleWithNoValuesAsType.js @@ -16,6 +16,6 @@ module C { var c: C; // error //// [moduleWithNoValuesAsType.js] -var a; -var b; -var c; +var a; // error +var b; // error +var c; // error diff --git a/tests/baselines/reference/moduleWithStatementsOfEveryKind.types b/tests/baselines/reference/moduleWithStatementsOfEveryKind.types new file mode 100644 index 00000000000..263da21f524 --- /dev/null +++ b/tests/baselines/reference/moduleWithStatementsOfEveryKind.types @@ -0,0 +1,149 @@ +=== tests/cases/conformance/internalModules/moduleBody/moduleWithStatementsOfEveryKind.ts === +module A { +>A : typeof A + + class A { s: string } +>A : A +>s : string + + class AA { s: T } +>AA : AA +>T : T +>s : T +>T : T + + interface I { id: number } +>I : I +>id : number + + class B extends AA implements I { id: number } +>B : B +>AA : AA +>I : I +>id : number + + class BB extends A { +>BB : BB +>T : T +>A : A + + id: number; +>id : number + } + + module Module { +>Module : typeof Module + + class A { s: string } +>A : A +>s : string + } + enum Color { Blue, Red } +>Color : Color +>Blue : Color +>Red : Color + + var x = 12; +>x : number + + function F(s: string): number { +>F : (s: string) => number +>s : string + + return 2; + } + var array: I[] = null; +>array : I[] +>I : I + + var fn = (s: string) => { +>fn : (s: string) => string +>(s: string) => { return 'hello ' + s; } : (s: string) => string +>s : string + + return 'hello ' + s; +>'hello ' + s : string +>s : string + } + var ol = { s: 'hello', id: 2, isvalid: true }; +>ol : { s: string; id: number; isvalid: boolean; } +>{ s: 'hello', id: 2, isvalid: true } : { s: string; id: number; isvalid: boolean; } +>s : string +>id : number +>isvalid : boolean +} + +module Y { +>Y : typeof Y + + export class A { s: string } +>A : A +>s : string + + export class AA { s: T } +>AA : AA +>T : T +>s : T +>T : T + + export interface I { id: number } +>I : I +>id : number + + export class B extends AA implements I { id: number } +>B : B +>AA : AA +>I : I +>id : number + + export class BB extends A { +>BB : BB +>T : T +>A : A + + id: number; +>id : number + } + + export module Module { +>Module : typeof Module + + class A { s: string } +>A : A +>s : string + } + export enum Color { Blue, Red } +>Color : Color +>Blue : Color +>Red : Color + + export var x = 12; +>x : number + + export function F(s: string): number { +>F : (s: string) => number +>s : string + + return 2; + } + export var array: I[] = null; +>array : I[] +>I : I + + export var fn = (s: string) => { +>fn : (s: string) => string +>(s: string) => { return 'hello ' + s; } : (s: string) => string +>s : string + + return 'hello ' + s; +>'hello ' + s : string +>s : string + } + export var ol = { s: 'hello', id: 2, isvalid: true }; +>ol : { s: string; id: number; isvalid: boolean; } +>{ s: 'hello', id: 2, isvalid: true } : { s: string; id: number; isvalid: boolean; } +>s : string +>id : number +>isvalid : boolean +} + diff --git a/tests/baselines/reference/moduleWithTryStatement1.types b/tests/baselines/reference/moduleWithTryStatement1.types new file mode 100644 index 00000000000..9e18b649735 --- /dev/null +++ b/tests/baselines/reference/moduleWithTryStatement1.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/moduleWithTryStatement1.ts === +module M { +>M : typeof M + + try { + } + catch (e) { +>e : any + } +} +var v = M; +>v : typeof M +>M : typeof M + diff --git a/tests/baselines/reference/moduleWithValuesAsType.js b/tests/baselines/reference/moduleWithValuesAsType.js index ed1dc3d5487..4e26f1029a1 100644 --- a/tests/baselines/reference/moduleWithValuesAsType.js +++ b/tests/baselines/reference/moduleWithValuesAsType.js @@ -10,4 +10,4 @@ var A; (function (A) { var b = 1; })(A || (A = {})); -var a; +var a; // no error diff --git a/tests/baselines/reference/multiCallOverloads.js b/tests/baselines/reference/multiCallOverloads.js index 94edef40bd5..85b008d52b7 100644 --- a/tests/baselines/reference/multiCallOverloads.js +++ b/tests/baselines/reference/multiCallOverloads.js @@ -20,9 +20,9 @@ var f1 = function (z) { }; var f2 = function (z) { }; -load(f1); -load(f2); +load(f1); // ok +load(f2); // ok load(function () { -}); +}); // this shouldn’t be an error load(function (z) { -}); +}); // this shouldn't be an error diff --git a/tests/baselines/reference/multiCallOverloads.types b/tests/baselines/reference/multiCallOverloads.types new file mode 100644 index 00000000000..8c789510580 --- /dev/null +++ b/tests/baselines/reference/multiCallOverloads.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/multiCallOverloads.ts === +interface ICallback { +>ICallback : ICallback + + (x?: string):void; +>x : string +} + +function load(f: ICallback) {} +>load : (f: ICallback) => void +>f : ICallback +>ICallback : ICallback + +var f1: ICallback = function(z?) {} +>f1 : ICallback +>ICallback : ICallback +>function(z?) {} : (z?: string) => void +>z : string + +var f2: ICallback = function(z?) {} +>f2 : ICallback +>ICallback : ICallback +>function(z?) {} : (z?: string) => void +>z : string + +load(f1) // ok +>load(f1) : void +>load : (f: ICallback) => void +>f1 : ICallback + +load(f2) // ok +>load(f2) : void +>load : (f: ICallback) => void +>f2 : ICallback + +load(function() {}) // this shouldn’t be an error +>load(function() {}) : void +>load : (f: ICallback) => void +>function() {} : () => void + +load(function(z?) {}) // this shouldn't be an error +>load(function(z?) {}) : void +>load : (f: ICallback) => void +>function(z?) {} : (z?: string) => void +>z : string + diff --git a/tests/baselines/reference/multiExtendsSplitInterfaces2.types b/tests/baselines/reference/multiExtendsSplitInterfaces2.types new file mode 100644 index 00000000000..b957d3dc260 --- /dev/null +++ b/tests/baselines/reference/multiExtendsSplitInterfaces2.types @@ -0,0 +1,59 @@ +=== tests/cases/compiler/multiExtendsSplitInterfaces2.ts === +interface A { +>A : A + + a: number; +>a : number +} + +interface I extends A { +>I : I +>A : A + + i1: number; +>i1 : number +} + +interface B { +>B : B + + b: number; +>b : number +} + +interface I extends B { +>I : I +>B : B + + i2: number; +>i2 : number +} + +var i: I; +>i : I +>I : I + +var a = i.a; +>a : number +>i.a : number +>i : I +>a : number + +var i1 = i.i1; +>i1 : number +>i.i1 : number +>i : I +>i1 : number + +var b = i.b; +>b : number +>i.b : number +>i : I +>b : number + +var i2 = i.i2; +>i2 : number +>i.i2 : number +>i : I +>i2 : number + diff --git a/tests/baselines/reference/multiImportExport.types b/tests/baselines/reference/multiImportExport.types new file mode 100644 index 00000000000..aac60aaee90 --- /dev/null +++ b/tests/baselines/reference/multiImportExport.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/consumer.ts === +import Drawing = require('./Drawing'); +>Drawing : typeof Drawing + +var addr = new Drawing.Math.Adder(); +>addr : Adder +>new Drawing.Math.Adder() : Adder +>Drawing.Math.Adder : typeof Adder +>Drawing.Math : { Adder: typeof Adder; } +>Drawing : typeof Drawing +>Math : { Adder: typeof Adder; } +>Adder : typeof Adder + +=== tests/cases/compiler/Drawing.ts === +export import Math = require('Math/Math') +>Math : { Adder: typeof Adder; } + +=== tests/cases/compiler/Math/Math.ts === +import Adder = require('Math/Adder'); +>Adder : typeof Adder + +var Math = { +>Math : { Adder: typeof Adder; } +>{ Adder:Adder} : { Adder: typeof Adder; } + + Adder:Adder +>Adder : typeof Adder +>Adder : typeof Adder + +}; + +export = Math +>Math : { Adder: typeof Adder; } + +=== tests/cases/compiler/Math/Adder.ts === +class Adder { +>Adder : Adder + + add(a: number, b: number) { +>add : (a: number, b: number) => void +>a : number +>b : number + + } +} + +export = Adder; +>Adder : Adder + diff --git a/tests/baselines/reference/multiModuleClodule1.types b/tests/baselines/reference/multiModuleClodule1.types new file mode 100644 index 00000000000..f7379e33173 --- /dev/null +++ b/tests/baselines/reference/multiModuleClodule1.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/multiModuleClodule1.ts === +class C { +>C : C + + constructor(x: number) { } +>x : number + + foo() { } +>foo : () => void + + bar() { } +>bar : () => void + + static boo() { } +>boo : () => void +} + +module C { +>C : typeof C + + export var x = 1; +>x : number + + var y = 2; +>y : number +} +module C { +>C : typeof C + + export function foo() { } +>foo : () => void + + function baz() { return ''; } +>baz : () => string +} + +var c = new C(C.x); +>c : C +>new C(C.x) : C +>C : typeof C +>C.x : number +>C : typeof C +>x : number + +c.foo = C.foo; +>c.foo = C.foo : () => void +>c.foo : () => void +>c : C +>foo : () => void +>C.foo : () => void +>C : typeof C +>foo : () => void + diff --git a/tests/baselines/reference/multiModuleFundule1.js b/tests/baselines/reference/multiModuleFundule1.js index bf2abfb7dc8..f643ed5ee4d 100644 --- a/tests/baselines/reference/multiModuleFundule1.js +++ b/tests/baselines/reference/multiModuleFundule1.js @@ -26,5 +26,5 @@ var C; C.foo = foo; })(C || (C = {})); var r = C(2); -var r2 = new C(2); +var r2 = new C(2); // using void returning function as constructor var r3 = C.foo(); diff --git a/tests/baselines/reference/multiModuleFundule1.types b/tests/baselines/reference/multiModuleFundule1.types new file mode 100644 index 00000000000..c78a195f4b1 --- /dev/null +++ b/tests/baselines/reference/multiModuleFundule1.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/multiModuleFundule1.ts === +function C(x: number) { } +>C : typeof C +>x : number + +module C { +>C : typeof C + + export var x = 1; +>x : number +} +module C { +>C : typeof C + + export function foo() { } +>foo : () => void +} + +var r = C(2); +>r : void +>C(2) : void +>C : typeof C + +var r2 = new C(2); // using void returning function as constructor +>r2 : any +>new C(2) : any +>C : typeof C + +var r3 = C.foo(); +>r3 : void +>C.foo() : void +>C.foo : () => void +>C : typeof C +>foo : () => void + diff --git a/tests/baselines/reference/multipleNumericIndexers.js b/tests/baselines/reference/multipleNumericIndexers.js index a4b6d5d0616..638cf01569a 100644 --- a/tests/baselines/reference/multipleNumericIndexers.js +++ b/tests/baselines/reference/multipleNumericIndexers.js @@ -33,6 +33,7 @@ interface I { //// [multipleNumericIndexers.js] +// Multiple indexers of the same type are an error var C = (function () { function C() { } diff --git a/tests/baselines/reference/multipleStringIndexers.js b/tests/baselines/reference/multipleStringIndexers.js index 8919cd62c33..55dd816e42b 100644 --- a/tests/baselines/reference/multipleStringIndexers.js +++ b/tests/baselines/reference/multipleStringIndexers.js @@ -32,6 +32,7 @@ interface I2 { } //// [multipleStringIndexers.js] +// Multiple indexers of the same type are an error var C = (function () { function C() { } diff --git a/tests/baselines/reference/mutrec.types b/tests/baselines/reference/mutrec.types new file mode 100644 index 00000000000..6c147174484 --- /dev/null +++ b/tests/baselines/reference/mutrec.types @@ -0,0 +1,106 @@ +=== tests/cases/compiler/mutrec.ts === +interface A { +>A : A + + x:B[]; +>x : B[] +>B : B +} + +interface B { +>B : B + + x:A[]; +>x : A[] +>A : A +} + +function f(p: A) { return p }; +>f : (p: A) => A +>p : A +>A : A +>p : A + +var b:B; +>b : B +>B : B + +f(b); +>f(b) : A +>f : (p: A) => A +>b : B + +interface I1 { +>I1 : I1 + + y:I2; +>y : I2 +>I2 : I2 +} + +interface I2 { +>I2 : I2 + + y:I3; +>y : I3 +>I3 : I3 +} + +interface I3 { +>I3 : I3 + + y:I1; +>y : I1 +>I1 : I1 +} + +function g(p: I1) { return p }; +>g : (p: I1) => I1 +>p : I1 +>I1 : I1 +>p : I1 + +var i2:I2; +>i2 : I2 +>I2 : I2 + +g(i2); +>g(i2) : I1 +>g : (p: I1) => I1 +>i2 : I2 + +var i3:I3; +>i3 : I3 +>I3 : I3 + +g(i3); +>g(i3) : I1 +>g : (p: I1) => I1 +>i3 : I3 + +interface I4 { +>I4 : I4 + + y:I5; +>y : I5 +>I5 : I5 +} + +interface I5 { +>I5 : I5 + + y:I4; +>y : I4 +>I4 : I4 +} + +var i4:I4; +>i4 : I4 +>I4 : I4 + +g(i4); +>g(i4) : I1 +>g : (p: I1) => I1 +>i4 : I4 + + diff --git a/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes1.js b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes1.js index d66c16bc241..9d1c10b42fd 100644 --- a/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes1.js +++ b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes1.js @@ -18,4 +18,4 @@ b.foo(); // should not error //// [mutuallyRecursiveGenericBaseTypes1.js] var b; -b.foo(); +b.foo(); // should not error diff --git a/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes1.types b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes1.types new file mode 100644 index 00000000000..989f7d32d29 --- /dev/null +++ b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes1.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/mutuallyRecursiveGenericBaseTypes1.ts === +interface A { +>A : A +>T : T + + foo(): B; // instead of B does see this +>foo : { (): B; (): void; } +>B : B +>T : T + + foo(): void; // instead of B does see this +>foo : { (): B; (): void; } + + foo2(): B; +>foo2 : () => B +>B : B +} + +interface B extends A { +>B : B +>T : T +>A : A +>T : T + + bar(): void; +>bar : () => void +} + +var b: B; +>b : B +>B : B + +b.foo(); // should not error +>b.foo() : B +>b.foo : { (): B; (): void; } +>b : B +>foo : { (): B; (): void; } + + + diff --git a/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types new file mode 100644 index 00000000000..5cadfa780fe --- /dev/null +++ b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/mutuallyRecursiveGenericBaseTypes2.ts === +class foo +>foo : foo +>T : T +{ + bar(): foo2 { return null; } +>bar : () => foo2 +>foo2 : foo2 +>T : T +} + +class foo2 extends foo { +>foo2 : foo2 +>T : T +>foo : foo +>T : T +} + +var test = new foo(); +>test : foo +>new foo() : foo +>foo : typeof foo + diff --git a/tests/baselines/reference/nameCollision.js b/tests/baselines/reference/nameCollision.js index 307e30053e5..0972729fb4e 100644 --- a/tests/baselines/reference/nameCollision.js +++ b/tests/baselines/reference/nameCollision.js @@ -49,6 +49,8 @@ module D { //// [nameCollision.js] var A; (function (__A) { + // these 2 statements force an underscore before the 'A' + // in the generated function call. var A = 12; var _A = ''; })(A || (A = {})); @@ -58,6 +60,8 @@ var B; })(B || (B = {})); var B; (function (_B) { + // re-opened module with colliding name + // this should add an underscore. var B = (function () { function B() { } @@ -89,6 +93,8 @@ var Y; })(_Y.Y || (_Y.Y = {})); var Y = _Y.Y; })(Y || (Y = {})); +// no collision, since interface doesn't +// generate code. var D; (function (D) { D.E = 'hello'; diff --git a/tests/baselines/reference/nameCollision.types b/tests/baselines/reference/nameCollision.types new file mode 100644 index 00000000000..be14150308b --- /dev/null +++ b/tests/baselines/reference/nameCollision.types @@ -0,0 +1,88 @@ +=== tests/cases/conformance/internalModules/codeGeneration/nameCollision.ts === +module A { +>A : typeof A + + // these 2 statements force an underscore before the 'A' + // in the generated function call. + var A = 12; +>A : number + + var _A = ''; +>_A : string +} + +module B { +>B : typeof B + + var A = 12; +>A : number +} + +module B { +>B : typeof B + + // re-opened module with colliding name + // this should add an underscore. + class B { +>B : B + + name: string; +>name : string + } +} + +module X { +>X : typeof X + + var X = 13; +>X : number + + export module Y { +>Y : typeof X.Y + + var Y = 13; +>Y : number + + export module Z { +>Z : typeof X.Y.Z + + var X = 12; +>X : number + + var Y = 12; +>Y : number + + var Z = 12; +>Z : number + } + } +} + +module Y.Y { +>Y : typeof Y +>Y : typeof Y.Y + + export enum Y { +>Y : Y + + Red, Blue +>Red : Y +>Blue : Y + } +} + +// no collision, since interface doesn't +// generate code. +module D { +>D : typeof D + + export interface D { +>D : D + + id: number; +>id : number + } + + export var E = 'hello'; +>E : string +} diff --git a/tests/baselines/reference/nameCollisions.js b/tests/baselines/reference/nameCollisions.js index 0591989adbb..51b66adcefe 100644 --- a/tests/baselines/reference/nameCollisions.js +++ b/tests/baselines/reference/nameCollisions.js @@ -64,7 +64,7 @@ var T; (function (z) { var t; })(z || (z = {})); - var z; + var z; // error var y; (function (y) { var b; @@ -73,14 +73,14 @@ var T; function y() { } return y; - })(); + })(); // error var w; var f; function f() { - } + } //error function f2() { } - var f2; + var f2; // error var i; var C = (function () { function C() { @@ -88,14 +88,14 @@ var T; return C; })(); function C() { - } + } // error function C2() { } var C2 = (function () { function C2() { } return C2; - })(); + })(); // error function fi() { } var cli = (function () { @@ -107,5 +107,5 @@ var T; function cli2() { } return cli2; - })(); + })(); // error })(T || (T = {})); diff --git a/tests/baselines/reference/nameCollisionsInPropertyAssignments.types b/tests/baselines/reference/nameCollisionsInPropertyAssignments.types new file mode 100644 index 00000000000..1628b673621 --- /dev/null +++ b/tests/baselines/reference/nameCollisionsInPropertyAssignments.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/nameCollisionsInPropertyAssignments.ts === +var x = 1 +>x : number + +var y = { x() { x++; } }; +>y : { x: () => void; } +>{ x() { x++; } } : { x: () => void; } +>x : () => void +>x() { x++; } : () => void +>x++ : number +>x : number + diff --git a/tests/baselines/reference/nameDelimitedBySlashes.types b/tests/baselines/reference/nameDelimitedBySlashes.types new file mode 100644 index 00000000000..cea87ff2241 --- /dev/null +++ b/tests/baselines/reference/nameDelimitedBySlashes.types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo = require('./test/foo_0'); +>foo : typeof foo + +var x = foo.foo + 42; +>x : number +>foo.foo + 42 : number +>foo.foo : number +>foo : typeof foo +>foo : number + +=== tests/cases/conformance/externalModules/test/foo_0.ts === +export var foo = 42; +>foo : number + diff --git a/tests/baselines/reference/nameWithRelativePaths.types b/tests/baselines/reference/nameWithRelativePaths.types new file mode 100644 index 00000000000..2dc303b2583 --- /dev/null +++ b/tests/baselines/reference/nameWithRelativePaths.types @@ -0,0 +1,48 @@ +=== tests/cases/conformance/externalModules/test/foo_3.ts === +import foo0 = require('../foo_0'); +>foo0 : typeof foo0 + +import foo1 = require('./test/foo_1'); +>foo1 : typeof foo1 + +import foo2 = require('./.././test/foo_2'); +>foo2 : typeof foo2 + +if(foo2.M2.x){ +>foo2.M2.x : boolean +>foo2.M2 : typeof foo2.M2 +>foo2 : typeof foo2 +>M2 : typeof foo2.M2 +>x : boolean + + var x = foo0.foo + foo1.f(); +>x : number +>foo0.foo + foo1.f() : number +>foo0.foo : number +>foo0 : typeof foo0 +>foo : number +>foo1.f() : number +>foo1.f : () => number +>foo1 : typeof foo1 +>f : () => number +} + +=== tests/cases/conformance/externalModules/foo_0.ts === +export var foo = 42; +>foo : number + +=== tests/cases/conformance/externalModules/test/test/foo_1.ts === +export function f(){ +>f : () => number + + return 42; +} + +=== tests/cases/conformance/externalModules/test/foo_2.ts === +export module M2 { +>M2 : typeof M2 + + export var x = true; +>x : boolean +} + diff --git a/tests/baselines/reference/namedFunctionExpressionAssignedToClassProperty.js b/tests/baselines/reference/namedFunctionExpressionAssignedToClassProperty.js index ea97d23f8d6..0ce927b78c7 100644 --- a/tests/baselines/reference/namedFunctionExpressionAssignedToClassProperty.js +++ b/tests/baselines/reference/namedFunctionExpressionAssignedToClassProperty.js @@ -18,7 +18,7 @@ class Foo{ var Foo = (function () { function Foo() { this.a = function bar() { - }; + }; // this shouldn't crash the compiler... } return Foo; })(); diff --git a/tests/baselines/reference/namedFunctionExpressionAssignedToClassProperty.types b/tests/baselines/reference/namedFunctionExpressionAssignedToClassProperty.types new file mode 100644 index 00000000000..49ba563379e --- /dev/null +++ b/tests/baselines/reference/namedFunctionExpressionAssignedToClassProperty.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/namedFunctionExpressionAssignedToClassProperty.ts === +class Foo{ +>Foo : Foo + + a = function bar(){ +>a : () => void +>function bar(){ } : () => void +>bar : () => void + + }; // this shouldn't crash the compiler... + + + + constructor(){ + + } + +} + diff --git a/tests/baselines/reference/namedFunctionExpressionCall.js b/tests/baselines/reference/namedFunctionExpressionCall.js index 6e9eeae1197..175feb76b07 100644 --- a/tests/baselines/reference/namedFunctionExpressionCall.js +++ b/tests/baselines/reference/namedFunctionExpressionCall.js @@ -14,7 +14,9 @@ var recurser = function foo() { //// [namedFunctionExpressionCall.js] var recurser = function foo() { + // using the local name foo(); + // using the globally visible name recurser(); }; (function bar() { diff --git a/tests/baselines/reference/namedFunctionExpressionCall.types b/tests/baselines/reference/namedFunctionExpressionCall.types new file mode 100644 index 00000000000..018cf64afcd --- /dev/null +++ b/tests/baselines/reference/namedFunctionExpressionCall.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/namedFunctionExpressionCall.ts === +var recurser = function foo() { +>recurser : any +>function foo() { // using the local name foo(); // using the globally visible name recurser();} : () => void +>foo : () => void + + // using the local name + foo(); +>foo() : void +>foo : () => void + + // using the globally visible name + recurser(); +>recurser() : any +>recurser : any + +}; + + +(function bar() { +>(function bar() { bar();}) : () => void +>function bar() { bar();} : () => void +>bar : () => void + + bar(); +>bar() : void +>bar : () => void + +}); diff --git a/tests/baselines/reference/namedFunctionExpressionCallErrors.js b/tests/baselines/reference/namedFunctionExpressionCallErrors.js index 484b65e6359..180411d4fbd 100644 --- a/tests/baselines/reference/namedFunctionExpressionCallErrors.js +++ b/tests/baselines/reference/namedFunctionExpressionCallErrors.js @@ -19,9 +19,13 @@ bar(); //// [namedFunctionExpressionCallErrors.js] var recurser = function foo() { }; +// Error: foo should not be visible here foo(); +// recurser should be recurser(); (function bar() { + // Error: foo should not be visible here either foo(); }); +// Error: bar should not be visible bar(); diff --git a/tests/baselines/reference/namedFunctionExpressionInModule.types b/tests/baselines/reference/namedFunctionExpressionInModule.types new file mode 100644 index 00000000000..9643d9ca069 --- /dev/null +++ b/tests/baselines/reference/namedFunctionExpressionInModule.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/namedFunctionExpressionInModule.ts === +module Variables{ +>Variables : typeof Variables + + var x = function bar(a, b, c) { +>x : (a: any, b: any, c: any) => void +>function bar(a, b, c) { } : (a: any, b: any, c: any) => void +>bar : (a: any, b: any, c: any) => void +>a : any +>b : any +>c : any + } + x(1, 2, 3); +>x(1, 2, 3) : void +>x : (a: any, b: any, c: any) => void +} + diff --git a/tests/baselines/reference/namespaces1.types b/tests/baselines/reference/namespaces1.types new file mode 100644 index 00000000000..b4b41fbeda9 --- /dev/null +++ b/tests/baselines/reference/namespaces1.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/namespaces1.ts === +module X { +>X : unknown + + export module Y { +>Y : unknown + + export interface Z { } +>Z : Z + } + export interface Y { } +>Y : Y +} + +var x: X.Y.Z; +>x : X.Y.Z +>X : unknown +>Y : unknown +>Z : X.Y.Z + +var x2: X.Y; +>x2 : X.Y +>X : unknown +>Y : X.Y + diff --git a/tests/baselines/reference/namespaces2.types b/tests/baselines/reference/namespaces2.types new file mode 100644 index 00000000000..909f56f561a --- /dev/null +++ b/tests/baselines/reference/namespaces2.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/namespaces2.ts === +module A { +>A : typeof A + + export module B { +>B : typeof B + + export class C { } +>C : C + } +} + +var c: A.B.C = new A.B.C(); +>c : A.B.C +>A : unknown +>B : unknown +>C : A.B.C +>new A.B.C() : A.B.C +>A.B.C : typeof A.B.C +>A.B : typeof A.B +>A : typeof A +>B : typeof A.B +>C : typeof A.B.C + diff --git a/tests/baselines/reference/negateOperatorWithAnyOtherType.js b/tests/baselines/reference/negateOperatorWithAnyOtherType.js index 2652ddf81d5..190d80eaba3 100644 --- a/tests/baselines/reference/negateOperatorWithAnyOtherType.js +++ b/tests/baselines/reference/negateOperatorWithAnyOtherType.js @@ -54,6 +54,7 @@ var ResultIsNumber15 = -(ANY - ANY1); -M.n; //// [negateOperatorWithAnyOtherType.js] +// - operator on any type var ANY; var ANY1; var ANY2 = ["", ""]; @@ -78,14 +79,17 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// any type var var ResultIsNumber1 = -ANY1; var ResultIsNumber2 = -ANY2; var ResultIsNumber3 = -A; var ResultIsNumber4 = -M; var ResultIsNumber5 = -obj; var ResultIsNumber6 = -obj1; +// any type literal var ResultIsNumber7 = -undefined; var ResultIsNumber = -null; +// any type expressions var ResultIsNumber8 = -ANY2[0]; var ResultIsNumber9 = -obj1.x; var ResultIsNumber10 = -obj1.y; @@ -94,6 +98,7 @@ var ResultIsNumber12 = -M.n; var ResultIsNumber13 = -foo(); var ResultIsNumber14 = -A.foo(); var ResultIsNumber15 = -(ANY - ANY1); +// miss assignment operators -ANY; -ANY1; -ANY2[0]; diff --git a/tests/baselines/reference/negateOperatorWithAnyOtherType.types b/tests/baselines/reference/negateOperatorWithAnyOtherType.types new file mode 100644 index 00000000000..8785ab073b2 --- /dev/null +++ b/tests/baselines/reference/negateOperatorWithAnyOtherType.types @@ -0,0 +1,189 @@ +=== tests/cases/conformance/expressions/unaryOperators/negateOperator/negateOperatorWithAnyOtherType.ts === +// - operator on any type + +var ANY: any; +>ANY : any + +var ANY1; +>ANY1 : any + +var ANY2: any[] = ["", ""]; +>ANY2 : any[] +>["", ""] : any[] + +var obj: () => {} +>obj : () => {} + +var obj1 = { x: "", y: () => { }}; +>obj1 : { x: string; y: () => void; } +>{ x: "", y: () => { }} : { x: string; y: () => void; } +>x : string +>y : () => void +>() => { } : () => void + +function foo(): any { +>foo : () => any + + var a; +>a : any + + return a; +>a : any +} +class A { +>A : A + + public a: any; +>a : any + + static foo() { +>foo : () => any + + var a; +>a : any + + return a; +>a : any + } +} +module M { +>M : typeof M + + export var n: any; +>n : any +} +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// any type var +var ResultIsNumber1 = -ANY1; +>ResultIsNumber1 : number +>-ANY1 : number +>ANY1 : any + +var ResultIsNumber2 = -ANY2; +>ResultIsNumber2 : number +>-ANY2 : number +>ANY2 : any[] + +var ResultIsNumber3 = -A; +>ResultIsNumber3 : number +>-A : number +>A : typeof A + +var ResultIsNumber4 = -M; +>ResultIsNumber4 : number +>-M : number +>M : typeof M + +var ResultIsNumber5 = -obj; +>ResultIsNumber5 : number +>-obj : number +>obj : () => {} + +var ResultIsNumber6 = -obj1; +>ResultIsNumber6 : number +>-obj1 : number +>obj1 : { x: string; y: () => void; } + +// any type literal +var ResultIsNumber7 = -undefined; +>ResultIsNumber7 : number +>-undefined : number +>undefined : undefined + +var ResultIsNumber = -null; +>ResultIsNumber : number +>-null : number + +// any type expressions +var ResultIsNumber8 = -ANY2[0]; +>ResultIsNumber8 : number +>-ANY2[0] : number +>ANY2[0] : any +>ANY2 : any[] + +var ResultIsNumber9 = -obj1.x; +>ResultIsNumber9 : number +>-obj1.x : number +>obj1.x : string +>obj1 : { x: string; y: () => void; } +>x : string + +var ResultIsNumber10 = -obj1.y; +>ResultIsNumber10 : number +>-obj1.y : number +>obj1.y : () => void +>obj1 : { x: string; y: () => void; } +>y : () => void + +var ResultIsNumber11 = -objA.a; +>ResultIsNumber11 : number +>-objA.a : number +>objA.a : any +>objA : A +>a : any + +var ResultIsNumber12 = -M.n; +>ResultIsNumber12 : number +>-M.n : number +>M.n : any +>M : typeof M +>n : any + +var ResultIsNumber13 = -foo(); +>ResultIsNumber13 : number +>-foo() : number +>foo() : any +>foo : () => any + +var ResultIsNumber14 = -A.foo(); +>ResultIsNumber14 : number +>-A.foo() : number +>A.foo() : any +>A.foo : () => any +>A : typeof A +>foo : () => any + +var ResultIsNumber15 = -(ANY - ANY1); +>ResultIsNumber15 : number +>-(ANY - ANY1) : number +>(ANY - ANY1) : number +>ANY - ANY1 : number +>ANY : any +>ANY1 : any + +// miss assignment operators +-ANY; +>-ANY : number +>ANY : any + +-ANY1; +>-ANY1 : number +>ANY1 : any + +-ANY2[0]; +>-ANY2[0] : number +>ANY2[0] : any +>ANY2 : any[] + +-ANY, ANY1; +>-ANY, ANY1 : any +>-ANY : number +>ANY : any +>ANY1 : any + +-objA.a; +>-objA.a : number +>objA.a : any +>objA : A +>a : any + +-M.n; +>-M.n : number +>M.n : any +>M : typeof M +>n : any + diff --git a/tests/baselines/reference/negateOperatorWithBooleanType.js b/tests/baselines/reference/negateOperatorWithBooleanType.js index a05e053bb4d..ce7b14b2d82 100644 --- a/tests/baselines/reference/negateOperatorWithBooleanType.js +++ b/tests/baselines/reference/negateOperatorWithBooleanType.js @@ -36,6 +36,7 @@ var ResultIsNumber7 = -A.foo(); -M.n; //// [negateOperatorWithBooleanType.js] +// - operator on boolean type var BOOLEAN; function foo() { return true; @@ -53,13 +54,17 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// boolean type var var ResultIsNumber1 = -BOOLEAN; +// boolean type literal var ResultIsNumber2 = -true; var ResultIsNumber3 = -{ x: true, y: false }; +// boolean type expressions var ResultIsNumber4 = -objA.a; var ResultIsNumber5 = -M.n; var ResultIsNumber6 = -foo(); var ResultIsNumber7 = -A.foo(); +// miss assignment operators -true; -BOOLEAN; -foo(); diff --git a/tests/baselines/reference/negateOperatorWithBooleanType.types b/tests/baselines/reference/negateOperatorWithBooleanType.types new file mode 100644 index 00000000000..49467d87845 --- /dev/null +++ b/tests/baselines/reference/negateOperatorWithBooleanType.types @@ -0,0 +1,105 @@ +=== tests/cases/conformance/expressions/unaryOperators/negateOperator/negateOperatorWithBooleanType.ts === +// - operator on boolean type +var BOOLEAN: boolean; +>BOOLEAN : boolean + +function foo(): boolean { return true; } +>foo : () => boolean + +class A { +>A : A + + public a: boolean; +>a : boolean + + static foo() { return false; } +>foo : () => boolean +} +module M { +>M : typeof M + + export var n: boolean; +>n : boolean +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// boolean type var +var ResultIsNumber1 = -BOOLEAN; +>ResultIsNumber1 : number +>-BOOLEAN : number +>BOOLEAN : boolean + +// boolean type literal +var ResultIsNumber2 = -true; +>ResultIsNumber2 : number +>-true : number + +var ResultIsNumber3 = -{ x: true, y: false }; +>ResultIsNumber3 : number +>-{ x: true, y: false } : number +>{ x: true, y: false } : { x: boolean; y: boolean; } +>x : boolean +>y : boolean + +// boolean type expressions +var ResultIsNumber4 = -objA.a; +>ResultIsNumber4 : number +>-objA.a : number +>objA.a : boolean +>objA : A +>a : boolean + +var ResultIsNumber5 = -M.n; +>ResultIsNumber5 : number +>-M.n : number +>M.n : boolean +>M : typeof M +>n : boolean + +var ResultIsNumber6 = -foo(); +>ResultIsNumber6 : number +>-foo() : number +>foo() : boolean +>foo : () => boolean + +var ResultIsNumber7 = -A.foo(); +>ResultIsNumber7 : number +>-A.foo() : number +>A.foo() : boolean +>A.foo : () => boolean +>A : typeof A +>foo : () => boolean + +// miss assignment operators +-true; +>-true : number + +-BOOLEAN; +>-BOOLEAN : number +>BOOLEAN : boolean + +-foo(); +>-foo() : number +>foo() : boolean +>foo : () => boolean + +-true, false; +>-true, false : boolean +>-true : number + +-objA.a; +>-objA.a : number +>objA.a : boolean +>objA : A +>a : boolean + +-M.n; +>-M.n : number +>M.n : boolean +>M : typeof M +>n : boolean + diff --git a/tests/baselines/reference/negateOperatorWithEnumType.js b/tests/baselines/reference/negateOperatorWithEnumType.js index fa45b524df5..a3235a3ccc0 100644 --- a/tests/baselines/reference/negateOperatorWithEnumType.js +++ b/tests/baselines/reference/negateOperatorWithEnumType.js @@ -18,6 +18,7 @@ var ResultIsNumber3 = -(ENUM1[1] + ENUM1[2]); -ENUM, ENUM1; //// [negateOperatorWithEnumType.js] +// - operator on enum type var ENUM; (function (ENUM) { })(ENUM || (ENUM = {})); @@ -29,9 +30,12 @@ var ENUM1; ENUM1[ENUM1[""] = 2] = ""; })(ENUM1 || (ENUM1 = {})); ; +// enum type var var ResultIsNumber1 = -ENUM; +// expressions var ResultIsNumber2 = -ENUM1[1]; var ResultIsNumber3 = -(ENUM1[1] + ENUM1[2]); +// miss assignment operators -ENUM; -ENUM1; -ENUM1[1]; diff --git a/tests/baselines/reference/negateOperatorWithEnumType.types b/tests/baselines/reference/negateOperatorWithEnumType.types new file mode 100644 index 00000000000..b2e0cb91c51 --- /dev/null +++ b/tests/baselines/reference/negateOperatorWithEnumType.types @@ -0,0 +1,52 @@ +=== tests/cases/conformance/expressions/unaryOperators/negateOperator/negateOperatorWithEnumType.ts === +// - operator on enum type + +enum ENUM { }; +>ENUM : ENUM + +enum ENUM1 { 1, 2, "" }; +>ENUM1 : ENUM1 + +// enum type var +var ResultIsNumber1 = -ENUM; +>ResultIsNumber1 : number +>-ENUM : number +>ENUM : typeof ENUM + +// expressions +var ResultIsNumber2 = -ENUM1[1]; +>ResultIsNumber2 : number +>-ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +var ResultIsNumber3 = -(ENUM1[1] + ENUM1[2]); +>ResultIsNumber3 : number +>-(ENUM1[1] + ENUM1[2]) : number +>(ENUM1[1] + ENUM1[2]) : number +>ENUM1[1] + ENUM1[2] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 +>ENUM1[2] : ENUM1 +>ENUM1 : typeof ENUM1 + +// miss assignment operators +-ENUM; +>-ENUM : number +>ENUM : typeof ENUM + +-ENUM1; +>-ENUM1 : number +>ENUM1 : typeof ENUM1 + +-ENUM1[1]; +>-ENUM1[1] : number +>ENUM1[1] : ENUM1 +>ENUM1 : typeof ENUM1 + +-ENUM, ENUM1; +>-ENUM, ENUM1 : typeof ENUM1 +>-ENUM : number +>ENUM : typeof ENUM +>ENUM1 : typeof ENUM1 + diff --git a/tests/baselines/reference/negateOperatorWithNumberType.js b/tests/baselines/reference/negateOperatorWithNumberType.js index a68e1351d41..15e0eeca435 100644 --- a/tests/baselines/reference/negateOperatorWithNumberType.js +++ b/tests/baselines/reference/negateOperatorWithNumberType.js @@ -42,6 +42,7 @@ var ResultIsNumber11 = -(NUMBER - NUMBER); -objA.a, M.n; //// [negateOperatorWithNumberType.js] +// - operator on number type var NUMBER; var NUMBER1 = [1, 2]; function foo() { @@ -60,19 +61,23 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// number type var var ResultIsNumber1 = -NUMBER; var ResultIsNumber2 = -NUMBER1; +// number type literal var ResultIsNumber3 = -1; var ResultIsNumber4 = -{ x: 1, y: 2 }; var ResultIsNumber5 = -{ x: 1, y: function (n) { return n; } }; +// number type expressions var ResultIsNumber6 = -objA.a; var ResultIsNumber7 = -M.n; var ResultIsNumber8 = -NUMBER1[0]; var ResultIsNumber9 = -foo(); var ResultIsNumber10 = -A.foo(); var ResultIsNumber11 = -(NUMBER - NUMBER); +// miss assignment operators -1; -NUMBER; -NUMBER1; diff --git a/tests/baselines/reference/negateOperatorWithNumberType.types b/tests/baselines/reference/negateOperatorWithNumberType.types new file mode 100644 index 00000000000..f6cee89f6df --- /dev/null +++ b/tests/baselines/reference/negateOperatorWithNumberType.types @@ -0,0 +1,148 @@ +=== tests/cases/conformance/expressions/unaryOperators/negateOperator/negateOperatorWithNumberType.ts === +// - operator on number type +var NUMBER: number; +>NUMBER : number + +var NUMBER1: number[] = [1, 2]; +>NUMBER1 : number[] +>[1, 2] : number[] + +function foo(): number { return 1; } +>foo : () => number + +class A { +>A : A + + public a: number; +>a : number + + static foo() { return 1; } +>foo : () => number +} +module M { +>M : typeof M + + export var n: number; +>n : number +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// number type var +var ResultIsNumber1 = -NUMBER; +>ResultIsNumber1 : number +>-NUMBER : number +>NUMBER : number + +var ResultIsNumber2 = -NUMBER1; +>ResultIsNumber2 : number +>-NUMBER1 : number +>NUMBER1 : number[] + +// number type literal +var ResultIsNumber3 = -1; +>ResultIsNumber3 : number +>-1 : number + +var ResultIsNumber4 = -{ x: 1, y: 2}; +>ResultIsNumber4 : number +>-{ x: 1, y: 2} : number +>{ x: 1, y: 2} : { x: number; y: number; } +>x : number +>y : number + +var ResultIsNumber5 = -{ x: 1, y: (n: number) => { return n; } }; +>ResultIsNumber5 : number +>-{ x: 1, y: (n: number) => { return n; } } : number +>{ x: 1, y: (n: number) => { return n; } } : { x: number; y: (n: number) => number; } +>x : number +>y : (n: number) => number +>(n: number) => { return n; } : (n: number) => number +>n : number +>n : number + +// number type expressions +var ResultIsNumber6 = -objA.a; +>ResultIsNumber6 : number +>-objA.a : number +>objA.a : number +>objA : A +>a : number + +var ResultIsNumber7 = -M.n; +>ResultIsNumber7 : number +>-M.n : number +>M.n : number +>M : typeof M +>n : number + +var ResultIsNumber8 = -NUMBER1[0]; +>ResultIsNumber8 : number +>-NUMBER1[0] : number +>NUMBER1[0] : number +>NUMBER1 : number[] + +var ResultIsNumber9 = -foo(); +>ResultIsNumber9 : number +>-foo() : number +>foo() : number +>foo : () => number + +var ResultIsNumber10 = -A.foo(); +>ResultIsNumber10 : number +>-A.foo() : number +>A.foo() : number +>A.foo : () => number +>A : typeof A +>foo : () => number + +var ResultIsNumber11 = -(NUMBER - NUMBER); +>ResultIsNumber11 : number +>-(NUMBER - NUMBER) : number +>(NUMBER - NUMBER) : number +>NUMBER - NUMBER : number +>NUMBER : number +>NUMBER : number + +// miss assignment operators +-1; +>-1 : number + +-NUMBER; +>-NUMBER : number +>NUMBER : number + +-NUMBER1; +>-NUMBER1 : number +>NUMBER1 : number[] + +-foo(); +>-foo() : number +>foo() : number +>foo : () => number + +-objA.a; +>-objA.a : number +>objA.a : number +>objA : A +>a : number + +-M.n; +>-M.n : number +>M.n : number +>M : typeof M +>n : number + +-objA.a, M.n; +>-objA.a, M.n : number +>-objA.a : number +>objA.a : number +>objA : A +>a : number +>M.n : number +>M : typeof M +>n : number + diff --git a/tests/baselines/reference/negateOperatorWithStringType.js b/tests/baselines/reference/negateOperatorWithStringType.js index abcb6a6056f..228733b65c5 100644 --- a/tests/baselines/reference/negateOperatorWithStringType.js +++ b/tests/baselines/reference/negateOperatorWithStringType.js @@ -41,6 +41,7 @@ var ResultIsNumber12 = -STRING.charAt(0); -objA.a,M.n; //// [negateOperatorWithStringType.js] +// - operator on string type var STRING; var STRING1 = ["", "abc"]; function foo() { @@ -59,13 +60,16 @@ var M; M.n; })(M || (M = {})); var objA = new A(); +// string type var var ResultIsNumber1 = -STRING; var ResultIsNumber2 = -STRING1; +// string type literal var ResultIsNumber3 = -""; var ResultIsNumber4 = -{ x: "", y: "" }; var ResultIsNumber5 = -{ x: "", y: function (s) { return s; } }; +// string type expressions var ResultIsNumber6 = -objA.a; var ResultIsNumber7 = -M.n; var ResultIsNumber8 = -STRING1[0]; @@ -73,6 +77,7 @@ var ResultIsNumber9 = -foo(); var ResultIsNumber10 = -A.foo(); var ResultIsNumber11 = -(STRING + STRING); var ResultIsNumber12 = -STRING.charAt(0); +// miss assignment operators -""; -STRING; -STRING1; diff --git a/tests/baselines/reference/negateOperatorWithStringType.types b/tests/baselines/reference/negateOperatorWithStringType.types new file mode 100644 index 00000000000..43a9f05cc5b --- /dev/null +++ b/tests/baselines/reference/negateOperatorWithStringType.types @@ -0,0 +1,144 @@ +=== tests/cases/conformance/expressions/unaryOperators/negateOperator/negateOperatorWithStringType.ts === +// - operator on string type +var STRING: string; +>STRING : string + +var STRING1: string[] = ["", "abc"]; +>STRING1 : string[] +>["", "abc"] : string[] + +function foo(): string { return "abc"; } +>foo : () => string + +class A { +>A : A + + public a: string; +>a : string + + static foo() { return ""; } +>foo : () => string +} +module M { +>M : typeof M + + export var n: string; +>n : string +} + +var objA = new A(); +>objA : A +>new A() : A +>A : typeof A + +// string type var +var ResultIsNumber1 = -STRING; +>ResultIsNumber1 : number +>-STRING : number +>STRING : string + +var ResultIsNumber2 = -STRING1; +>ResultIsNumber2 : number +>-STRING1 : number +>STRING1 : string[] + +// string type literal +var ResultIsNumber3 = -""; +>ResultIsNumber3 : number +>-"" : number + +var ResultIsNumber4 = -{ x: "", y: "" }; +>ResultIsNumber4 : number +>-{ x: "", y: "" } : number +>{ x: "", y: "" } : { x: string; y: string; } +>x : string +>y : string + +var ResultIsNumber5 = -{ x: "", y: (s: string) => { return s; } }; +>ResultIsNumber5 : number +>-{ x: "", y: (s: string) => { return s; } } : number +>{ x: "", y: (s: string) => { return s; } } : { x: string; y: (s: string) => string; } +>x : string +>y : (s: string) => string +>(s: string) => { return s; } : (s: string) => string +>s : string +>s : string + +// string type expressions +var ResultIsNumber6 = -objA.a; +>ResultIsNumber6 : number +>-objA.a : number +>objA.a : string +>objA : A +>a : string + +var ResultIsNumber7 = -M.n; +>ResultIsNumber7 : number +>-M.n : number +>M.n : string +>M : typeof M +>n : string + +var ResultIsNumber8 = -STRING1[0]; +>ResultIsNumber8 : number +>-STRING1[0] : number +>STRING1[0] : string +>STRING1 : string[] + +var ResultIsNumber9 = -foo(); +>ResultIsNumber9 : number +>-foo() : number +>foo() : string +>foo : () => string + +var ResultIsNumber10 = -A.foo(); +>ResultIsNumber10 : number +>-A.foo() : number +>A.foo() : string +>A.foo : () => string +>A : typeof A +>foo : () => string + +var ResultIsNumber11 = -(STRING + STRING); +>ResultIsNumber11 : number +>-(STRING + STRING) : number +>(STRING + STRING) : string +>STRING + STRING : string +>STRING : string +>STRING : string + +var ResultIsNumber12 = -STRING.charAt(0); +>ResultIsNumber12 : number +>-STRING.charAt(0) : number +>STRING.charAt(0) : string +>STRING.charAt : (pos: number) => string +>STRING : string +>charAt : (pos: number) => string + +// miss assignment operators +-""; +>-"" : number + +-STRING; +>-STRING : number +>STRING : string + +-STRING1; +>-STRING1 : number +>STRING1 : string[] + +-foo(); +>-foo() : number +>foo() : string +>foo : () => string + +-objA.a,M.n; +>-objA.a,M.n : string +>-objA.a : number +>objA.a : string +>objA : A +>a : string +>M.n : string +>M : typeof M +>n : string + diff --git a/tests/baselines/reference/negativeZero.types b/tests/baselines/reference/negativeZero.types new file mode 100644 index 00000000000..97ba45a741a --- /dev/null +++ b/tests/baselines/reference/negativeZero.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/negativeZero.ts === +var x = -0 +>x : number +>-0 : number + diff --git a/tests/baselines/reference/nestedGenerics.types b/tests/baselines/reference/nestedGenerics.types new file mode 100644 index 00000000000..24d7fea3baa --- /dev/null +++ b/tests/baselines/reference/nestedGenerics.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/nestedGenerics.ts === +interface Foo { +>Foo : Foo +>T : T + + t: T; +>t : T +>T : T +} + +var f: Foo>; +>f : Foo> +>Foo : Foo +>Foo : Foo + diff --git a/tests/baselines/reference/nestedIfStatement.types b/tests/baselines/reference/nestedIfStatement.types new file mode 100644 index 00000000000..4dddcd75925 --- /dev/null +++ b/tests/baselines/reference/nestedIfStatement.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/nestedIfStatement.ts === +if (0) { +No type information for this code.} else if (1) { +No type information for this code.} else if (2) { +No type information for this code.} else if (3) { +No type information for this code.} else { +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/nestedIndexer.types b/tests/baselines/reference/nestedIndexer.types new file mode 100644 index 00000000000..612f6a260b7 --- /dev/null +++ b/tests/baselines/reference/nestedIndexer.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/nestedIndexer.ts === +function then(x) { +>then : (x: any) => void +>x : any + +var match: { [index: number]: string; } +>match : { [x: number]: string; } +>index : number + +} + diff --git a/tests/baselines/reference/nestedInfinitelyExpandedRecursiveTypes.types b/tests/baselines/reference/nestedInfinitelyExpandedRecursiveTypes.types new file mode 100644 index 00000000000..4a252d29961 --- /dev/null +++ b/tests/baselines/reference/nestedInfinitelyExpandedRecursiveTypes.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/nestedInfinitelyExpandedRecursiveTypes.ts === +interface F { +>F : F +>T : T + + t: G T>>; +>t : G T>> +>G : G +>F : F +>T : T +} +interface G { +>G : G +>U : U + + t: G U>>; +>t : G U>> +>G : G +>G : G +>U : U +} + +var f: F; +>f : F +>F : F + +var g: G; +>g : G +>G : G + +f = g; +>f = g : G +>f : F +>g : G + +g = f; +>g = f : F +>g : G +>f : F + diff --git a/tests/baselines/reference/nestedModulePrivateAccess.js b/tests/baselines/reference/nestedModulePrivateAccess.js index fd6efb5e402..2c0e8a8e465 100644 --- a/tests/baselines/reference/nestedModulePrivateAccess.js +++ b/tests/baselines/reference/nestedModulePrivateAccess.js @@ -12,6 +12,6 @@ var a; var x; var b; (function (b) { - var y = x; + var y = x; // should not be an error })(b || (b = {})); })(a || (a = {})); diff --git a/tests/baselines/reference/nestedModulePrivateAccess.types b/tests/baselines/reference/nestedModulePrivateAccess.types new file mode 100644 index 00000000000..7aae7449dcf --- /dev/null +++ b/tests/baselines/reference/nestedModulePrivateAccess.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/nestedModulePrivateAccess.ts === +module a{ +>a : typeof a + + var x:number; +>x : number + + module b{ +>b : typeof b + + var y = x; // should not be an error +>y : number +>x : number + } +} diff --git a/tests/baselines/reference/nestedModules.js b/tests/baselines/reference/nestedModules.js index 147e6d43b49..73b475f8160 100644 --- a/tests/baselines/reference/nestedModules.js +++ b/tests/baselines/reference/nestedModules.js @@ -36,7 +36,7 @@ var p: M2.X.Point; var A; (function (A) { (function (B) { - var Point = { x: 0, y: 0 }; + var Point = { x: 0, y: 0 }; // bug 832088: could not find module 'C' })(A.B || (A.B = {})); var B = A.B; })(A || (A = {})); diff --git a/tests/baselines/reference/nestedModules.types b/tests/baselines/reference/nestedModules.types new file mode 100644 index 00000000000..863e57ef859 --- /dev/null +++ b/tests/baselines/reference/nestedModules.types @@ -0,0 +1,83 @@ +=== tests/cases/conformance/internalModules/moduleDeclarations/nestedModules.ts === +module A.B.C { +>A : typeof A +>B : typeof B +>C : unknown + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } +} + +module A { +>A : typeof A + + export module B { +>B : typeof B + + var Point: C.Point = { x: 0, y: 0 }; // bug 832088: could not find module 'C' +>Point : C.Point +>C : unknown +>Point : C.Point +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + } +} + +module M2.X { +>M2 : typeof M2 +>X : typeof X + + export interface Point { +>Point : Point + + x: number; y: number; +>x : number +>y : number + } +} + +module M2 { +>M2 : typeof M2 + + export module X { +>X : typeof X + + export var Point: number; +>Point : number + } +} + +var m = M2.X; +>m : typeof M2.X +>M2.X : typeof M2.X +>M2 : typeof M2 +>X : typeof M2.X + +var point: number; +>point : number + +var point = m.Point; +>point : number +>m.Point : number +>m : typeof M2.X +>Point : number + +var p: { x: number; y: number; } +>p : { x: number; y: number; } +>x : number +>y : number + +var p: M2.X.Point; +>p : { x: number; y: number; } +>M2 : unknown +>X : unknown +>Point : M2.X.Point + diff --git a/tests/baselines/reference/nestedRecursiveLambda.types b/tests/baselines/reference/nestedRecursiveLambda.types new file mode 100644 index 00000000000..358ebda8abf --- /dev/null +++ b/tests/baselines/reference/nestedRecursiveLambda.types @@ -0,0 +1,46 @@ +=== tests/cases/compiler/nestedRecursiveLambda.ts === +function f(a:any) { +>f : (a: any) => void +>a : any + +void (r =>(r => r)); +>void (r =>(r => r)) : undefined +>(r =>(r => r)) : (r: any) => (r: any) => any +>r =>(r => r) : (r: any) => (r: any) => any +>r : any +>(r => r) : (r: any) => any +>r => r : (r: any) => any +>r : any +>r : any +} +f((r =>(r => r))); +>f((r =>(r => r))) : void +>f : (a: any) => void +>(r =>(r => r)) : (r: any) => (r: any) => any +>r =>(r => r) : (r: any) => (r: any) => any +>r : any +>(r => r) : (r: any) => any +>r => r : (r: any) => any +>r : any +>r : any + +void(r =>(r => r)); +>void(r =>(r => r)) : undefined +>(r =>(r => r)) : (r: any) => (r: any) => any +>r =>(r => r) : (r: any) => (r: any) => any +>r : any +>(r => r) : (r: any) => any +>r => r : (r: any) => any +>r : any +>r : any + +[(r =>(r => r))] +>[(r =>(r => r))] : { (r: any): (r: any) => any; }[] +>(r =>(r => r)) : (r: any) => (r: any) => any +>r =>(r => r) : (r: any) => (r: any) => any +>r : any +>(r => r) : (r: any) => any +>r => r : (r: any) => any +>r : any +>r : any + diff --git a/tests/baselines/reference/nestedSelf.types b/tests/baselines/reference/nestedSelf.types new file mode 100644 index 00000000000..56280bffb2f --- /dev/null +++ b/tests/baselines/reference/nestedSelf.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/nestedSelf.ts === +module M { +>M : typeof M + + export class C { +>C : C + + public n = 42; +>n : number + + public foo() { [1,2,3].map((x) => { return this.n * x; })} +>foo : () => void +>[1,2,3].map((x) => { return this.n * x; }) : number[] +>[1,2,3].map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>[1,2,3] : number[] +>map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>(x) => { return this.n * x; } : (x: number) => number +>x : number +>this.n * x : number +>this.n : number +>this : C +>n : number +>x : number + } +} + + diff --git a/tests/baselines/reference/newArrays.types b/tests/baselines/reference/newArrays.types new file mode 100644 index 00000000000..ab2d7165980 --- /dev/null +++ b/tests/baselines/reference/newArrays.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/newArrays.ts === +module M { +>M : typeof M + + class Foo {} +>Foo : Foo + + class Gar { +>Gar : Gar + + public fa: Foo[]; +>fa : Foo[] +>Foo : Foo + + public x = 10; +>x : number + + public y = 10; +>y : number + + public m () { +>m : () => void + + this.fa = new Array(this.x * this.y); +>this.fa = new Array(this.x * this.y) : Foo[] +>this.fa : Foo[] +>this : Gar +>fa : Foo[] +>new Array(this.x * this.y) : Foo[] +>Array : { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; } +>Foo : Foo +>this.x * this.y : number +>this.x : number +>this : Gar +>x : number +>this.y : number +>this : Gar +>y : number + } + } +} diff --git a/tests/baselines/reference/newExpressionWithTypeParameterConstrainedToOuterTypeParameter.js b/tests/baselines/reference/newExpressionWithTypeParameterConstrainedToOuterTypeParameter.js index f1e7136eb12..db71542e775 100644 --- a/tests/baselines/reference/newExpressionWithTypeParameterConstrainedToOuterTypeParameter.js +++ b/tests/baselines/reference/newExpressionWithTypeParameterConstrainedToOuterTypeParameter.js @@ -7,4 +7,4 @@ var y = new i(""); // y should be string //// [newExpressionWithTypeParameterConstrainedToOuterTypeParameter.js] var i; -var y = new i(""); +var y = new i(""); // y should be string diff --git a/tests/baselines/reference/newExpressionWithTypeParameterConstrainedToOuterTypeParameter.types b/tests/baselines/reference/newExpressionWithTypeParameterConstrainedToOuterTypeParameter.types new file mode 100644 index 00000000000..8629c3cce0a --- /dev/null +++ b/tests/baselines/reference/newExpressionWithTypeParameterConstrainedToOuterTypeParameter.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/newExpressionWithTypeParameterConstrainedToOuterTypeParameter.ts === +interface I { +>I : I +>T : T + + new (u: U): U; +>U : U +>T : T +>u : U +>U : U +>U : U +} +var i: I; +>i : I +>I : I + +var y = new i(""); // y should be string +>y : string +>new i("") : string +>i : I + diff --git a/tests/baselines/reference/newFunctionImplicitAny.js b/tests/baselines/reference/newFunctionImplicitAny.js index 94fc146f4a5..9f8d303680b 100644 --- a/tests/baselines/reference/newFunctionImplicitAny.js +++ b/tests/baselines/reference/newFunctionImplicitAny.js @@ -5,6 +5,7 @@ function Test() { } var test = new Test(); //// [newFunctionImplicitAny.js] +// No implicit any error given when newing a function (up for debate) function Test() { } var test = new Test(); diff --git a/tests/baselines/reference/newNonReferenceType.js b/tests/baselines/reference/newNonReferenceType.js index 8647b2379a0..1fe26464898 100644 --- a/tests/baselines/reference/newNonReferenceType.js +++ b/tests/baselines/reference/newNonReferenceType.js @@ -5,4 +5,4 @@ var b = new boolean(); // error //// [newNonReferenceType.js] var a = new any(); -var b = new boolean(); +var b = new boolean(); // error diff --git a/tests/baselines/reference/newOnInstanceSymbol.js b/tests/baselines/reference/newOnInstanceSymbol.js index 428841de21b..a66e4d74255 100644 --- a/tests/baselines/reference/newOnInstanceSymbol.js +++ b/tests/baselines/reference/newOnInstanceSymbol.js @@ -9,5 +9,5 @@ var C = (function () { } return C; })(); -var x = new C(); -new x(); +var x = new C(); // should be ok +new x(); // should error diff --git a/tests/baselines/reference/newOperatorConformance.js b/tests/baselines/reference/newOperatorConformance.js index 0fe5565c2f7..4e5c209bbff 100644 --- a/tests/baselines/reference/newOperatorConformance.js +++ b/tests/baselines/reference/newOperatorConformance.js @@ -82,25 +82,33 @@ var T = (function () { var anyCtor; var anyCtor1; var nestedCtor; +// Construct expression with no parentheses for construct signature with 0 parameters var a = new C0; var a; +// Generic construct expression with no parentheses var c1 = new T; var c1; +// Construct expression where constructor is of type 'any' with no parentheses var d = new anyCtor; var d; +// Construct expression where constructor is of type 'any' with > 1 arg var d = new anyCtor1(undefined); +// Construct expression of type where apparent type has a construct signature with 0 arguments function newFn1(s) { var p = new s; var p; } +// Construct expression of type where apparent type has a construct signature with 1 arguments function newFn2(s) { var p = new s(32); var p; } +// Construct expression of void returning function function fnVoid() { } var t = new fnVoid(); var t; +// Chained new expressions var nested = new (new (new nestedCtor())())(); var n = new nested(); var n = new nested(); diff --git a/tests/baselines/reference/newOperatorConformance.types b/tests/baselines/reference/newOperatorConformance.types new file mode 100644 index 00000000000..37205bd6177 --- /dev/null +++ b/tests/baselines/reference/newOperatorConformance.types @@ -0,0 +1,149 @@ +=== tests/cases/conformance/expressions/newOperator/newOperatorConformance.ts === + +class C0 { +>C0 : C0 + +} +class C1 { +>C1 : C1 + + constructor(n: number, s: string) { } +>n : number +>s : string +} + +class T { +>T : T +>T : T + + constructor(n?: T) { } +>n : T +>T : T +} + +var anyCtor: { +>anyCtor : new () => any + + new (): any; +}; + +var anyCtor1: { +>anyCtor1 : new (n: any) => any + + new (n): any; +>n : any + +}; + +interface nestedCtor { +>nestedCtor : nestedCtor + + new (): nestedCtor; +>nestedCtor : nestedCtor +} +var nestedCtor: nestedCtor; +>nestedCtor : nestedCtor +>nestedCtor : nestedCtor + +// Construct expression with no parentheses for construct signature with 0 parameters +var a = new C0; +>a : C0 +>new C0 : C0 +>C0 : typeof C0 + +var a: C0; +>a : C0 +>C0 : C0 + + +// Generic construct expression with no parentheses +var c1 = new T; +>c1 : T<{}> +>new T : T<{}> +>T : typeof T + +var c1: T<{}>; +>c1 : T<{}> +>T : T + +// Construct expression where constructor is of type 'any' with no parentheses +var d = new anyCtor; +>d : any +>new anyCtor : any +>anyCtor : new () => any + +var d: any; +>d : any + +// Construct expression where constructor is of type 'any' with > 1 arg +var d = new anyCtor1(undefined); +>d : any +>new anyCtor1(undefined) : any +>anyCtor1 : new (n: any) => any +>undefined : undefined + +// Construct expression of type where apparent type has a construct signature with 0 arguments +function newFn1(s: T) { +>newFn1 : number>(s: T) => void +>T : T +>s : T +>T : T + + var p = new s; +>p : number +>new s : number +>s : T + + var p: number; +>p : number +} + +// Construct expression of type where apparent type has a construct signature with 1 arguments +function newFn2(s: T) { +>newFn2 : string>(s: T) => void +>T : T +>s : number +>s : T +>T : T + + var p = new s(32); +>p : string +>new s(32) : string +>s : T + + var p: string; +>p : string +} + +// Construct expression of void returning function +function fnVoid(): void { } +>fnVoid : () => void + +var t = new fnVoid(); +>t : any +>new fnVoid() : any +>fnVoid : () => void + +var t: any; +>t : any + +// Chained new expressions +var nested = new (new (new nestedCtor())())(); +>nested : nestedCtor +>new (new (new nestedCtor())())() : nestedCtor +>(new (new nestedCtor())()) : nestedCtor +>new (new nestedCtor())() : nestedCtor +>(new nestedCtor()) : nestedCtor +>new nestedCtor() : nestedCtor +>nestedCtor : nestedCtor + +var n = new nested(); +>n : nestedCtor +>new nested() : nestedCtor +>nested : nestedCtor + +var n = new nested(); +>n : nestedCtor +>new nested() : nestedCtor +>nested : nestedCtor + diff --git a/tests/baselines/reference/noCatchBlock.types b/tests/baselines/reference/noCatchBlock.types new file mode 100644 index 00000000000..cf7689660a3 --- /dev/null +++ b/tests/baselines/reference/noCatchBlock.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/noCatchBlock.ts === + +No type information for this code.try { +No type information for this code. // ... +No type information for this code.} finally { +No type information for this code. // N.B. No 'catch' block +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/noCollisionThisExpressionAndClassInGlobal.types b/tests/baselines/reference/noCollisionThisExpressionAndClassInGlobal.types new file mode 100644 index 00000000000..44e7155854c --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndClassInGlobal.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/noCollisionThisExpressionAndClassInGlobal.ts === +class _this { +>_this : _this +} +var f = () => _this; +>f : () => typeof _this +>() => _this : () => typeof _this +>_this : typeof _this + diff --git a/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInConstructor.types b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInConstructor.types new file mode 100644 index 00000000000..f9537974161 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInConstructor.types @@ -0,0 +1,52 @@ +=== tests/cases/compiler/noCollisionThisExpressionAndLocalVarInConstructor.ts === +class class1 { +>class1 : class1 + + constructor() { + var x2 = { +>x2 : { doStuff: (callback: any) => () => any; } +>{ doStuff: (callback) => () => { var _this = 2; return callback(_this); } } : { doStuff: (callback: any) => () => any; } + + doStuff: (callback) => () => { +>doStuff : (callback: any) => () => any +>(callback) => () => { var _this = 2; return callback(_this); } : (callback: any) => () => any +>callback : any +>() => { var _this = 2; return callback(_this); } : () => any + + var _this = 2; +>_this : number + + return callback(_this); +>callback(_this) : any +>callback : any +>_this : number + } + } + } +} + +class class2 { +>class2 : class2 + + constructor() { + var _this = 2; +>_this : number + + var x2 = { +>x2 : { doStuff: (callback: any) => () => any; } +>{ doStuff: (callback) => () => { return callback(_this); } } : { doStuff: (callback: any) => () => any; } + + doStuff: (callback) => () => { +>doStuff : (callback: any) => () => any +>(callback) => () => { return callback(_this); } : (callback: any) => () => any +>callback : any +>() => { return callback(_this); } : () => any + + return callback(_this); +>callback(_this) : any +>callback : any +>_this : number + } + } + } +} diff --git a/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInFunction.types b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInFunction.types new file mode 100644 index 00000000000..56f5701e912 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInFunction.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/noCollisionThisExpressionAndLocalVarInFunction.ts === +var console: { +>console : { log(val: any): any; } + + log(val: any); +>log : (val: any) => any +>val : any +} +function x() { +>x : () => void + + var _this = 5; +>_this : number + + x => { console.log(_this); }; +>x => { console.log(_this); } : (x: any) => void +>x : any +>console.log(_this) : any +>console.log : (val: any) => any +>console : { log(val: any): any; } +>log : (val: any) => any +>_this : number +} diff --git a/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInLambda.types b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInLambda.types new file mode 100644 index 00000000000..6cf4428bcc5 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInLambda.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/noCollisionThisExpressionAndLocalVarInLambda.ts === +declare function alert(message?: any): void; +>alert : (message?: any) => void +>message : any + +var x = { +>x : { doStuff: (callback: any) => () => any; } +>{ doStuff: (callback) => () => { var _this = 2; return callback(_this); }} : { doStuff: (callback: any) => () => any; } + + doStuff: (callback) => () => { +>doStuff : (callback: any) => () => any +>(callback) => () => { var _this = 2; return callback(_this); } : (callback: any) => () => any +>callback : any +>() => { var _this = 2; return callback(_this); } : () => any + + var _this = 2; +>_this : number + + return callback(_this); +>callback(_this) : any +>callback : any +>_this : number + } +} +alert(x.doStuff(x => alert(x))); +>alert(x.doStuff(x => alert(x))) : void +>alert : (message?: any) => void +>x.doStuff(x => alert(x)) : () => any +>x.doStuff : (callback: any) => () => any +>x : { doStuff: (callback: any) => () => any; } +>doStuff : (callback: any) => () => any +>x => alert(x) : (x: any) => void +>x : any +>alert(x) : void +>alert : (message?: any) => void +>x : any + diff --git a/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInMethod.types b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInMethod.types new file mode 100644 index 00000000000..cb543b33ad4 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInMethod.types @@ -0,0 +1,52 @@ +=== tests/cases/compiler/noCollisionThisExpressionAndLocalVarInMethod.ts === +var _this = 2; +>_this : number + +class a { +>a : a + + method1() { +>method1 : () => { doStuff: (callback: any) => () => any; } + + return { +>{ doStuff: (callback) => () => { var _this = 2; return callback(_this); } } : { doStuff: (callback: any) => () => any; } + + doStuff: (callback) => () => { +>doStuff : (callback: any) => () => any +>(callback) => () => { var _this = 2; return callback(_this); } : (callback: any) => () => any +>callback : any +>() => { var _this = 2; return callback(_this); } : () => any + + var _this = 2; +>_this : number + + return callback(_this); +>callback(_this) : any +>callback : any +>_this : number + } + } + } + method2() { +>method2 : () => { doStuff: (callback: any) => () => any; } + + var _this = 2; +>_this : number + + return { +>{ doStuff: (callback) => () => { return callback(_this); } } : { doStuff: (callback: any) => () => any; } + + doStuff: (callback) => () => { +>doStuff : (callback: any) => () => any +>(callback) => () => { return callback(_this); } : (callback: any) => () => any +>callback : any +>() => { return callback(_this); } : () => any + + return callback(_this); +>callback(_this) : any +>callback : any +>_this : number + } + } + } +} diff --git a/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInProperty.types b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInProperty.types new file mode 100644 index 00000000000..df4ad5113f2 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInProperty.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/noCollisionThisExpressionAndLocalVarInProperty.ts === +class class1 { +>class1 : class1 + + public prop1 = { +>prop1 : { doStuff: (callback: any) => () => any; } +>{ doStuff: (callback) => () => { var _this = 2; return callback(_this); } } : { doStuff: (callback: any) => () => any; } + + doStuff: (callback) => () => { +>doStuff : (callback: any) => () => any +>(callback) => () => { var _this = 2; return callback(_this); } : (callback: any) => () => any +>callback : any +>() => { var _this = 2; return callback(_this); } : () => any + + var _this = 2; +>_this : number + + return callback(_this); +>callback(_this) : any +>callback : any +>_this : number + } + } +} + +class class2 { +>class2 : class2 + + constructor() { + var _this = 2; +>_this : number + } + public prop1 = { +>prop1 : { doStuff: (callback: any) => () => any; } +>{ doStuff: (callback) => () => { return callback(10); } } : { doStuff: (callback: any) => () => any; } + + doStuff: (callback) => () => { +>doStuff : (callback: any) => () => any +>(callback) => () => { return callback(10); } : (callback: any) => () => any +>callback : any +>() => { return callback(10); } : () => any + + return callback(10); +>callback(10) : any +>callback : any + } + } +} diff --git a/tests/baselines/reference/noCollisionThisExpressionAndVarInGlobal.types b/tests/baselines/reference/noCollisionThisExpressionAndVarInGlobal.types new file mode 100644 index 00000000000..138062d58e5 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndVarInGlobal.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/noCollisionThisExpressionAndVarInGlobal.ts === +var _this = 1; +>_this : number + +var f = () => _this; +>f : () => number +>() => _this : () => number +>_this : number + diff --git a/tests/baselines/reference/noCollisionThisExpressionInFunctionAndVarInGlobal.types b/tests/baselines/reference/noCollisionThisExpressionInFunctionAndVarInGlobal.types new file mode 100644 index 00000000000..35a62c6f671 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionInFunctionAndVarInGlobal.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/noCollisionThisExpressionInFunctionAndVarInGlobal.ts === +var console: { +>console : { log(val: any): any; } + + log(val: any); +>log : (val: any) => any +>val : any +} +var _this = 5; +>_this : number + +function x() { +>x : () => void + + x => { console.log(this); }; +>x => { console.log(this); } : (x: any) => void +>x : any +>console.log(this) : any +>console.log : (val: any) => any +>console : { log(val: any): any; } +>log : (val: any) => any +>this : any +} diff --git a/tests/baselines/reference/noConstraintInReturnType1.types b/tests/baselines/reference/noConstraintInReturnType1.types new file mode 100644 index 00000000000..19a7529ac79 --- /dev/null +++ b/tests/baselines/reference/noConstraintInReturnType1.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/noConstraintInReturnType1.ts === +class List { +>List : List +>T : T + + static empty(): List { return null; } +>empty : () => List +>T : T +>List : List +>T : T +} + diff --git a/tests/baselines/reference/noDefaultLib.errors.txt b/tests/baselines/reference/noDefaultLib.errors.txt new file mode 100644 index 00000000000..2f411affd56 --- /dev/null +++ b/tests/baselines/reference/noDefaultLib.errors.txt @@ -0,0 +1,15 @@ +!!! Cannot find global type 'Boolean'. +!!! Cannot find global type 'IArguments'. +==== tests/cases/compiler/noDefaultLib.ts (1 errors) ==== + /// + var x; + + interface Array {} + ~~~~~ +!!! Global type 'Array' must have 1 type parameter(s). + interface String {} + interface Number {} + interface Object {} + interface Date {} + interface Function {} + interface RegExp {} \ No newline at end of file diff --git a/tests/baselines/reference/noDefaultLib.js b/tests/baselines/reference/noDefaultLib.js new file mode 100644 index 00000000000..69e7f3d0cfd --- /dev/null +++ b/tests/baselines/reference/noDefaultLib.js @@ -0,0 +1,15 @@ +//// [noDefaultLib.ts] +/// +var x; + +interface Array {} +interface String {} +interface Number {} +interface Object {} +interface Date {} +interface Function {} +interface RegExp {} + +//// [noDefaultLib.js] +/// +var x; diff --git a/tests/baselines/reference/noErrorsInCallback.js b/tests/baselines/reference/noErrorsInCallback.js index 7cae7858db7..cb6c4e41f8c 100644 --- a/tests/baselines/reference/noErrorsInCallback.js +++ b/tests/baselines/reference/noErrorsInCallback.js @@ -15,7 +15,7 @@ var Bar = (function () { } return Bar; })(); -var one = new Bar({}); +var one = new Bar({}); // Error [].forEach(function () { - var two = new Bar({}); + var two = new Bar({}); // No error? }); diff --git a/tests/baselines/reference/noImplicitAnyAndPrivateMembersWithoutTypeAnnotations.js b/tests/baselines/reference/noImplicitAnyAndPrivateMembersWithoutTypeAnnotations.js index 24425ff0d0c..5392b163477 100644 --- a/tests/baselines/reference/noImplicitAnyAndPrivateMembersWithoutTypeAnnotations.js +++ b/tests/baselines/reference/noImplicitAnyAndPrivateMembersWithoutTypeAnnotations.js @@ -13,4 +13,5 @@ var x = new Something(); //// [app.js] +/// var x = new Something(); diff --git a/tests/baselines/reference/noImplicitAnyAndPrivateMembersWithoutTypeAnnotations.types b/tests/baselines/reference/noImplicitAnyAndPrivateMembersWithoutTypeAnnotations.types new file mode 100644 index 00000000000..071d8a1aa88 --- /dev/null +++ b/tests/baselines/reference/noImplicitAnyAndPrivateMembersWithoutTypeAnnotations.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/app.ts === +/// +var x = new Something(); +>x : Something +>new Something() : Something +>Something : typeof Something + +=== tests/cases/compiler/test.d.ts === +declare class Something +>Something : Something +{ + private static someStaticVar; +>someStaticVar : any + + private someVar; +>someVar : any +} + diff --git a/tests/baselines/reference/noImplicitAnyForIn.js b/tests/baselines/reference/noImplicitAnyForIn.js index d60d08313ec..c8743936a9a 100644 --- a/tests/baselines/reference/noImplicitAnyForIn.js +++ b/tests/baselines/reference/noImplicitAnyForIn.js @@ -35,19 +35,23 @@ for (n[idx++] in m); var x = [[1, 2, 3], ["hello"]]; for (var i in x) { for (var j in x[i]) { + //Should yield an implicit 'any' error var _j = x[i][j]; } for (var k in x[0]) { var k1 = x[0]; + //Should yield an implicit 'any' error var k2 = k1[k]; } } for (var a in x) { + // Should yield an implicit 'any' error. var b; var c = a || b; } var idx = 0; var m = [1, 2, 3, 4, 5]; +// Should yield an implicit 'any' error. var n = [[]] || []; for (n[idx++] in m) ; diff --git a/tests/baselines/reference/noImplicitAnyForMethodParameters.js b/tests/baselines/reference/noImplicitAnyForMethodParameters.js index 2ddc8b3f86e..379cf85b5e2 100644 --- a/tests/baselines/reference/noImplicitAnyForMethodParameters.js +++ b/tests/baselines/reference/noImplicitAnyForMethodParameters.js @@ -19,13 +19,13 @@ var C = (function () { function C() { } C.prototype.foo = function (a) { - }; + }; // OK - non-ambient class and private method - error return C; })(); var D = (function () { function D() { } D.prototype.foo = function (a) { - }; + }; // OK - non-ambient class and public method - error return D; })(); diff --git a/tests/baselines/reference/noImplicitAnyInContextuallyTypesFunctionParamter.types b/tests/baselines/reference/noImplicitAnyInContextuallyTypesFunctionParamter.types new file mode 100644 index 00000000000..9ac1bcbbe8d --- /dev/null +++ b/tests/baselines/reference/noImplicitAnyInContextuallyTypesFunctionParamter.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/noImplicitAnyInContextuallyTypesFunctionParamter.ts === + +var regexMatchList = ['', '']; +>regexMatchList : string[] +>['', ''] : string[] + +regexMatchList.forEach(match => ''.replace(match, '')); +>regexMatchList.forEach(match => ''.replace(match, '')) : void +>regexMatchList.forEach : (callbackfn: (value: string, index: number, array: string[]) => void, thisArg?: any) => void +>regexMatchList : string[] +>forEach : (callbackfn: (value: string, index: number, array: string[]) => void, thisArg?: any) => void +>match => ''.replace(match, '') : (match: string) => string +>match : string +>''.replace(match, '') : string +>''.replace : { (searchValue: string, replaceValue: string): string; (searchValue: string, replaceValue: (substring: string, ...args: any[]) => string): string; (searchValue: RegExp, replaceValue: string): string; (searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string; } +>replace : { (searchValue: string, replaceValue: string): string; (searchValue: string, replaceValue: (substring: string, ...args: any[]) => string): string; (searchValue: RegExp, replaceValue: string): string; (searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string; } +>match : string + diff --git a/tests/baselines/reference/noImplicitAnyIndexing.js b/tests/baselines/reference/noImplicitAnyIndexing.js index 0e7bc3e328f..ebadbd9a121 100644 --- a/tests/baselines/reference/noImplicitAnyIndexing.js +++ b/tests/baselines/reference/noImplicitAnyIndexing.js @@ -54,14 +54,21 @@ var MyEmusEnum; (function (MyEmusEnum) { MyEmusEnum[MyEmusEnum["emu"] = 0] = "emu"; })(MyEmusEnum || (MyEmusEnum = {})); +// Should be okay; should be a string. var strRepresentation1 = MyEmusEnum[0]; +// Should be okay; should be a string. var strRepresentation2 = MyEmusEnum[0 /* emu */]; +// Should be implicit 'any' ; property access fails, no string indexer. var strRepresentation3 = MyEmusEnum["monehh"]; +// Should be okay; should be a MyEmusEnum var strRepresentation4 = MyEmusEnum["emu"]; +// Should report an implicit 'any'. var x = {}["hi"]; +// Should report an implicit 'any'. var y = {}[10]; var hi = "hi"; var emptyObj = {}; +// Should report an implicit 'any'. var z1 = emptyObj[hi]; var z2 = emptyObj[hi]; var m = { diff --git a/tests/baselines/reference/noImplicitAnyParametersInBareFunctions.js b/tests/baselines/reference/noImplicitAnyParametersInBareFunctions.js index cef6b8faa16..06848d7e89a 100644 --- a/tests/baselines/reference/noImplicitAnyParametersInBareFunctions.js +++ b/tests/baselines/reference/noImplicitAnyParametersInBareFunctions.js @@ -45,22 +45,29 @@ var f13 = (...r) => ""; var f14 = (x, ...r) => ""; //// [noImplicitAnyParametersInBareFunctions.js] +// No implicit-'any' errors. function f1() { } +// Implicit-'any' error for x. function f2(x) { } +// No implicit-'any' errors. function f3(x) { } +// Implicit-'any' errors for x, y, and z. function f4(x, y, z) { } +// Implicit-'any' errors for x, and z. function f5(x, y, z) { } +// Implicit-'any[]' error for r. function f6() { var r = []; for (var _i = 0; _i < arguments.length; _i++) { r[_i - 0] = arguments[_i]; } } +// Implicit-'any'/'any[]' errors for x, r. function f7(x) { var r = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -69,10 +76,15 @@ function f7(x) { } function f8(x3, y3) { } +// No implicit-'any' errors. var f9 = function () { return ""; }; +// Implicit-'any' errors for x. var f10 = function (x) { return ""; }; +// Implicit-'any' errors for x, y, and z. var f11 = function (x, y, z) { return ""; }; +// Implicit-'any' errors for x and z. var f12 = function (x, y, z) { return ""; }; +// Implicit-'any[]' error for r. var f13 = function () { var r = []; for (var _i = 0; _i < arguments.length; _i++) { @@ -80,6 +92,7 @@ var f13 = function () { } return ""; }; +// Implicit-'any'/'any[]' errors for x, r. var f14 = function (x) { var r = []; for (var _i = 1; _i < arguments.length; _i++) { diff --git a/tests/baselines/reference/noImplicitAnyParametersInClass.js b/tests/baselines/reference/noImplicitAnyParametersInClass.js index d5373319766..82164884b80 100644 --- a/tests/baselines/reference/noImplicitAnyParametersInClass.js +++ b/tests/baselines/reference/noImplicitAnyParametersInClass.js @@ -95,10 +95,15 @@ class C { //// [noImplicitAnyParametersInClass.js] var C = (function () { function C() { + // No implicit-'any' errors. this.pub_f9 = function () { return ""; }; + // Implicit-'any' errors for x. this.pub_f10 = function (x) { return ""; }; + // Implicit-'any' errors for x, y, and z. this.pub_f11 = function (x, y, z) { return ""; }; + // Implicit-'any' errors for x and z. this.pub_f12 = function (x, y, z) { return ""; }; + // Implicit-'any[]' error for r. this.pub_f13 = function () { var r = []; for (var _i = 0; _i < arguments.length; _i++) { @@ -106,6 +111,7 @@ var C = (function () { } return ""; }; + // Implicit-'any'/'any[]' errors for x, r. this.pub_f14 = function (x) { var r = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -113,10 +119,15 @@ var C = (function () { } return ""; }; + // No implicit-'any' errors. this.priv_f9 = function () { return ""; }; + // Implicit-'any' errors for x. this.priv_f10 = function (x) { return ""; }; + // Implicit-'any' errors for x, y, and z. this.priv_f11 = function (x, y, z) { return ""; }; + // Implicit-'any' errors for x and z. this.priv_f12 = function (x, y, z) { return ""; }; + // Implicit-'any[]' error for r. this.priv_f13 = function () { var r = []; for (var _i = 0; _i < arguments.length; _i++) { @@ -124,6 +135,7 @@ var C = (function () { } return ""; }; + // Implicit-'any'/'any[]' errors for x, r. this.priv_f14 = function (x) { var r = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -132,22 +144,29 @@ var C = (function () { return ""; }; } + // No implicit-'any' errors. C.prototype.pub_f1 = function () { }; + // Implicit-'any' errors for x. C.prototype.pub_f2 = function (x) { }; + // No implicit-'any' errors. C.prototype.pub_f3 = function (x) { }; + // Implicit-'any' errors for x, y, and z. C.prototype.pub_f4 = function (x, y, z) { }; + // Implicit-'any' errors for x, and z. C.prototype.pub_f5 = function (x, y, z) { }; + // Implicit-'any[]' errors for r. C.prototype.pub_f6 = function () { var r = []; for (var _i = 0; _i < arguments.length; _i++) { r[_i - 0] = arguments[_i]; } }; + // Implicit-'any'/'any[]' errors for x, r. C.prototype.pub_f7 = function (x) { var r = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -156,22 +175,30 @@ var C = (function () { }; C.prototype.pub_f8 = function (x3, y3) { }; + /////////////////////////////////////////// + // No implicit-'any' errors. C.prototype.priv_f1 = function () { }; + // Implicit-'any' errors for x. C.prototype.priv_f2 = function (x) { }; + // No implicit-'any' errors. C.prototype.priv_f3 = function (x) { }; + // Implicit-'any' errors for x, y, and z. C.prototype.priv_f4 = function (x, y, z) { }; + // Implicit-'any' errors for x, and z. C.prototype.priv_f5 = function (x, y, z) { }; + // Implicit-'any[]' errors for r. C.prototype.priv_f6 = function () { var r = []; for (var _i = 0; _i < arguments.length; _i++) { r[_i - 0] = arguments[_i]; } }; + // Implicit-'any'/'any[]' errors for x, r. C.prototype.priv_f7 = function (x) { var r = []; for (var _i = 1; _i < arguments.length; _i++) { diff --git a/tests/baselines/reference/noImplicitAnyParametersInModule.js b/tests/baselines/reference/noImplicitAnyParametersInModule.js index d606f8d2f53..fccb16cefa7 100644 --- a/tests/baselines/reference/noImplicitAnyParametersInModule.js +++ b/tests/baselines/reference/noImplicitAnyParametersInModule.js @@ -49,22 +49,29 @@ module M { //// [noImplicitAnyParametersInModule.js] var M; (function (M) { + // No implicit-'any' errors. function m_f1() { } + // Implicit-'any' error for x. function m_f2(x) { } + // No implicit-'any' errors. function m_f3(x) { } + // Implicit-'any' errors for x, y, and z. function m_f4(x, y, z) { } + // Implicit-'any' errors for x and z. function m_f5(x, y, z) { } + // Implicit-'any[]' error for r. function m_f6() { var r = []; for (var _i = 0; _i < arguments.length; _i++) { r[_i - 0] = arguments[_i]; } } + // Implicit-'any'/'any[]' errors for x and r. function m_f7(x) { var r = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -73,10 +80,15 @@ var M; } function m_f8(x3, y3) { } + // No implicit-'any' errors. var m_f9 = function () { return ""; }; + // Implicit-'any' error for x. var m_f10 = function (x) { return ""; }; + // Implicit-'any' errors for x, y, and z. var m_f11 = function (x, y, z) { return ""; }; + // Implicit-'any' errors for x and z. var m_f12 = function (x, y, z) { return ""; }; + // Implicit-'any[]' errors for r. var m_f13 = function () { var r = []; for (var _i = 0; _i < arguments.length; _i++) { @@ -84,6 +96,7 @@ var M; } return ""; }; + // Implicit-'any'/'any[]' errors for x and r. var m_f14 = function (x) { var r = []; for (var _i = 1; _i < arguments.length; _i++) { diff --git a/tests/baselines/reference/noImplicitAnyWithOverloads.js b/tests/baselines/reference/noImplicitAnyWithOverloads.js index e0eba16dacf..3bce6e18ba3 100644 --- a/tests/baselines/reference/noImplicitAnyWithOverloads.js +++ b/tests/baselines/reference/noImplicitAnyWithOverloads.js @@ -14,4 +14,4 @@ function callb(a) { } callb(function (a) { a.foo; -}); +}); // error, chose first overload diff --git a/tests/baselines/reference/noSelfOnVars.types b/tests/baselines/reference/noSelfOnVars.types new file mode 100644 index 00000000000..8a059d8bc60 --- /dev/null +++ b/tests/baselines/reference/noSelfOnVars.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/noSelfOnVars.ts === +function foo() { +>foo : () => void + + function bar() { } +>bar : () => void + + var x = bar; +>x : () => void +>bar : () => void +} + + + diff --git a/tests/baselines/reference/nominalSubtypeCheckOfTypeParameter.types b/tests/baselines/reference/nominalSubtypeCheckOfTypeParameter.types new file mode 100644 index 00000000000..79b2ac77d78 --- /dev/null +++ b/tests/baselines/reference/nominalSubtypeCheckOfTypeParameter.types @@ -0,0 +1,61 @@ +=== tests/cases/conformance/types/typeRelationships/recursiveTypes/nominalSubtypeCheckOfTypeParameter.ts === +interface Tuple { +>Tuple : Tuple +>T : T +>S : S + + first: T +>first : T +>T : T + + second: S +>second : S +>S : S +} + +interface Sequence { +>Sequence : Sequence +>T : T + + hasNext(): boolean +>hasNext : () => boolean + + pop(): T +>pop : () => T +>T : T + + zip(seq: Sequence): Sequence> +>zip : (seq: Sequence) => Sequence> +>S : S +>seq : Sequence +>Sequence : Sequence +>S : S +>Sequence : Sequence +>Tuple : Tuple +>T : T +>S : S +} + +// error, despite the fact that the code explicitly says List extends Sequence, the current rules for infinitely expanding type references +// perform nominal subtyping checks that allow variance for type arguments, but not nominal subtyping for the generic type itself +interface List extends Sequence { +>List : List +>T : T +>Sequence : Sequence +>T : T + + getLength(): number +>getLength : () => number + + zip(seq: Sequence): List> +>zip : (seq: Sequence) => List> +>S : S +>seq : Sequence +>Sequence : Sequence +>S : S +>List : List +>Tuple : Tuple +>T : T +>S : S +} + diff --git a/tests/baselines/reference/nominalSubtypeCheckOfTypeParameter2.types b/tests/baselines/reference/nominalSubtypeCheckOfTypeParameter2.types new file mode 100644 index 00000000000..31549cd59c9 --- /dev/null +++ b/tests/baselines/reference/nominalSubtypeCheckOfTypeParameter2.types @@ -0,0 +1,55 @@ +=== tests/cases/conformance/types/typeRelationships/recursiveTypes/nominalSubtypeCheckOfTypeParameter2.ts === +interface B { +>B : B +>T : T + + bar: T; +>bar : T +>T : T +} + +// ok +interface A extends B { +>A : A +>T : T +>B : B +>T : T + + foo: T; +>foo : T +>T : T +} + +// ok +interface A2 extends B> { +>A2 : A2 +>T : T +>B : B +>B : B + + baz: T; +>baz : T +>T : T +} + +interface C { +>C : C +>T : T + + bam: T; +>bam : T +>T : T +} + +// ok +interface A3 extends B> { +>A3 : A3 +>T : T +>B : B +>C : C +>T : T + + bing: T; +>bing : T +>T : T +} diff --git a/tests/baselines/reference/nonConflictingRecursiveBaseTypeMembers.types b/tests/baselines/reference/nonConflictingRecursiveBaseTypeMembers.types new file mode 100644 index 00000000000..aa01b508764 --- /dev/null +++ b/tests/baselines/reference/nonConflictingRecursiveBaseTypeMembers.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/nonConflictingRecursiveBaseTypeMembers.ts === +interface A { +>A : A +>T : T + + x: C +>x : C +>C : C +>T : T +} + +interface B { +>B : B +>T : T + + x: C +>x : C +>C : C +>T : T +} + +interface C extends A, B { } // Should not be an error +>C : C +>T : T +>A : A +>T : T +>B : B +>T : T + diff --git a/tests/baselines/reference/nonContextuallyTypedLogicalOr.js b/tests/baselines/reference/nonContextuallyTypedLogicalOr.js index 765b83e4091..a29390bcf7f 100644 --- a/tests/baselines/reference/nonContextuallyTypedLogicalOr.js +++ b/tests/baselines/reference/nonContextuallyTypedLogicalOr.js @@ -19,4 +19,6 @@ var e: Ellement; //// [nonContextuallyTypedLogicalOr.js] var c; var e; +// This should error. Even though we are contextually typing e with Contextual, the RHS still +// needs to be a supertype of the LHS to win as the best common type. (c || e).dummy; diff --git a/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.js b/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.js index a5254b5ffff..560c8c3cbd7 100644 --- a/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.js +++ b/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.js @@ -23,4 +23,4 @@ var Bar = (function (_super) { _super.apply(this, arguments); } return Bar; -})(Foo); +})(Foo); // Valid diff --git a/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types b/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types new file mode 100644 index 00000000000..177becac643 --- /dev/null +++ b/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/nonGenericClassExtendingGenericClassWithAny.ts === +class Foo { +>Foo : Foo +>T : T + + t: T; +>t : T +>T : T +} + +class Bar extends Foo { } // Valid +>Bar : Bar +>Foo : Foo + diff --git a/tests/baselines/reference/nonInstantiatedModule.js b/tests/baselines/reference/nonInstantiatedModule.js index 1284b38fe16..cf69d5b1bf6 100644 --- a/tests/baselines/reference/nonInstantiatedModule.js +++ b/tests/baselines/reference/nonInstantiatedModule.js @@ -50,6 +50,7 @@ var M; (function (M) { M.a = 1; })(M || (M = {})); +// primary expression var m; var m = M; var a1; diff --git a/tests/baselines/reference/nonInstantiatedModule.types b/tests/baselines/reference/nonInstantiatedModule.types new file mode 100644 index 00000000000..1093fbd0653 --- /dev/null +++ b/tests/baselines/reference/nonInstantiatedModule.types @@ -0,0 +1,111 @@ +=== tests/cases/conformance/internalModules/moduleDeclarations/nonInstantiatedModule.ts === +module M { +>M : typeof M + + export interface Point { x: number; y: number } +>Point : Point +>x : number +>y : number + + export var a = 1; +>a : number +} + +// primary expression +var m : typeof M; +>m : typeof M +>M : typeof M + +var m = M; +>m : typeof M +>M : typeof M + +var a1: number; +>a1 : number + +var a1 = M.a; +>a1 : number +>M.a : number +>M : typeof M +>a : number + +var a2: number; +>a2 : number + +var a2 = m.a; +>a2 : number +>m.a : number +>m : typeof M +>a : number + +module M2 { +>M2 : typeof M2 + + export module Point { +>Point : typeof Point + + export function Origin(): Point { +>Origin : () => Point +>Point : Point + + return { x: 0, y: 0 }; +>{ x: 0, y: 0 } : { x: number; y: number; } +>x : number +>y : number + } + } + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + } +} + +var p: { x: number; y: number; }; +>p : { x: number; y: number; } +>x : number +>y : number + +var p: M2.Point; +>p : { x: number; y: number; } +>M2 : unknown +>Point : M2.Point + +var p2: { Origin() : { x: number; y: number; } }; +>p2 : { Origin(): { x: number; y: number; }; } +>Origin : () => { x: number; y: number; } +>x : number +>y : number + +var p2: typeof M2.Point; +>p2 : { Origin(): { x: number; y: number; }; } +>M2 : typeof M2 +>Point : typeof M2.Point + +module M3 { +>M3 : typeof M3 + + export module Utils { +>Utils : typeof Utils + + export interface Point { +>Point : Point + + x: number; y: number; +>x : number +>y : number + } + } + + export class Utils { +>Utils : Utils + + name: string; +>name : string + } +} diff --git a/tests/baselines/reference/null.types b/tests/baselines/reference/null.types new file mode 100644 index 00000000000..0614b5efec4 --- /dev/null +++ b/tests/baselines/reference/null.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/null.ts === +var x=null; +>x : any + +var y=3+x; +>y : any +>3+x : any +>x : any + +var z=3+null; +>z : number +>3+null : number + +class C { +>C : C +} +function f() { +>f : () => C + + return null; + return new C(); +>new C() : C +>C : typeof C +} +function g() { +>g : () => number + + return null; + return 3; +} +interface I { +>I : I + + x:any; +>x : any + + y:number; +>y : number +} +var w:I={x:null,y:3}; +>w : I +>I : I +>{x:null,y:3} : { x: null; y: number; } +>x : any +>y : number + + + diff --git a/tests/baselines/reference/nullAssignableToEveryType.types b/tests/baselines/reference/nullAssignableToEveryType.types new file mode 100644 index 00000000000..aaf3b3bd8c5 --- /dev/null +++ b/tests/baselines/reference/nullAssignableToEveryType.types @@ -0,0 +1,131 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/nullAssignableToEveryType.ts === +class C { +>C : C + + foo: string; +>foo : string +} +var ac: C; +>ac : C +>C : C + +interface I { +>I : I + + foo: string; +>foo : string +} +var ai: I; +>ai : I +>I : I + +enum E { A } +>E : E +>A : E + +var ae: E; +>ae : E +>E : E + +var b: number = null; +>b : number + +var c: string = null; +>c : string + +var d: boolean = null; +>d : boolean + +var e: Date = null; +>e : Date +>Date : Date + +var f: any = null; +>f : any + +var g: void = null; +>g : void + +var h: Object = null; +>h : Object +>Object : Object + +var i: {} = null; +>i : {} + +var j: () => {} = null; +>j : () => {} + +var k: Function = null; +>k : Function +>Function : Function + +var l: (x: number) => string = null; +>l : (x: number) => string +>x : number + +ac = null; +>ac = null : null +>ac : C + +ai = null; +>ai = null : null +>ai : I + +ae = null; +>ae = null : null +>ae : E + +var m: number[] = null; +>m : number[] + +var n: { foo: string } = null; +>n : { foo: string; } +>foo : string + +var o: (x: T) => T = null; +>o : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var p: Number = null; +>p : Number +>Number : Number + +var q: String = null; +>q : String +>String : String + +function foo(x: T, y: U, z: V) { +>foo : (x: T, y: U, z: V) => void +>T : T +>U : U +>V : V +>Date : Date +>x : T +>T : T +>y : U +>U : U +>z : V +>V : V + + x = null; +>x = null : null +>x : T + + y = null; +>y = null : null +>y : U + + z = null; +>z = null : null +>z : V +} + +//function foo(x: T, y: U, z: V) { +// x = null; +// y = null; +// z = null; +//} diff --git a/tests/baselines/reference/nullAssignedToUndefined.js b/tests/baselines/reference/nullAssignedToUndefined.js index b91acd88c00..a4123a4c595 100644 --- a/tests/baselines/reference/nullAssignedToUndefined.js +++ b/tests/baselines/reference/nullAssignedToUndefined.js @@ -3,5 +3,5 @@ var x = undefined = null; // error var y: typeof undefined = null; // ok, widened //// [nullAssignedToUndefined.js] -var x = undefined = null; -var y = null; +var x = undefined = null; // error +var y = null; // ok, widened diff --git a/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.js b/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.js index c7f31731d0e..717c364d52c 100644 --- a/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.js +++ b/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.js @@ -92,6 +92,7 @@ var r20 = true ? null : {}; //// [nullIsSubtypeOfEverythingButUndefined.js] +// null is a subtype of any other types except undefined var r0 = true ? null : null; var r0 = true ? null : null; var u; @@ -118,7 +119,7 @@ var r8 = true ? function (x) { } : null; var r8b = true ? null : function (x) { return x; -}; +}; // type parameters not identical across declarations var i1; var r9 = true ? i1 : null; var r9 = true ? null : i1; @@ -175,6 +176,10 @@ function f18(x) { var r18 = true ? x : null; var r18 = true ? null : x; } +//function f18(x: U) { +// var r18 = true ? x : null; +// var r18 = true ? null : x; +//} var r19 = true ? new Object() : null; var r19 = true ? null : new Object(); var r20 = true ? {} : null; diff --git a/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.types b/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.types new file mode 100644 index 00000000000..aa81f87bed6 --- /dev/null +++ b/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.types @@ -0,0 +1,301 @@ +=== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/nullIsSubtypeOfEverythingButUndefined.ts === +// null is a subtype of any other types except undefined + +var r0 = true ? null : null; +>r0 : any +>true ? null : null : null + +var r0 = true ? null : null; +>r0 : any +>true ? null : null : null + +var u: typeof undefined; +>u : any +>undefined : undefined + +var r0b = true ? u : null; +>r0b : any +>true ? u : null : any +>u : any + +var r0b = true ? null : u; +>r0b : any +>true ? null : u : any +>u : any + +var r1 = true ? 1 : null; +>r1 : number +>true ? 1 : null : number + +var r1 = true ? null : 1; +>r1 : number +>true ? null : 1 : number + +var r2 = true ? '' : null; +>r2 : string +>true ? '' : null : string + +var r2 = true ? null : ''; +>r2 : string +>true ? null : '' : string + +var r3 = true ? true : null; +>r3 : boolean +>true ? true : null : boolean + +var r3 = true ? null : true; +>r3 : boolean +>true ? null : true : boolean + +var r4 = true ? new Date() : null; +>r4 : Date +>true ? new Date() : null : Date +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +var r4 = true ? null : new Date(); +>r4 : Date +>true ? null : new Date() : Date +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +var r5 = true ? /1/ : null; +>r5 : RegExp +>true ? /1/ : null : RegExp + +var r5 = true ? null : /1/; +>r5 : RegExp +>true ? null : /1/ : RegExp + +var r6 = true ? { foo: 1 } : null; +>r6 : { foo: number; } +>true ? { foo: 1 } : null : { foo: number; } +>{ foo: 1 } : { foo: number; } +>foo : number + +var r6 = true ? null : { foo: 1 }; +>r6 : { foo: number; } +>true ? null : { foo: 1 } : { foo: number; } +>{ foo: 1 } : { foo: number; } +>foo : number + +var r7 = true ? () => { } : null; +>r7 : () => void +>true ? () => { } : null : () => void +>() => { } : () => void + +var r7 = true ? null : () => { }; +>r7 : () => void +>true ? null : () => { } : () => void +>() => { } : () => void + +var r8 = true ? (x: T) => { return x } : null; +>r8 : (x: T) => T +>true ? (x: T) => { return x } : null : (x: T) => T +>(x: T) => { return x } : (x: T) => T +>T : T +>x : T +>T : T +>x : T + +var r8b = true ? null : (x: T) => { return x }; // type parameters not identical across declarations +>r8b : (x: T) => T +>true ? null : (x: T) => { return x } : (x: T) => T +>(x: T) => { return x } : (x: T) => T +>T : T +>x : T +>T : T +>x : T + +interface I1 { foo: number; } +>I1 : I1 +>foo : number + +var i1: I1; +>i1 : I1 +>I1 : I1 + +var r9 = true ? i1 : null; +>r9 : I1 +>true ? i1 : null : I1 +>i1 : I1 + +var r9 = true ? null : i1; +>r9 : I1 +>true ? null : i1 : I1 +>i1 : I1 + +class C1 { foo: number; } +>C1 : C1 +>foo : number + +var c1: C1; +>c1 : C1 +>C1 : C1 + +var r10 = true ? c1 : null; +>r10 : C1 +>true ? c1 : null : C1 +>c1 : C1 + +var r10 = true ? null : c1; +>r10 : C1 +>true ? null : c1 : C1 +>c1 : C1 + +class C2 { foo: T; } +>C2 : C2 +>T : T +>foo : T +>T : T + +var c2: C2; +>c2 : C2 +>C2 : C2 + +var r12 = true ? c2 : null; +>r12 : C2 +>true ? c2 : null : C2 +>c2 : C2 + +var r12 = true ? null : c2; +>r12 : C2 +>true ? null : c2 : C2 +>c2 : C2 + +enum E { A } +>E : E +>A : E + +var r13 = true ? E : null; +>r13 : typeof E +>true ? E : null : typeof E +>E : typeof E + +var r13 = true ? null : E; +>r13 : typeof E +>true ? null : E : typeof E +>E : typeof E + +var r14 = true ? E.A : null; +>r14 : E +>true ? E.A : null : E +>E.A : E +>E : typeof E +>A : E + +var r14 = true ? null : E.A; +>r14 : E +>true ? null : E.A : E +>E.A : E +>E : typeof E +>A : E + +function f() { } +>f : typeof f + +module f { +>f : typeof f + + export var bar = 1; +>bar : number +} +var af: typeof f; +>af : typeof f +>f : typeof f + +var r15 = true ? af : null; +>r15 : typeof f +>true ? af : null : typeof f +>af : typeof f + +var r15 = true ? null : af; +>r15 : typeof f +>true ? null : af : typeof f +>af : typeof f + +class c { baz: string } +>c : c +>baz : string + +module c { +>c : typeof c + + export var bar = 1; +>bar : number +} +var ac: typeof c; +>ac : typeof c +>c : typeof c + +var r16 = true ? ac : null; +>r16 : typeof c +>true ? ac : null : typeof c +>ac : typeof c + +var r16 = true ? null : ac; +>r16 : typeof c +>true ? null : ac : typeof c +>ac : typeof c + +function f17(x: T) { +>f17 : (x: T) => void +>T : T +>x : T +>T : T + + var r17 = true ? x : null; +>r17 : T +>true ? x : null : T +>x : T + + var r17 = true ? null : x; +>r17 : T +>true ? null : x : T +>x : T +} + +function f18(x: U) { +>f18 : (x: U) => void +>T : T +>U : U +>x : U +>U : U + + var r18 = true ? x : null; +>r18 : U +>true ? x : null : U +>x : U + + var r18 = true ? null : x; +>r18 : U +>true ? null : x : U +>x : U +} +//function f18(x: U) { +// var r18 = true ? x : null; +// var r18 = true ? null : x; +//} + +var r19 = true ? new Object() : null; +>r19 : Object +>true ? new Object() : null : Object +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + +var r19 = true ? null : new Object(); +>r19 : Object +>true ? null : new Object() : Object +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + +var r20 = true ? {} : null; +>r20 : {} +>true ? {} : null : {} +>{} : {} + +var r20 = true ? null : {}; +>r20 : {} +>true ? null : {} : {} +>{} : {} + diff --git a/tests/baselines/reference/numberAsInLHS.types b/tests/baselines/reference/numberAsInLHS.types new file mode 100644 index 00000000000..823e3e0354d --- /dev/null +++ b/tests/baselines/reference/numberAsInLHS.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/numberAsInLHS.ts === +3 in [0, 1] +>3 in [0, 1] : boolean +>[0, 1] : number[] + diff --git a/tests/baselines/reference/numberAssignableToEnum.types b/tests/baselines/reference/numberAssignableToEnum.types new file mode 100644 index 00000000000..b7b75b5dc5c --- /dev/null +++ b/tests/baselines/reference/numberAssignableToEnum.types @@ -0,0 +1,22 @@ +=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/numberAssignableToEnum.ts === +enum E { A } +>E : E +>A : E + +var n: number; +>n : number + +var e: E; +>e : E +>E : E + +e = n; +>e = n : number +>e : E +>n : number + +n = e; +>n = e : E +>n : number +>e : E + diff --git a/tests/baselines/reference/numberOnLeftSideOfInExpression.types b/tests/baselines/reference/numberOnLeftSideOfInExpression.types new file mode 100644 index 00000000000..0b15c0aefee --- /dev/null +++ b/tests/baselines/reference/numberOnLeftSideOfInExpression.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/numberOnLeftSideOfInExpression.ts === +var left: number; +>left : number + +var right: any; +>right : any + +left in right; +>left in right : boolean +>left : number +>right : any + diff --git a/tests/baselines/reference/numberPropertyAccess.types b/tests/baselines/reference/numberPropertyAccess.types new file mode 100644 index 00000000000..fd554e95ace --- /dev/null +++ b/tests/baselines/reference/numberPropertyAccess.types @@ -0,0 +1,30 @@ +=== tests/cases/conformance/types/primitives/number/numberPropertyAccess.ts === +var x = 1; +>x : number + +var a = x.toExponential(); +>a : string +>x.toExponential() : string +>x.toExponential : (fractionDigits?: number) => string +>x : number +>toExponential : (fractionDigits?: number) => string + +var b = x.hasOwnProperty('toFixed'); +>b : boolean +>x.hasOwnProperty('toFixed') : boolean +>x.hasOwnProperty : (v: string) => boolean +>x : number +>hasOwnProperty : (v: string) => boolean + +var c = x['toExponential'](); +>c : string +>x['toExponential']() : string +>x['toExponential'] : (fractionDigits?: number) => string +>x : number + +var d = x['hasOwnProperty']('toFixed'); +>d : boolean +>x['hasOwnProperty']('toFixed') : boolean +>x['hasOwnProperty'] : (v: string) => boolean +>x : number + diff --git a/tests/baselines/reference/numberToString.js b/tests/baselines/reference/numberToString.js index 52ac05b3423..882a3653f52 100644 --- a/tests/baselines/reference/numberToString.js +++ b/tests/baselines/reference/numberToString.js @@ -13,10 +13,10 @@ f2(3+""); // ok + operator promotes //// [numberToString.js] function f1(n) { - return n; + return n; // error return type mismatch } function f2(s) { } f1(3); -f2(3); -f2(3 + ""); +f2(3); // error no coercion to string +f2(3 + ""); // ok + operator promotes diff --git a/tests/baselines/reference/numericIndexExpressions.js b/tests/baselines/reference/numericIndexExpressions.js index c7c636293ac..ca7cbd8043f 100644 --- a/tests/baselines/reference/numericIndexExpressions.js +++ b/tests/baselines/reference/numericIndexExpressions.js @@ -17,8 +17,8 @@ y[1] = 4; // should be error //// [numericIndexExpressions.js] var x; -x[1] = 4; -x['1'] = 4; +x[1] = 4; // error +x['1'] = 4; // error var y; -y['1'] = 4; -y[1] = 4; +y['1'] = 4; // should be error +y[1] = 4; // should be error diff --git a/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations2.js b/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations2.js index 16b5c0f1470..1cfd94a0c97 100644 --- a/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations2.js +++ b/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations2.js @@ -46,6 +46,7 @@ var b: { [x: number]: A } = { } //// [numericIndexerConstrainsPropertyDeclarations2.js] +// String indexer providing a constraint of a user defined type var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } @@ -76,6 +77,7 @@ var Foo = (function () { return Foo; })(); var a; +// error var b = { 1.0: new A(), 2.0: new B(), diff --git a/tests/baselines/reference/numericIndexerConstraint1.js b/tests/baselines/reference/numericIndexerConstraint1.js index e587ed6753c..9587863a035 100644 --- a/tests/baselines/reference/numericIndexerConstraint1.js +++ b/tests/baselines/reference/numericIndexerConstraint1.js @@ -13,4 +13,4 @@ var Foo = (function () { return Foo; })(); var x; -var result = x["one"]; +var result = x["one"]; // error diff --git a/tests/baselines/reference/numericIndexerConstraint3.types b/tests/baselines/reference/numericIndexerConstraint3.types new file mode 100644 index 00000000000..2e249c89b8c --- /dev/null +++ b/tests/baselines/reference/numericIndexerConstraint3.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/numericIndexerConstraint3.ts === +class A { +>A : A + + foo: number; +>foo : number +} + +class B extends A { +>B : B +>A : A + + bar: string; +>bar : string +} + +class C { +>C : C + + 0: B; +>B : B + + [x: number]: A; +>x : number +>A : A +} diff --git a/tests/baselines/reference/numericIndexerConstraint4.types b/tests/baselines/reference/numericIndexerConstraint4.types new file mode 100644 index 00000000000..f0004e52b45 --- /dev/null +++ b/tests/baselines/reference/numericIndexerConstraint4.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/numericIndexerConstraint4.ts === +class A { +>A : A + + foo: number; +>foo : number +} + +class B extends A { +>B : B +>A : A + + bar: string; +>bar : string +} + +var x: { +>x : { [x: number]: A; } + + [idx: number]: A; +>idx : number +>A : A + +} = { data: new B() } +>{ data: new B() } : { [x: number]: A; data: B; } +>data : B +>new B() : B +>B : typeof B + diff --git a/tests/baselines/reference/numericIndexerTyping1.js b/tests/baselines/reference/numericIndexerTyping1.js index 7e4a1f07de5..252e05fa341 100644 --- a/tests/baselines/reference/numericIndexerTyping1.js +++ b/tests/baselines/reference/numericIndexerTyping1.js @@ -14,6 +14,6 @@ var r2: string = i2[1]; // error: numeric indexer returns the type of the string //// [numericIndexerTyping1.js] var i; -var r = i[1]; +var r = i[1]; // error: numeric indexer returns the type of the string indexer var i2; -var r2 = i2[1]; +var r2 = i2[1]; // error: numeric indexer returns the type of the string indexer diff --git a/tests/baselines/reference/numericIndexerTyping2.js b/tests/baselines/reference/numericIndexerTyping2.js index 6e6a9396be1..424f56b6214 100644 --- a/tests/baselines/reference/numericIndexerTyping2.js +++ b/tests/baselines/reference/numericIndexerTyping2.js @@ -32,6 +32,6 @@ var I2 = (function (_super) { return I2; })(I); var i; -var r = i[1]; +var r = i[1]; // error: numeric indexer returns the type of the string indexer var i2; -var r2 = i2[1]; +var r2 = i2[1]; // error: numeric indexer returns the type of the string indexere diff --git a/tests/baselines/reference/numericIndexingResults.types b/tests/baselines/reference/numericIndexingResults.types new file mode 100644 index 00000000000..e68a083bb74 --- /dev/null +++ b/tests/baselines/reference/numericIndexingResults.types @@ -0,0 +1,199 @@ +=== tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexingResults.ts === +class C { +>C : C + + [x: number]: string; +>x : number + + 1 = ''; + "2" = '' +} + +var c: C; +>c : C +>C : C + +var r1 = c['1']; +>r1 : string +>c['1'] : string +>c : C + +var r2 = c['2']; +>r2 : string +>c['2'] : string +>c : C + +var r3 = c['3']; +>r3 : any +>c['3'] : any +>c : C + +var r4 = c[1]; +>r4 : string +>c[1] : string +>c : C + +var r5 = c[2]; +>r5 : string +>c[2] : string +>c : C + +var r6 = c[3]; +>r6 : string +>c[3] : string +>c : C + +interface I { +>I : I + + [x: number]: string; +>x : number + + 1: string; + "2": string; +} + +var i: I +>i : I +>I : I + +var r1 = i['1']; +>r1 : string +>i['1'] : string +>i : I + +var r2 = i['2']; +>r2 : string +>i['2'] : string +>i : I + +var r3 = i['3']; +>r3 : any +>i['3'] : any +>i : I + +var r4 = i[1]; +>r4 : string +>i[1] : string +>i : I + +var r5 = i[2]; +>r5 : string +>i[2] : string +>i : I + +var r6 = i[3]; +>r6 : string +>i[3] : string +>i : I + +var a: { +>a : { [x: number]: string; 1: string; "2": string; } + + [x: number]: string; +>x : number + + 1: string; + "2": string; +} + +var r1 = a['1']; +>r1 : string +>a['1'] : string +>a : { [x: number]: string; 1: string; "2": string; } + +var r2 = a['2']; +>r2 : string +>a['2'] : string +>a : { [x: number]: string; 1: string; "2": string; } + +var r3 = a['3']; +>r3 : any +>a['3'] : any +>a : { [x: number]: string; 1: string; "2": string; } + +var r4 = a[1]; +>r4 : string +>a[1] : string +>a : { [x: number]: string; 1: string; "2": string; } + +var r5 = a[2]; +>r5 : string +>a[2] : string +>a : { [x: number]: string; 1: string; "2": string; } + +var r6 = a[3]; +>r6 : string +>a[3] : string +>a : { [x: number]: string; 1: string; "2": string; } + +var b: { [x: number]: string } = { 1: '', "2": '' } +>b : { [x: number]: string; } +>x : number +>{ 1: '', "2": '' } : { [x: number]: string; 1: string; "2": string; } + +var r1a = b['1']; +>r1a : any +>b['1'] : any +>b : { [x: number]: string; } + +var r2a = b['2']; +>r2a : any +>b['2'] : any +>b : { [x: number]: string; } + +var r3 = b['3']; +>r3 : any +>b['3'] : any +>b : { [x: number]: string; } + +var r4 = b[1]; +>r4 : string +>b[1] : string +>b : { [x: number]: string; } + +var r5 = b[2]; +>r5 : string +>b[2] : string +>b : { [x: number]: string; } + +var r6 = b[3]; +>r6 : string +>b[3] : string +>b : { [x: number]: string; } + +var b2: { [x: number]: string; 1: string; "2": string; } = { 1: '', "2": '' } +>b2 : { [x: number]: string; 1: string; "2": string; } +>x : number +>{ 1: '', "2": '' } : { [x: number]: string; 1: string; "2": string; } + +var r1b = b2['1']; +>r1b : string +>b2['1'] : string +>b2 : { [x: number]: string; 1: string; "2": string; } + +var r2b = b2['2']; +>r2b : string +>b2['2'] : string +>b2 : { [x: number]: string; 1: string; "2": string; } + +var r3 = b2['3']; +>r3 : any +>b2['3'] : any +>b2 : { [x: number]: string; 1: string; "2": string; } + +var r4 = b2[1]; +>r4 : string +>b2[1] : string +>b2 : { [x: number]: string; 1: string; "2": string; } + +var r5 = b2[2]; +>r5 : string +>b2[2] : string +>b2 : { [x: number]: string; 1: string; "2": string; } + +var r6 = b2[3]; +>r6 : string +>b2[3] : string +>b2 : { [x: number]: string; 1: string; "2": string; } + diff --git a/tests/baselines/reference/numericMethodName1.types b/tests/baselines/reference/numericMethodName1.types new file mode 100644 index 00000000000..09d63f04e13 --- /dev/null +++ b/tests/baselines/reference/numericMethodName1.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/numericMethodName1.ts === +class C { +>C : C + + 1 = 2; +} + diff --git a/tests/baselines/reference/numericStringNamedPropertyEquivalence.js b/tests/baselines/reference/numericStringNamedPropertyEquivalence.js index 476dd22b355..9f141f6dd1c 100644 --- a/tests/baselines/reference/numericStringNamedPropertyEquivalence.js +++ b/tests/baselines/reference/numericStringNamedPropertyEquivalence.js @@ -24,6 +24,8 @@ var b = { } //// [numericStringNamedPropertyEquivalence.js] +// Each of these types has an error in it. +// String named and numeric named properties conflict if they would be equivalent after ToNumber on the property name. var C = (function () { function C() { } diff --git a/tests/baselines/reference/objectCreationOfElementAccessExpression.js b/tests/baselines/reference/objectCreationOfElementAccessExpression.js index d5430dd52e5..f3c5760ae63 100644 --- a/tests/baselines/reference/objectCreationOfElementAccessExpression.js +++ b/tests/baselines/reference/objectCreationOfElementAccessExpression.js @@ -134,5 +134,6 @@ var Slug = (function () { } return Slug; })(); +// ElementAccessExpressions can only contain one expression. There should be a parse error here. var foods = new PetFood[new IceCream('Mint chocolate chip'), Cookie('Chocolate chip', false), new Cookie('Peanut butter', true)]; var foods2 = new PetFood[new IceCream('Mint chocolate chip'), Cookie('Chocolate chip', false), new Cookie('Peanut butter', true)]; diff --git a/tests/baselines/reference/objectIndexer.types b/tests/baselines/reference/objectIndexer.types new file mode 100644 index 00000000000..a2a7f99cf5d --- /dev/null +++ b/tests/baselines/reference/objectIndexer.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/objectIndexer.ts === +export interface Callback { +>Callback : Callback + + (value: any): void; +>value : any +} + +interface IMap { +>IMap : IMap + + [s: string]: Callback; +>s : string +>Callback : Callback +} + +class Emitter { +>Emitter : Emitter + + private listeners: IMap; +>listeners : IMap +>IMap : IMap + + constructor () { + this.listeners = {}; +>this.listeners = {} : { [x: string]: Callback; } +>this.listeners : IMap +>this : Emitter +>listeners : IMap +>{} : { [x: string]: Callback; } + } +} + diff --git a/tests/baselines/reference/objectLitGetterSetter.types b/tests/baselines/reference/objectLitGetterSetter.types new file mode 100644 index 00000000000..2215f60d889 --- /dev/null +++ b/tests/baselines/reference/objectLitGetterSetter.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/objectLitGetterSetter.ts === + var obj = {}; +>obj : {} +>{} : {} + + Object.defineProperty(obj, "accProperty", ({ +>Object.defineProperty(obj, "accProperty", ({ get: function () { eval("public = 1;"); return 11; }, set: function (v) { } })) : any +>Object.defineProperty : (o: any, p: string, attributes: PropertyDescriptor) => any +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } +>defineProperty : (o: any, p: string, attributes: PropertyDescriptor) => any +>obj : {} +>({ get: function () { eval("public = 1;"); return 11; }, set: function (v) { } }) : PropertyDescriptor +>PropertyDescriptor : PropertyDescriptor +>({ get: function () { eval("public = 1;"); return 11; }, set: function (v) { } }) : { get: () => number; set: (v: any) => void; } +>{ get: function () { eval("public = 1;"); return 11; }, set: function (v) { } } : { get: () => number; set: (v: any) => void; } + + get: function () { +>get : () => number +>function () { eval("public = 1;"); return 11; } : () => number + + eval("public = 1;"); +>eval("public = 1;") : any +>eval : (x: string) => any + + return 11; + }, + set: function (v) { +>set : (v: any) => void +>function (v) { } : (v: any) => void +>v : any + } + })) + diff --git a/tests/baselines/reference/objectLitStructuralTypeMismatch.js b/tests/baselines/reference/objectLitStructuralTypeMismatch.js index 421f30fe6a9..380b8a2aacf 100644 --- a/tests/baselines/reference/objectLitStructuralTypeMismatch.js +++ b/tests/baselines/reference/objectLitStructuralTypeMismatch.js @@ -3,4 +3,5 @@ var x: { a: number; } = { b: 5 }; //// [objectLitStructuralTypeMismatch.js] +// Shouldn't compile var x = { b: 5 }; diff --git a/tests/baselines/reference/objectLiteral1.types b/tests/baselines/reference/objectLiteral1.types new file mode 100644 index 00000000000..6371d285f63 --- /dev/null +++ b/tests/baselines/reference/objectLiteral1.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/objectLiteral1.ts === +var v30 = {a:1, b:2}; +>v30 : { a: number; b: number; } +>{a:1, b:2} : { a: number; b: number; } +>a : number +>b : number + diff --git a/tests/baselines/reference/objectLiteral2.types b/tests/baselines/reference/objectLiteral2.types new file mode 100644 index 00000000000..c6853bdbd88 --- /dev/null +++ b/tests/baselines/reference/objectLiteral2.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/objectLiteral2.ts === +var v30 = {a:1, b:2}, v31; +>v30 : { a: number; b: number; } +>{a:1, b:2} : { a: number; b: number; } +>a : number +>b : number +>v31 : any + diff --git a/tests/baselines/reference/objectLiteralArraySpecialization.js b/tests/baselines/reference/objectLiteralArraySpecialization.js index dc8ab70a1ab..0a48a3dccdd 100644 --- a/tests/baselines/reference/objectLiteralArraySpecialization.js +++ b/tests/baselines/reference/objectLiteralArraySpecialization.js @@ -9,5 +9,5 @@ thing.doSomething((x, y) => x.name === "bob"); // should not error //// [objectLiteralArraySpecialization.js] -var thing = create([{ name: "bob", id: 24 }, { name: "doug", id: 32 }]); -thing.doSomething(function (x, y) { return x.name === "bob"; }); +var thing = create([{ name: "bob", id: 24 }, { name: "doug", id: 32 }]); // should not error +thing.doSomething(function (x, y) { return x.name === "bob"; }); // should not error diff --git a/tests/baselines/reference/objectLiteralArraySpecialization.types b/tests/baselines/reference/objectLiteralArraySpecialization.types new file mode 100644 index 00000000000..d077354728b --- /dev/null +++ b/tests/baselines/reference/objectLiteralArraySpecialization.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/objectLiteralArraySpecialization.ts === +declare function create(initialValues?: T[]): MyArrayWrapper; +>create : (initialValues?: T[]) => MyArrayWrapper +>T : T +>initialValues : T[] +>T : T +>MyArrayWrapper : MyArrayWrapper +>T : T + +interface MyArrayWrapper { +>MyArrayWrapper : MyArrayWrapper +>T : T + + constructor(initialItems?: T[]); +>constructor : (initialItems?: T[]) => any +>initialItems : T[] +>T : T + + doSomething(predicate: (x: T, y: T) => boolean): void; +>doSomething : (predicate: (x: T, y: T) => boolean) => void +>predicate : (x: T, y: T) => boolean +>x : T +>T : T +>y : T +>T : T +} +var thing = create([ { name: "bob", id: 24 }, { name: "doug", id: 32 } ]); // should not error +>thing : MyArrayWrapper<{ name: string; id: number; }> +>create([ { name: "bob", id: 24 }, { name: "doug", id: 32 } ]) : MyArrayWrapper<{ name: string; id: number; }> +>create : (initialValues?: T[]) => MyArrayWrapper +>[ { name: "bob", id: 24 }, { name: "doug", id: 32 } ] : { name: string; id: number; }[] +>{ name: "bob", id: 24 } : { name: string; id: number; } +>name : string +>id : number +>{ name: "doug", id: 32 } : { name: string; id: number; } +>name : string +>id : number + +thing.doSomething((x, y) => x.name === "bob"); // should not error +>thing.doSomething((x, y) => x.name === "bob") : void +>thing.doSomething : (predicate: (x: { name: string; id: number; }, y: { name: string; id: number; }) => boolean) => void +>thing : MyArrayWrapper<{ name: string; id: number; }> +>doSomething : (predicate: (x: { name: string; id: number; }, y: { name: string; id: number; }) => boolean) => void +>(x, y) => x.name === "bob" : (x: { name: string; id: number; }, y: { name: string; id: number; }) => boolean +>x : { name: string; id: number; } +>y : { name: string; id: number; } +>x.name === "bob" : boolean +>x.name : string +>x : { name: string; id: number; } +>name : string + diff --git a/tests/baselines/reference/objectLiteralDeclarationGeneration1.types b/tests/baselines/reference/objectLiteralDeclarationGeneration1.types new file mode 100644 index 00000000000..a7406d72ab4 --- /dev/null +++ b/tests/baselines/reference/objectLiteralDeclarationGeneration1.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/objectLiteralDeclarationGeneration1.ts === +class y{ } +>y : y +>T : T + diff --git a/tests/baselines/reference/objectLiteralFunctionArgContextualTyping.js b/tests/baselines/reference/objectLiteralFunctionArgContextualTyping.js index 7391c6b09f5..0cd1626222b 100644 --- a/tests/baselines/reference/objectLiteralFunctionArgContextualTyping.js +++ b/tests/baselines/reference/objectLiteralFunctionArgContextualTyping.js @@ -16,9 +16,9 @@ f2({ value: '', toString: (s) => s.uhhh }) // error //// [objectLiteralFunctionArgContextualTyping.js] function f2(args) { } -f2({ hello: 1 }); -f2({ value: '' }); -f2({ value: '', what: 1 }); -f2({ toString: function (s) { return s; } }); -f2({ toString: function (s) { return s; } }); -f2({ value: '', toString: function (s) { return s.uhhh; } }); +f2({ hello: 1 }); // error +f2({ value: '' }); // missing toString satisfied by Object's member +f2({ value: '', what: 1 }); // missing toString satisfied by Object's member +f2({ toString: function (s) { return s; } }); // error, missing property value from ArgsString +f2({ toString: function (s) { return s; } }); // error, missing property value from ArgsString +f2({ value: '', toString: function (s) { return s.uhhh; } }); // error diff --git a/tests/baselines/reference/objectLiteralIndexerErrors.js b/tests/baselines/reference/objectLiteralIndexerErrors.js index a0f57f23382..5e0159015d5 100644 --- a/tests/baselines/reference/objectLiteralIndexerErrors.js +++ b/tests/baselines/reference/objectLiteralIndexerErrors.js @@ -18,5 +18,5 @@ o1 = { x: c, 0: a }; // string indexer is any, number indexer is A var a; var b; var c; -var o1 = { x: b, 0: a }; -o1 = { x: c, 0: a }; +var o1 = { x: b, 0: a }; // both indexers are A +o1 = { x: c, 0: a }; // string indexer is any, number indexer is A diff --git a/tests/baselines/reference/objectLiteralIndexers.js b/tests/baselines/reference/objectLiteralIndexers.js index f2d9ea63430..c36cbfc7571 100644 --- a/tests/baselines/reference/objectLiteralIndexers.js +++ b/tests/baselines/reference/objectLiteralIndexers.js @@ -19,6 +19,6 @@ o1 = { x: c, 0: b }; // string indexer is any, number indexer is B var a; var b; var c; -var o1 = { x: a, 0: b }; -o1 = { x: b, 0: c }; -o1 = { x: c, 0: b }; +var o1 = { x: a, 0: b }; // string indexer is A, number indexer is B +o1 = { x: b, 0: c }; // both indexers are any +o1 = { x: c, 0: b }; // string indexer is any, number indexer is B diff --git a/tests/baselines/reference/objectLiteralIndexers.types b/tests/baselines/reference/objectLiteralIndexers.types new file mode 100644 index 00000000000..1dce9b94ada --- /dev/null +++ b/tests/baselines/reference/objectLiteralIndexers.types @@ -0,0 +1,54 @@ +=== tests/cases/compiler/objectLiteralIndexers.ts === +interface A { +>A : A + + x: number; +>x : number +} + +interface B extends A { +>B : B +>A : A + + y: string; +>y : string +} + +var a: A; +>a : A +>A : A + +var b: B; +>b : B +>B : B + +var c: any; +>c : any + +var o1: { [s: string]: A;[n: number]: B; } = { x: a, 0: b }; // string indexer is A, number indexer is B +>o1 : { [x: string]: A; [x: number]: B; } +>s : string +>A : A +>n : number +>B : B +>{ x: a, 0: b } : { [x: string]: A; [x: number]: B; 0: B; x: A; } +>x : A +>a : A +>b : B + +o1 = { x: b, 0: c }; // both indexers are any +>o1 = { x: b, 0: c } : { [x: string]: any; [x: number]: any; 0: any; x: B; } +>o1 : { [x: string]: A; [x: number]: B; } +>{ x: b, 0: c } : { [x: string]: any; [x: number]: any; 0: any; x: B; } +>x : B +>b : B +>c : any + +o1 = { x: c, 0: b }; // string indexer is any, number indexer is B +>o1 = { x: c, 0: b } : { [x: string]: any; [x: number]: B; 0: B; x: any; } +>o1 : { [x: string]: A; [x: number]: B; } +>{ x: c, 0: b } : { [x: string]: any; [x: number]: B; 0: B; x: any; } +>x : any +>c : any +>b : B + diff --git a/tests/baselines/reference/objectLiteralReferencingInternalProperties.js b/tests/baselines/reference/objectLiteralReferencingInternalProperties.js index 9612144dbef..793fa0c588a 100644 --- a/tests/baselines/reference/objectLiteralReferencingInternalProperties.js +++ b/tests/baselines/reference/objectLiteralReferencingInternalProperties.js @@ -2,4 +2,4 @@ var a = { b: 10, c: b }; // Should give error for attempting to reference b. //// [objectLiteralReferencingInternalProperties.js] -var a = { b: 10, c: b }; +var a = { b: 10, c: b }; // Should give error for attempting to reference b. diff --git a/tests/baselines/reference/objectLiteralWidened.js b/tests/baselines/reference/objectLiteralWidened.js index 30dc1109ef0..4de228cb14a 100644 --- a/tests/baselines/reference/objectLiteralWidened.js +++ b/tests/baselines/reference/objectLiteralWidened.js @@ -15,6 +15,7 @@ var y = { } //// [objectLiteralWidened.js] +// object literal properties are widened to any var x = { foo: null, bar: undefined diff --git a/tests/baselines/reference/objectLiteralWidened.types b/tests/baselines/reference/objectLiteralWidened.types new file mode 100644 index 00000000000..e8dc707a489 --- /dev/null +++ b/tests/baselines/reference/objectLiteralWidened.types @@ -0,0 +1,34 @@ +=== tests/cases/conformance/types/typeRelationships/widenedTypes/objectLiteralWidened.ts === +// object literal properties are widened to any + +var x = { +>x : { foo: any; bar: any; } +>{ foo: null, bar: undefined} : { foo: null; bar: undefined; } + + foo: null, +>foo : any + + bar: undefined +>bar : any +>undefined : undefined +} + +var y = { +>y : { foo: any; bar: { baz: any; boo: any; }; } +>{ foo: null, bar: { baz: null, boo: undefined }} : { foo: null; bar: { baz: null; boo: undefined; }; } + + foo: null, +>foo : any + + bar: { +>bar : { baz: any; boo: any; } +>{ baz: null, boo: undefined } : { baz: null; boo: undefined; } + + baz: null, +>baz : any + + boo: undefined +>boo : any +>undefined : undefined + } +} diff --git a/tests/baselines/reference/objectMembersOnTypes.js b/tests/baselines/reference/objectMembersOnTypes.js index 7a82de789f9..f0c33e8d897 100644 --- a/tests/baselines/reference/objectMembersOnTypes.js +++ b/tests/baselines/reference/objectMembersOnTypes.js @@ -18,6 +18,6 @@ var AAA = (function () { var x; x.toString(); var i; -i.toString(); +i.toString(); // used to be an error var c; -c.toString(); +c.toString(); // used to be an error diff --git a/tests/baselines/reference/objectMembersOnTypes.types b/tests/baselines/reference/objectMembersOnTypes.types new file mode 100644 index 00000000000..f634f0bce06 --- /dev/null +++ b/tests/baselines/reference/objectMembersOnTypes.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/objectMembersOnTypes.ts === +interface I {} +>I : I + +class AAA implements I { } +>AAA : AAA +>I : I + +var x: number; +>x : number + +x.toString(); +>x.toString() : string +>x.toString : (radix?: number) => string +>x : number +>toString : (radix?: number) => string + +var i: I; +>i : I +>I : I + +i.toString(); // used to be an error +>i.toString() : string +>i.toString : () => string +>i : I +>toString : () => string + +var c: AAA; +>c : AAA +>AAA : AAA + +c.toString(); // used to be an error +>c.toString() : string +>c.toString : () => string +>c : AAA +>toString : () => string + diff --git a/tests/baselines/reference/objectTypeHidingMembersOfExtendedObject.js b/tests/baselines/reference/objectTypeHidingMembersOfExtendedObject.js index daa19478e69..fa41e57e22e 100644 --- a/tests/baselines/reference/objectTypeHidingMembersOfExtendedObject.js +++ b/tests/baselines/reference/objectTypeHidingMembersOfExtendedObject.js @@ -83,13 +83,13 @@ var C = (function () { var c; var r1 = c.valueOf(); var r1b = c.data; -var r1c = r1b['hm']; -var r1d = c['hm']; +var r1c = r1b['hm']; // should be 'Object' +var r1d = c['hm']; // should be 'any' var i; var r2 = i.valueOf(); var r2b = i.data; -var r2c = r2b['hm']; -var r2d = i['hm']; +var r2c = r2b['hm']; // should be 'Object' +var r2d = i['hm']; // should be 'any' var a = { valueOf: function () { }, @@ -97,7 +97,7 @@ var a = { }; var r3 = a.valueOf(); var r3b = a.data; -var r3c = r3b['hm']; +var r3c = r3b['hm']; // should be 'Object' var r3d = i['hm']; var b; var r4 = b.valueOf(); diff --git a/tests/baselines/reference/objectTypeHidingMembersOfObject.js b/tests/baselines/reference/objectTypeHidingMembersOfObject.js index 6d071068e2d..113329cf8b6 100644 --- a/tests/baselines/reference/objectTypeHidingMembersOfObject.js +++ b/tests/baselines/reference/objectTypeHidingMembersOfObject.js @@ -28,6 +28,7 @@ var b: { var r4: void = b.valueOf(); //// [objectTypeHidingMembersOfObject.js] +// all of these valueOf calls should return the type shown in the overriding signatures here var C = (function () { function C() { } diff --git a/tests/baselines/reference/objectTypeHidingMembersOfObject.types b/tests/baselines/reference/objectTypeHidingMembersOfObject.types new file mode 100644 index 00000000000..5bbd3a555ee --- /dev/null +++ b/tests/baselines/reference/objectTypeHidingMembersOfObject.types @@ -0,0 +1,69 @@ +=== tests/cases/conformance/types/members/objectTypeHidingMembersOfObject.ts === +// all of these valueOf calls should return the type shown in the overriding signatures here + +class C { +>C : C + + valueOf() { } +>valueOf : () => void +} + +var c: C; +>c : C +>C : C + +var r1: void = c.valueOf(); +>r1 : void +>c.valueOf() : void +>c.valueOf : () => void +>c : C +>valueOf : () => void + +interface I { +>I : I + + valueOf(): void; +>valueOf : () => void +} + +var i: I; +>i : I +>I : I + +var r2: void = i.valueOf(); +>r2 : void +>i.valueOf() : void +>i.valueOf : () => void +>i : I +>valueOf : () => void + +var a = { +>a : { valueOf: () => void; } +>{ valueOf: () => { }} : { valueOf: () => void; } + + valueOf: () => { } +>valueOf : () => void +>() => { } : () => void +} + +var r3: void = a.valueOf(); +>r3 : void +>a.valueOf() : void +>a.valueOf : () => void +>a : { valueOf: () => void; } +>valueOf : () => void + +var b: { +>b : { valueOf(): void; } + + valueOf(): void; +>valueOf : () => void +} + +var r4: void = b.valueOf(); +>r4 : void +>b.valueOf() : void +>b.valueOf : () => void +>b : { valueOf(): void; } +>valueOf : () => void + diff --git a/tests/baselines/reference/objectTypeHidingMembersOfObjectAssignmentCompat.js b/tests/baselines/reference/objectTypeHidingMembersOfObjectAssignmentCompat.js index 379c74c1a47..93d985f7987 100644 --- a/tests/baselines/reference/objectTypeHidingMembersOfObjectAssignmentCompat.js +++ b/tests/baselines/reference/objectTypeHidingMembersOfObjectAssignmentCompat.js @@ -24,8 +24,8 @@ a = o; // ok //// [objectTypeHidingMembersOfObjectAssignmentCompat.js] var i; var o; -o = i; -i = o; +o = i; // error +i = o; // ok var C = (function () { function C() { } @@ -34,11 +34,11 @@ var C = (function () { return C; })(); var c; -o = c; -c = o; +o = c; // error +c = o; // ok var a = { toString: function () { } }; -o = a; -a = o; +o = a; // error +a = o; // ok diff --git a/tests/baselines/reference/objectTypeHidingMembersOfObjectAssignmentCompat2.js b/tests/baselines/reference/objectTypeHidingMembersOfObjectAssignmentCompat2.js index b287e2efa80..b8a5aa87aef 100644 --- a/tests/baselines/reference/objectTypeHidingMembersOfObjectAssignmentCompat2.js +++ b/tests/baselines/reference/objectTypeHidingMembersOfObjectAssignmentCompat2.js @@ -24,8 +24,8 @@ a = o; // ok //// [objectTypeHidingMembersOfObjectAssignmentCompat2.js] var i; var o; -o = i; -i = o; +o = i; // error +i = o; // error var C = (function () { function C() { } @@ -35,11 +35,11 @@ var C = (function () { return C; })(); var c; -o = c; -c = o; +o = c; // error +c = o; // error var a = { toString: function () { } }; -o = a; -a = o; +o = a; // error +a = o; // ok diff --git a/tests/baselines/reference/objectTypeLiteralSyntax.types b/tests/baselines/reference/objectTypeLiteralSyntax.types new file mode 100644 index 00000000000..43f01ea19a9 --- /dev/null +++ b/tests/baselines/reference/objectTypeLiteralSyntax.types @@ -0,0 +1,20 @@ +=== tests/cases/conformance/types/objectTypeLiteral/objectTypeLiteralSyntax.ts === +var x: { +>x : { foo: string; bar: string; } + + foo: string; +>foo : string + + bar: string; +>bar : string +} + +var y: { +>y : { foo: string; bar: string; } + + foo: string; +>foo : string + + bar: string +>bar : string +} diff --git a/tests/baselines/reference/objectTypePropertyAccess.js b/tests/baselines/reference/objectTypePropertyAccess.js index 48099c47bd4..143439aaa04 100644 --- a/tests/baselines/reference/objectTypePropertyAccess.js +++ b/tests/baselines/reference/objectTypePropertyAccess.js @@ -30,6 +30,7 @@ var r11 = a['foo']; //// [objectTypePropertyAccess.js] +// Index notation should resolve to the type of a declared property with that same name var C = (function () { function C() { } diff --git a/tests/baselines/reference/objectTypePropertyAccess.types b/tests/baselines/reference/objectTypePropertyAccess.types new file mode 100644 index 00000000000..56e45f1bae0 --- /dev/null +++ b/tests/baselines/reference/objectTypePropertyAccess.types @@ -0,0 +1,103 @@ +=== tests/cases/conformance/types/members/objectTypePropertyAccess.ts === +// Index notation should resolve to the type of a declared property with that same name +class C { +>C : C + + foo: string; +>foo : string +} + +var c: C; +>c : C +>C : C + +var r1 = c.toString(); +>r1 : string +>c.toString() : string +>c.toString : () => string +>c : C +>toString : () => string + +var r2 = c['toString'](); +>r2 : string +>c['toString']() : string +>c['toString'] : () => string +>c : C + +var r3 = c.foo; +>r3 : string +>c.foo : string +>c : C +>foo : string + +var r4 = c['foo']; +>r4 : string +>c['foo'] : string +>c : C + +interface I { +>I : I + + bar: string; +>bar : string +} +var i: I; +>i : I +>I : I + +var r4 = i.toString(); +>r4 : string +>i.toString() : string +>i.toString : () => string +>i : I +>toString : () => string + +var r5 = i['toString'](); +>r5 : string +>i['toString']() : string +>i['toString'] : () => string +>i : I + +var r6 = i.bar; +>r6 : string +>i.bar : string +>i : I +>bar : string + +var r7 = i['bar']; +>r7 : string +>i['bar'] : string +>i : I + +var a = { +>a : { foo: string; } +>{ foo: ''} : { foo: string; } + + foo: '' +>foo : string +} + +var r8 = a.toString(); +>r8 : string +>a.toString() : string +>a.toString : () => string +>a : { foo: string; } +>toString : () => string + +var r9 = a['toString'](); +>r9 : string +>a['toString']() : string +>a['toString'] : () => string +>a : { foo: string; } + +var r10 = a.foo; +>r10 : string +>a.foo : string +>a : { foo: string; } +>foo : string + +var r11 = a['foo']; +>r11 : string +>a['foo'] : string +>a : { foo: string; } + diff --git a/tests/baselines/reference/objectTypeWithCallSignatureAppearsToBeFunctionType.js b/tests/baselines/reference/objectTypeWithCallSignatureAppearsToBeFunctionType.js index 75a6364d690..66a1bbb9aa6 100644 --- a/tests/baselines/reference/objectTypeWithCallSignatureAppearsToBeFunctionType.js +++ b/tests/baselines/reference/objectTypeWithCallSignatureAppearsToBeFunctionType.js @@ -18,6 +18,8 @@ var r4: void = b(); var rb4: (x: any, y?: any) => any = b.apply; //// [objectTypeWithCallSignatureAppearsToBeFunctionType.js] +// objects with call signatures should be permitted where function types are expected +// no errors expected below var i; var r2 = i(); var r2b = i.apply; diff --git a/tests/baselines/reference/objectTypeWithCallSignatureAppearsToBeFunctionType.types b/tests/baselines/reference/objectTypeWithCallSignatureAppearsToBeFunctionType.types new file mode 100644 index 00000000000..74d8ef57d67 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithCallSignatureAppearsToBeFunctionType.types @@ -0,0 +1,46 @@ +=== tests/cases/conformance/types/members/objectTypeWithCallSignatureAppearsToBeFunctionType.ts === +// objects with call signatures should be permitted where function types are expected +// no errors expected below + +interface I { +>I : I + + (): void; +} + +var i: I; +>i : I +>I : I + +var r2: void = i(); +>r2 : void +>i() : void +>i : I + +var r2b: (x: any, y?: any) => any = i.apply; +>r2b : (x: any, y?: any) => any +>x : any +>y : any +>i.apply : (thisArg: any, argArray?: any) => any +>i : I +>apply : (thisArg: any, argArray?: any) => any + +var b: { +>b : () => void + + (): void; +} + +var r4: void = b(); +>r4 : void +>b() : void +>b : () => void + +var rb4: (x: any, y?: any) => any = b.apply; +>rb4 : (x: any, y?: any) => any +>x : any +>y : any +>b.apply : (thisArg: any, argArray?: any) => any +>b : () => void +>apply : (thisArg: any, argArray?: any) => any + diff --git a/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfExtendedFunction.js b/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfExtendedFunction.js index 6ab63424329..a234569a6bc 100644 --- a/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfExtendedFunction.js +++ b/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfExtendedFunction.js @@ -33,15 +33,17 @@ var r2d = x.data; var r2e = x['hm']; // should be Object //// [objectTypeWithCallSignatureHidingMembersOfExtendedFunction.js] +// object types with call signatures can override members of Function +// no errors expected below var i; var r1 = i.apply; var r1b = i.call; var r1c = i.arguments; var r1d = i.data; -var r1e = i['hm']; +var r1e = i['hm']; // should be Object var x; var r2 = x.apply; var r2b = x.call; var r2c = x.arguments; var r2d = x.data; -var r2e = x['hm']; +var r2e = x['hm']; // should be Object diff --git a/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfExtendedFunction.types b/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfExtendedFunction.types new file mode 100644 index 00000000000..56635a8e399 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfExtendedFunction.types @@ -0,0 +1,115 @@ +=== tests/cases/conformance/types/members/objectTypeWithCallSignatureHidingMembersOfExtendedFunction.ts === +// object types with call signatures can override members of Function +// no errors expected below + +interface Function { +>Function : Function + + data: number; +>data : number + + [x: string]: Object; +>x : string +>Object : Object +} + +interface I { +>I : I + + (): void; + apply(a: any, b?: any): void; +>apply : (a: any, b?: any) => void +>a : any +>b : any + + call(thisArg: number, ...argArray: number[]): any; +>call : (thisArg: number, ...argArray: number[]) => any +>thisArg : number +>argArray : number[] +} + +var i: I; +>i : I +>I : I + +var r1: (a: any, b?: any) => void = i.apply; +>r1 : (a: any, b?: any) => void +>a : any +>b : any +>i.apply : (a: any, b?: any) => void +>i : I +>apply : (a: any, b?: any) => void + +var r1b: (thisArg: number, ...argArray: number[]) => void = i.call; +>r1b : (thisArg: number, ...argArray: number[]) => void +>thisArg : number +>argArray : number[] +>i.call : (thisArg: number, ...argArray: number[]) => any +>i : I +>call : (thisArg: number, ...argArray: number[]) => any + +var r1c = i.arguments; +>r1c : any +>i.arguments : any +>i : I +>arguments : any + +var r1d = i.data; +>r1d : number +>i.data : number +>i : I +>data : number + +var r1e = i['hm']; // should be Object +>r1e : any +>i['hm'] : any +>i : I + +var x: { +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } + + (): void; + apply(a: any, b?: any): void; +>apply : (a: any, b?: any) => void +>a : any +>b : any + + call(thisArg: number, ...argArray: number[]): any; +>call : (thisArg: number, ...argArray: number[]) => any +>thisArg : number +>argArray : number[] +} + +var r2: (a: any, b?: any) => void = x.apply; +>r2 : (a: any, b?: any) => void +>a : any +>b : any +>x.apply : (a: any, b?: any) => void +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>apply : (a: any, b?: any) => void + +var r2b: (thisArg: number, ...argArray: number[]) => void = x.call; +>r2b : (thisArg: number, ...argArray: number[]) => void +>thisArg : number +>argArray : number[] +>x.call : (thisArg: number, ...argArray: number[]) => any +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>call : (thisArg: number, ...argArray: number[]) => any + +var r2c = x.arguments; +>r2c : any +>x.arguments : any +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>arguments : any + +var r2d = x.data; +>r2d : number +>x.data : number +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>data : number + +var r2e = x['hm']; // should be Object +>r2e : any +>x['hm'] : any +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } + diff --git a/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfFunction.js b/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfFunction.js index 16908733725..4911754d343 100644 --- a/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfFunction.js +++ b/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfFunction.js @@ -25,6 +25,8 @@ var r2c = x.arguments; //// [objectTypeWithCallSignatureHidingMembersOfFunction.js] +// object types with call signatures can override members of Function +// no errors expected below var i; var r1 = i.apply; var r1b = i.call; diff --git a/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfFunction.types b/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfFunction.types new file mode 100644 index 00000000000..8f2f3d4a2b7 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithCallSignatureHidingMembersOfFunction.types @@ -0,0 +1,82 @@ +=== tests/cases/conformance/types/members/objectTypeWithCallSignatureHidingMembersOfFunction.ts === +// object types with call signatures can override members of Function +// no errors expected below + +interface I { +>I : I + + (): void; + apply(a: any, b?: any): void; +>apply : (a: any, b?: any) => void +>a : any +>b : any + + call(thisArg: number, ...argArray: number[]): any; +>call : (thisArg: number, ...argArray: number[]) => any +>thisArg : number +>argArray : number[] +} + +var i: I; +>i : I +>I : I + +var r1: (a: any, b?: any) => void = i.apply; +>r1 : (a: any, b?: any) => void +>a : any +>b : any +>i.apply : (a: any, b?: any) => void +>i : I +>apply : (a: any, b?: any) => void + +var r1b: (thisArg: number, ...argArray: number[]) => void = i.call; +>r1b : (thisArg: number, ...argArray: number[]) => void +>thisArg : number +>argArray : number[] +>i.call : (thisArg: number, ...argArray: number[]) => any +>i : I +>call : (thisArg: number, ...argArray: number[]) => any + +var r1c = i.arguments; +>r1c : any +>i.arguments : any +>i : I +>arguments : any + +var x: { +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } + + (): void; + apply(a: any, b?: any): void; +>apply : (a: any, b?: any) => void +>a : any +>b : any + + call(thisArg: number, ...argArray: number[]): any; +>call : (thisArg: number, ...argArray: number[]) => any +>thisArg : number +>argArray : number[] +} + +var r2: (a: any, b?: any) => void = x.apply; +>r2 : (a: any, b?: any) => void +>a : any +>b : any +>x.apply : (a: any, b?: any) => void +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>apply : (a: any, b?: any) => void + +var r2b: (thisArg: number, ...argArray: number[]) => void = x.call; +>r2b : (thisArg: number, ...argArray: number[]) => void +>thisArg : number +>argArray : number[] +>x.call : (thisArg: number, ...argArray: number[]) => any +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>call : (thisArg: number, ...argArray: number[]) => any + +var r2c = x.arguments; +>r2c : any +>x.arguments : any +>x : { (): void; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>arguments : any + diff --git a/tests/baselines/reference/objectTypeWithConstructSignatureAppearsToBeFunctionType.js b/tests/baselines/reference/objectTypeWithConstructSignatureAppearsToBeFunctionType.js index 47942963911..fbbbabd2e3f 100644 --- a/tests/baselines/reference/objectTypeWithConstructSignatureAppearsToBeFunctionType.js +++ b/tests/baselines/reference/objectTypeWithConstructSignatureAppearsToBeFunctionType.js @@ -19,6 +19,7 @@ var r4b: number = new b(); var r4c: (x: any, y?: any) => any = b.apply; //// [objectTypeWithConstructSignatureAppearsToBeFunctionType.js] +// no errors expected below var i; var r2 = i(); var r2b = new i(); diff --git a/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfExtendedFunction.js b/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfExtendedFunction.js index 33d9f067656..d796c0fadf9 100644 --- a/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfExtendedFunction.js +++ b/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfExtendedFunction.js @@ -35,10 +35,10 @@ var r1 = i.apply; var r1b = i.call; var r1c = i.arguments; var r1d = i.data; -var r1e = i['hm']; +var r1e = i['hm']; // should be Object var x; var r2 = x.apply; var r2b = x.call; var r2c = x.arguments; var r2d = x.data; -var r2e = x['hm']; +var r2e = x['hm']; // should be Object diff --git a/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfExtendedFunction.types b/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfExtendedFunction.types new file mode 100644 index 00000000000..b7d8294dd96 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfExtendedFunction.types @@ -0,0 +1,112 @@ +=== tests/cases/conformance/types/members/objectTypeWithConstructSignatureHidingMembersOfExtendedFunction.ts === +interface Function { +>Function : Function + + data: number; +>data : number + + [x: string]: Object; +>x : string +>Object : Object +} + +interface I { +>I : I + + new(): number; + apply(a: any, b?: any): void; +>apply : (a: any, b?: any) => void +>a : any +>b : any + + call(thisArg: number, ...argArray: number[]): any; +>call : (thisArg: number, ...argArray: number[]) => any +>thisArg : number +>argArray : number[] +} + +var i: I; +>i : I +>I : I + +var r1: (a: any, b?: any) => void = i.apply; +>r1 : (a: any, b?: any) => void +>a : any +>b : any +>i.apply : (a: any, b?: any) => void +>i : I +>apply : (a: any, b?: any) => void + +var r1b: (thisArg: number, ...argArray: number[]) => void = i.call; +>r1b : (thisArg: number, ...argArray: number[]) => void +>thisArg : number +>argArray : number[] +>i.call : (thisArg: number, ...argArray: number[]) => any +>i : I +>call : (thisArg: number, ...argArray: number[]) => any + +var r1c = i.arguments; +>r1c : any +>i.arguments : any +>i : I +>arguments : any + +var r1d = i.data; +>r1d : number +>i.data : number +>i : I +>data : number + +var r1e = i['hm']; // should be Object +>r1e : any +>i['hm'] : any +>i : I + +var x: { +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } + + new(): number; + apply(a: any, b?: any): void; +>apply : (a: any, b?: any) => void +>a : any +>b : any + + call(thisArg: number, ...argArray: number[]): any; +>call : (thisArg: number, ...argArray: number[]) => any +>thisArg : number +>argArray : number[] +} + +var r2: (a: any, b?: any) => void = x.apply; +>r2 : (a: any, b?: any) => void +>a : any +>b : any +>x.apply : (a: any, b?: any) => void +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>apply : (a: any, b?: any) => void + +var r2b: (thisArg: number, ...argArray: number[]) => void = x.call; +>r2b : (thisArg: number, ...argArray: number[]) => void +>thisArg : number +>argArray : number[] +>x.call : (thisArg: number, ...argArray: number[]) => any +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>call : (thisArg: number, ...argArray: number[]) => any + +var r2c = x.arguments; +>r2c : any +>x.arguments : any +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>arguments : any + +var r2d = x.data; +>r2d : number +>x.data : number +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>data : number + +var r2e = x['hm']; // should be Object +>r2e : any +>x['hm'] : any +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } + diff --git a/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfFunction.types b/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfFunction.types new file mode 100644 index 00000000000..d8d8a96823c --- /dev/null +++ b/tests/baselines/reference/objectTypeWithConstructSignatureHidingMembersOfFunction.types @@ -0,0 +1,79 @@ +=== tests/cases/conformance/types/members/objectTypeWithConstructSignatureHidingMembersOfFunction.ts === +interface I { +>I : I + + new(): number; + apply(a: any, b?: any): void; +>apply : (a: any, b?: any) => void +>a : any +>b : any + + call(thisArg: number, ...argArray: number[]): any; +>call : (thisArg: number, ...argArray: number[]) => any +>thisArg : number +>argArray : number[] +} + +var i: I; +>i : I +>I : I + +var r1: (a: any, b?: any) => void = i.apply; +>r1 : (a: any, b?: any) => void +>a : any +>b : any +>i.apply : (a: any, b?: any) => void +>i : I +>apply : (a: any, b?: any) => void + +var r1b: (thisArg: number, ...argArray: number[]) => void = i.call; +>r1b : (thisArg: number, ...argArray: number[]) => void +>thisArg : number +>argArray : number[] +>i.call : (thisArg: number, ...argArray: number[]) => any +>i : I +>call : (thisArg: number, ...argArray: number[]) => any + +var r1c = i.arguments; +>r1c : any +>i.arguments : any +>i : I +>arguments : any + +var x: { +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } + + new(): number; + apply(a: any, b?: any): void; +>apply : (a: any, b?: any) => void +>a : any +>b : any + + call(thisArg: number, ...argArray: number[]): any; +>call : (thisArg: number, ...argArray: number[]) => any +>thisArg : number +>argArray : number[] +} + +var r2: (a: any, b?: any) => void = x.apply; +>r2 : (a: any, b?: any) => void +>a : any +>b : any +>x.apply : (a: any, b?: any) => void +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>apply : (a: any, b?: any) => void + +var r2b: (thisArg: number, ...argArray: number[]) => void = x.call; +>r2b : (thisArg: number, ...argArray: number[]) => void +>thisArg : number +>argArray : number[] +>x.call : (thisArg: number, ...argArray: number[]) => any +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>call : (thisArg: number, ...argArray: number[]) => any + +var r2c = x.arguments; +>r2c : any +>x.arguments : any +>x : { new (): number; apply(a: any, b?: any): void; call(thisArg: number, ...argArray: number[]): any; } +>arguments : any + diff --git a/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.js b/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.js index f61906ed4f1..4772fedf17b 100644 --- a/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.js +++ b/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.js @@ -33,6 +33,8 @@ var b = { //// [objectTypeWithDuplicateNumericProperty.js] +// numeric properties must be distinct after a ToNumber operation +// so the below are all errors var C = (function () { function C() { } diff --git a/tests/baselines/reference/objectTypeWithNumericProperty.js b/tests/baselines/reference/objectTypeWithNumericProperty.js index 94c524353d8..e6a9f3ac666 100644 --- a/tests/baselines/reference/objectTypeWithNumericProperty.js +++ b/tests/baselines/reference/objectTypeWithNumericProperty.js @@ -44,6 +44,7 @@ var r3 = b['1']; var r4 = b['1.1']; //// [objectTypeWithNumericProperty.js] +// no errors here var C = (function () { function C() { } diff --git a/tests/baselines/reference/objectTypeWithNumericProperty.types b/tests/baselines/reference/objectTypeWithNumericProperty.types new file mode 100644 index 00000000000..7c507cd4f64 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithNumericProperty.types @@ -0,0 +1,120 @@ +=== tests/cases/conformance/types/members/objectTypeWithNumericProperty.ts === +// no errors here + +class C { +>C : C + + 1: number; + 1.1: string; +} + +var c: C; +>c : C +>C : C + +var r1 = c[1]; +>r1 : number +>c[1] : number +>c : C + +var r2 = c[1.1]; +>r2 : string +>c[1.1] : string +>c : C + +var r3 = c['1']; +>r3 : number +>c['1'] : number +>c : C + +var r4 = c['1.1']; +>r4 : string +>c['1.1'] : string +>c : C + +interface I { +>I : I + + 1: number; + 1.1: string; +} + +var i: I; +>i : I +>I : I + +var r1 = i[1]; +>r1 : number +>i[1] : number +>i : I + +var r2 = i[1.1]; +>r2 : string +>i[1.1] : string +>i : I + +var r3 = i['1']; +>r3 : number +>i['1'] : number +>i : I + +var r4 = i['1.1']; +>r4 : string +>i['1.1'] : string +>i : I + +var a: { +>a : { 1: number; 1.1: string; } + + 1: number; + 1.1: string; +} + +var r1 = a[1]; +>r1 : number +>a[1] : number +>a : { 1: number; 1.1: string; } + +var r2 = a[1.1]; +>r2 : string +>a[1.1] : string +>a : { 1: number; 1.1: string; } + +var r3 = a['1']; +>r3 : number +>a['1'] : number +>a : { 1: number; 1.1: string; } + +var r4 = a['1.1']; +>r4 : string +>a['1.1'] : string +>a : { 1: number; 1.1: string; } + +var b = { +>b : { 1: number; 1.1: string; } +>{ 1: 1, 1.1: ""} : { 1: number; 1.1: string; } + + 1: 1, + 1.1: "" +} + +var r1 = b[1]; +>r1 : number +>b[1] : number +>b : { 1: number; 1.1: string; } + +var r2 = b[1.1]; +>r2 : string +>b[1.1] : string +>b : { 1: number; 1.1: string; } + +var r3 = b['1']; +>r3 : number +>b['1'] : number +>b : { 1: number; 1.1: string; } + +var r4 = b['1.1']; +>r4 : string +>b['1.1'] : string +>b : { 1: number; 1.1: string; } + diff --git a/tests/baselines/reference/objectTypeWithRecursiveWrappedProperty.js b/tests/baselines/reference/objectTypeWithRecursiveWrappedProperty.js index bc08dd92f54..8c4a89aab68 100644 --- a/tests/baselines/reference/objectTypeWithRecursiveWrappedProperty.js +++ b/tests/baselines/reference/objectTypeWithRecursiveWrappedProperty.js @@ -14,6 +14,7 @@ list1 = list2; // ok list1 = list3; // error //// [objectTypeWithRecursiveWrappedProperty.js] +// Basic recursive type var List = (function () { function List() { } @@ -22,5 +23,5 @@ var List = (function () { var list1 = new List(); var list2 = new List(); var list3 = new List(); -list1 = list2; -list1 = list3; +list1 = list2; // ok +list1 = list3; // error diff --git a/tests/baselines/reference/objectTypeWithRecursiveWrappedProperty2.js b/tests/baselines/reference/objectTypeWithRecursiveWrappedProperty2.js index bd120357b20..cbb3032f00f 100644 --- a/tests/baselines/reference/objectTypeWithRecursiveWrappedProperty2.js +++ b/tests/baselines/reference/objectTypeWithRecursiveWrappedProperty2.js @@ -14,6 +14,7 @@ list1 = list2; // ok list1 = list3; // error //// [objectTypeWithRecursiveWrappedProperty2.js] +// Basic recursive type var List = (function () { function List() { } @@ -22,5 +23,5 @@ var List = (function () { var list1 = new List(); var list2 = new List(); var list3 = new List(); -list1 = list2; -list1 = list3; +list1 = list2; // ok +list1 = list3; // error diff --git a/tests/baselines/reference/objectTypeWithRecursiveWrappedPropertyCheckedNominally.js b/tests/baselines/reference/objectTypeWithRecursiveWrappedPropertyCheckedNominally.js index 2da990a2f7e..388c4009a74 100644 --- a/tests/baselines/reference/objectTypeWithRecursiveWrappedPropertyCheckedNominally.js +++ b/tests/baselines/reference/objectTypeWithRecursiveWrappedPropertyCheckedNominally.js @@ -53,6 +53,7 @@ function foo2>(t: T, u: U) { } //// [objectTypeWithRecursiveWrappedPropertyCheckedNominally.js] +// Types with infinitely expanding recursive types are type checked nominally var List = (function () { function List() { } @@ -67,30 +68,30 @@ var list1 = new List(); var list2 = new List(); var myList1 = new MyList(); var myList2 = new MyList(); -list1 = myList1; -list1 = myList2; -list2 = myList1; -list2 = myList2; +list1 = myList1; // error, not nominally equal +list1 = myList2; // error, type mismatch +list2 = myList1; // error, not nominally equal +list2 = myList2; // error, type mismatch var rList1 = new List(); var rMyList1 = new List(); -rList1 = rMyList1; +rList1 = rMyList1; // error, not nominally equal function foo(t, u) { - t = u; - u = t; + t = u; // error + u = t; // error var a; var b; - a = t; - a = u; - b = t; - b = u; + a = t; // ok + a = u; // error + b = t; // error + b = u; // ok } function foo2(t, u) { - t = u; - u = t; + t = u; // error + u = t; // was error, ok after constraint made illegal, doesn't matter var a; var b; - a = t; - a = u; - b = t; - b = u; + a = t; // error + a = u; // error + b = t; // ok + b = u; // ok } diff --git a/tests/baselines/reference/objectTypeWithStringIndexerHidingObjectIndexer.js b/tests/baselines/reference/objectTypeWithStringIndexerHidingObjectIndexer.js index 59537954ab7..088a5b7f637 100644 --- a/tests/baselines/reference/objectTypeWithStringIndexerHidingObjectIndexer.js +++ b/tests/baselines/reference/objectTypeWithStringIndexerHidingObjectIndexer.js @@ -32,8 +32,10 @@ var r4: string = o2['']; //// [objectTypeWithStringIndexerHidingObjectIndexer.js] +// object types can define string indexers that are more specific than the default 'any' that would be returned +// no errors expected below var o = {}; -var r = o['']; +var r = o['']; // should be Object var C = (function () { function C() { } diff --git a/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.js b/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.js index d2fc04fabdf..a52d74b9f2d 100644 --- a/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.js +++ b/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.js @@ -128,6 +128,9 @@ var r13 = i[-01] //// [objectTypeWithStringNamedNumericProperty.js] +// string named numeric properties are legal and distinct when indexed by string values +// indexed numerically the value is converted to a number +// no errors expected below var C = (function () { function C() { } @@ -139,10 +142,11 @@ var r2 = c['.1']; var r3 = c['1']; var r3 = c[1]; var r4 = c['1.']; -var r3 = c[1.]; +var r3 = c[1.]; // same as indexing by 1 when done numerically var r5 = c['1..']; var r6 = c['1.0']; -var r3 = c[1.0]; +var r3 = c[1.0]; // same as indexing by 1 when done numerically +// BUG 823822 var r7 = i[-1]; var r7 = i[-1.0]; var r8 = i["-1.0"]; @@ -157,10 +161,11 @@ var r2 = i['.1']; var r3 = i['1']; var r3 = c[1]; var r4 = i['1.']; -var r3 = c[1.]; +var r3 = c[1.]; // same as indexing by 1 when done numerically var r5 = i['1..']; var r6 = i['1.0']; -var r3 = c[1.0]; +var r3 = c[1.0]; // same as indexing by 1 when done numerically +// BUG 823822 var r7 = i[-1]; var r7 = i[-1.0]; var r8 = i["-1.0"]; @@ -175,10 +180,11 @@ var r2 = a['.1']; var r3 = a['1']; var r3 = c[1]; var r4 = a['1.']; -var r3 = c[1.]; +var r3 = c[1.]; // same as indexing by 1 when done numerically var r5 = a['1..']; var r6 = a['1.0']; -var r3 = c[1.0]; +var r3 = c[1.0]; // same as indexing by 1 when done numerically +// BUG 823822 var r7 = i[-1]; var r7 = i[-1.0]; var r8 = i["-1.0"]; @@ -202,10 +208,11 @@ var r2 = b['.1']; var r3 = b['1']; var r3 = c[1]; var r4 = b['1.']; -var r3 = c[1.]; +var r3 = c[1.]; // same as indexing by 1 when done numerically var r5 = b['1..']; var r6 = b['1.0']; -var r3 = c[1.0]; +var r3 = c[1.0]; // same as indexing by 1 when done numerically +// BUG 823822 var r7 = i[-1]; var r7 = i[-1.0]; var r8 = i["-1.0"]; diff --git a/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.types b/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.types new file mode 100644 index 00000000000..febc7524e6d --- /dev/null +++ b/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.types @@ -0,0 +1,458 @@ +=== tests/cases/conformance/types/members/objectTypeWithStringNamedNumericProperty.ts === + +// string named numeric properties are legal and distinct when indexed by string values +// indexed numerically the value is converted to a number +// no errors expected below + +class C { +>C : C + + "0.1": void; + ".1": Object; +>Object : Object + + "1": number; + "1.": string; + "1..": boolean; + "1.0": Date; +>Date : Date + + "-1.0": RegExp; +>RegExp : RegExp + + "-1": Date; +>Date : Date +} + +var c: C; +>c : C +>C : C + +var r1 = c['0.1']; +>r1 : void +>c['0.1'] : void +>c : C + +var r2 = c['.1']; +>r2 : Object +>c['.1'] : Object +>c : C + +var r3 = c['1']; +>r3 : number +>c['1'] : number +>c : C + +var r3 = c[1]; +>r3 : number +>c[1] : number +>c : C + +var r4 = c['1.']; +>r4 : string +>c['1.'] : string +>c : C + +var r3 = c[1.]; // same as indexing by 1 when done numerically +>r3 : number +>c[1.] : number +>c : C + +var r5 = c['1..']; +>r5 : boolean +>c['1..'] : boolean +>c : C + +var r6 = c['1.0']; +>r6 : Date +>c['1.0'] : Date +>c : C + +var r3 = c[1.0]; // same as indexing by 1 when done numerically +>r3 : number +>c[1.0] : number +>c : C + +// BUG 823822 +var r7 = i[-1]; +>r7 : any +>i[-1] : any +>i : I +>-1 : number + +var r7 = i[-1.0]; +>r7 : any +>i[-1.0] : any +>i : I +>-1.0 : number + +var r8 = i["-1.0"]; +>r8 : RegExp +>i["-1.0"] : RegExp +>i : I + +var r9 = i["-1"]; +>r9 : Date +>i["-1"] : Date +>i : I + +var r10 = i[0x1] +>r10 : number +>i[0x1] : number +>i : I + +var r11 = i[-0x1] +>r11 : any +>i[-0x1] : any +>i : I +>-0x1 : number + +var r12 = i[01] +>r12 : number +>i[01] : number +>i : I + +var r13 = i[-01] +>r13 : any +>i[-01] : any +>i : I +>-01 : number + +interface I { +>I : I + + "0.1": void; + ".1": Object; +>Object : Object + + "1": number; + "1.": string; + "1..": boolean; + "1.0": Date; +>Date : Date + + "-1.0": RegExp; +>RegExp : RegExp + + "-1": Date; +>Date : Date +} + +var i: I; +>i : I +>I : I + +var r1 = i['0.1']; +>r1 : void +>i['0.1'] : void +>i : I + +var r2 = i['.1']; +>r2 : Object +>i['.1'] : Object +>i : I + +var r3 = i['1']; +>r3 : number +>i['1'] : number +>i : I + +var r3 = c[1]; +>r3 : number +>c[1] : number +>c : C + +var r4 = i['1.']; +>r4 : string +>i['1.'] : string +>i : I + +var r3 = c[1.]; // same as indexing by 1 when done numerically +>r3 : number +>c[1.] : number +>c : C + +var r5 = i['1..']; +>r5 : boolean +>i['1..'] : boolean +>i : I + +var r6 = i['1.0']; +>r6 : Date +>i['1.0'] : Date +>i : I + +var r3 = c[1.0]; // same as indexing by 1 when done numerically +>r3 : number +>c[1.0] : number +>c : C + +// BUG 823822 +var r7 = i[-1]; +>r7 : any +>i[-1] : any +>i : I +>-1 : number + +var r7 = i[-1.0]; +>r7 : any +>i[-1.0] : any +>i : I +>-1.0 : number + +var r8 = i["-1.0"]; +>r8 : RegExp +>i["-1.0"] : RegExp +>i : I + +var r9 = i["-1"]; +>r9 : Date +>i["-1"] : Date +>i : I + +var r10 = i[0x1] +>r10 : number +>i[0x1] : number +>i : I + +var r11 = i[-0x1] +>r11 : any +>i[-0x1] : any +>i : I +>-0x1 : number + +var r12 = i[01] +>r12 : number +>i[01] : number +>i : I + +var r13 = i[-01] +>r13 : any +>i[-01] : any +>i : I +>-01 : number + +var a: { +>a : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } + + "0.1": void; + ".1": Object; +>Object : Object + + "1": number; + "1.": string; + "1..": boolean; + "1.0": Date; +>Date : Date + + "-1.0": RegExp; +>RegExp : RegExp + + "-1": Date; +>Date : Date +} + +var r1 = a['0.1']; +>r1 : void +>a['0.1'] : void +>a : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } + +var r2 = a['.1']; +>r2 : Object +>a['.1'] : Object +>a : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } + +var r3 = a['1']; +>r3 : number +>a['1'] : number +>a : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } + +var r3 = c[1]; +>r3 : number +>c[1] : number +>c : C + +var r4 = a['1.']; +>r4 : string +>a['1.'] : string +>a : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } + +var r3 = c[1.]; // same as indexing by 1 when done numerically +>r3 : number +>c[1.] : number +>c : C + +var r5 = a['1..']; +>r5 : boolean +>a['1..'] : boolean +>a : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } + +var r6 = a['1.0']; +>r6 : Date +>a['1.0'] : Date +>a : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } + +var r3 = c[1.0]; // same as indexing by 1 when done numerically +>r3 : number +>c[1.0] : number +>c : C + +// BUG 823822 +var r7 = i[-1]; +>r7 : any +>i[-1] : any +>i : I +>-1 : number + +var r7 = i[-1.0]; +>r7 : any +>i[-1.0] : any +>i : I +>-1.0 : number + +var r8 = i["-1.0"]; +>r8 : RegExp +>i["-1.0"] : RegExp +>i : I + +var r9 = i["-1"]; +>r9 : Date +>i["-1"] : Date +>i : I + +var r10 = i[0x1] +>r10 : number +>i[0x1] : number +>i : I + +var r11 = i[-0x1] +>r11 : any +>i[-0x1] : any +>i : I +>-0x1 : number + +var r12 = i[01] +>r12 : number +>i[01] : number +>i : I + +var r13 = i[-01] +>r13 : any +>i[-01] : any +>i : I +>-01 : number + +var b = { +>b : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; }; } +>{ "0.1": null, ".1": new Object(), "1": 1, "1.": "", "1..": true, "1.0": new Date(), "-1.0": /123/, "-1": Date} : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; }; } + + "0.1": null, +>null : void + + ".1": new Object(), +>new Object() : Object +>Object : { (): any; (value: any): any; new (value?: any): Object; prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; getOwnPropertyNames(o: any): string[]; create(o: any, properties?: PropertyDescriptorMap): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; defineProperties(o: any, properties: PropertyDescriptorMap): any; seal(o: any): any; freeze(o: any): any; preventExtensions(o: any): any; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: any): string[]; } + + "1": 1, + "1.": "", + "1..": true, + "1.0": new Date(), +>new Date() : Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + + "-1.0": /123/, + "-1": Date +>Date : { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; } + +}; + +var r1 = b['0.1']; +>r1 : void +>b['0.1'] : void +>b : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; }; } + +var r2 = b['.1']; +>r2 : Object +>b['.1'] : Object +>b : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; }; } + +var r3 = b['1']; +>r3 : number +>b['1'] : number +>b : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; }; } + +var r3 = c[1]; +>r3 : number +>c[1] : number +>c : C + +var r4 = b['1.']; +>r4 : string +>b['1.'] : string +>b : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; }; } + +var r3 = c[1.]; // same as indexing by 1 when done numerically +>r3 : number +>c[1.] : number +>c : C + +var r5 = b['1..']; +>r5 : boolean +>b['1..'] : boolean +>b : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; }; } + +var r6 = b['1.0']; +>r6 : Date +>b['1.0'] : Date +>b : { "1": number; "0.1": void; ".1": Object; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": { (): string; new (): Date; new (value: number): Date; new (value: string): Date; new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date; prototype: Date; parse(s: string): number; UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; now(): number; }; } + +var r3 = c[1.0]; // same as indexing by 1 when done numerically +>r3 : number +>c[1.0] : number +>c : C + +// BUG 823822 +var r7 = i[-1]; +>r7 : any +>i[-1] : any +>i : I +>-1 : number + +var r7 = i[-1.0]; +>r7 : any +>i[-1.0] : any +>i : I +>-1.0 : number + +var r8 = i["-1.0"]; +>r8 : RegExp +>i["-1.0"] : RegExp +>i : I + +var r9 = i["-1"]; +>r9 : Date +>i["-1"] : Date +>i : I + +var r10 = i[0x1] +>r10 : number +>i[0x1] : number +>i : I + +var r11 = i[-0x1] +>r11 : any +>i[-0x1] : any +>i : I +>-0x1 : number + +var r12 = i[01] +>r12 : number +>i[01] : number +>i : I + +var r13 = i[-01] +>r13 : any +>i[-01] : any +>i : I +>-01 : number + diff --git a/tests/baselines/reference/objectTypeWithStringNamedPropertyOfIllegalCharacters.js b/tests/baselines/reference/objectTypeWithStringNamedPropertyOfIllegalCharacters.js index 9c674854cdc..5d7073db876 100644 --- a/tests/baselines/reference/objectTypeWithStringNamedPropertyOfIllegalCharacters.js +++ b/tests/baselines/reference/objectTypeWithStringNamedPropertyOfIllegalCharacters.js @@ -63,16 +63,19 @@ var c; var r = c[" "]; var r2 = c[" "]; var r3 = c["a b"]; +// BUG 817263 var r4 = c["~!@#$%^&*()_+{}|:'<>?\/.,`"]; var i; var r = i[" "]; var r2 = i[" "]; var r3 = i["a b"]; +// BUG 817263 var r4 = i["~!@#$%^&*()_+{}|:'<>?\/.,`"]; var a; var r = a[" "]; var r2 = a[" "]; var r3 = a["a b"]; +// BUG 817263 var r4 = a["~!@#$%^&*()_+{}|:'<>?\/.,`"]; var b = { " ": 1, @@ -82,4 +85,5 @@ var b = { var r = b[" "]; var r2 = b[" "]; var r3 = b["a b"]; +// BUG 817263 var r4 = b["~!@#$%^&*()_+{}|:'<>?\/.,`"]; diff --git a/tests/baselines/reference/objectTypeWithStringNamedPropertyOfIllegalCharacters.types b/tests/baselines/reference/objectTypeWithStringNamedPropertyOfIllegalCharacters.types new file mode 100644 index 00000000000..fce2b03f53f --- /dev/null +++ b/tests/baselines/reference/objectTypeWithStringNamedPropertyOfIllegalCharacters.types @@ -0,0 +1,129 @@ +=== tests/cases/conformance/types/members/objectTypeWithStringNamedPropertyOfIllegalCharacters.ts === +class C { +>C : C + + " ": number; + "a b": string; + "~!@#$%^&*()_+{}|:'<>?\/.,`": number; + "a\a": number; + static "a ": number +} + +var c: C; +>c : C +>C : C + +var r = c[" "]; +>r : number +>c[" "] : number +>c : C + +var r2 = c[" "]; +>r2 : any +>c[" "] : any +>c : C + +var r3 = c["a b"]; +>r3 : string +>c["a b"] : string +>c : C + +// BUG 817263 +var r4 = c["~!@#$%^&*()_+{}|:'<>?\/.,`"]; +>r4 : number +>c["~!@#$%^&*()_+{}|:'<>?\/.,`"] : number +>c : C + +interface I { +>I : I + + " ": number; + "a b": string; + "~!@#$%^&*()_+{}|:'<>?\/.,`": number; +} + +var i: I; +>i : I +>I : I + +var r = i[" "]; +>r : number +>i[" "] : number +>i : I + +var r2 = i[" "]; +>r2 : any +>i[" "] : any +>i : I + +var r3 = i["a b"]; +>r3 : string +>i["a b"] : string +>i : I + +// BUG 817263 +var r4 = i["~!@#$%^&*()_+{}|:'<>?\/.,`"]; +>r4 : number +>i["~!@#$%^&*()_+{}|:'<>?\/.,`"] : number +>i : I + + +var a: { +>a : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + + " ": number; + "a b": string; + "~!@#$%^&*()_+{}|:'<>?\/.,`": number; +} + +var r = a[" "]; +>r : number +>a[" "] : number +>a : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + +var r2 = a[" "]; +>r2 : any +>a[" "] : any +>a : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + +var r3 = a["a b"]; +>r3 : string +>a["a b"] : string +>a : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + +// BUG 817263 +var r4 = a["~!@#$%^&*()_+{}|:'<>?\/.,`"]; +>r4 : number +>a["~!@#$%^&*()_+{}|:'<>?\/.,`"] : number +>a : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + +var b = { +>b : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } +>{ " ": 1, "a b": "", "~!@#$%^&*()_+{}|:'<>?\/.,`": 1,} : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + + " ": 1, + "a b": "", + "~!@#$%^&*()_+{}|:'<>?\/.,`": 1, +} + +var r = b[" "]; +>r : number +>b[" "] : number +>b : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + +var r2 = b[" "]; +>r2 : any +>b[" "] : any +>b : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + +var r3 = b["a b"]; +>r3 : string +>b["a b"] : string +>b : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + +// BUG 817263 +var r4 = b["~!@#$%^&*()_+{}|:'<>?\/.,`"]; +>r4 : number +>b["~!@#$%^&*()_+{}|:'<>?\/.,`"] : number +>b : { " ": number; "a b": string; "~!@#$%^&*()_+{}|:'<>?\/.,`": number; } + diff --git a/tests/baselines/reference/objectTypesIdentity.js b/tests/baselines/reference/objectTypesIdentity.js index c583ca4e5fb..adfef8574ed 100644 --- a/tests/baselines/reference/objectTypesIdentity.js +++ b/tests/baselines/reference/objectTypesIdentity.js @@ -89,6 +89,7 @@ function foo14(x: typeof b); // error function foo14(x: any) { } //// [objectTypesIdentity.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentity.types b/tests/baselines/reference/objectTypesIdentity.types new file mode 100644 index 00000000000..c148c4223ed --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentity.types @@ -0,0 +1,280 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity.ts === +// object types are identical structurally + +class A { +>A : A + + foo: string; +>foo : string +} + +class B { +>B : B + + foo: string; +>foo : string +} + +class C { +>C : C +>T : T + + foo: T; +>foo : T +>T : T +} + +interface I { +>I : I + + foo: string; +>foo : string +} + +var a: { foo: string; } +>a : { foo: string; } +>foo : string + +var b = { foo: '' }; +>b : { foo: string; } +>{ foo: '' } : { foo: string; } +>foo : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // error +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // error +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // error +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // error +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentity2.js b/tests/baselines/reference/objectTypesIdentity2.js index 60d95032872..19fc65e91e0 100644 --- a/tests/baselines/reference/objectTypesIdentity2.js +++ b/tests/baselines/reference/objectTypesIdentity2.js @@ -66,6 +66,7 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentity2.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentity2.types b/tests/baselines/reference/objectTypesIdentity2.types new file mode 100644 index 00000000000..1969d55bd11 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentity2.types @@ -0,0 +1,205 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentity2.ts === +// object types are identical structurally + +class A { +>A : A + + foo: number; +>foo : number +} + +class B { +>B : B + + foo: boolean; +>foo : boolean +} + +class C { +>C : C +>T : T + + foo: T; +>foo : T +>T : T +} + +interface I { +>I : I + + foo: Date; +>foo : Date +>Date : Date +} + +var a: { foo: RegExp; } +>a : { foo: RegExp; } +>foo : RegExp +>RegExp : RegExp + +enum E { A } +>E : E +>A : E + +var b = { foo: E.A }; +>b : { foo: E; } +>{ foo: E.A } : { foo: E; } +>foo : E +>E.A : E +>E : typeof E +>A : E + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo: RegExp; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: { foo: RegExp; }): any; } +>x : { foo: RegExp; } +>a : { foo: RegExp; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo: RegExp; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo: RegExp; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo: RegExp; }): any; } +>x : { foo: RegExp; } +>a : { foo: RegExp; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo: RegExp; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: E; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: E; }): any; } +>x : { foo: E; } +>b : { foo: E; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: E; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo: RegExp; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo: RegExp; }): any; } +>x : { foo: RegExp; } +>a : { foo: RegExp; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo: RegExp; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: E; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: E; }): any; } +>x : { foo: E; } +>b : { foo: E; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: E; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignatures.js b/tests/baselines/reference/objectTypesIdentityWithCallSignatures.js index bd45c978d62..a8d395a813f 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignatures.js +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignatures.js @@ -101,6 +101,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithCallSignatures.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignatures.types b/tests/baselines/reference/objectTypesIdentityWithCallSignatures.types new file mode 100644 index 00000000000..f73785fab0d --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignatures.types @@ -0,0 +1,327 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures.ts === +// object types are identical structurally + +class A { +>A : A + + foo(x: string): string { return null; } +>foo : (x: string) => string +>x : string +} + +class B { +>B : B + + foo(x: string): string { return null; } +>foo : (x: string) => string +>x : string +} + +class C { +>C : C +>T : T + + foo(x: T): T { return null; } +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +interface I { +>I : I + + foo(x: string): string; +>foo : (x: string) => string +>x : string +} + +interface I2 { +>I2 : I2 +>T : T + + foo(x: T): T; +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +var a: { foo(x: string): string } +>a : { foo(x: string): string; } +>foo : (x: string) => string +>x : string + +var b = { foo(x: string) { return ''; } }; +>b : { foo: (x: string) => string; } +>{ foo(x: string) { return ''; } } : { foo: (x: string) => string; } +>foo : (x: string) => string +>foo(x: string) { return ''; } : (x: string) => string +>x : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>a : { foo(x: string): string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>a : { foo(x: string): string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } +>x : { foo: (x: string) => string; } +>b : { foo: (x: string) => string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } +>x : { foo: (x: string) => string; } +>b : { foo: (x: string) => string; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // error +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // error +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: string): string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>a : { foo(x: string): string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: string): string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: string): string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // error +>foo10 : { (x: B): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>a : { foo(x: string): string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: string): string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // error +>foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>x : { foo: (x: string) => string; } +>b : { foo: (x: string) => string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // error +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: string): string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>a : { foo(x: string): string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: string): string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>x : { foo: (x: string) => string; } +>b : { foo: (x: string) => string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.js b/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.js index 6c02956a1b2..af8496105da 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.js +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.js @@ -101,6 +101,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithCallSignatures2.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.types b/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.types new file mode 100644 index 00000000000..16b658d0e43 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.types @@ -0,0 +1,329 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignatures2.ts === +// object types are identical structurally + +class A { +>A : A + + foo(x: string): string { return null; } +>foo : (x: string) => string +>x : string +} + +class B { +>B : B + + foo(x: number): string { return null; } +>foo : (x: number) => string +>x : number +} + +class C { +>C : C +>T : T + + foo(x: T): T { return null; } +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +interface I { +>I : I + + foo(x: boolean): string; +>foo : (x: boolean) => string +>x : boolean +} + +interface I2 { +>I2 : I2 +>T : T + + foo(x: T): T; +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +var a: { foo(x: Date): string } +>a : { foo(x: Date): string; } +>foo : (x: Date) => string +>x : Date +>Date : Date + +var b = { foo(x: RegExp) { return ''; } }; +>b : { foo: (x: RegExp) => string; } +>{ foo(x: RegExp) { return ''; } } : { foo: (x: RegExp) => string; } +>foo : (x: RegExp) => string +>foo(x: RegExp) { return ''; } : (x: RegExp) => string +>x : RegExp +>RegExp : RegExp + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: Date): string; }): any; (x: { foo(x: Date): string; }): any; } +>x : { foo(x: Date): string; } +>a : { foo(x: Date): string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: Date): string; }): any; (x: { foo(x: Date): string; }): any; } +>x : { foo(x: Date): string; } +>a : { foo(x: Date): string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: Date): string; }): any; (x: { foo(x: Date): string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: RegExp) => string; }): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : { foo: (x: RegExp) => string; } +>b : { foo: (x: RegExp) => string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: RegExp) => string; }): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : { foo: (x: RegExp) => string; } +>b : { foo: (x: RegExp) => string; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: RegExp) => string; }): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: Date): string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: { foo(x: Date): string; }): any; } +>x : { foo(x: Date): string; } +>a : { foo(x: Date): string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: Date): string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: Date): string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: Date): string; }): any; } +>x : { foo(x: Date): string; } +>a : { foo(x: Date): string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: Date): string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : { foo: (x: RegExp) => string; } +>b : { foo: (x: RegExp) => string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // error +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: Date): string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: Date): string; }): any; } +>x : { foo(x: Date): string; } +>a : { foo(x: Date): string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: Date): string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : { foo: (x: RegExp) => string; } +>b : { foo: (x: RegExp) => string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: RegExp) => string; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignatures3.js b/tests/baselines/reference/objectTypesIdentityWithCallSignatures3.js index 988d48ad92c..289ba25bf6e 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignatures3.js +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignatures3.js @@ -40,6 +40,7 @@ function foo15(x: I2); // ok function foo15(x: any) { } //// [objectTypesIdentityWithCallSignatures3.js] +// object types are identical structurally var a; function foo2(x) { } diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.js b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.js index e3cdbf7b7dc..713401d0302 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.js +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.js @@ -101,6 +101,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithCallSignaturesDifferingParamCounts.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.types b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.types new file mode 100644 index 00000000000..0ebbc639e5f --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.types @@ -0,0 +1,331 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesDifferingParamCounts.ts === +// object types are identical structurally + +class A { +>A : A + + foo(x: string): string { return null; } +>foo : (x: string) => string +>x : string +} + +class B { +>B : B + + foo(x: string, y: string): string { return null; } +>foo : (x: string, y: string) => string +>x : string +>y : string +} + +class C { +>C : C +>T : T + + foo(x: T, y: T): T { return null; } +>foo : (x: T, y: T) => T +>x : T +>T : T +>y : T +>T : T +>T : T +} + +interface I { +>I : I + + foo(x: string): string; +>foo : (x: string) => string +>x : string +} + +interface I2 { +>I2 : I2 +>T : T + + foo(x: T): T; +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +var a: { foo(x: string, y: string): string } +>a : { foo(x: string, y: string): string; } +>foo : (x: string, y: string) => string +>x : string +>y : string + +var b = { foo(x: string) { return ''; } }; +>b : { foo: (x: string) => string; } +>{ foo(x: string) { return ''; } } : { foo: (x: string) => string; } +>foo : (x: string) => string +>foo(x: string) { return ''; } : (x: string) => string +>x : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: string, y: string): string; }): any; (x: { foo(x: string, y: string): string; }): any; } +>x : { foo(x: string, y: string): string; } +>a : { foo(x: string, y: string): string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: string, y: string): string; }): any; (x: { foo(x: string, y: string): string; }): any; } +>x : { foo(x: string, y: string): string; } +>a : { foo(x: string, y: string): string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: string, y: string): string; }): any; (x: { foo(x: string, y: string): string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } +>x : { foo: (x: string) => string; } +>b : { foo: (x: string) => string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } +>x : { foo: (x: string) => string; } +>b : { foo: (x: string) => string; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // error +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: string, y: string): string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: { foo(x: string, y: string): string; }): any; } +>x : { foo(x: string, y: string): string; } +>a : { foo(x: string, y: string): string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: string, y: string): string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: string, y: string): string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // error +>foo10 : { (x: B): any; (x: { foo(x: string, y: string): string; }): any; } +>x : { foo(x: string, y: string): string; } +>a : { foo(x: string, y: string): string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: string, y: string): string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>x : { foo: (x: string) => string; } +>b : { foo: (x: string) => string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: string, y: string): string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: string, y: string): string; }): any; } +>x : { foo(x: string, y: string): string; } +>a : { foo(x: string, y: string): string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: string, y: string): string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>x : { foo: (x: string) => string; } +>b : { foo: (x: string) => string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts2.js b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts2.js index 5fbcf648a97..fe84b3e6b92 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts2.js +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts2.js @@ -44,6 +44,7 @@ function foo15(x: I2); // ok function foo15(x: any) { } //// [objectTypesIdentityWithCallSignaturesDifferingParamCounts2.js] +// object types are identical structurally var a; function foo2(x) { } diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts2.types b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts2.types new file mode 100644 index 00000000000..b72d0a799e4 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts2.types @@ -0,0 +1,137 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesDifferingParamCounts2.ts === +// object types are identical structurally + +interface I { +>I : I + + (x: string): string; +>x : string +} + +interface I2 { +>I2 : I2 +>T : T + + (x: T): T; +>x : T +>T : T +>T : T +} + +var a: { (x: string, y: string): string } +>a : (x: string, y: string) => string +>x : string +>y : string + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: (x: string, y: string) => string): any; (x: (x: string, y: string) => string): any; } +>x : (x: string, y: string) => string +>a : (x: string, y: string) => string + +function foo3(x: typeof a); // error +>foo3 : { (x: (x: string, y: string) => string): any; (x: (x: string, y: string) => string): any; } +>x : (x: string, y: string) => string +>a : (x: string, y: string) => string + +function foo3(x: any) { } +>foo3 : { (x: (x: string, y: string) => string): any; (x: (x: string, y: string) => string): any; } +>x : any + +function foo4(x: I2); +>foo4 : { (x: I2): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo4(x: I2); // error +>foo4 : { (x: I2): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo4(x: any) { } +>foo4 : { (x: I2): any; (x: I2): any; } +>x : any + +function foo5(x: I2); +>foo5 : { (x: I2): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo5(x: I2); // ok +>foo5 : { (x: I2): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo5(x: any) { } +>foo5 : { (x: I2): any; (x: I2): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: (x: string, y: string) => string): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: (x: string, y: string) => string): any; } +>x : (x: string, y: string) => string +>a : (x: string, y: string) => string + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: (x: string, y: string) => string): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: I2): any; } +>x : I +>I : I + +function foo14(x: I2); // error +>foo14 : { (x: I): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: I2): any; } +>x : any + +function foo14b(x: typeof a); +>foo14b : { (x: (x: string, y: string) => string): any; (x: I2): any; } +>x : (x: string, y: string) => string +>a : (x: string, y: string) => string + +function foo14b(x: I2); // ok +>foo14b : { (x: (x: string, y: string) => string): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo14b(x: any) { } +>foo14b : { (x: (x: string, y: string) => string): any; (x: I2): any; } +>x : any + +function foo15(x: I); +>foo15 : { (x: I): any; (x: I2): any; } +>x : I +>I : I + +function foo15(x: I2); // ok +>foo15 : { (x: I): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo15(x: any) { } +>foo15 : { (x: I): any; (x: I2): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.js b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.js index 6f7ca7aaa2b..29cb6f3cd54 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.js +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.js @@ -117,6 +117,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithCallSignaturesWithOverloads.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.types b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.types new file mode 100644 index 00000000000..4d8b8ccb42a --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.types @@ -0,0 +1,379 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithCallSignaturesWithOverloads.ts === +// object types are identical structurally + +class A { +>A : A + + foo(x: number): number; +>foo : { (x: number): number; (x: string): string; } +>x : number + + foo(x: string): string; +>foo : { (x: number): number; (x: string): string; } +>x : string + + foo(x: any): any { return null; } +>foo : { (x: number): number; (x: string): string; } +>x : any +} + +class B { +>B : B + + foo(x: number): number; +>foo : { (x: number): number; (x: string): string; } +>x : number + + foo(x: string): string; +>foo : { (x: number): number; (x: string): string; } +>x : string + + foo(x: any): any { return null; } +>foo : { (x: number): number; (x: string): string; } +>x : any +} + +class C { +>C : C +>T : T + + foo(x: number): number; +>foo : { (x: number): number; (x: string): string; (x: T): T; } +>x : number + + foo(x: string): string; +>foo : { (x: number): number; (x: string): string; (x: T): T; } +>x : string + + foo(x: T): T; +>foo : { (x: number): number; (x: string): string; (x: T): T; } +>x : T +>T : T +>T : T + + foo(x: any): any { return null; } +>foo : { (x: number): number; (x: string): string; (x: T): T; } +>x : any +} + +interface I { +>I : I + + foo(x: number): number; +>foo : { (x: number): number; (x: string): string; } +>x : number + + foo(x: string): string; +>foo : { (x: number): number; (x: string): string; } +>x : string +} + +interface I2 { +>I2 : I2 +>T : T + + foo(x: number): number; +>foo : { (x: number): number; (x: string): string; (x: T): T; } +>x : number + + foo(x: string): string; +>foo : { (x: number): number; (x: string): string; (x: T): T; } +>x : string + + foo(x: T): T; +>foo : { (x: number): number; (x: string): string; (x: T): T; } +>x : T +>T : T +>T : T +} + +var a: { +>a : { foo(x: number): number; foo(x: string): string; } + + foo(x: number): number +>foo : { (x: number): number; (x: string): string; } +>x : number + + foo(x: string): string +>foo : { (x: number): number; (x: string): string; } +>x : string +} + +var b = { +>b : { foo: (x: any) => any; } +>{ foo(x: any) { return ''; }} : { foo: (x: any) => any; } + + foo(x: any) { return ''; } +>foo : (x: any) => any +>foo(x: any) { return ''; } : (x: any) => any +>x : any +>'' : any + +}; + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: number): number; foo(x: string): string; }): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : { foo(x: number): number; foo(x: string): string; } +>a : { foo(x: number): number; foo(x: string): string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: number): number; foo(x: string): string; }): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : { foo(x: number): number; foo(x: string): string; } +>a : { foo(x: number): number; foo(x: string): string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: number): number; foo(x: string): string; }): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: any) => any; }): any; (x: { foo: (x: any) => any; }): any; } +>x : { foo: (x: any) => any; } +>b : { foo: (x: any) => any; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: any) => any; }): any; (x: { foo: (x: any) => any; }): any; } +>x : { foo: (x: any) => any; } +>b : { foo: (x: any) => any; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: any) => any; }): any; (x: { foo: (x: any) => any; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // error +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // BUG 831930 +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // BUG 831930 +>foo7 : { (x: A): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : { foo(x: number): number; foo(x: string): string; } +>a : { foo(x: number): number; foo(x: string): string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // BUG 831930 +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // BUG 831930 +>foo10 : { (x: B): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : { foo(x: number): number; foo(x: string): string; } +>a : { foo(x: number): number; foo(x: string): string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: any) => any; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: any) => any; }): any; } +>x : { foo: (x: any) => any; } +>b : { foo: (x: any) => any; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: any) => any; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : { foo(x: number): number; foo(x: string): string; } +>a : { foo(x: number): number; foo(x: string): string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: number): number; foo(x: string): string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: any) => any; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: any) => any; }): any; } +>x : { foo: (x: any) => any; } +>b : { foo: (x: any) => any; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: any) => any; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures.js b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures.js index 0b14f982b40..caf28cd05de 100644 --- a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures.js +++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures.js @@ -88,6 +88,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithConstructSignatures.js] +// object types are identical structurally var A = (function () { function A(x) { } diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures.types b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures.types new file mode 100644 index 00000000000..a29f213bdde --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures.types @@ -0,0 +1,271 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures.ts === +// object types are identical structurally + +class A { +>A : A + + constructor(x: string) { } +>x : string +} + +class B { +>B : B + + constructor(x: string) { } +>x : string +} + +class C { +>C : C +>T : T + + constructor(x: T) { } +>x : T +>T : T +} + +interface I { +>I : I + + new(x: string); +>x : string +} + +interface I2 { +>I2 : I2 +>T : T + + new(x: T): T; +>x : T +>T : T +>T : T +} + +var a: { new(x: string) } +>a : new (x: string) => any +>x : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: string) => any): any; (x: new (x: string) => any): any; } +>x : new (x: string) => any +>a : new (x: string) => any + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: string) => any): any; (x: new (x: string) => any): any; } +>x : new (x: string) => any +>a : new (x: string) => any + +function foo3(x: any) { } +>foo3 : { (x: new (x: string) => any): any; (x: new (x: string) => any): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // error +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: new (x: string) => any): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: new (x: string) => any): any; } +>x : new (x: string) => any +>a : new (x: string) => any + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: new (x: string) => any): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: string) => any): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: new (x: string) => any): any; } +>x : new (x: string) => any +>a : new (x: string) => any + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: string) => any): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: string) => any): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: new (x: string) => any): any; } +>x : new (x: string) => any +>a : new (x: string) => any + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: string) => any): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.js b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.js index ff213a2f898..8825f8c301f 100644 --- a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.js +++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.js @@ -77,6 +77,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithConstructSignatures2.js] +// object types are identical structurally var B = (function () { function B(x) { return null; @@ -92,7 +93,7 @@ var C = (function () { var a; var b = { new: function (x) { return ''; -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.types b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.types new file mode 100644 index 00000000000..c530f1ced9b --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.types @@ -0,0 +1,245 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignatures2.ts === +// object types are identical structurally + +class B { +>B : B + + constructor(x: number) { return null; } +>x : number +} + +class C { +>C : C +>T : T + + constructor(x: T) { return null; } +>x : T +>T : T +} + +interface I { +>I : I + + new(x: boolean): string; +>x : boolean +} + +interface I2 { +>I2 : I2 +>T : T + + new(x: T): T; +>x : T +>T : T +>T : T +} + +var a: { new(x: Date): string } +>a : new (x: Date) => string +>x : Date +>Date : Date + +var b = { new(x: RegExp) { return ''; } }; // not a construct signature, function called new +>b : { new: (x: RegExp) => string; } +>{ new(x: RegExp) { return ''; } } : { new: (x: RegExp) => string; } +>new : (x: RegExp) => string +>new(x: RegExp) { return ''; } : (x: RegExp) => string +>x : RegExp +>RegExp : RegExp + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: Date) => string): any; (x: new (x: Date) => string): any; } +>x : new (x: Date) => string +>a : new (x: Date) => string + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: Date) => string): any; (x: new (x: Date) => string): any; } +>x : new (x: Date) => string +>a : new (x: Date) => string + +function foo3(x: any) { } +>foo3 : { (x: new (x: Date) => string): any; (x: new (x: Date) => string): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: RegExp) => string; }): any; (x: { new: (x: RegExp) => string; }): any; } +>x : { new: (x: RegExp) => string; } +>b : { new: (x: RegExp) => string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: RegExp) => string; }): any; (x: { new: (x: RegExp) => string; }): any; } +>x : { new: (x: RegExp) => string; } +>b : { new: (x: RegExp) => string; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: RegExp) => string; }): any; (x: { new: (x: RegExp) => string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error, types are structurally equal +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: Date) => string): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: new (x: Date) => string): any; } +>x : new (x: Date) => string +>a : new (x: Date) => string + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: Date) => string): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: RegExp) => string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: RegExp) => string; }): any; } +>x : { new: (x: RegExp) => string; } +>b : { new: (x: RegExp) => string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: RegExp) => string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: Date) => string): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: new (x: Date) => string): any; } +>x : new (x: Date) => string +>a : new (x: Date) => string + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: Date) => string): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: RegExp) => string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: RegExp) => string; }): any; } +>x : { new: (x: RegExp) => string; } +>b : { new: (x: RegExp) => string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: RegExp) => string; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js b/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js index f3f28d5e9ad..49b2b071a7e 100644 --- a/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js +++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js @@ -77,6 +77,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js] +// object types are identical structurally var B = (function () { function B(x, y) { return null; @@ -92,7 +93,7 @@ var C = (function () { var a; var b = { new: function (x) { return ''; -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.types b/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.types new file mode 100644 index 00000000000..e5598f874e0 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.types @@ -0,0 +1,247 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.ts === +// object types are identical structurally + +class B { +>B : B + + constructor(x: string, y: string) { return null; } +>x : string +>y : string +} + +class C { +>C : C +>T : T + + constructor(x: T, y: T) { return null; } +>x : T +>T : T +>y : T +>T : T +} + +interface I { +>I : I + + new(x: string): string; +>x : string +} + +interface I2 { +>I2 : I2 +>T : T + + new(x: T): T; +>x : T +>T : T +>T : T +} + +var a: { new(x: string, y: string): string } +>a : new (x: string, y: string) => string +>x : string +>y : string + +var b = { new(x: string) { return ''; } }; // not a construct signature, function called new +>b : { new: (x: string) => string; } +>{ new(x: string) { return ''; } } : { new: (x: string) => string; } +>new : (x: string) => string +>new(x: string) { return ''; } : (x: string) => string +>x : string + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: string, y: string) => string): any; (x: new (x: string, y: string) => string): any; } +>x : new (x: string, y: string) => string +>a : new (x: string, y: string) => string + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: string, y: string) => string): any; (x: new (x: string, y: string) => string): any; } +>x : new (x: string, y: string) => string +>a : new (x: string, y: string) => string + +function foo3(x: any) { } +>foo3 : { (x: new (x: string, y: string) => string): any; (x: new (x: string, y: string) => string): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: string) => string; }): any; (x: { new: (x: string) => string; }): any; } +>x : { new: (x: string) => string; } +>b : { new: (x: string) => string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: string) => string; }): any; (x: { new: (x: string) => string; }): any; } +>x : { new: (x: string) => string; } +>b : { new: (x: string) => string; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: string) => string; }): any; (x: { new: (x: string) => string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error, types are structurally equal +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: string, y: string) => string): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: new (x: string, y: string) => string): any; } +>x : new (x: string, y: string) => string +>a : new (x: string, y: string) => string + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: string, y: string) => string): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: string) => string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: string) => string; }): any; } +>x : { new: (x: string) => string; } +>b : { new: (x: string) => string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: string) => string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: string, y: string) => string): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: new (x: string, y: string) => string): any; } +>x : new (x: string, y: string) => string +>a : new (x: string, y: string) => string + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: string, y: string) => string): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: string) => string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: string) => string; }): any; } +>x : { new: (x: string) => string; } +>b : { new: (x: string) => string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: string) => string; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.js index 2e1441a4c86..939a73f4778 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.js @@ -101,6 +101,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignatures.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.types new file mode 100644 index 00000000000..240e12b1c22 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.types @@ -0,0 +1,342 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures.ts === +// object types are identical structurally + +class A { +>A : A + + foo(x: T): T { return null; } +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} + +class B { +>B : B +>T : T + + foo(x: T): T { return null; } +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +class C { +>C : C +>T : T + + foo(x: T): T { return null; } +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +interface I { +>I : I +>T : T + + foo(x: T): T; +>foo : (x: T) => T +>x : T +>T : T +>T : T +} + +interface I2 { +>I2 : I2 + + foo(x: T): T; +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} + +var a: { foo(x: T): T } +>a : { foo(x: T): T; } +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var b = { foo(x: T) { return x; } }; +>b : { foo: (x: T) => T; } +>{ foo(x: T) { return x; } } : { foo: (x: T) => T; } +>foo : (x: T) => T +>foo(x: T) { return x; } : (x: T) => T +>T : T +>x : T +>T : T +>x : T + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: T) => T; }): any; (x: { foo: (x: T) => T; }): any; } +>x : { foo: (x: T) => T; } +>b : { foo: (x: T) => T; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: T) => T; }): any; (x: { foo: (x: T) => T; }): any; } +>x : { foo: (x: T) => T; } +>b : { foo: (x: T) => T; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: T) => T; }): any; (x: { foo: (x: T) => T; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: T) => T; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: T) => T; }): any; } +>x : { foo: (x: T) => T; } +>b : { foo: (x: T) => T; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: T) => T; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: T) => T; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: T) => T; }): any; } +>x : { foo: (x: T) => T; } +>b : { foo: (x: T) => T; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: T) => T; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.js index 95794735b2c..e699b71eb42 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.js @@ -101,6 +101,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignatures2.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.types new file mode 100644 index 00000000000..932dbf7e9b3 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.types @@ -0,0 +1,363 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignatures2.ts === +// object types are identical structurally + +class A { +>A : A + + foo(x: T, y: U): T { return null; } +>foo : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T +} + +class B { +>B : B +>T : T +>U : U + + foo(x: T, y: U): T { return null; } +>foo : (x: T, y: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +class C { +>C : C +>T : T +>U : U + + foo(x: T, y: U): T { return null; } +>foo : (x: T, y: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +interface I { +>I : I +>T : T +>U : U + + foo(x: T, y: U): T; +>foo : (x: T, y: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +interface I2 { +>I2 : I2 + + foo(x: T, y: U): T; +>foo : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T +} + +var a: { foo(x: T, y: U): T } +>a : { foo(x: T, y: U): T; } +>foo : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + +var b = { foo(x: T, y: U) { return x; } }; +>b : { foo: (x: T, y: U) => T; } +>{ foo(x: T, y: U) { return x; } } : { foo: (x: T, y: U) => T; } +>foo : (x: T, y: U) => T +>foo(x: T, y: U) { return x; } : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>x : T + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>a : { foo(x: T, y: U): T; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>a : { foo(x: T, y: U): T; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : { foo: (x: T, y: U) => T; } +>b : { foo: (x: T, y: U) => T; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : { foo: (x: T, y: U) => T; } +>b : { foo: (x: T, y: U) => T; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: T, y: U): T; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // no error, bug? +>foo7 : { (x: A): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>a : { foo(x: T, y: U): T; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: T, y: U): T; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>a : { foo(x: T, y: U): T; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : { foo: (x: T, y: U) => T; } +>b : { foo: (x: T, y: U) => T; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>a : { foo(x: T, y: U): T; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : { foo: (x: T, y: U) => T; } +>b : { foo: (x: T, y: U) => T; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.js index d9fb0242fa7..a323308b2e4 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.js @@ -103,6 +103,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.types new file mode 100644 index 00000000000..2a5ab2dfe70 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.types @@ -0,0 +1,365 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class A { +>A : A + + foo(x: T): string { return null; } +>foo : (x: T) => string +>T : T +>Date : Date +>x : T +>T : T +} + +class B> { +>B : B +>T : T +>Array : T[] + + foo(x: T): string { return null; } +>foo : (x: T) => string +>x : T +>T : T +} + +class C { +>C : C +>T : T +>String : String + + foo(x: T): string { return null; } +>foo : (x: T) => string +>x : T +>T : T +} + +interface I { +>I : I +>T : T +>Number : Number + + foo(x: T): string; +>foo : (x: T) => string +>x : T +>T : T +} + +interface I2 { +>I2 : I2 + + foo(x: T): string; +>foo : (x: T) => string +>T : T +>Boolean : Boolean +>x : T +>T : T +} + +var a: { foo>(x: T): string } +>a : { foo(x: T): string; } +>foo : (x: T) => string +>T : T +>Array : T[] +>x : T +>T : T + +var b = { foo(x: T) { return ''; } }; +>b : { foo: (x: T) => string; } +>{ foo(x: T) { return ''; } } : { foo: (x: T) => string; } +>foo : (x: T) => string +>foo(x: T) { return ''; } : (x: T) => string +>T : T +>RegExp : RegExp +>x : T +>T : T + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B>); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B +>Array : T[] + +function foo1b(x: B>); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B +>Array : T[] + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I +>Number : Number + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I +>Number : Number + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: T): string; }): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>a : { foo(x: T): string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: T): string; }): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>a : { foo(x: T): string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: T): string; }): any; (x: { foo(x: T): string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: T) => string; }): any; (x: { foo: (x: T) => string; }): any; } +>x : { foo: (x: T) => string; } +>b : { foo: (x: T) => string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: T) => string; }): any; (x: { foo: (x: T) => string; }): any; } +>x : { foo: (x: T) => string; } +>b : { foo: (x: T) => string; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: T) => string; }): any; (x: { foo: (x: T) => string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B>); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B +>Array : T[] + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I +>Number : Number + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: T): string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>a : { foo(x: T): string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: T): string; }): any; } +>x : any + +function foo8(x: B>); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B +>Array : T[] + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I +>Number : Number + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B>); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B +>Array : T[] + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B>); +>foo10 : { (x: B): any; (x: { foo(x: T): string; }): any; } +>x : B +>B : B +>Array : T[] + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>a : { foo(x: T): string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: T): string; }): any; } +>x : any + +function foo11(x: B>); +>foo11 : { (x: B): any; (x: { foo: (x: T) => string; }): any; } +>x : B +>B : B +>Array : T[] + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: T) => string; }): any; } +>x : { foo: (x: T) => string; } +>b : { foo: (x: T) => string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: T) => string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I +>Number : Number + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: T): string; }): any; } +>x : I +>I : I +>Number : Number + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>a : { foo(x: T): string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: T): string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: T) => string; }): any; } +>x : I +>I : I +>Number : Number + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: T) => string; }): any; } +>x : { foo: (x: T) => string; } +>b : { foo: (x: T) => string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: T) => string; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.js index 278d454cb01..3a6261da8c0 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.js @@ -115,6 +115,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints2.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.js index fcdac6bdfb4..4e018372033 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.js @@ -124,6 +124,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints3.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var One = (function () { function One() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.js index 79d50124d1e..783749605ef 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.js @@ -103,6 +103,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.types new file mode 100644 index 00000000000..9de1a816ab7 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.types @@ -0,0 +1,340 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class A { +>A : A + + foo(x: T): string { return null; } +>foo : (x: T) => string +>T : T +>x : T +>T : T +} + +class B { +>B : B +>T : T + + foo(x: T): number { return null; } +>foo : (x: T) => number +>x : T +>T : T +} + +class C { +>C : C +>T : T + + foo(x: T): boolean { return null; } +>foo : (x: T) => boolean +>x : T +>T : T +} + +interface I { +>I : I +>T : T + + foo(x: T): Date; +>foo : (x: T) => Date +>x : T +>T : T +>Date : Date +} + +interface I2 { +>I2 : I2 + + foo(x: T): RegExp; +>foo : (x: T) => RegExp +>T : T +>x : T +>T : T +>RegExp : RegExp +} + +var a: { foo(x: T): T } +>a : { foo(x: T): T; } +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var b = { foo(x: T) { return null; } }; +>b : { foo: (x: T) => any; } +>{ foo(x: T) { return null; } } : { foo: (x: T) => any; } +>foo : (x: T) => any +>foo(x: T) { return null; } : (x: T) => any +>T : T +>x : T +>T : T + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } +>x : { foo: (x: T) => any; } +>b : { foo: (x: T) => any; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } +>x : { foo: (x: T) => any; } +>b : { foo: (x: T) => any; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>x : { foo: (x: T) => any; } +>b : { foo: (x: T) => any; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>x : { foo: (x: T) => any; } +>b : { foo: (x: T) => any; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.js index 5d42e66aac1..d743283e22a 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.js @@ -103,6 +103,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.types new file mode 100644 index 00000000000..f6f33890c07 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.types @@ -0,0 +1,368 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class A { +>A : A + + foo(x: T): string { return null; } +>foo : (x: T) => string +>T : T +>Date : Date +>x : T +>T : T +} + +class B { +>B : B +>T : T +>Date : Date + + foo(x: T): number { return null; } +>foo : (x: T) => number +>x : T +>T : T +} + +class C { +>C : C +>T : T +>Date : Date + + foo(x: T): boolean { return null; } +>foo : (x: T) => boolean +>x : T +>T : T +} + +interface I { +>I : I +>T : T +>Date : Date + + foo(x: T): Date; +>foo : (x: T) => Date +>x : T +>T : T +>Date : Date +} + +interface I2 { +>I2 : I2 + + foo(x: T): RegExp; +>foo : (x: T) => RegExp +>T : T +>Date : Date +>x : T +>T : T +>RegExp : RegExp +} + +var a: { foo(x: T): T } +>a : { foo(x: T): T; } +>foo : (x: T) => T +>T : T +>Date : Date +>x : T +>T : T +>T : T + +var b = { foo(x: T) { return null; } }; +>b : { foo: (x: T) => any; } +>{ foo(x: T) { return null; } } : { foo: (x: T) => any; } +>foo : (x: T) => any +>foo(x: T) { return null; } : (x: T) => any +>T : T +>Date : Date +>x : T +>T : T + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B +>Date : Date + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B +>Date : Date + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } +>x : { foo: (x: T) => any; } +>b : { foo: (x: T) => any; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } +>x : { foo: (x: T) => any; } +>b : { foo: (x: T) => any; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B +>Date : Date + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B +>Date : Date + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B +>Date : Date + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : B +>B : B +>Date : Date + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>x : B +>B : B +>Date : Date + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>x : { foo: (x: T) => any; } +>b : { foo: (x: T) => any; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I +>Date : Date + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : I +>I : I +>Date : Date + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>a : { foo(x: T): T; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>x : I +>I : I +>Date : Date + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>x : { foo: (x: T) => any; } +>b : { foo: (x: T) => any; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.js index 33ac618cb76..a344917987e 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.js @@ -101,6 +101,7 @@ function foo15(x: C, B>); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.types new file mode 100644 index 00000000000..dbd6d3e7d03 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.types @@ -0,0 +1,374 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.ts === +// object types are identical structurally + +class A { +>A : A + + foo(x: T): T { return null; } +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} + +class B { +>B : B +>U : U +>V : V + + foo(x: U): U { return null; } +>foo : (x: U) => U +>x : U +>U : U +>U : U +} + +class C { +>C : C +>V : V +>W : W +>X : X + + foo(x: V): V { return null; } +>foo : (x: V) => V +>x : V +>V : V +>V : V +} + +interface I { +>I : I +>X : X +>Y : Y +>Z : Z +>A : A + + foo(x: X): X; +>foo : (x: X) => X +>x : X +>X : X +>X : X +} + +interface I2 { +>I2 : I2 + + foo(x: Y): Y; +>foo : (x: Y) => Y +>Y : Y +>Z : Z +>A : A +>B : B +>x : Y +>Y : Y +>Y : Y +} + +var a: { foo(x: Z): Z } +>a : { foo(x: Z): Z; } +>foo : (x: Z) => Z +>Z : Z +>A : A +>B : B +>C : C +>D : D +>x : Z +>Z : Z +>Z : Z + +var b = { foo(x: A) { return x; } }; +>b : { foo: (x: A) => A; } +>{ foo(x: A) { return x; } } : { foo: (x: A) => A; } +>foo : (x: A) => A +>foo(x: A) { return x; } : (x: A) => A +>A : A +>B : B +>C : C +>D : D +>E : E +>F : F +>x : A +>A : A +>x : A + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: Z): Z; }): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: Z): Z; }): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: Z): Z; }): any; (x: { foo(x: Z): Z; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } +>x : { foo: (x: A) => A; } +>b : { foo: (x: A) => A; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } +>x : { foo: (x: A) => A; } +>b : { foo: (x: A) => A; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: Z): Z; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // no error, bug? +>foo7 : { (x: A): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: Z): Z; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C>): any; } +>x : B +>B : B + +function foo9(x: C>); // error +>foo9 : { (x: B): any; (x: C>): any; } +>x : C> +>C : C +>B : B + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C>): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: Z): Z; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: Z): Z; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>x : { foo: (x: A) => A; } +>b : { foo: (x: A) => A; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>x : any + +function foo12(x: I, number, Date, string>); +>foo12 : { (x: I, number, Date, string>): any; (x: C, number, Date>): any; } +>x : I, number, Date, string> +>I : I +>B : B +>Date : Date + +function foo12(x: C, number, Date>); // error +>foo12 : { (x: I, number, Date, string>): any; (x: C, number, Date>): any; } +>x : C, number, Date> +>C : C +>B : B +>Date : Date + +function foo12(x: any) { } +>foo12 : { (x: I, number, Date, string>): any; (x: C, number, Date>): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: Z): Z; }): any; } +>x : I +>I : I +>Date : Date +>RegExp : RegExp +>Date : Date + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: Z): Z; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>x : I +>I : I +>Date : Date +>RegExp : RegExp + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>x : { foo: (x: A) => A; } +>b : { foo: (x: A) => A; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C, B>): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C, B>); // ok +>foo15 : { (x: I2): any; (x: C, B>): any; } +>x : C, B> +>C : C +>B : B +>B : B + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C, B>): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.js index 4d434a28f84..944fb7d9846 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.js @@ -41,6 +41,7 @@ function foo15(x: I2); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.js] +// object types are identical structurally var a; function foo1(x) { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.types new file mode 100644 index 00000000000..8cc0042cc9e --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.types @@ -0,0 +1,142 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts2.ts === +// object types are identical structurally + + +interface I { +>I : I +>X : X +>Y : Y +>Z : Z +>A : A + + (x: X): X; +>x : X +>X : X +>X : X +} + +interface I2 { +>I2 : I2 + + (x: Y): Y; +>Y : Y +>Z : Z +>A : A +>B : B +>x : Y +>Y : Y +>Y : Y +} + +var a: { (x: Z): Z } +>a : (x: Z) => Z +>Z : Z +>A : A +>B : B +>C : C +>D : D +>x : Z +>Z : Z +>Z : Z + +function foo1(x: I); +>foo1 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo1(x: I); // error +>foo1 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo1(x: any) { } +>foo1 : { (x: I): any; (x: I): any; } +>x : any + +function foo2(x: I2); +>foo2 : { (x: I2): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo2(x: I2); // error +>foo2 : { (x: I2): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo2(x: any) { } +>foo2 : { (x: I2): any; (x: I2): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: (x: Z) => Z): any; (x: (x: Z) => Z): any; } +>x : (x: Z) => Z +>a : (x: Z) => Z + +function foo3(x: typeof a); // error +>foo3 : { (x: (x: Z) => Z): any; (x: (x: Z) => Z): any; } +>x : (x: Z) => Z +>a : (x: Z) => Z + +function foo3(x: any) { } +>foo3 : { (x: (x: Z) => Z): any; (x: (x: Z) => Z): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: (x: Z) => Z): any; } +>x : I +>I : I +>Date : Date + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: (x: Z) => Z): any; } +>x : (x: Z) => Z +>a : (x: Z) => Z + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: (x: Z) => Z): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: I2): any; } +>x : I +>I : I +>Date : Date + +function foo14(x: I2); // error +>foo14 : { (x: I): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: I2): any; } +>x : any + +function foo14b(x: typeof a); +>foo14b : { (x: (x: Z) => Z): any; (x: I2): any; } +>x : (x: Z) => Z +>a : (x: Z) => Z + +function foo14b(x: I2); // ok +>foo14b : { (x: (x: Z) => Z): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo14b(x: any) { } +>foo14b : { (x: (x: Z) => Z): any; (x: I2): any; } +>x : any + +function foo15(x: I); +>foo15 : { (x: I): any; (x: I2): any; } +>x : I +>I : I +>Date : Date + +function foo15(x: I2); // ok +>foo15 : { (x: I): any; (x: I2): any; } +>x : I2 +>I2 : I2 + +function foo15(x: any) { } +>foo15 : { (x: I): any; (x: I2): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.js index 51191a5d081..19aea02ced0 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.js @@ -101,6 +101,7 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.types new file mode 100644 index 00000000000..85e83528cd0 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.types @@ -0,0 +1,342 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.ts === +// object types are identical structurally + +class A { +>A : A + + foo(x: T): T { return null; } +>foo : (x: T) => T +>T : T +>x : T +>T : T +>T : T +} + +class B { +>B : B +>U : U + + foo(x: U): U { return null; } +>foo : (x: U) => U +>x : U +>U : U +>U : U +} + +class C { +>C : C +>V : V + + foo(x: V): V { return null; } +>foo : (x: V) => V +>x : V +>V : V +>V : V +} + +interface I { +>I : I +>X : X + + foo(x: X): X; +>foo : (x: X) => X +>x : X +>X : X +>X : X +} + +interface I2 { +>I2 : I2 + + foo(x: Y): Y; +>foo : (x: Y) => Y +>Y : Y +>x : Y +>Y : Y +>Y : Y +} + +var a: { foo(x: Z): Z } +>a : { foo(x: Z): Z; } +>foo : (x: Z) => Z +>Z : Z +>x : Z +>Z : Z +>Z : Z + +var b = { foo(x: A) { return x; } }; +>b : { foo: (x: A) => A; } +>{ foo(x: A) { return x; } } : { foo: (x: A) => A; } +>foo : (x: A) => A +>foo(x: A) { return x; } : (x: A) => A +>A : A +>x : A +>A : A +>x : A + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: Z): Z; }): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: Z): Z; }): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: Z): Z; }): any; (x: { foo(x: Z): Z; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } +>x : { foo: (x: A) => A; } +>b : { foo: (x: A) => A; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } +>x : { foo: (x: A) => A; } +>b : { foo: (x: A) => A; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: Z): Z; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: Z): Z; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: Z): Z; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: Z): Z; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>x : { foo: (x: A) => A; } +>b : { foo: (x: A) => A; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: Z): Z; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: Z): Z; }): any; } +>x : { foo(x: Z): Z; } +>a : { foo(x: Z): Z; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: Z): Z; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>x : { foo: (x: A) => A; } +>b : { foo: (x: A) => A; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.js index eacf93b7f00..82f87fe4904 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.js @@ -103,6 +103,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesOptionalParams.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.types new file mode 100644 index 00000000000..bef916fc410 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.types @@ -0,0 +1,358 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class A { +>A : A + + foo(x: T, y?: T): T { return null; } +>foo : (x: T, y?: T) => T +>T : T +>x : T +>T : T +>y : T +>T : T +>T : T +} + +class B { +>B : B +>T : T + + foo(x: T, y?: T): T { return null; } +>foo : (x: T, y?: T) => T +>x : T +>T : T +>y : T +>T : T +>T : T +} + +class C { +>C : C +>T : T + + foo(x: T, y?: T): T { return null; } +>foo : (x: T, y?: T) => T +>x : T +>T : T +>y : T +>T : T +>T : T +} + +interface I { +>I : I +>T : T + + foo(x: T, y?: T): T; +>foo : (x: T, y?: T) => T +>x : T +>T : T +>y : T +>T : T +>T : T +} + +interface I2 { +>I2 : I2 + + foo(x: T, y?: T): T; +>foo : (x: T, y?: T) => T +>T : T +>x : T +>T : T +>y : T +>T : T +>T : T +} + +var a: { foo(x: T, y?: T): T } +>a : { foo(x: T, y?: T): T; } +>foo : (x: T, y?: T) => T +>T : T +>x : T +>T : T +>y : T +>T : T +>T : T + +var b = { foo(x: T, y?: T) { return x; } }; +>b : { foo: (x: T, y?: T) => T; } +>{ foo(x: T, y?: T) { return x; } } : { foo: (x: T, y?: T) => T; } +>foo : (x: T, y?: T) => T +>foo(x: T, y?: T) { return x; } : (x: T, y?: T) => T +>T : T +>x : T +>T : T +>y : T +>T : T +>x : T + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: T, y?: T): T; }): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>a : { foo(x: T, y?: T): T; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: T, y?: T): T; }): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>a : { foo(x: T, y?: T): T; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: T, y?: T): T; }): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: T, y?: T) => T; }): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : { foo: (x: T, y?: T) => T; } +>b : { foo: (x: T, y?: T) => T; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: T, y?: T) => T; }): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : { foo: (x: T, y?: T) => T; } +>b : { foo: (x: T, y?: T) => T; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: T, y?: T) => T; }): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // no error, bug? +>foo7 : { (x: A): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>a : { foo(x: T, y?: T): T; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>a : { foo(x: T, y?: T): T; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : { foo: (x: T, y?: T) => T; } +>b : { foo: (x: T, y?: T) => T; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>a : { foo(x: T, y?: T): T; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : { foo: (x: T, y?: T) => T; } +>b : { foo: (x: T, y?: T) => T; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.js index aeefeaeeb9e..02222da9530 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.js @@ -103,6 +103,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesOptionalParams2.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.types new file mode 100644 index 00000000000..c8a4ad6be29 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.types @@ -0,0 +1,365 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class A { +>A : A + + foo(x: T, y?: U): T { return null; } +>foo : (x: T, y?: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T +} + +class B { +>B : B +>T : T +>U : U + + foo(x: T, y?: U): T { return null; } +>foo : (x: T, y?: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +class C { +>C : C +>T : T +>U : U + + foo(x: T, y?: U): T { return null; } +>foo : (x: T, y?: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +interface I { +>I : I +>T : T +>U : U + + foo(x: T, y?: U): T; +>foo : (x: T, y?: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +interface I2 { +>I2 : I2 + + foo(x: T, y?: U): T; +>foo : (x: T, y?: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T +} + +var a: { foo(x: T, y?: U): T } +>a : { foo(x: T, y?: U): T; } +>foo : (x: T, y?: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + +var b = { foo(x: T, y?: U) { return x; } }; +>b : { foo: (x: T, y?: U) => T; } +>{ foo(x: T, y?: U) { return x; } } : { foo: (x: T, y?: U) => T; } +>foo : (x: T, y?: U) => T +>foo(x: T, y?: U) { return x; } : (x: T, y?: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>x : T + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: T, y?: U) => T; }): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : { foo: (x: T, y?: U) => T; } +>b : { foo: (x: T, y?: U) => T; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: T, y?: U) => T; }): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : { foo: (x: T, y?: U) => T; } +>b : { foo: (x: T, y?: U) => T; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: T, y?: U) => T; }): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // no error, bug? +>foo7 : { (x: A): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : { foo: (x: T, y?: U) => T; } +>b : { foo: (x: T, y?: U) => T; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : { foo: (x: T, y?: U) => T; } +>b : { foo: (x: T, y?: U) => T; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.js b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.js index fe8f5456537..bf0f8211205 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.js @@ -103,6 +103,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericCallSignaturesOptionalParams3.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.types new file mode 100644 index 00000000000..06c23dcd0b1 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.types @@ -0,0 +1,365 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class A { +>A : A + + foo(x: T, y?: U): T { return null; } +>foo : (x: T, y?: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T +} + +class B { +>B : B +>T : T +>U : U + + foo(x: T, y: U): T { return null; } +>foo : (x: T, y: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +class C { +>C : C +>T : T +>U : U + + foo(x: T, y?: U): T { return null; } +>foo : (x: T, y?: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +interface I { +>I : I +>T : T +>U : U + + foo(x: T, y?: U): T; +>foo : (x: T, y?: U) => T +>x : T +>T : T +>y : U +>U : U +>T : T +} + +interface I2 { +>I2 : I2 + + foo(x: T, y: U): T; +>foo : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T +} + +var a: { foo(x: T, y?: U): T } +>a : { foo(x: T, y?: U): T; } +>foo : (x: T, y?: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T + +var b = { foo(x: T, y: U) { return x; } }; +>b : { foo: (x: T, y: U) => T; } +>{ foo(x: T, y: U) { return x; } } : { foo: (x: T, y: U) => T; } +>foo : (x: T, y: U) => T +>foo(x: T, y: U) { return x; } : (x: T, y: U) => T +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>x : T + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo3(x: any) { } +>foo3 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : { foo: (x: T, y: U) => T; } +>b : { foo: (x: T, y: U) => T; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : { foo: (x: T, y: U) => T; } +>b : { foo: (x: T, y: U) => T; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // no error, bug? +>foo7 : { (x: A): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : { foo: (x: T, y: U) => T; } +>b : { foo: (x: T, y: U) => T; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>a : { foo(x: T, y?: U): T; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : { foo: (x: T, y: U) => T; } +>b : { foo: (x: T, y: U) => T; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js index c349fe5bd1d..e495fa98d65 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js @@ -76,6 +76,9 @@ function foo14(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var B = (function () { function B(x) { return null; @@ -91,7 +94,7 @@ var C = (function () { var a; var b = { new: function (x) { return ''; -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.types new file mode 100644 index 00000000000..8a41814e1a9 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.types @@ -0,0 +1,261 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class B> { +>B : B +>T : T +>Array : T[] + + constructor(x: T) { return null; } +>x : T +>T : T +} + +class C { +>C : C +>T : T +>String : String + + constructor(x: T) { return null; } +>x : T +>T : T +} + +interface I { +>I : I +>T : T +>Number : Number + + new(x: T): string; +>x : T +>T : T +} + +interface I2 { +>I2 : I2 + + new(x: T): string; +>T : T +>Boolean : Boolean +>x : T +>T : T +} + +var a: { new>(x: T): string } +>a : new (x: T) => string +>T : T +>Array : T[] +>x : T +>T : T + +var b = { new(x: T) { return ''; } }; // not a construct signature, function called new +>b : { new: (x: T) => string; } +>{ new(x: T) { return ''; } } : { new: (x: T) => string; } +>new : (x: T) => string +>new(x: T) { return ''; } : (x: T) => string +>T : T +>RegExp : RegExp +>x : T +>T : T + +function foo1b(x: B>); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B +>Array : T[] + +function foo1b(x: B>); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B +>Array : T[] + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I +>Number : Number + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I +>Number : Number + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: T) => string): any; (x: new (x: T) => string): any; } +>x : new (x: T) => string +>a : new (x: T) => string + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: T) => string): any; (x: new (x: T) => string): any; } +>x : new (x: T) => string +>a : new (x: T) => string + +function foo3(x: any) { } +>foo3 : { (x: new (x: T) => string): any; (x: new (x: T) => string): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: T) => string; }): any; (x: { new: (x: T) => string; }): any; } +>x : { new: (x: T) => string; } +>b : { new: (x: T) => string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: T) => string; }): any; (x: { new: (x: T) => string; }): any; } +>x : { new: (x: T) => string; } +>b : { new: (x: T) => string; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: T) => string; }): any; (x: { new: (x: T) => string; }): any; } +>x : any + +function foo8(x: B>); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B +>Array : T[] + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I +>Number : Number + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B>); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B +>Array : T[] + +function foo9(x: C); // error, types are structurally equal +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B>); +>foo10 : { (x: B): any; (x: new (x: T) => string): any; } +>x : B +>B : B +>Array : T[] + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: new (x: T) => string): any; } +>x : new (x: T) => string +>a : new (x: T) => string + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: T) => string): any; } +>x : any + +function foo11(x: B>); +>foo11 : { (x: B): any; (x: { new: (x: T) => string; }): any; } +>x : B +>B : B +>Array : T[] + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: T) => string; }): any; } +>x : { new: (x: T) => string; } +>b : { new: (x: T) => string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: T) => string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I +>Number : Number + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C +>String : String + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: T) => string): any; } +>x : I +>I : I +>Number : Number + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: new (x: T) => string): any; } +>x : new (x: T) => string +>a : new (x: T) => string + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: T) => string): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: T) => string; }): any; } +>x : I +>I : I +>Number : Number + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: T) => string; }): any; } +>x : { new: (x: T) => string; } +>b : { new: (x: T) => string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: T) => string; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js index b18a0fa382f..de9a9bf8c2b 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js @@ -87,6 +87,9 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var B = (function () { function B(x, y) { return null; @@ -108,7 +111,7 @@ var D = (function () { var a; var b = { new: function (x, y) { return ''; -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js index 7cd068b7cb5..ee06af6d5e1 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js @@ -96,6 +96,9 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var One = (function () { function One() { } @@ -127,7 +130,7 @@ var D = (function () { var a; var b = { new: function (x, y) { return ''; -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js index 5d68df0d2a2..48b8f4a5c5d 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js @@ -83,6 +83,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var B = (function () { function B(x) { return null; @@ -98,7 +101,7 @@ var C = (function () { var a; var b = { new: function (x) { return null; -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.types new file mode 100644 index 00000000000..1eac69f7f23 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.types @@ -0,0 +1,270 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class B { +>B : B +>T : T + + constructor(x: T) { return null; } +>x : T +>T : T +} + +class C { +>C : C +>T : T + + constructor(x: T) { return null; } +>x : T +>T : T +} + +interface I { +>I : I +>T : T + + new(x: T): Date; +>x : T +>T : T +>Date : Date +} + +interface I2 { +>I2 : I2 + + new(x: T): RegExp; +>T : T +>x : T +>T : T +>RegExp : RegExp +} + +var a: { new(x: T): T } +>a : new (x: T) => T +>T : T +>x : T +>T : T +>T : T + +var b = { new(x: T): T { return null; } }; // not a construct signature, function called new +>b : { new: (x: T) => T; } +>{ new(x: T): T { return null; } } : { new: (x: T) => T; } +>new : (x: T) => T +>new(x: T): T { return null; } : (x: T) => T +>T : T +>x : T +>T : T +>T : T + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: T) => T): any; (x: new (x: T) => T): any; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: T) => T): any; (x: new (x: T) => T): any; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo3(x: any) { } +>foo3 : { (x: new (x: T) => T): any; (x: new (x: T) => T): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: T) => T; }): any; (x: { new: (x: T) => T; }): any; } +>x : { new: (x: T) => T; } +>b : { new: (x: T) => T; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: T) => T; }): any; (x: { new: (x: T) => T; }): any; } +>x : { new: (x: T) => T; } +>b : { new: (x: T) => T; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: T) => T; }): any; (x: { new: (x: T) => T; }): any; } +>x : any + +function foo5(x: typeof a): number; +>foo5 : { (x: new (x: T) => T): number; (x: { new: (x: T) => T; }): string; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo5(x: typeof b): string; // ok +>foo5 : { (x: new (x: T) => T): number; (x: { new: (x: T) => T; }): string; } +>x : { new: (x: T) => T; } +>b : { new: (x: T) => T; } + +function foo5(x: any): any { } +>foo5 : { (x: new (x: T) => T): number; (x: { new: (x: T) => T; }): string; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error since types are structurally equal +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: T) => T): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: new (x: T) => T): any; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: T) => T): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: T) => T; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: T) => T; }): any; } +>x : { new: (x: T) => T; } +>b : { new: (x: T) => T; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: T) => T; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: T) => T): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: new (x: T) => T): any; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: T) => T): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: T) => T; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: T) => T; }): any; } +>x : { new: (x: T) => T; } +>b : { new: (x: T) => T; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: T) => T; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js index 8d35ec4aa39..b09dcf9ba9c 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js @@ -79,6 +79,9 @@ function foo15(x: C); // ok function foo15(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var B = (function () { function B(x) { return null; @@ -94,7 +97,7 @@ var C = (function () { var a; var b = { new: function (x) { return null; -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.types new file mode 100644 index 00000000000..308f592ef12 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.types @@ -0,0 +1,279 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class B { +>B : B +>T : T +>Date : Date + + constructor(x: T) { return null; } +>x : T +>T : T +} + +class C { +>C : C +>T : T +>Date : Date + + constructor(x: T) { return null; } +>x : T +>T : T +} + +interface I { +>I : I +>T : T +>Date : Date + + new(x: T): Date; +>x : T +>T : T +>Date : Date +} + +interface I2 { +>I2 : I2 + + new(x: T): RegExp; +>T : T +>Date : Date +>x : T +>T : T +>RegExp : RegExp +} + +var a: { new(x: T): T } +>a : new (x: T) => T +>T : T +>Date : Date +>x : T +>T : T +>T : T + +var b = { new(x: T) { return null; } }; // not a construct signature, function called new +>b : { new: (x: T) => any; } +>{ new(x: T) { return null; } } : { new: (x: T) => any; } +>new : (x: T) => any +>new(x: T) { return null; } : (x: T) => any +>T : T +>Date : Date +>x : T +>T : T + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B +>Date : Date + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B +>Date : Date + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: T) => T): any; (x: new (x: T) => T): any; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: T) => T): any; (x: new (x: T) => T): any; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo3(x: any) { } +>foo3 : { (x: new (x: T) => T): any; (x: new (x: T) => T): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: T) => any; }): any; (x: { new: (x: T) => any; }): any; } +>x : { new: (x: T) => any; } +>b : { new: (x: T) => any; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: T) => any; }): any; (x: { new: (x: T) => any; }): any; } +>x : { new: (x: T) => any; } +>b : { new: (x: T) => any; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: T) => any; }): any; (x: { new: (x: T) => any; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B +>Date : Date + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B +>Date : Date + +function foo9(x: C); // error since types are structurally equal +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: T) => T): any; } +>x : B +>B : B +>Date : Date + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: new (x: T) => T): any; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: T) => T): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: T) => any; }): any; } +>x : B +>B : B +>Date : Date + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: T) => any; }): any; } +>x : { new: (x: T) => any; } +>b : { new: (x: T) => any; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: T) => any; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I +>Date : Date + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: T) => T): any; } +>x : I +>I : I +>Date : Date + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: new (x: T) => T): any; } +>x : new (x: T) => T +>a : new (x: T) => T + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: T) => T): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: T) => any; }): any; } +>x : I +>I : I +>Date : Date + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: T) => any; }): any; } +>x : { new: (x: T) => any; } +>b : { new: (x: T) => any; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: T) => any; }): any; } +>x : any + +function foo15(x: I2); +>foo15 : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo15(x: C); // ok +>foo15 : { (x: I2): any; (x: C): any; } +>x : C +>C : C +>Date : Date + +function foo15(x: any) { } +>foo15 : { (x: I2): any; (x: C): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js index 5d1bffee033..6a086c317a2 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js @@ -73,6 +73,7 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js] +// object types are identical structurally var B = (function () { function B(x) { return null; diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.types new file mode 100644 index 00000000000..0276458ea91 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.types @@ -0,0 +1,277 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.ts === +// object types are identical structurally + +class B { +>B : B +>U : U +>V : V + + constructor(x: U) { return null; } +>x : U +>U : U +} + +class C { +>C : C +>V : V +>W : W +>X : X + + constructor(x: V) { return null; } +>x : V +>V : V +} + +interface I { +>I : I +>X : X +>Y : Y +>Z : Z +>A : A + + new(x: X): B; +>x : X +>X : X +>B : B +>X : X +>Y : Y +} + +interface I2 { +>I2 : I2 + + new (x: Y): C; +>Y : Y +>Z : Z +>A : A +>B : B +>x : Y +>Y : Y +>C : C +>Y : Y +>Z : Z +>A : A +} + +var a: { new (x: Z): C; } +>a : new (x: Z) => C +>Z : Z +>A : A +>B : B +>CC : CC +>D : D +>x : Z +>Z : Z +>C : C +>Z : Z +>A : A +>B : B + +var b = { new(x: A) { return x; } }; +>b : { new: (x: A) => A; } +>{ new(x: A) { return x; } } : { new: (x: A) => A; } +>new : (x: A) => A +>new(x: A) { return x; } : (x: A) => A +>A : A +>B : B +>C : C +>D : D +>E : E +>F : F +>x : A +>A : A +>x : A + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: Z) => C): any; (x: new (x: Z) => C): any; } +>x : new (x: Z) => C +>a : new (x: Z) => C + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: Z) => C): any; (x: new (x: Z) => C): any; } +>x : new (x: Z) => C +>a : new (x: Z) => C + +function foo3(x: any) { } +>foo3 : { (x: new (x: Z) => C): any; (x: new (x: Z) => C): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: A) => A; }): any; (x: { new: (x: A) => A; }): any; } +>x : { new: (x: A) => A; } +>b : { new: (x: A) => A; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: A) => A; }): any; (x: { new: (x: A) => A; }): any; } +>x : { new: (x: A) => A; } +>b : { new: (x: A) => A; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: A) => A; }): any; (x: { new: (x: A) => A; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // BUG 832086 +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I +>Date : Date + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C>): any; } +>x : B +>B : B + +function foo9(x: C>); // error +>foo9 : { (x: B): any; (x: C>): any; } +>x : C> +>C : C +>B : B + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C>): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: Z) => C): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: new (x: Z) => C): any; } +>x : new (x: Z) => C +>a : new (x: Z) => C + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: Z) => C): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: A) => A; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: A) => A; }): any; } +>x : { new: (x: A) => A; } +>b : { new: (x: A) => A; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: A) => A; }): any; } +>x : any + +function foo12(x: I, number, Date, string>); +>foo12 : { (x: I, number, Date, string>): any; (x: C, number, Date>): any; } +>x : I, number, Date, string> +>I : I +>B : B +>Date : Date + +function foo12(x: C, number, Date>); // ok +>foo12 : { (x: I, number, Date, string>): any; (x: C, number, Date>): any; } +>x : C, number, Date> +>C : C +>B : B +>Date : Date + +function foo12(x: any) { } +>foo12 : { (x: I, number, Date, string>): any; (x: C, number, Date>): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // BUG 832086 +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: Z) => C): any; } +>x : I +>I : I +>Date : Date +>RegExp : RegExp +>Date : Date + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: new (x: Z) => C): any; } +>x : new (x: Z) => C +>a : new (x: Z) => C + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: Z) => C): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: A) => A; }): any; } +>x : I +>I : I +>Date : Date +>RegExp : RegExp + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: A) => A; }): any; } +>x : { new: (x: A) => A; } +>b : { new: (x: A) => A; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: A) => A; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js index 2d0653b4e94..e9cb0e7b0d5 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js @@ -73,6 +73,7 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js] +// object types are identical structurally var B = (function () { function B(x) { return null; diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.types new file mode 100644 index 00000000000..10a8da26907 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.types @@ -0,0 +1,246 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.ts === +// object types are identical structurally + +class B { +>B : B +>U : U + + constructor(x: U) { return null; } +>x : U +>U : U +} + +class C { +>C : C +>V : V + + constructor(x: V) { return null; } +>x : V +>V : V +} + +interface I { +>I : I +>X : X + + new(x: X): B; +>x : X +>X : X +>B : B +>X : X +} + +interface I2 { +>I2 : I2 + + new(x: Y): C; +>Y : Y +>x : Y +>Y : Y +>C : C +>Y : Y +} + +var a: { new(x: Z): B } +>a : new (x: Z) => B +>Z : Z +>x : Z +>Z : Z +>B : B +>Z : Z + +var b = { new(x: A) { return new C(x); } }; +>b : { new: (x: A) => C; } +>{ new(x: A) { return new C(x); } } : { new: (x: A) => C; } +>new : (x: A) => C +>new(x: A) { return new C(x); } : (x: A) => C +>A : A +>x : A +>A : A +>new C(x) : C +>C : typeof C +>A : A +>x : A + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: Z) => B): any; (x: new (x: Z) => B): any; } +>x : new (x: Z) => B +>a : new (x: Z) => B + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: Z) => B): any; (x: new (x: Z) => B): any; } +>x : new (x: Z) => B +>a : new (x: Z) => B + +function foo3(x: any) { } +>foo3 : { (x: new (x: Z) => B): any; (x: new (x: Z) => B): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: A) => C; }): any; (x: { new: (x: A) => C; }): any; } +>x : { new: (x: A) => C; } +>b : { new: (x: A) => C; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: A) => C; }): any; (x: { new: (x: A) => C; }): any; } +>x : { new: (x: A) => C; } +>b : { new: (x: A) => C; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: A) => C; }): any; (x: { new: (x: A) => C; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // BUG 832086 +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: Z) => B): any; } +>x : B +>B : B + +function foo10(x: typeof a); // BUG 832086 +>foo10 : { (x: B): any; (x: new (x: Z) => B): any; } +>x : new (x: Z) => B +>a : new (x: Z) => B + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: Z) => B): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: A) => C; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: A) => C; }): any; } +>x : { new: (x: A) => C; } +>b : { new: (x: A) => C; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: A) => C; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // BUG 832086 +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: Z) => B): any; } +>x : I +>I : I + +function foo13(x: typeof a); // BUG 832086 +>foo13 : { (x: I): any; (x: new (x: Z) => B): any; } +>x : new (x: Z) => B +>a : new (x: Z) => B + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: Z) => B): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: A) => C; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: A) => C; }): any; } +>x : { new: (x: A) => C; } +>b : { new: (x: A) => C; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: A) => C; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js index 57da54fa5c3..42ab74801b1 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js @@ -75,6 +75,9 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var B = (function () { function B(x, y) { return null; @@ -90,7 +93,7 @@ var C = (function () { var a; var b = { new: function (x, y) { return new C(x, y); -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.types new file mode 100644 index 00000000000..28ef6a81505 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.types @@ -0,0 +1,261 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class B { +>B : B +>T : T + + constructor(x: T, y?: T) { return null; } +>x : T +>T : T +>y : T +>T : T +} + +class C { +>C : C +>T : T + + constructor(x: T, y?: T) { return null; } +>x : T +>T : T +>y : T +>T : T +} + +interface I { +>I : I +>T : T + + new(x: T, y?: T): B; +>x : T +>T : T +>y : T +>T : T +>B : B +>T : T +} + +interface I2 { +>I2 : I2 + + new(x: T, y?: T): C; +>T : T +>x : T +>T : T +>y : T +>T : T +>C : C +>T : T +} + +var a: { new(x: T, y?: T): B } +>a : new (x: T, y?: T) => B +>T : T +>x : T +>T : T +>y : T +>T : T +>B : B +>T : T + +var b = { new(x: T, y?: T) { return new C(x, y); } }; // not a construct signature, function called new +>b : { new: (x: T, y?: T) => C; } +>{ new(x: T, y?: T) { return new C(x, y); } } : { new: (x: T, y?: T) => C; } +>new : (x: T, y?: T) => C +>new(x: T, y?: T) { return new C(x, y); } : (x: T, y?: T) => C +>T : T +>x : T +>T : T +>y : T +>T : T +>new C(x, y) : C +>C : typeof C +>T : T +>x : T +>y : T + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: T, y?: T) => B): any; (x: new (x: T, y?: T) => B): any; } +>x : new (x: T, y?: T) => B +>a : new (x: T, y?: T) => B + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: T, y?: T) => B): any; (x: new (x: T, y?: T) => B): any; } +>x : new (x: T, y?: T) => B +>a : new (x: T, y?: T) => B + +function foo3(x: any) { } +>foo3 : { (x: new (x: T, y?: T) => B): any; (x: new (x: T, y?: T) => B): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: T, y?: T) => C; }): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : { new: (x: T, y?: T) => C; } +>b : { new: (x: T, y?: T) => C; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: T, y?: T) => C; }): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : { new: (x: T, y?: T) => C; } +>b : { new: (x: T, y?: T) => C; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: T, y?: T) => C; }): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : any + +function foo8(x: B): string; +>foo8 : { (x: B): string; (x: I): number; } +>x : B +>B : B + +function foo8(x: I): number; // BUG 832086 +>foo8 : { (x: B): string; (x: I): number; } +>x : I +>I : I + +function foo8(x: any): any { } +>foo8 : { (x: B): string; (x: I): number; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error, differ only by return type +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: T, y?: T) => B): any; } +>x : B +>B : B + +function foo10(x: typeof a); // BUG 832086 +>foo10 : { (x: B): any; (x: new (x: T, y?: T) => B): any; } +>x : new (x: T, y?: T) => B +>a : new (x: T, y?: T) => B + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: T, y?: T) => B): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : { new: (x: T, y?: T) => C; } +>b : { new: (x: T, y?: T) => C; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // BUG 832086 +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: T, y?: T) => B): any; } +>x : I +>I : I + +function foo13(x: typeof a); // BUG 832086 +>foo13 : { (x: I): any; (x: new (x: T, y?: T) => B): any; } +>x : new (x: T, y?: T) => B +>a : new (x: T, y?: T) => B + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: T, y?: T) => B): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : { new: (x: T, y?: T) => C; } +>b : { new: (x: T, y?: T) => C; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: T, y?: T) => C; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js index 0eaf30f07c9..182a642af91 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js @@ -75,6 +75,9 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var B = (function () { function B(x, y) { return null; @@ -90,7 +93,7 @@ var C = (function () { var a; var b = { new: function (x, y) { return new C(x, y); -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.types new file mode 100644 index 00000000000..e75f1ce7cbb --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.types @@ -0,0 +1,271 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class B { +>B : B +>T : T +>U : U + + constructor(x: T, y?: U) { return null; } +>x : T +>T : T +>y : U +>U : U +} + +class C { +>C : C +>T : T +>U : U + + constructor(x: T, y?: U) { return null; } +>x : T +>T : T +>y : U +>U : U +} + +interface I { +>I : I +>T : T +>U : U + + new (x: T, y?: U): B; +>x : T +>T : T +>y : U +>U : U +>B : B +>T : T +>U : U +} + +interface I2 { +>I2 : I2 + + new (x: T, y?: U): C; +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>C : C +>T : T +>U : U +} + +var a: { new(x: T, y?: U): B } +>a : new (x: T, y?: U) => B +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>B : B +>T : T +>U : U + +var b = { new(x: T, y?: U) { return new C(x, y); } }; // not a construct signature, function called new +>b : { new: (x: T, y?: U) => C; } +>{ new(x: T, y?: U) { return new C(x, y); } } : { new: (x: T, y?: U) => C; } +>new : (x: T, y?: U) => C +>new(x: T, y?: U) { return new C(x, y); } : (x: T, y?: U) => C +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>new C(x, y) : C +>C : typeof C +>T : T +>U : U +>x : T +>y : U + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: T, y?: U) => B): any; (x: new (x: T, y?: U) => B): any; } +>x : new (x: T, y?: U) => B +>a : new (x: T, y?: U) => B + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: T, y?: U) => B): any; (x: new (x: T, y?: U) => B): any; } +>x : new (x: T, y?: U) => B +>a : new (x: T, y?: U) => B + +function foo3(x: any) { } +>foo3 : { (x: new (x: T, y?: U) => B): any; (x: new (x: T, y?: U) => B): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: T, y?: U) => C; }): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : { new: (x: T, y?: U) => C; } +>b : { new: (x: T, y?: U) => C; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: T, y?: U) => C; }): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : { new: (x: T, y?: U) => C; } +>b : { new: (x: T, y?: U) => C; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: T, y?: U) => C; }): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // BUG 832086 +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: T, y?: U) => B): any; } +>x : B +>B : B + +function foo10(x: typeof a); // BUG 832086 +>foo10 : { (x: B): any; (x: new (x: T, y?: U) => B): any; } +>x : new (x: T, y?: U) => B +>a : new (x: T, y?: U) => B + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: T, y?: U) => B): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : { new: (x: T, y?: U) => C; } +>b : { new: (x: T, y?: U) => C; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // BUG 832086 +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // ok +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: T, y?: U) => B): any; } +>x : I +>I : I + +function foo13(x: typeof a); // BUG 832086 +>foo13 : { (x: I): any; (x: new (x: T, y?: U) => B): any; } +>x : new (x: T, y?: U) => B +>a : new (x: T, y?: U) => B + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: T, y?: U) => B): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : { new: (x: T, y?: U) => C; } +>b : { new: (x: T, y?: U) => C; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: T, y?: U) => C; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js index caecc755fc6..a3714bd9dd2 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js @@ -75,6 +75,9 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js] +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. var B = (function () { function B(x, y) { return null; @@ -90,7 +93,7 @@ var C = (function () { var a; var b = { new: function (x, y) { return new C(x, y); -} }; +} }; // not a construct signature, function called new function foo1b(x) { } function foo1c(x) { diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.types new file mode 100644 index 00000000000..5f5d592df34 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.types @@ -0,0 +1,271 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.ts === +// Two call or construct signatures are considered identical when they have the same number of type parameters and, considering those +// parameters pairwise identical, have identical type parameter constraints, identical number of parameters with identical kind(required, +// optional or rest) and types, and identical return types. + +class B { +>B : B +>T : T +>U : U + + constructor(x: T, y: U) { return null; } +>x : T +>T : T +>y : U +>U : U +} + +class C { +>C : C +>T : T +>U : U + + constructor(x: T, y?: U) { return null; } +>x : T +>T : T +>y : U +>U : U +} + +interface I { +>I : I +>T : T +>U : U + + new(x: T, y?: U): B; +>x : T +>T : T +>y : U +>U : U +>B : B +>T : T +>U : U +} + +interface I2 { +>I2 : I2 + + new(x: T, y: U): C; +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>C : C +>T : T +>U : U +} + +var a: { new (x: T, y?: U): B }; +>a : new (x: T, y?: U) => B +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>B : B +>T : T +>U : U + +var b = { new(x: T, y: U) { return new C(x, y); } }; // not a construct signature, function called new +>b : { new: (x: T, y: U) => C; } +>{ new(x: T, y: U) { return new C(x, y); } } : { new: (x: T, y: U) => C; } +>new : (x: T, y: U) => C +>new(x: T, y: U) { return new C(x, y); } : (x: T, y: U) => C +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>new C(x, y) : C +>C : typeof C +>T : T +>U : U +>x : T +>y : U + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: new (x: T, y?: U) => B): any; (x: new (x: T, y?: U) => B): any; } +>x : new (x: T, y?: U) => B +>a : new (x: T, y?: U) => B + +function foo3(x: typeof a); // error +>foo3 : { (x: new (x: T, y?: U) => B): any; (x: new (x: T, y?: U) => B): any; } +>x : new (x: T, y?: U) => B +>a : new (x: T, y?: U) => B + +function foo3(x: any) { } +>foo3 : { (x: new (x: T, y?: U) => B): any; (x: new (x: T, y?: U) => B): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { new: (x: T, y: U) => C; }): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : { new: (x: T, y: U) => C; } +>b : { new: (x: T, y: U) => C; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { new: (x: T, y: U) => C; }): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : { new: (x: T, y: U) => C; } +>b : { new: (x: T, y: U) => C; } + +function foo4(x: any) { } +>foo4 : { (x: { new: (x: T, y: U) => C; }): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // BUG 832086 +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error, differ only by return type +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: new (x: T, y?: U) => B): any; } +>x : B +>B : B + +function foo10(x: typeof a); // BUG 832086 +>foo10 : { (x: B): any; (x: new (x: T, y?: U) => B): any; } +>x : new (x: T, y?: U) => B +>a : new (x: T, y?: U) => B + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: new (x: T, y?: U) => B): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : { new: (x: T, y: U) => C; } +>b : { new: (x: T, y: U) => C; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo12b(x: I2); +>foo12b : { (x: I2): any; (x: C): any; } +>x : I2 +>I2 : I2 + +function foo12b(x: C); // BUG 832086 +>foo12b : { (x: I2): any; (x: C): any; } +>x : C +>C : C + +function foo12b(x: any) { } +>foo12b : { (x: I2): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: new (x: T, y?: U) => B): any; } +>x : I +>I : I + +function foo13(x: typeof a); // BUG 832086 +>foo13 : { (x: I): any; (x: new (x: T, y?: U) => B): any; } +>x : new (x: T, y?: U) => B +>a : new (x: T, y?: U) => B + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: new (x: T, y?: U) => B): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : { new: (x: T, y: U) => C; } +>b : { new: (x: T, y: U) => C; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { new: (x: T, y: U) => C; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.js b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.js index b4eb5dbb104..06cb05a2dd6 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.js +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.js @@ -123,6 +123,7 @@ function foo16(x: any) { } //// [objectTypesIdentityWithNumericIndexers1.js] +// object types are identical structurally var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types new file mode 100644 index 00000000000..ab83b0c78f0 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types @@ -0,0 +1,378 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers1.ts === +// object types are identical structurally + +class A { +>A : A + + [x: number]: string; +>x : number +} + +class B { +>B : B + + [x: number]: string; +>x : number +} + +class C { +>C : C +>T : T + + [x: number]: T; +>x : number +>T : T +} + +interface I { +>I : I + + [x: number]: string; +>x : number +} + +class PA extends A { +>PA : PA +>A : A +} + +class PB extends B { +>PB : PB +>B : B +} + +var a: { +>a : { [x: number]: string; } + + [x: number]: string; +>x : number +} +var b: { [x: number]: string; } = { foo: '' }; +>b : { [x: number]: string; } +>x : number +>{ foo: '' } : { [x: number]: string; foo: string; } +>foo : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>a : { [x: number]: string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>a : { [x: number]: string; } + +function foo3(x: any) { } +>foo3 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>b : { [x: number]: string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>b : { [x: number]: string; } + +function foo4(x: any) { } +>foo4 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // error +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo5c(x: A); +>foo5c : { (x: A): any; (x: PA): any; } +>x : A +>A : A + +function foo5c(x: PA); // error +>foo5c : { (x: A): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo5c(x: any) { } +>foo5c : { (x: A): any; (x: PA): any; } +>x : any + +function foo5d(x: A); +>foo5d : { (x: A): any; (x: PB): any; } +>x : A +>A : A + +function foo5d(x: PB); // error +>foo5d : { (x: A): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo5d(x: any) { } +>foo5d : { (x: A): any; (x: PB): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // error +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { [x: number]: string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>a : { [x: number]: string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // error +>foo10 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>a : { [x: number]: string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // error +>foo11 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>b : { [x: number]: string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo11b(x: B); +>foo11b : { (x: B): any; (x: PA): any; } +>x : B +>B : B + +function foo11b(x: PA); // error +>foo11b : { (x: B): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo11b(x: any) { } +>foo11b : { (x: B): any; (x: PA): any; } +>x : any + +function foo11c(x: B); +>foo11c : { (x: B): any; (x: PB): any; } +>x : B +>B : B + +function foo11c(x: PB); // error +>foo11c : { (x: B): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo11c(x: any) { } +>foo11c : { (x: B): any; (x: PB): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>a : { [x: number]: string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>b : { [x: number]: string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo15(x: I); +>foo15 : { (x: I): any; (x: PA): any; } +>x : I +>I : I + +function foo15(x: PA); // error +>foo15 : { (x: I): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo15(x: any) { } +>foo15 : { (x: I): any; (x: PA): any; } +>x : any + +function foo16(x: I); +>foo16 : { (x: I): any; (x: PB): any; } +>x : I +>I : I + +function foo16(x: PB); // error +>foo16 : { (x: I): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo16(x: any) { } +>foo16 : { (x: I): any; (x: PB): any; } +>x : any + + diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.js b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.js index 38ab266de44..b51f8383d4f 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.js +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.js @@ -126,6 +126,7 @@ function foo16(x: any) { } //// [objectTypesIdentityWithNumericIndexers2.js] +// object types are identical structurally var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types new file mode 100644 index 00000000000..cd8f19b2b7e --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types @@ -0,0 +1,397 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers2.ts === +// object types are identical structurally + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class A { +>A : A + + [x: number]: Base; +>x : number +>Base : Base +} + +class B { +>B : B + + [x: number]: Derived; +>x : number +>Derived : Derived +} + +class C { +>C : C +>T : T + + [x: number]: T; +>x : number +>T : T +} + +interface I { +>I : I + + [x: number]: Derived; +>x : number +>Derived : Derived +} + +class PA extends A { +>PA : PA +>A : A +} + +class PB extends B { +>PB : PB +>B : B +} + +var a: { +>a : { [x: number]: Base; } + + [x: number]: Base; +>x : number +>Base : Base +} +var b: { [x: number]: Derived; } = { foo: null }; +>b : { [x: number]: Derived; } +>x : number +>Derived : Derived +>{ foo: null } : { [x: number]: Derived; foo: Derived; } +>foo : Derived +>null : Derived +>Derived : Derived + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { [x: number]: Base; }): any; (x: { [x: number]: Base; }): any; } +>x : { [x: number]: Base; } +>a : { [x: number]: Base; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { [x: number]: Base; }): any; (x: { [x: number]: Base; }): any; } +>x : { [x: number]: Base; } +>a : { [x: number]: Base; } + +function foo3(x: any) { } +>foo3 : { (x: { [x: number]: Base; }): any; (x: { [x: number]: Base; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { [x: number]: Derived; }): any; (x: { [x: number]: Derived; }): any; } +>x : { [x: number]: Derived; } +>b : { [x: number]: Derived; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { [x: number]: Derived; }): any; (x: { [x: number]: Derived; }): any; } +>x : { [x: number]: Derived; } +>b : { [x: number]: Derived; } + +function foo4(x: any) { } +>foo4 : { (x: { [x: number]: Derived; }): any; (x: { [x: number]: Derived; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C +>Derived : Derived + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo5c(x: A); +>foo5c : { (x: A): any; (x: PA): any; } +>x : A +>A : A + +function foo5c(x: PA); // error +>foo5c : { (x: A): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo5c(x: any) { } +>foo5c : { (x: A): any; (x: PA): any; } +>x : any + +function foo5d(x: A); +>foo5d : { (x: A): any; (x: PB): any; } +>x : A +>A : A + +function foo5d(x: PB); // ok +>foo5d : { (x: A): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo5d(x: any) { } +>foo5d : { (x: A): any; (x: PB): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { [x: number]: Base; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { [x: number]: Base; }): any; } +>x : { [x: number]: Base; } +>a : { [x: number]: Base; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { [x: number]: Base; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C +>Base : Base + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { [x: number]: Base; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { [x: number]: Base; }): any; } +>x : { [x: number]: Base; } +>a : { [x: number]: Base; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { [x: number]: Base; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { [x: number]: Derived; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // error +>foo11 : { (x: B): any; (x: { [x: number]: Derived; }): any; } +>x : { [x: number]: Derived; } +>b : { [x: number]: Derived; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { [x: number]: Derived; }): any; } +>x : any + +function foo11b(x: B); +>foo11b : { (x: B): any; (x: PA): any; } +>x : B +>B : B + +function foo11b(x: PA); // ok +>foo11b : { (x: B): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo11b(x: any) { } +>foo11b : { (x: B): any; (x: PA): any; } +>x : any + +function foo11c(x: B); +>foo11c : { (x: B): any; (x: PB): any; } +>x : B +>B : B + +function foo11c(x: PB); // error +>foo11c : { (x: B): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo11c(x: any) { } +>foo11c : { (x: B): any; (x: PB): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C +>Derived : Derived + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { [x: number]: Base; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { [x: number]: Base; }): any; } +>x : { [x: number]: Base; } +>a : { [x: number]: Base; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { [x: number]: Base; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { [x: number]: Derived; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { [x: number]: Derived; }): any; } +>x : { [x: number]: Derived; } +>b : { [x: number]: Derived; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { [x: number]: Derived; }): any; } +>x : any + +function foo15(x: I); +>foo15 : { (x: I): any; (x: PA): any; } +>x : I +>I : I + +function foo15(x: PA); // ok +>foo15 : { (x: I): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo15(x: any) { } +>foo15 : { (x: I): any; (x: PA): any; } +>x : any + +function foo16(x: I); +>foo16 : { (x: I): any; (x: PB): any; } +>x : I +>I : I + +function foo16(x: PB); // error +>foo16 : { (x: I): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo16(x: any) { } +>foo16 : { (x: I): any; (x: PB): any; } +>x : any + + diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.js b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.js index 2cd751de2b7..f0c434d860b 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.js +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.js @@ -123,6 +123,7 @@ function foo16(x: any) { } //// [objectTypesIdentityWithNumericIndexers3.js] +// object types are identical structurally var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types new file mode 100644 index 00000000000..6a73749fc84 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types @@ -0,0 +1,378 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithNumericIndexers3.ts === +// object types are identical structurally + +class A { +>A : A + + [x: number]: string; +>x : number +} + +class B { +>B : B + + [x: string]: string; +>x : string +} + +class C { +>C : C +>T : T + + [x: number]: T; +>x : number +>T : T +} + +interface I { +>I : I + + [x: string]: string; +>x : string +} + +class PA extends A { +>PA : PA +>A : A +} + +class PB extends B { +>PB : PB +>B : B +} + +var a: { +>a : { [x: string]: string; } + + [x: string]: string; +>x : string +} +var b: { [x: number]: string; } = { foo: '' }; +>b : { [x: number]: string; } +>x : number +>{ foo: '' } : { [x: number]: string; foo: string; } +>foo : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo3(x: any) { } +>foo3 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>b : { [x: number]: string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>b : { [x: number]: string; } + +function foo4(x: any) { } +>foo4 : { (x: { [x: number]: string; }): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo5c(x: A); +>foo5c : { (x: A): any; (x: PA): any; } +>x : A +>A : A + +function foo5c(x: PA); // error +>foo5c : { (x: A): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo5c(x: any) { } +>foo5c : { (x: A): any; (x: PA): any; } +>x : any + +function foo5d(x: A); +>foo5d : { (x: A): any; (x: PB): any; } +>x : A +>A : A + +function foo5d(x: PB); // ok +>foo5d : { (x: A): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo5d(x: any) { } +>foo5d : { (x: A): any; (x: PB): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { [x: string]: string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // error +>foo10 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // ok +>foo11 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>b : { [x: number]: string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo11b(x: B); +>foo11b : { (x: B): any; (x: PA): any; } +>x : B +>B : B + +function foo11b(x: PA); // ok +>foo11b : { (x: B): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo11b(x: any) { } +>foo11b : { (x: B): any; (x: PA): any; } +>x : any + +function foo11c(x: B); +>foo11c : { (x: B): any; (x: PB): any; } +>x : B +>B : B + +function foo11c(x: PB); // error +>foo11c : { (x: B): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo11c(x: any) { } +>foo11c : { (x: B): any; (x: PB): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : { [x: number]: string; } +>b : { [x: number]: string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { [x: number]: string; }): any; } +>x : any + +function foo15(x: I); +>foo15 : { (x: I): any; (x: PA): any; } +>x : I +>I : I + +function foo15(x: PA); // ok +>foo15 : { (x: I): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo15(x: any) { } +>foo15 : { (x: I): any; (x: PA): any; } +>x : any + +function foo16(x: I); +>foo16 : { (x: I): any; (x: PB): any; } +>x : I +>I : I + +function foo16(x: PB); // error +>foo16 : { (x: I): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo16(x: any) { } +>foo16 : { (x: I): any; (x: PB): any; } +>x : any + + diff --git a/tests/baselines/reference/objectTypesIdentityWithOptionality.js b/tests/baselines/reference/objectTypesIdentityWithOptionality.js index 45cf97cb591..642e0617c69 100644 --- a/tests/baselines/reference/objectTypesIdentityWithOptionality.js +++ b/tests/baselines/reference/objectTypesIdentityWithOptionality.js @@ -57,6 +57,7 @@ function foo14(x: typeof b); // ok function foo14(x: any) { } //// [objectTypesIdentityWithOptionality.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithOptionality.types b/tests/baselines/reference/objectTypesIdentityWithOptionality.types new file mode 100644 index 00000000000..0ca5b552bf5 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithOptionality.types @@ -0,0 +1,168 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithOptionality.ts === +// object types are identical structurally + +class A { +>A : A + + foo: string; +>foo : string +} + +class B { +>B : B + + foo: string; +>foo : string +} + +class C { +>C : C +>T : T + + foo: T; +>foo : T +>T : T +} + +interface I { +>I : I + + foo?: string; +>foo : string +} + +var a: { foo?: string; } +>a : { foo?: string; } +>foo : string + +var b = { foo: '' }; +>b : { foo: string; } +>{ foo: '' } : { foo: string; } +>foo : string + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo?: string; }): any; (x: { foo?: string; }): any; } +>x : { foo?: string; } +>a : { foo?: string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo?: string; }): any; (x: { foo?: string; }): any; } +>x : { foo?: string; } +>a : { foo?: string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo?: string; }): any; (x: { foo?: string; }): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo?: string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // ok +>foo7 : { (x: A): any; (x: { foo?: string; }): any; } +>x : { foo?: string; } +>a : { foo?: string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo?: string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // ok +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo?: string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { foo?: string; }): any; } +>x : { foo?: string; } +>a : { foo?: string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo?: string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // ok +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo?: string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { foo?: string; }): any; } +>x : { foo?: string; } +>a : { foo?: string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo?: string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // ok +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithPrivates.js b/tests/baselines/reference/objectTypesIdentityWithPrivates.js index f14833bbd05..17e7240353d 100644 --- a/tests/baselines/reference/objectTypesIdentityWithPrivates.js +++ b/tests/baselines/reference/objectTypesIdentityWithPrivates.js @@ -121,6 +121,7 @@ function foo16(x: any) { } //// [objectTypesIdentityWithPrivates.js] +// object types are identical structurally var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/objectTypesIdentityWithPrivates.types b/tests/baselines/reference/objectTypesIdentityWithPrivates.types new file mode 100644 index 00000000000..391f6f1f200 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithPrivates.types @@ -0,0 +1,375 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates.ts === +// object types are identical structurally + +class A { +>A : A + + private foo: string; +>foo : string +} + +class B { +>B : B + + private foo: string; +>foo : string +} + +class C { +>C : C +>T : T + + private foo: T; +>foo : T +>T : T +} + +interface I { +>I : I + + foo: string; +>foo : string +} + +class PA extends A { +>PA : PA +>A : A +} + +class PB extends B { +>PB : PB +>B : B +} + +var a: { foo: string; } +>a : { foo: string; } +>foo : string + +var b = { foo: '' }; +>b : { foo: string; } +>{ foo: '' } : { foo: string; } +>foo : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // no error +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // no error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo5c(x: A); +>foo5c : { (x: A): any; (x: PA): any; } +>x : A +>A : A + +function foo5c(x: PA); // error +>foo5c : { (x: A): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo5c(x: any) { } +>foo5c : { (x: A): any; (x: PA): any; } +>x : any + +function foo5d(x: A); +>foo5d : { (x: A): any; (x: PB): any; } +>x : A +>A : A + +function foo5d(x: PB); // no error +>foo5d : { (x: A): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo5d(x: any) { } +>foo5d : { (x: A): any; (x: PB): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // no error +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // no error +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // no error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // no error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // no error +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // no error +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : any + +function foo11b(x: B); +>foo11b : { (x: B): any; (x: PA): any; } +>x : B +>B : B + +function foo11b(x: PA); // no error +>foo11b : { (x: B): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo11b(x: any) { } +>foo11b : { (x: B): any; (x: PA): any; } +>x : any + +function foo11c(x: B); +>foo11c : { (x: B): any; (x: PB): any; } +>x : B +>B : B + +function foo11c(x: PB); // error +>foo11c : { (x: B): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo11c(x: any) { } +>foo11c : { (x: B): any; (x: PB): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // no error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : any + +function foo15(x: I); +>foo15 : { (x: I): any; (x: PA): any; } +>x : I +>I : I + +function foo15(x: PA); // no error +>foo15 : { (x: I): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo15(x: any) { } +>foo15 : { (x: I): any; (x: PA): any; } +>x : any + +function foo16(x: I); +>foo16 : { (x: I): any; (x: PB): any; } +>x : I +>I : I + +function foo16(x: PB); // no error +>foo16 : { (x: I): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo16(x: any) { } +>foo16 : { (x: I): any; (x: PB): any; } +>x : any + + diff --git a/tests/baselines/reference/objectTypesIdentityWithPrivates2.js b/tests/baselines/reference/objectTypesIdentityWithPrivates2.js index 5eedb318fd0..4e62e7b551a 100644 --- a/tests/baselines/reference/objectTypesIdentityWithPrivates2.js +++ b/tests/baselines/reference/objectTypesIdentityWithPrivates2.js @@ -39,6 +39,7 @@ function foo6(x: any): any { } //// [objectTypesIdentityWithPrivates2.js] +// object types are identical structurally var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/objectTypesIdentityWithPrivates2.types b/tests/baselines/reference/objectTypesIdentityWithPrivates2.types new file mode 100644 index 00000000000..a29edc75162 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithPrivates2.types @@ -0,0 +1,119 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates2.ts === +// object types are identical structurally + +class C { +>C : C +>T : T + + private foo: T; +>foo : T +>T : T +} + +class D extends C { +>D : D +>T : T +>C : C +>T : T +} + +function foo1(x: C); +>foo1 : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1(x: C); // ok +>foo1 : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1(x: any) { } +>foo1 : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: D); +>foo2 : { (x: D): any; (x: D): any; } +>x : D +>D : D + +function foo2(x: D); // ok +>foo2 : { (x: D): any; (x: D): any; } +>x : D +>D : D + +function foo2(x: any) { } +>foo2 : { (x: D): any; (x: D): any; } +>x : any + +function foo3(x: C); +>foo3 : { (x: C): any; (x: D): any; } +>x : C +>C : C + +function foo3(x: D); // ok +>foo3 : { (x: C): any; (x: D): any; } +>x : D +>D : D + +function foo3(x: any) { } +>foo3 : { (x: C): any; (x: D): any; } +>x : any + +function foo4(x: C): number; +>foo4 : { (x: C): number; (x: D): string; } +>x : C +>C : C + +function foo4(x: D): string; // BUG 831926 +>foo4 : { (x: C): number; (x: D): string; } +>x : D +>D : D + +function foo4(x: any): any { } +>foo4 : { (x: C): number; (x: D): string; } +>x : any + +var r = foo4(new C()); +>r : number +>foo4(new C()) : number +>foo4 : { (x: C): number; (x: D): string; } +>new C() : C +>C : typeof C + +var r = foo4(new D()); +>r : number +>foo4(new D()) : number +>foo4 : { (x: C): number; (x: D): string; } +>new D() : D +>D : typeof D + +function foo5(x: C): number; +>foo5 : { (x: C): number; (x: C): string; } +>x : C +>C : C + +function foo5(x: C): string; // error +>foo5 : { (x: C): number; (x: C): string; } +>x : C +>C : C + +function foo5(x: any): any { } +>foo5 : { (x: C): number; (x: C): string; } +>x : any + +function foo6(x: D): number; +>foo6 : { (x: D): number; (x: D): string; } +>x : D +>D : D + +function foo6(x: D): string; // error +>foo6 : { (x: D): number; (x: D): string; } +>x : D +>D : D + +function foo6(x: any): any { } +>foo6 : { (x: D): number; (x: D): string; } +>x : any + + + diff --git a/tests/baselines/reference/objectTypesIdentityWithPublics.js b/tests/baselines/reference/objectTypesIdentityWithPublics.js index 1bc042a138f..061275372ac 100644 --- a/tests/baselines/reference/objectTypesIdentityWithPublics.js +++ b/tests/baselines/reference/objectTypesIdentityWithPublics.js @@ -89,6 +89,7 @@ function foo14(x: typeof b); // error function foo14(x: any) { } //// [objectTypesIdentityWithPublics.js] +// object types are identical structurally var A = (function () { function A() { } diff --git a/tests/baselines/reference/objectTypesIdentityWithPublics.types b/tests/baselines/reference/objectTypesIdentityWithPublics.types new file mode 100644 index 00000000000..411fe4fb88e --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithPublics.types @@ -0,0 +1,280 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPublics.ts === +// object types are identical structurally + +class A { +>A : A + + public foo: string; +>foo : string +} + +class B { +>B : B + + public foo: string; +>foo : string +} + +class C { +>C : C +>T : T + + public foo: T; +>foo : T +>T : T +} + +interface I { +>I : I + + foo: string; +>foo : string +} + +var a: { foo: string; } +>a : { foo: string; } +>foo : string + +var b = { foo: '' }; +>b : { foo: string; } +>{ foo: '' } : { foo: string; } +>foo : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo3(x: any) { } +>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo4(x: any) { } +>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // error +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // error +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { foo: string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // error +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { foo: string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // error +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { foo: string; }): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>a : { foo: string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { foo: string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : { foo: string; } +>b : { foo: string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { foo: string; }): any; } +>x : any + diff --git a/tests/baselines/reference/objectTypesIdentityWithStringIndexers.js b/tests/baselines/reference/objectTypesIdentityWithStringIndexers.js index 4e09410e0f9..538c6267710 100644 --- a/tests/baselines/reference/objectTypesIdentityWithStringIndexers.js +++ b/tests/baselines/reference/objectTypesIdentityWithStringIndexers.js @@ -123,6 +123,7 @@ function foo16(x: any) { } //// [objectTypesIdentityWithStringIndexers.js] +// object types are identical structurally var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types b/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types new file mode 100644 index 00000000000..83a73646874 --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types @@ -0,0 +1,378 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers.ts === +// object types are identical structurally + +class A { +>A : A + + [x: string]: string; +>x : string +} + +class B { +>B : B + + [x: string]: string; +>x : string +} + +class C { +>C : C +>T : T + + [x: string]: T; +>x : string +>T : T +} + +interface I { +>I : I + + [x: string]: string; +>x : string +} + +class PA extends A { +>PA : PA +>A : A +} + +class PB extends B { +>PB : PB +>B : B +} + +var a: { +>a : { [x: string]: string; } + + [x: string]: string; +>x : string +} +var b: { [x: string]: string; } = { foo: '' }; +>b : { [x: string]: string; } +>x : string +>{ foo: '' } : { [x: string]: string; foo: string; } +>foo : string + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo3(x: any) { } +>foo3 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>b : { [x: string]: string; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>b : { [x: string]: string; } + +function foo4(x: any) { } +>foo4 : { (x: { [x: string]: string; }): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // error +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // error +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo5c(x: A); +>foo5c : { (x: A): any; (x: PA): any; } +>x : A +>A : A + +function foo5c(x: PA); // error +>foo5c : { (x: A): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo5c(x: any) { } +>foo5c : { (x: A): any; (x: PA): any; } +>x : any + +function foo5d(x: A); +>foo5d : { (x: A): any; (x: PB): any; } +>x : A +>A : A + +function foo5d(x: PB); // error +>foo5d : { (x: A): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo5d(x: any) { } +>foo5d : { (x: A): any; (x: PB): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // error +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { [x: string]: string; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // error +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // error +>foo10 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // error +>foo11 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>b : { [x: string]: string; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo11b(x: B); +>foo11b : { (x: B): any; (x: PA): any; } +>x : B +>B : B + +function foo11b(x: PA); // error +>foo11b : { (x: B): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo11b(x: any) { } +>foo11b : { (x: B): any; (x: PA): any; } +>x : any + +function foo11c(x: B); +>foo11c : { (x: B): any; (x: PB): any; } +>x : B +>B : B + +function foo11c(x: PB); // error +>foo11c : { (x: B): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo11c(x: any) { } +>foo11c : { (x: B): any; (x: PB): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // error +>foo13 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>a : { [x: string]: string; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : { [x: string]: string; } +>b : { [x: string]: string; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { [x: string]: string; }): any; } +>x : any + +function foo15(x: I); +>foo15 : { (x: I): any; (x: PA): any; } +>x : I +>I : I + +function foo15(x: PA); // error +>foo15 : { (x: I): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo15(x: any) { } +>foo15 : { (x: I): any; (x: PA): any; } +>x : any + +function foo16(x: I); +>foo16 : { (x: I): any; (x: PB): any; } +>x : I +>I : I + +function foo16(x: PB); // error +>foo16 : { (x: I): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo16(x: any) { } +>foo16 : { (x: I): any; (x: PB): any; } +>x : any + + diff --git a/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.js b/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.js index 46a4065a7eb..cbf4dfff6c4 100644 --- a/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.js +++ b/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.js @@ -126,6 +126,7 @@ function foo16(x: any) { } //// [objectTypesIdentityWithStringIndexers2.js] +// object types are identical structurally var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } diff --git a/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types b/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types new file mode 100644 index 00000000000..c621be1e26b --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types @@ -0,0 +1,397 @@ +=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithStringIndexers2.ts === +// object types are identical structurally + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class A { +>A : A + + [x: string]: Base; +>x : string +>Base : Base +} + +class B { +>B : B + + [x: string]: Derived; +>x : string +>Derived : Derived +} + +class C { +>C : C +>T : T + + [x: string]: T; +>x : string +>T : T +} + +interface I { +>I : I + + [x: string]: Derived; +>x : string +>Derived : Derived +} + +class PA extends A { +>PA : PA +>A : A +} + +class PB extends B { +>PB : PB +>B : B +} + +var a: { +>a : { [x: string]: Base; } + + [x: string]: Base; +>x : string +>Base : Base +} +var b: { [x: string]: Derived; } = { foo: null }; +>b : { [x: string]: Derived; } +>x : string +>Derived : Derived +>{ foo: null } : { [x: string]: Derived; foo: Derived; } +>foo : Derived +>null : Derived +>Derived : Derived + +function foo1(x: A); +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: A); // error +>foo1 : { (x: A): any; (x: A): any; } +>x : A +>A : A + +function foo1(x: any) { } +>foo1 : { (x: A): any; (x: A): any; } +>x : any + +function foo1b(x: B); +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: B); // error +>foo1b : { (x: B): any; (x: B): any; } +>x : B +>B : B + +function foo1b(x: any) { } +>foo1b : { (x: B): any; (x: B): any; } +>x : any + +function foo1c(x: C); +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: C); // error +>foo1c : { (x: C): any; (x: C): any; } +>x : C +>C : C + +function foo1c(x: any) { } +>foo1c : { (x: C): any; (x: C): any; } +>x : any + +function foo2(x: I); +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: I); // error +>foo2 : { (x: I): any; (x: I): any; } +>x : I +>I : I + +function foo2(x: any) { } +>foo2 : { (x: I): any; (x: I): any; } +>x : any + +function foo3(x: typeof a); +>foo3 : { (x: { [x: string]: Base; }): any; (x: { [x: string]: Base; }): any; } +>x : { [x: string]: Base; } +>a : { [x: string]: Base; } + +function foo3(x: typeof a); // error +>foo3 : { (x: { [x: string]: Base; }): any; (x: { [x: string]: Base; }): any; } +>x : { [x: string]: Base; } +>a : { [x: string]: Base; } + +function foo3(x: any) { } +>foo3 : { (x: { [x: string]: Base; }): any; (x: { [x: string]: Base; }): any; } +>x : any + +function foo4(x: typeof b); +>foo4 : { (x: { [x: string]: Derived; }): any; (x: { [x: string]: Derived; }): any; } +>x : { [x: string]: Derived; } +>b : { [x: string]: Derived; } + +function foo4(x: typeof b); // error +>foo4 : { (x: { [x: string]: Derived; }): any; (x: { [x: string]: Derived; }): any; } +>x : { [x: string]: Derived; } +>b : { [x: string]: Derived; } + +function foo4(x: any) { } +>foo4 : { (x: { [x: string]: Derived; }): any; (x: { [x: string]: Derived; }): any; } +>x : any + +function foo5(x: A); +>foo5 : { (x: A): any; (x: B): any; } +>x : A +>A : A + +function foo5(x: B); // ok +>foo5 : { (x: A): any; (x: B): any; } +>x : B +>B : B + +function foo5(x: any) { } +>foo5 : { (x: A): any; (x: B): any; } +>x : any + +function foo5b(x: A); +>foo5b : { (x: A): any; (x: C): any; } +>x : A +>A : A + +function foo5b(x: C); // ok +>foo5b : { (x: A): any; (x: C): any; } +>x : C +>C : C +>Derived : Derived + +function foo5b(x: any) { } +>foo5b : { (x: A): any; (x: C): any; } +>x : any + +function foo5c(x: A); +>foo5c : { (x: A): any; (x: PA): any; } +>x : A +>A : A + +function foo5c(x: PA); // error +>foo5c : { (x: A): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo5c(x: any) { } +>foo5c : { (x: A): any; (x: PA): any; } +>x : any + +function foo5d(x: A); +>foo5d : { (x: A): any; (x: PB): any; } +>x : A +>A : A + +function foo5d(x: PB); // ok +>foo5d : { (x: A): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo5d(x: any) { } +>foo5d : { (x: A): any; (x: PB): any; } +>x : any + +function foo6(x: A); +>foo6 : { (x: A): any; (x: I): any; } +>x : A +>A : A + +function foo6(x: I); // ok +>foo6 : { (x: A): any; (x: I): any; } +>x : I +>I : I + +function foo6(x: any) { } +>foo6 : { (x: A): any; (x: I): any; } +>x : any + +function foo7(x: A); +>foo7 : { (x: A): any; (x: { [x: string]: Base; }): any; } +>x : A +>A : A + +function foo7(x: typeof a); // error +>foo7 : { (x: A): any; (x: { [x: string]: Base; }): any; } +>x : { [x: string]: Base; } +>a : { [x: string]: Base; } + +function foo7(x: any) { } +>foo7 : { (x: A): any; (x: { [x: string]: Base; }): any; } +>x : any + +function foo8(x: B); +>foo8 : { (x: B): any; (x: I): any; } +>x : B +>B : B + +function foo8(x: I); // error +>foo8 : { (x: B): any; (x: I): any; } +>x : I +>I : I + +function foo8(x: any) { } +>foo8 : { (x: B): any; (x: I): any; } +>x : any + +function foo9(x: B); +>foo9 : { (x: B): any; (x: C): any; } +>x : B +>B : B + +function foo9(x: C); // ok +>foo9 : { (x: B): any; (x: C): any; } +>x : C +>C : C +>Base : Base + +function foo9(x: any) { } +>foo9 : { (x: B): any; (x: C): any; } +>x : any + +function foo10(x: B); +>foo10 : { (x: B): any; (x: { [x: string]: Base; }): any; } +>x : B +>B : B + +function foo10(x: typeof a); // ok +>foo10 : { (x: B): any; (x: { [x: string]: Base; }): any; } +>x : { [x: string]: Base; } +>a : { [x: string]: Base; } + +function foo10(x: any) { } +>foo10 : { (x: B): any; (x: { [x: string]: Base; }): any; } +>x : any + +function foo11(x: B); +>foo11 : { (x: B): any; (x: { [x: string]: Derived; }): any; } +>x : B +>B : B + +function foo11(x: typeof b); // error +>foo11 : { (x: B): any; (x: { [x: string]: Derived; }): any; } +>x : { [x: string]: Derived; } +>b : { [x: string]: Derived; } + +function foo11(x: any) { } +>foo11 : { (x: B): any; (x: { [x: string]: Derived; }): any; } +>x : any + +function foo11b(x: B); +>foo11b : { (x: B): any; (x: PA): any; } +>x : B +>B : B + +function foo11b(x: PA); // ok +>foo11b : { (x: B): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo11b(x: any) { } +>foo11b : { (x: B): any; (x: PA): any; } +>x : any + +function foo11c(x: B); +>foo11c : { (x: B): any; (x: PB): any; } +>x : B +>B : B + +function foo11c(x: PB); // error +>foo11c : { (x: B): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo11c(x: any) { } +>foo11c : { (x: B): any; (x: PB): any; } +>x : any + +function foo12(x: I); +>foo12 : { (x: I): any; (x: C): any; } +>x : I +>I : I + +function foo12(x: C); // error +>foo12 : { (x: I): any; (x: C): any; } +>x : C +>C : C +>Derived : Derived + +function foo12(x: any) { } +>foo12 : { (x: I): any; (x: C): any; } +>x : any + +function foo13(x: I); +>foo13 : { (x: I): any; (x: { [x: string]: Base; }): any; } +>x : I +>I : I + +function foo13(x: typeof a); // ok +>foo13 : { (x: I): any; (x: { [x: string]: Base; }): any; } +>x : { [x: string]: Base; } +>a : { [x: string]: Base; } + +function foo13(x: any) { } +>foo13 : { (x: I): any; (x: { [x: string]: Base; }): any; } +>x : any + +function foo14(x: I); +>foo14 : { (x: I): any; (x: { [x: string]: Derived; }): any; } +>x : I +>I : I + +function foo14(x: typeof b); // error +>foo14 : { (x: I): any; (x: { [x: string]: Derived; }): any; } +>x : { [x: string]: Derived; } +>b : { [x: string]: Derived; } + +function foo14(x: any) { } +>foo14 : { (x: I): any; (x: { [x: string]: Derived; }): any; } +>x : any + +function foo15(x: I); +>foo15 : { (x: I): any; (x: PA): any; } +>x : I +>I : I + +function foo15(x: PA); // ok +>foo15 : { (x: I): any; (x: PA): any; } +>x : PA +>PA : PA + +function foo15(x: any) { } +>foo15 : { (x: I): any; (x: PA): any; } +>x : any + +function foo16(x: I); +>foo16 : { (x: I): any; (x: PB): any; } +>x : I +>I : I + +function foo16(x: PB); // error +>foo16 : { (x: I): any; (x: PB): any; } +>x : PB +>PB : PB + +function foo16(x: any) { } +>foo16 : { (x: I): any; (x: PB): any; } +>x : any + + diff --git a/tests/baselines/reference/objectTypesWithPredefinedTypesAsName.js b/tests/baselines/reference/objectTypesWithPredefinedTypesAsName.js index 7026ae1d892..650ceb664df 100644 --- a/tests/baselines/reference/objectTypesWithPredefinedTypesAsName.js +++ b/tests/baselines/reference/objectTypesWithPredefinedTypesAsName.js @@ -14,6 +14,7 @@ class string { } //// [objectTypesWithPredefinedTypesAsName.js] +// it is an error to use a predefined type as a type name var any = (function () { function any() { } @@ -33,7 +34,7 @@ var bool = (function () { function bool() { } return bool; -})(); +})(); // not a predefined type anymore var string = (function () { function string() { } diff --git a/tests/baselines/reference/optionalAccessorsInInterface1.types b/tests/baselines/reference/optionalAccessorsInInterface1.types new file mode 100644 index 00000000000..c426cdba178 --- /dev/null +++ b/tests/baselines/reference/optionalAccessorsInInterface1.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/optionalAccessorsInInterface1.ts === +interface MyPropertyDescriptor { +>MyPropertyDescriptor : MyPropertyDescriptor + + get? (): any; +>get : () => any + + set? (v: any): void; +>set : (v: any) => void +>v : any +} + +declare function defineMyProperty(o: any, p: string, attributes: MyPropertyDescriptor): any; +>defineMyProperty : (o: any, p: string, attributes: MyPropertyDescriptor) => any +>o : any +>p : string +>attributes : MyPropertyDescriptor +>MyPropertyDescriptor : MyPropertyDescriptor + +defineMyProperty({}, "name", { get: function () { return 5; } }); +>defineMyProperty({}, "name", { get: function () { return 5; } }) : any +>defineMyProperty : (o: any, p: string, attributes: MyPropertyDescriptor) => any +>{} : {} +>{ get: function () { return 5; } } : { get: () => number; } +>get : () => number +>function () { return 5; } : () => number + +interface MyPropertyDescriptor2 { +>MyPropertyDescriptor2 : MyPropertyDescriptor2 + + get?: () => any; +>get : () => any + + set?: (v: any) => void; +>set : (v: any) => void +>v : any +} + +declare function defineMyProperty2(o: any, p: string, attributes: MyPropertyDescriptor2): any; +>defineMyProperty2 : (o: any, p: string, attributes: MyPropertyDescriptor2) => any +>o : any +>p : string +>attributes : MyPropertyDescriptor2 +>MyPropertyDescriptor2 : MyPropertyDescriptor2 + +defineMyProperty2({}, "name", { get: function () { return 5; } }); +>defineMyProperty2({}, "name", { get: function () { return 5; } }) : any +>defineMyProperty2 : (o: any, p: string, attributes: MyPropertyDescriptor2) => any +>{} : {} +>{ get: function () { return 5; } } : { get: () => number; } +>get : () => number +>function () { return 5; } : () => number + diff --git a/tests/baselines/reference/optionalConstructorArgInSuper.js b/tests/baselines/reference/optionalConstructorArgInSuper.js index 1e88fd81299..45c0e032cd8 100644 --- a/tests/baselines/reference/optionalConstructorArgInSuper.js +++ b/tests/baselines/reference/optionalConstructorArgInSuper.js @@ -31,6 +31,6 @@ var Derived = (function (_super) { } return Derived; })(Base); -var d = new Derived(); +var d = new Derived(); // bug caused an error here, couldn't select overload var d2; d2.foo(); diff --git a/tests/baselines/reference/optionalConstructorArgInSuper.types b/tests/baselines/reference/optionalConstructorArgInSuper.types new file mode 100644 index 00000000000..26d4fcb9abb --- /dev/null +++ b/tests/baselines/reference/optionalConstructorArgInSuper.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/optionalConstructorArgInSuper.ts === +class Base { +>Base : Base + + constructor(opt?) { } +>opt : any + + foo(other?) { } +>foo : (other?: any) => void +>other : any +} +class Derived extends Base { +>Derived : Derived +>Base : Base +} +var d = new Derived(); // bug caused an error here, couldn't select overload +>d : Derived +>new Derived() : Derived +>Derived : typeof Derived + +var d2: Derived; +>d2 : Derived +>Derived : Derived + +d2.foo(); +>d2.foo() : void +>d2.foo : (other?: any) => void +>d2 : Derived +>foo : (other?: any) => void + diff --git a/tests/baselines/reference/optionalFunctionArgAssignability.js b/tests/baselines/reference/optionalFunctionArgAssignability.js index 1179bdf58da..bca42060066 100644 --- a/tests/baselines/reference/optionalFunctionArgAssignability.js +++ b/tests/baselines/reference/optionalFunctionArgAssignability.js @@ -15,4 +15,4 @@ var a = function then(onFulfill, onReject) { var b = function then(onFulFill, onReject) { return null; }; -a = b; +a = b; // error because number is not assignable to string diff --git a/tests/baselines/reference/optionalParamAssignmentCompat.js b/tests/baselines/reference/optionalParamAssignmentCompat.js index a2b52677869..a0cdf4c88f4 100644 --- a/tests/baselines/reference/optionalParamAssignmentCompat.js +++ b/tests/baselines/reference/optionalParamAssignmentCompat.js @@ -13,5 +13,5 @@ var d: I1 = i2.m1; // should error //// [optionalParamAssignmentCompat.js] var i2; -var c = i2.p1; -var d = i2.m1; +var c = i2.p1; // should be ok +var d = i2.m1; // should error diff --git a/tests/baselines/reference/optionalParamInOverride.types b/tests/baselines/reference/optionalParamInOverride.types new file mode 100644 index 00000000000..f4530dace61 --- /dev/null +++ b/tests/baselines/reference/optionalParamInOverride.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/optionalParamInOverride.ts === +class Z { +>Z : Z + + public func(): void { } +>func : () => void +} +class Y extends Z { +>Y : Y +>Z : Z + + public func(value?: any): void { } +>func : (value?: any) => void +>value : any +} + diff --git a/tests/baselines/reference/optionalParamReferencingOtherParams1.types b/tests/baselines/reference/optionalParamReferencingOtherParams1.types new file mode 100644 index 00000000000..3a62d51759c --- /dev/null +++ b/tests/baselines/reference/optionalParamReferencingOtherParams1.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/optionalParamReferencingOtherParams1.ts === +function strange(x: number, y = x * 1, z = x + y) { +>strange : (x: number, y?: number, z?: number) => number +>x : number +>y : number +>x * 1 : number +>x : number +>z : number +>x + y : number +>x : number +>y : number + + return z; +>z : number +} diff --git a/tests/baselines/reference/optionalPropertiesTest.js b/tests/baselines/reference/optionalPropertiesTest.js index ec59d76d44e..708f2803a38 100644 --- a/tests/baselines/reference/optionalPropertiesTest.js +++ b/tests/baselines/reference/optionalPropertiesTest.js @@ -43,11 +43,11 @@ test10_1 = test10_2; //// [optionalPropertiesTest.js] var x; var foo; -foo = { id: 1234 }; -foo = { id: 1234, name: "test" }; -foo = { name: "test" }; +foo = { id: 1234 }; // Ok +foo = { id: 1234, name: "test" }; // Ok +foo = { name: "test" }; // Error, id missing foo = { id: 1234, print: function () { -} }; +} }; // Ok var s = foo.name || "default"; if (foo.print !== undefined) foo.print(); diff --git a/tests/baselines/reference/out-flag.js b/tests/baselines/reference/out-flag.js index 1bd785f9616..755703a12fe 100644 --- a/tests/baselines/reference/out-flag.js +++ b/tests/baselines/reference/out-flag.js @@ -17,13 +17,17 @@ class MyClass } //// [out-flag.js] +//// @out: bin\ +// my class comments var MyClass = (function () { function MyClass() { } + // my function comments MyClass.prototype.Count = function () { return 42; }; MyClass.prototype.SetCount = function (value) { + // }; return MyClass; })(); diff --git a/tests/baselines/reference/out-flag.js.map b/tests/baselines/reference/out-flag.js.map index c6371924e7c..9247af9d5d4 100644 --- a/tests/baselines/reference/out-flag.js.map +++ b/tests/baselines/reference/out-flag.js.map @@ -1,2 +1,2 @@ //// [out-flag.js.map] -{"version":3,"file":"out-flag.js","sourceRoot":"","sources":["out-flag.ts"],"names":["MyClass","MyClass.constructor","MyClass.Count","MyClass.SetCount"],"mappings":"AAGA,IAAM,OAAO;IAAbA,SAAMA,OAAOA;IAYbC,CAACA;IATUD,uBAAKA,GAAZA;QAEIE,MAAMA,CAACA,EAAEA,CAACA;IACdA,CAACA;IAEMF,0BAAQA,GAAfA,UAAgBA,KAAaA;IAG7BG,CAACA;IACLH,cAACA;AAADA,CAACA,AAZD,IAYC"} \ No newline at end of file +{"version":3,"file":"out-flag.js","sourceRoot":"","sources":["out-flag.ts"],"names":["MyClass","MyClass.constructor","MyClass.Count","MyClass.SetCount"],"mappings":"AAAA,eAAe;AAGf,AADA,oBAAoB;IACd,OAAO;IAAbA,SAAMA,OAAOA;IAYbC,CAACA;IAVGD,uBAAuBA;IAChBA,uBAAKA,GAAZA;QAEIE,MAAMA,CAACA,EAAEA,CAACA;IACdA,CAACA;IAEMF,0BAAQA,GAAfA,UAAgBA,KAAaA;QAEzBG,EAAEA;IACNA,CAACA;IACLH,cAACA;AAADA,CAACA,AAZD,IAYC"} \ No newline at end of file diff --git a/tests/baselines/reference/out-flag.sourcemap.txt b/tests/baselines/reference/out-flag.sourcemap.txt index 89856a332a3..c0289140552 100644 --- a/tests/baselines/reference/out-flag.sourcemap.txt +++ b/tests/baselines/reference/out-flag.sourcemap.txt @@ -8,20 +8,39 @@ sources: out-flag.ts emittedFile:tests/cases/compiler/out-flag.js sourceFile:out-flag.ts ------------------------------------------------------------------- ->>>var MyClass = (function () { +>>>//// @out: bin\ 1 > -2 >^^^^ -3 > ^^^^^^^ -4 > ^^^^^^^^^^^^^^-> -1 >//// @out: bin\ +2 >^^^^^^^^^^^^^^^ +3 > ^^^^^^-> +1 > +2 >//// @out: bin\ +1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +2 >Emitted(1, 16) Source(1, 16) + SourceIndex(0) +--- +>>>// my class comments +1-> +2 > +3 >^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^-> +1-> > >// my class comments > -2 >class -3 > MyClass -1 >Emitted(1, 1) Source(4, 1) + SourceIndex(0) -2 >Emitted(1, 5) Source(4, 7) + SourceIndex(0) -3 >Emitted(1, 12) Source(4, 14) + SourceIndex(0) +2 > +3 >// my class comments +1->Emitted(2, 1) Source(4, 1) + SourceIndex(0) +2 >Emitted(2, 1) Source(3, 1) + SourceIndex(0) +3 >Emitted(2, 21) Source(3, 21) + SourceIndex(0) +--- +>>>var MyClass = (function () { +1->^^^^ +2 > ^^^^^^^ +3 > ^^^^^^^^^^^^^^-> +1-> + >class +2 > MyClass +1->Emitted(3, 5) Source(4, 7) + SourceIndex(0) +2 >Emitted(3, 12) Source(4, 14) + SourceIndex(0) --- >>> function MyClass() { 1->^^^^ @@ -30,14 +49,14 @@ sourceFile:out-flag.ts 1-> 2 > class 3 > MyClass -1->Emitted(2, 5) Source(4, 1) + SourceIndex(0) name (MyClass) -2 >Emitted(2, 14) Source(4, 7) + SourceIndex(0) name (MyClass) -3 >Emitted(2, 21) Source(4, 14) + SourceIndex(0) name (MyClass) +1->Emitted(4, 5) Source(4, 1) + SourceIndex(0) name (MyClass) +2 >Emitted(4, 14) Source(4, 7) + SourceIndex(0) name (MyClass) +3 >Emitted(4, 21) Source(4, 14) + SourceIndex(0) name (MyClass) --- >>> } 1 >^^^^ 2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +3 > ^^^^^^^^^^^^^^^^^^^^^^^-> 1 > >{ > // my function comments @@ -52,19 +71,29 @@ sourceFile:out-flag.ts > } > 2 > } -1 >Emitted(3, 5) Source(16, 1) + SourceIndex(0) name (MyClass.constructor) -2 >Emitted(3, 6) Source(16, 2) + SourceIndex(0) name (MyClass.constructor) +1 >Emitted(5, 5) Source(16, 1) + SourceIndex(0) name (MyClass.constructor) +2 >Emitted(5, 6) Source(16, 2) + SourceIndex(0) name (MyClass.constructor) +--- +>>> // my function comments +1->^^^^ +2 > ^^^^^^^^^^^^^^^^^^^^^^^ +3 > ^^^^^^^^^^^^^^^^^-> +1-> +2 > // my function comments +1->Emitted(6, 5) Source(6, 5) + SourceIndex(0) name (MyClass) +2 >Emitted(6, 28) Source(6, 28) + SourceIndex(0) name (MyClass) --- >>> MyClass.prototype.Count = function () { 1->^^^^ 2 > ^^^^^^^^^^^^^^^^^^^^^^^ 3 > ^^^ -1-> +1-> + > public 2 > Count 3 > -1->Emitted(4, 5) Source(7, 12) + SourceIndex(0) name (MyClass) -2 >Emitted(4, 28) Source(7, 17) + SourceIndex(0) name (MyClass) -3 >Emitted(4, 31) Source(7, 5) + SourceIndex(0) name (MyClass) +1->Emitted(7, 5) Source(7, 12) + SourceIndex(0) name (MyClass) +2 >Emitted(7, 28) Source(7, 17) + SourceIndex(0) name (MyClass) +3 >Emitted(7, 31) Source(7, 5) + SourceIndex(0) name (MyClass) --- >>> return 42; 1 >^^^^^^^^ @@ -79,11 +108,11 @@ sourceFile:out-flag.ts 3 > 4 > 42 5 > ; -1 >Emitted(5, 9) Source(9, 9) + SourceIndex(0) name (MyClass.Count) -2 >Emitted(5, 15) Source(9, 15) + SourceIndex(0) name (MyClass.Count) -3 >Emitted(5, 16) Source(9, 16) + SourceIndex(0) name (MyClass.Count) -4 >Emitted(5, 18) Source(9, 18) + SourceIndex(0) name (MyClass.Count) -5 >Emitted(5, 19) Source(9, 19) + SourceIndex(0) name (MyClass.Count) +1 >Emitted(8, 9) Source(9, 9) + SourceIndex(0) name (MyClass.Count) +2 >Emitted(8, 15) Source(9, 15) + SourceIndex(0) name (MyClass.Count) +3 >Emitted(8, 16) Source(9, 16) + SourceIndex(0) name (MyClass.Count) +4 >Emitted(8, 18) Source(9, 18) + SourceIndex(0) name (MyClass.Count) +5 >Emitted(8, 19) Source(9, 19) + SourceIndex(0) name (MyClass.Count) --- >>> }; 1 >^^^^ @@ -92,8 +121,8 @@ sourceFile:out-flag.ts 1 > > 2 > } -1 >Emitted(6, 5) Source(10, 5) + SourceIndex(0) name (MyClass.Count) -2 >Emitted(6, 6) Source(10, 6) + SourceIndex(0) name (MyClass.Count) +1 >Emitted(9, 5) Source(10, 5) + SourceIndex(0) name (MyClass.Count) +2 >Emitted(9, 6) Source(10, 6) + SourceIndex(0) name (MyClass.Count) --- >>> MyClass.prototype.SetCount = function (value) { 1->^^^^ @@ -108,23 +137,31 @@ sourceFile:out-flag.ts 3 > 4 > public SetCount( 5 > value: number -1->Emitted(7, 5) Source(12, 12) + SourceIndex(0) name (MyClass) -2 >Emitted(7, 31) Source(12, 20) + SourceIndex(0) name (MyClass) -3 >Emitted(7, 34) Source(12, 5) + SourceIndex(0) name (MyClass) -4 >Emitted(7, 44) Source(12, 21) + SourceIndex(0) name (MyClass) -5 >Emitted(7, 49) Source(12, 34) + SourceIndex(0) name (MyClass) +1->Emitted(10, 5) Source(12, 12) + SourceIndex(0) name (MyClass) +2 >Emitted(10, 31) Source(12, 20) + SourceIndex(0) name (MyClass) +3 >Emitted(10, 34) Source(12, 5) + SourceIndex(0) name (MyClass) +4 >Emitted(10, 44) Source(12, 21) + SourceIndex(0) name (MyClass) +5 >Emitted(10, 49) Source(12, 34) + SourceIndex(0) name (MyClass) +--- +>>> // +1 >^^^^^^^^ +2 > ^^ +1 >) + > { + > +2 > // +1 >Emitted(11, 9) Source(14, 9) + SourceIndex(0) name (MyClass.SetCount) +2 >Emitted(11, 11) Source(14, 11) + SourceIndex(0) name (MyClass.SetCount) --- >>> }; 1 >^^^^ 2 > ^ 3 > ^^^^^^^^^^^^^^^-> -1 >) - > { - > // +1 > > 2 > } -1 >Emitted(8, 5) Source(15, 5) + SourceIndex(0) name (MyClass.SetCount) -2 >Emitted(8, 6) Source(15, 6) + SourceIndex(0) name (MyClass.SetCount) +1 >Emitted(12, 5) Source(15, 5) + SourceIndex(0) name (MyClass.SetCount) +2 >Emitted(12, 6) Source(15, 6) + SourceIndex(0) name (MyClass.SetCount) --- >>> return MyClass; 1->^^^^ @@ -132,8 +169,8 @@ sourceFile:out-flag.ts 1-> > 2 > } -1->Emitted(9, 5) Source(16, 1) + SourceIndex(0) name (MyClass) -2 >Emitted(9, 19) Source(16, 2) + SourceIndex(0) name (MyClass) +1->Emitted(13, 5) Source(16, 1) + SourceIndex(0) name (MyClass) +2 >Emitted(13, 19) Source(16, 2) + SourceIndex(0) name (MyClass) --- >>>})(); 1 > @@ -157,9 +194,9 @@ sourceFile:out-flag.ts > // > } > } -1 >Emitted(10, 1) Source(16, 1) + SourceIndex(0) name (MyClass) -2 >Emitted(10, 2) Source(16, 2) + SourceIndex(0) name (MyClass) -3 >Emitted(10, 2) Source(4, 1) + SourceIndex(0) -4 >Emitted(10, 6) Source(16, 2) + SourceIndex(0) +1 >Emitted(14, 1) Source(16, 1) + SourceIndex(0) name (MyClass) +2 >Emitted(14, 2) Source(16, 2) + SourceIndex(0) name (MyClass) +3 >Emitted(14, 2) Source(4, 1) + SourceIndex(0) +4 >Emitted(14, 6) Source(16, 2) + SourceIndex(0) --- >>>//# sourceMappingURL=out-flag.js.map \ No newline at end of file diff --git a/tests/baselines/reference/out-flag.types b/tests/baselines/reference/out-flag.types new file mode 100644 index 00000000000..ac1b38b4e2e --- /dev/null +++ b/tests/baselines/reference/out-flag.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/out-flag.ts === +//// @out: bin\ + +// my class comments +class MyClass +>MyClass : MyClass +{ + // my function comments + public Count(): number +>Count : () => number + { + return 42; + } + + public SetCount(value: number) +>SetCount : (value: number) => void +>value : number + { + // + } +} diff --git a/tests/baselines/reference/overEagerReturnTypeSpecialization.js b/tests/baselines/reference/overEagerReturnTypeSpecialization.js index 4d921fb6b81..18c61a2aa78 100644 --- a/tests/baselines/reference/overEagerReturnTypeSpecialization.js +++ b/tests/baselines/reference/overEagerReturnTypeSpecialization.js @@ -15,5 +15,6 @@ var r2: I1 = v1.func(num => num.toString()) // Correctly returns an I1A : A + +enum B { } +>B : B + +function foo(a: A); +>foo : { (a: A): any; (b: B): any; } +>a : A +>A : A + +function foo(b: B); +>foo : { (a: A): any; (b: B): any; } +>b : B +>B : B + +// should be ok +function foo(x: number) { +>foo : { (a: A): any; (b: B): any; } +>x : number +} + +class C { } +>C : C + +function foo1(a: A); +>foo1 : { (a: A): any; (c: C): any; } +>a : A +>A : A + +function foo1(c: C); +>foo1 : { (a: A): any; (c: C): any; } +>c : C +>C : C + +// should be ok +function foo1(x: number) { +>foo1 : { (a: A): any; (c: C): any; } +>x : number +} + diff --git a/tests/baselines/reference/overloadAssignmentCompat.js b/tests/baselines/reference/overloadAssignmentCompat.js index 70d05ef5960..f6767f6f33e 100644 --- a/tests/baselines/reference/overloadAssignmentCompat.js +++ b/tests/baselines/reference/overloadAssignmentCompat.js @@ -39,6 +39,7 @@ function foo():string { return "a" }; //// [overloadAssignmentCompat.js] +// ok - overload signatures are assignment compatible with their implementation var Accessor = (function () { function Accessor() { } @@ -46,17 +47,21 @@ var Accessor = (function () { })(); function attr(nameOrMap, value) { if (nameOrMap && typeof nameOrMap === "object") { + // handle map case return new Accessor; } else { + // handle string case return "s"; } } function attr2(nameOrMap, value) { if (nameOrMap && typeof nameOrMap === "object") { + // handle map case return "t"; } else { + // handle string case return "s"; } } diff --git a/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries.js b/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries.js index ba8f45a82d7..5e0f49bc295 100644 --- a/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries.js +++ b/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries.js @@ -36,6 +36,7 @@ var a1 = new a({}); //// [overloadBindingAcrossDeclarationBoundaries.js] var a; +// These should all be Opt3 var a1 = a.a({}); var a1 = a({}); var a1 = new a({}); diff --git a/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries.types b/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries.types new file mode 100644 index 00000000000..311cf971b61 --- /dev/null +++ b/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries.types @@ -0,0 +1,121 @@ +=== tests/cases/compiler/overloadBindingAcrossDeclarationBoundaries.ts === +interface Opt1 { +>Opt1 : Opt1 + + p?: any; +>p : any +} +interface Opt2 { +>Opt2 : Opt2 + + q?: any; +>q : any +} +interface Opt3 { +>Opt3 : Opt3 + + r?: any; +>r : any +} +interface Opt4 { +>Opt4 : Opt4 + + s?: any; +>s : any +} +interface A { +>A : A + + a(o: Opt1): Opt1; +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>o : Opt1 +>Opt1 : Opt1 +>Opt1 : Opt1 + + a(o: Opt2): Opt2; +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>o : Opt2 +>Opt2 : Opt2 +>Opt2 : Opt2 + + (o: Opt1): Opt1; +>o : Opt1 +>Opt1 : Opt1 +>Opt1 : Opt1 + + (o: Opt2): Opt2; +>o : Opt2 +>Opt2 : Opt2 +>Opt2 : Opt2 + + new (o: Opt1): Opt1; +>o : Opt1 +>Opt1 : Opt1 +>Opt1 : Opt1 + + new (o: Opt2): Opt2; +>o : Opt2 +>Opt2 : Opt2 +>Opt2 : Opt2 +} +interface A { +>A : A + + a(o: Opt3): Opt3; +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>o : Opt3 +>Opt3 : Opt3 +>Opt3 : Opt3 + + a(o: Opt4): Opt4; +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>o : Opt4 +>Opt4 : Opt4 +>Opt4 : Opt4 + + (o: Opt3): Opt3; +>o : Opt3 +>Opt3 : Opt3 +>Opt3 : Opt3 + + (o: Opt4): Opt4; +>o : Opt4 +>Opt4 : Opt4 +>Opt4 : Opt4 + + new (o: Opt3): Opt3; +>o : Opt3 +>Opt3 : Opt3 +>Opt3 : Opt3 + + new (o: Opt4): Opt4; +>o : Opt4 +>Opt4 : Opt4 +>Opt4 : Opt4 +} + +var a: A; +>a : A +>A : A + +// These should all be Opt3 +var a1 = a.a({}); +>a1 : Opt3 +>a.a({}) : Opt3 +>a.a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>a : A +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>{} : {} + +var a1 = a({}); +>a1 : Opt3 +>a({}) : Opt3 +>a : A +>{} : {} + +var a1 = new a({}); +>a1 : Opt3 +>new a({}) : Opt3 +>a : A +>{} : {} + diff --git a/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries2.js b/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries2.js index 6037f45bc1e..f2eb0d6b886 100644 --- a/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries2.js +++ b/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries2.js @@ -42,6 +42,7 @@ var a1 = new a({}); //// [overloadBindingAcrossDeclarationBoundaries_file0.js] //// [overloadBindingAcrossDeclarationBoundaries_file1.js] var a; +// These should all be Opt3 var a1 = a.a({}); var a1 = a({}); var a1 = new a({}); diff --git a/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries2.types b/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries2.types new file mode 100644 index 00000000000..e67ff2f8de6 --- /dev/null +++ b/tests/baselines/reference/overloadBindingAcrossDeclarationBoundaries2.types @@ -0,0 +1,124 @@ +=== tests/cases/compiler/overloadBindingAcrossDeclarationBoundaries_file0.ts === +interface Opt1 { +>Opt1 : Opt1 + + p?: any; +>p : any +} +interface Opt2 { +>Opt2 : Opt2 + + q?: any; +>q : any +} +interface Opt3 { +>Opt3 : Opt3 + + r?: any; +>r : any +} +interface Opt4 { +>Opt4 : Opt4 + + s?: any; +>s : any +} + +interface A { +>A : A + + a(o: Opt1): Opt1; +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>o : Opt1 +>Opt1 : Opt1 +>Opt1 : Opt1 + + a(o: Opt2): Opt2; +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>o : Opt2 +>Opt2 : Opt2 +>Opt2 : Opt2 + + (o: Opt1): Opt1; +>o : Opt1 +>Opt1 : Opt1 +>Opt1 : Opt1 + + (o: Opt2): Opt2; +>o : Opt2 +>Opt2 : Opt2 +>Opt2 : Opt2 + + new (o: Opt1): Opt1; +>o : Opt1 +>Opt1 : Opt1 +>Opt1 : Opt1 + + new (o: Opt2): Opt2; +>o : Opt2 +>Opt2 : Opt2 +>Opt2 : Opt2 +} + +=== tests/cases/compiler/overloadBindingAcrossDeclarationBoundaries_file1.ts === +interface A { +>A : A + + a(o: Opt3): Opt3; +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>o : Opt3 +>Opt3 : Opt3 +>Opt3 : Opt3 + + a(o: Opt4): Opt4; +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>o : Opt4 +>Opt4 : Opt4 +>Opt4 : Opt4 + + (o: Opt3): Opt3; +>o : Opt3 +>Opt3 : Opt3 +>Opt3 : Opt3 + + (o: Opt4): Opt4; +>o : Opt4 +>Opt4 : Opt4 +>Opt4 : Opt4 + + new (o: Opt3): Opt3; +>o : Opt3 +>Opt3 : Opt3 +>Opt3 : Opt3 + + new (o: Opt4): Opt4; +>o : Opt4 +>Opt4 : Opt4 +>Opt4 : Opt4 +} + +var a: A; +>a : A +>A : A + +// These should all be Opt3 +var a1 = a.a({}); +>a1 : Opt3 +>a.a({}) : Opt3 +>a.a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>a : A +>a : { (o: Opt1): Opt1; (o: Opt2): Opt2; (o: Opt3): Opt3; (o: Opt4): Opt4; } +>{} : {} + +var a1 = a({}); +>a1 : Opt3 +>a({}) : Opt3 +>a : A +>{} : {} + +var a1 = new a({}); +>a1 : Opt3 +>new a({}) : Opt3 +>a : A +>{} : {} + diff --git a/tests/baselines/reference/overloadCallTest.types b/tests/baselines/reference/overloadCallTest.types new file mode 100644 index 00000000000..0ed7ecccdbc --- /dev/null +++ b/tests/baselines/reference/overloadCallTest.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/overloadCallTest.ts === +class foo { +>foo : foo + + constructor() { + function bar(): string; +>bar : { (): string; (s: string): any; } + + function bar(s:string); +>bar : { (): string; (s: string): any; } +>s : string + + function bar(foo?: string) { return "foo" }; +>bar : { (): string; (s: string): any; } +>foo : string + + var test = bar("test"); +>test : any +>bar("test") : any +>bar : { (): string; (s: string): any; } + + var goo = bar(); +>goo : string +>bar() : string +>bar : { (): string; (s: string): any; } + + goo = bar("test"); +>goo = bar("test") : any +>goo : string +>bar("test") : any +>bar : { (): string; (s: string): any; } + } + +} + + diff --git a/tests/baselines/reference/overloadCrash.js b/tests/baselines/reference/overloadCrash.js index bcb7b8dd848..8995546c2f4 100644 --- a/tests/baselines/reference/overloadCrash.js +++ b/tests/baselines/reference/overloadCrash.js @@ -16,4 +16,4 @@ foo(i3, i3); // should not crash the compiler :) ; ; var i3; -foo(i3, i3); +foo(i3, i3); // should not crash the compiler :) diff --git a/tests/baselines/reference/overloadCrash.types b/tests/baselines/reference/overloadCrash.types new file mode 100644 index 00000000000..88c2b8c79c0 --- /dev/null +++ b/tests/baselines/reference/overloadCrash.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/overloadCrash.ts === +interface I1 {a:number; b:number;}; +>I1 : I1 +>a : number +>b : number + +interface I2 {c:number; d:number;}; +>I2 : I2 +>c : number +>d : number + +interface I3 {a:number; b:number; c:number; d:number;}; +>I3 : I3 +>a : number +>b : number +>c : number +>d : number + +declare function foo(...n:I1[]); +>foo : { (...n: I1[]): any; (n1: I2, n3: I2): any; } +>n : I1[] +>I1 : I1 + +declare function foo(n1:I2, n3:I2); +>foo : { (...n: I1[]): any; (n1: I2, n3: I2): any; } +>n1 : I2 +>I2 : I2 +>n3 : I2 +>I2 : I2 + +var i3:I3; +>i3 : I3 +>I3 : I3 + +foo(i3, i3); // should not crash the compiler :) +>foo(i3, i3) : any +>foo : { (...n: I1[]): any; (n1: I2, n3: I2): any; } +>i3 : I3 +>i3 : I3 + diff --git a/tests/baselines/reference/overloadEquivalenceWithStatics.types b/tests/baselines/reference/overloadEquivalenceWithStatics.types new file mode 100644 index 00000000000..96ad16ae19c --- /dev/null +++ b/tests/baselines/reference/overloadEquivalenceWithStatics.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/overloadEquivalenceWithStatics.ts === +class A1 { +>A1 : A1 +>T : T + +static B(v: A1): A1; // 1 +>B : { (v: A1): A1; (v: S): A1; } +>S : S +>v : A1 +>A1 : A1 +>S : S +>A1 : A1 +>S : S + +static B(v: S): A1; // 2 : Error Duplicate signature +>B : { (v: A1): A1; (v: S): A1; } +>S : S +>v : S +>S : S +>A1 : A1 +>S : S + +static B(v: any): A1 { +>B : { (v: A1): A1; (v: S): A1; } +>S : S +>v : any +>A1 : A1 +>S : S + +return null; +} +} + diff --git a/tests/baselines/reference/overloadGenericFunctionWithRestArgs.types b/tests/baselines/reference/overloadGenericFunctionWithRestArgs.types new file mode 100644 index 00000000000..17ecdeac503 --- /dev/null +++ b/tests/baselines/reference/overloadGenericFunctionWithRestArgs.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/overloadGenericFunctionWithRestArgs.ts === +class B{ +>B : B +>V : V + + private id: V; +>id : V +>V : V +} +class A{ +>A : A +>U : U + + GetEnumerator: () => B; +>GetEnumerator : () => B +>B : B +>U : U +} +function Choice(...v_args: T[]): A; +>Choice : (...v_args: T[]) => A +>T : T +>v_args : T[] +>T : T +>A : A +>T : T + +function Choice(...v_args: T[]): A { +>Choice : (...v_args: T[]) => A +>T : T +>v_args : T[] +>T : T +>A : A +>T : T + + return new A(); +>new A() : A +>A : typeof A +>T : T +} diff --git a/tests/baselines/reference/overloadModifiersMustAgree.js b/tests/baselines/reference/overloadModifiersMustAgree.js index 141b5727383..8cb537c4410 100644 --- a/tests/baselines/reference/overloadModifiersMustAgree.js +++ b/tests/baselines/reference/overloadModifiersMustAgree.js @@ -20,7 +20,7 @@ var baz = (function () { function baz() { } baz.prototype.foo = function (bar) { - }; + }; // error - access modifiers do not agree return baz; })(); function bar(s) { diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks1.types b/tests/baselines/reference/overloadOnConstConstraintChecks1.types new file mode 100644 index 00000000000..9f92e56c682 --- /dev/null +++ b/tests/baselines/reference/overloadOnConstConstraintChecks1.types @@ -0,0 +1,78 @@ +=== tests/cases/compiler/overloadOnConstConstraintChecks1.ts === +class Base { foo() { } } +>Base : Base +>foo : () => void + +class Derived1 extends Base { bar() { } } +>Derived1 : Derived1 +>Base : Base +>bar : () => void + +class Derived2 extends Base { baz() { } } +>Derived2 : Derived2 +>Base : Base +>baz : () => void + +class Derived3 extends Base { biz() { } } +>Derived3 : Derived3 +>Base : Base +>biz : () => void + +interface MyDoc { // Document +>MyDoc : MyDoc + + createElement(tagName: string): Base; +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : string +>Base : Base + + createElement(tagName: 'canvas'): Derived1; +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : 'canvas' +>Derived1 : Derived1 + + createElement(tagName: 'div'): Derived2; +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : 'div' +>Derived2 : Derived2 + + createElement(tagName: 'span'): Derived3; +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : 'span' +>Derived3 : Derived3 + + // + 100 more +} + +class D implements MyDoc { +>D : D +>MyDoc : MyDoc + + createElement(tagName:string): Base; +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : string +>Base : Base + + createElement(tagName: 'canvas'): Derived1; +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : 'canvas' +>Derived1 : Derived1 + + createElement(tagName: 'div'): Derived2; +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : 'div' +>Derived2 : Derived2 + + createElement(tagName: 'span'): Derived3; +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : 'span' +>Derived3 : Derived3 + + createElement(tagName:any): Base { +>createElement : { (tagName: string): Base; (tagName: 'canvas'): Derived1; (tagName: 'div'): Derived2; (tagName: 'span'): Derived3; } +>tagName : any +>Base : Base + + return null; + } +} diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks2.types b/tests/baselines/reference/overloadOnConstConstraintChecks2.types new file mode 100644 index 00000000000..c5af206c6da --- /dev/null +++ b/tests/baselines/reference/overloadOnConstConstraintChecks2.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/overloadOnConstConstraintChecks2.ts === +class A {} +>A : A + +class B extends A {} +>B : B +>A : A + +class C extends A { +>C : C +>A : A + + public foo() { } +>foo : () => void +} +function foo(name: 'hi'): B; +>foo : { (name: 'hi'): B; (name: 'bye'): C; (name: string): A; } +>name : 'hi' +>B : B + +function foo(name: 'bye'): C; +>foo : { (name: 'hi'): B; (name: 'bye'): C; (name: string): A; } +>name : 'bye' +>C : C + +function foo(name: string): A; +>foo : { (name: 'hi'): B; (name: 'bye'): C; (name: string): A; } +>name : string +>A : A + +function foo(name: any): A { +>foo : { (name: 'hi'): B; (name: 'bye'): C; (name: string): A; } +>name : any +>A : A + + return null; +} diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks3.types b/tests/baselines/reference/overloadOnConstConstraintChecks3.types new file mode 100644 index 00000000000..adc41ff235c --- /dev/null +++ b/tests/baselines/reference/overloadOnConstConstraintChecks3.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/overloadOnConstConstraintChecks3.ts === +class A { private x = 1} +>A : A +>x : number + +class B extends A {} +>B : B +>A : A + +class C extends A { +>C : C +>A : A + + public foo() { } +>foo : () => void +} +function foo(name: 'hi'): B; +>foo : { (name: 'hi'): B; (name: 'bye'): C; (name: string): A; } +>name : 'hi' +>B : B + +function foo(name: 'bye'): C; +>foo : { (name: 'hi'): B; (name: 'bye'): C; (name: string): A; } +>name : 'bye' +>C : C + +function foo(name: string): A; +>foo : { (name: 'hi'): B; (name: 'bye'): C; (name: string): A; } +>name : string +>A : A + +function foo(name: any): A { +>foo : { (name: 'hi'): B; (name: 'bye'): C; (name: string): A; } +>name : any +>A : A + + return null; +} + diff --git a/tests/baselines/reference/overloadOnConstInObjectLiteralImplementingAnInterface.js b/tests/baselines/reference/overloadOnConstInObjectLiteralImplementingAnInterface.js index 25672c0f8ef..51bf62f7ba3 100644 --- a/tests/baselines/reference/overloadOnConstInObjectLiteralImplementingAnInterface.js +++ b/tests/baselines/reference/overloadOnConstInObjectLiteralImplementingAnInterface.js @@ -7,4 +7,4 @@ var i2: I = { x1: (a: number, cb: (x: 'hi') => number) => { } }; // error //// [overloadOnConstInObjectLiteralImplementingAnInterface.js] var i2 = { x1: function (a, cb) { -} }; +} }; // error diff --git a/tests/baselines/reference/overloadOnConstInheritance1.types b/tests/baselines/reference/overloadOnConstInheritance1.types new file mode 100644 index 00000000000..96f8df3dffd --- /dev/null +++ b/tests/baselines/reference/overloadOnConstInheritance1.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/overloadOnConstInheritance1.ts === +interface Base { +>Base : Base + + addEventListener(x: string): any; +>addEventListener : { (x: string): any; (x: 'foo'): string; } +>x : string + + addEventListener(x: 'foo'): string; +>addEventListener : { (x: string): any; (x: 'foo'): string; } +>x : 'foo' +} +interface Deriver extends Base { +>Deriver : Deriver +>Base : Base + + addEventListener(x: string): any; +>addEventListener : { (x: string): any; (x: 'bar'): string; } +>x : string + + addEventListener(x: 'bar'): string; +>addEventListener : { (x: string): any; (x: 'bar'): string; } +>x : 'bar' +} + diff --git a/tests/baselines/reference/overloadOnConstNoAnyImplementation.js b/tests/baselines/reference/overloadOnConstNoAnyImplementation.js index 78de2aa2727..0c2f330b5ed 100644 --- a/tests/baselines/reference/overloadOnConstNoAnyImplementation.js +++ b/tests/baselines/reference/overloadOnConstNoAnyImplementation.js @@ -22,9 +22,9 @@ function x1(a, cb) { var hm = 'hm'; cb(hm); cb('uh'); - cb(1); + cb(1); // error } var cb = function (x) { return 1; }; x1(1, cb); -x1(1, function (x) { return 1; }); +x1(1, function (x) { return 1; }); // error x1(1, function (x) { return 1; }); diff --git a/tests/baselines/reference/overloadOnConstNoAnyImplementation2.js b/tests/baselines/reference/overloadOnConstNoAnyImplementation2.js index 6a5ac8973a0..6c66c23f1f8 100644 --- a/tests/baselines/reference/overloadOnConstNoAnyImplementation2.js +++ b/tests/baselines/reference/overloadOnConstNoAnyImplementation2.js @@ -30,7 +30,7 @@ var C = (function () { callback('bye'); var hm = "hm"; callback(hm); - callback(1); + callback(1); // error }; return C; })(); diff --git a/tests/baselines/reference/overloadOnConstNoStringImplementation.js b/tests/baselines/reference/overloadOnConstNoStringImplementation.js index 1b014bd708c..65fd6d07567 100644 --- a/tests/baselines/reference/overloadOnConstNoStringImplementation.js +++ b/tests/baselines/reference/overloadOnConstNoStringImplementation.js @@ -20,11 +20,11 @@ function x2(a, cb) { cb('hi'); cb('bye'); var hm = 'hm'; - cb(hm); + cb(hm); // should this work without a string definition? cb('uh'); cb(1); } var cb = function (x) { return 1; }; -x2(1, cb); -x2(1, function (x) { return 1; }); +x2(1, cb); // error +x2(1, function (x) { return 1; }); // error x2(1, function (x) { return 1; }); diff --git a/tests/baselines/reference/overloadOnGenericArity.types b/tests/baselines/reference/overloadOnGenericArity.types new file mode 100644 index 00000000000..53c9e922fb9 --- /dev/null +++ b/tests/baselines/reference/overloadOnGenericArity.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/overloadOnGenericArity.ts === +interface Test { +>Test : Test + + then(p: string): string; +>then : { (p: string): string; (p: string): Date; } +>U : U +>p : string + + then(p: string): Date; // Error: Overloads cannot differ only by return type +>then : { (p: string): string; (p: string): Date; } +>p : string +>Date : Date +} + + diff --git a/tests/baselines/reference/overloadOnGenericClassAndNonGenericClass.js b/tests/baselines/reference/overloadOnGenericClassAndNonGenericClass.js index bb082ac97fc..d88cd2bceb8 100644 --- a/tests/baselines/reference/overloadOnGenericClassAndNonGenericClass.js +++ b/tests/baselines/reference/overloadOnGenericClassAndNonGenericClass.js @@ -51,4 +51,4 @@ function f(a) { } var xs; var t3 = f(xs); -var t3; +var t3; // should not error diff --git a/tests/baselines/reference/overloadOnGenericClassAndNonGenericClass.types b/tests/baselines/reference/overloadOnGenericClassAndNonGenericClass.types new file mode 100644 index 00000000000..c0d0533a533 --- /dev/null +++ b/tests/baselines/reference/overloadOnGenericClassAndNonGenericClass.types @@ -0,0 +1,60 @@ +=== tests/cases/compiler/overloadOnGenericClassAndNonGenericClass.ts === +class A { a; } +>A : A +>a : any + +class B { b; } +>B : B +>b : any + +class C { c; } +>C : C +>c : any + +class X { x: T; } +>X : X +>T : T +>x : T +>T : T + +class X1 { x: string; } +>X1 : X1 +>x : string + +class X2 { x: string; } +>X2 : X2 +>x : string + +function f(a: X1): A; +>f : { (a: X1): A; (a: X): B; } +>a : X1 +>X1 : X1 +>A : A + +function f(a: X): B; +>f : { (a: X1): A; (a: X): B; } +>T : T +>a : X +>X : X +>T : T +>B : B + +function f(a): any { +>f : { (a: X1): A; (a: X): B; } +>a : any +} + +var xs: X; +>xs : X +>X : X + +var t3 = f(xs); +>t3 : A +>f(xs) : A +>f : { (a: X1): A; (a: X): B; } +>xs : X + +var t3: A; // should not error +>t3 : A +>A : A + diff --git a/tests/baselines/reference/overloadResolution.js b/tests/baselines/reference/overloadResolution.js index 5d542baa07c..fc8fa501efc 100644 --- a/tests/baselines/reference/overloadResolution.js +++ b/tests/baselines/reference/overloadResolution.js @@ -132,15 +132,19 @@ function fn1() { } var s = fn1(undefined); var s; -fn1({}); +// No candidate overloads found +fn1({}); // Error function fn2() { return undefined; } var d = fn2(0, undefined); var d; +// Generic and non - generic overload where generic overload is the only candidate when called without type arguments var s = fn2(0, ''); -fn2('', 0); -fn2('', 0); +// Generic and non - generic overload where non - generic overload is the only candidate when called with type arguments +fn2('', 0); // Error +// Generic and non - generic overload where non - generic overload is the only candidate when called without type arguments +fn2('', 0); // OK function fn3() { return null; } @@ -148,23 +152,28 @@ var s = fn3(3); var s = fn3('', 3, ''); var n = fn3(5, 5, 5); var n; +// Generic overloads with differing arity called with type arguments matching each overload type parameter count var s = fn3(4); var s = fn3('', '', ''); var n = fn3('', '', 3); -fn3(); +// Generic overloads with differing arity called with type argument count that doesn't match any overload +fn3(); // Error function fn4() { } fn4('', 3); +fn4(3, ''); // Error +fn4('', 3); // Error fn4(3, ''); -fn4('', 3); -fn4(3, ''); +// Generic overloads with constraints called without type arguments but with types that satisfy the constraints fn4('', 3); fn4(3, ''); fn4(3, undefined); fn4('', null); -fn4(null, null); -fn4(true, null); -fn4(null, true); +// Generic overloads with constraints called with type arguments that do not satisfy the constraints +fn4(null, null); // Error +// Generic overloads with constraints called without type arguments but with types that do not satisfy the constraints +fn4(true, null); // Error +fn4(null, true); // Error function fn5() { return undefined; } diff --git a/tests/baselines/reference/overloadResolutionClassConstructors.js b/tests/baselines/reference/overloadResolutionClassConstructors.js index dadb6af41e8..2571a0e02db 100644 --- a/tests/baselines/reference/overloadResolutionClassConstructors.js +++ b/tests/baselines/reference/overloadResolutionClassConstructors.js @@ -134,22 +134,29 @@ var SomeDerived3 = (function (_super) { } return SomeDerived3; })(SomeBase); +// Ambiguous call picks the first overload in declaration order var fn1 = (function () { function fn1() { } return fn1; })(); new fn1(undefined); -new fn1({}); +// No candidate overloads found +new fn1({}); // Error +// Generic and non - generic overload where generic overload is the only candidate when called with type arguments var fn2 = (function () { function fn2() { } return fn2; })(); var d = new fn2(0, undefined); +// Generic and non - generic overload where generic overload is the only candidate when called without type arguments var s = new fn2(0, ''); -new fn2('', 0); -new fn2('', 0); +// Generic and non - generic overload where non - generic overload is the only candidate when called with type arguments +new fn2('', 0); // OK +// Generic and non - generic overload where non - generic overload is the only candidate when called without type arguments +new fn2('', 0); // OK +// Generic overloads with differing arity called without type arguments var fn3 = (function () { function fn3() { } @@ -158,26 +165,33 @@ var fn3 = (function () { new fn3(3); new fn3('', 3, ''); new fn3(5, 5, 5); -new fn3(4); -new fn3('', '', ''); +// Generic overloads with differing arity called with type arguments matching each overload type parameter count +new fn3(4); // Error +new fn3('', '', ''); // Error new fn3('', '', 3); -new fn3(); +// Generic overloads with differing arity called with type argument count that doesn't match any overload +new fn3(); // Error +// Generic overloads with constraints called with type arguments that satisfy the constraints var fn4 = (function () { function fn4() { } return fn4; })(); new fn4('', 3); -new fn4(3, ''); +new fn4(3, ''); // Error +new fn4('', 3); // Error +new fn4(3, ''); // Error +// Generic overloads with constraints called without type arguments but with types that satisfy the constraints new fn4('', 3); -new fn4(3, ''); -new fn4('', 3); -new fn4(3, ''); -new fn4(3, undefined); +new fn4(3, ''); // Error +new fn4(3, undefined); // Error new fn4('', null); -new fn4(null, null); -new fn4(true, null); -new fn4(null, true); +// Generic overloads with constraints called with type arguments that do not satisfy the constraints +new fn4(null, null); // Error +// Generic overloads with constraints called without type arguments but with types that do not satisfy the constraints +new fn4(true, null); // Error +new fn4(null, true); // Error +// Non - generic overloads where contextual typing of function arguments has errors var fn5 = (function () { function fn5() { return undefined; @@ -186,4 +200,4 @@ var fn5 = (function () { })(); new fn5(function (n) { return n.toFixed(); }); new fn5(function (n) { return n.substr(0); }); -new fn5(function (n) { return n.blah; }); +new fn5(function (n) { return n.blah; }); // Error diff --git a/tests/baselines/reference/overloadResolutionConstructors.js b/tests/baselines/reference/overloadResolutionConstructors.js index c018922c23d..9e10215b1cb 100644 --- a/tests/baselines/reference/overloadResolutionConstructors.js +++ b/tests/baselines/reference/overloadResolutionConstructors.js @@ -136,36 +136,46 @@ var SomeDerived3 = (function (_super) { return SomeDerived3; })(SomeBase); var fn1; +// Ambiguous call picks the first overload in declaration order var s = new fn1(undefined); var s; -new fn1({}); +// No candidate overloads found +new fn1({}); // Error var fn2; var d = new fn2(0, undefined); var d; +// Generic and non - generic overload where generic overload is the only candidate when called without type arguments var s = new fn2(0, ''); -new fn2('', 0); -new fn2('', 0); +// Generic and non - generic overload where non - generic overload is the only candidate when called with type arguments +new fn2('', 0); // Error +// Generic and non - generic overload where non - generic overload is the only candidate when called without type arguments +new fn2('', 0); // OK var fn3; var s = new fn3(3); var s = new fn3('', 3, ''); var n = new fn3(5, 5, 5); var n; +// Generic overloads with differing arity called with type arguments matching each overload type parameter count var s = new fn3(4); var s = new fn3('', '', ''); var n = new fn3('', '', 3); -new fn3(); +// Generic overloads with differing arity called with type argument count that doesn't match any overload +new fn3(); // Error var fn4; new fn4('', 3); +new fn4(3, ''); // Error +new fn4('', 3); // Error new fn4(3, ''); -new fn4('', 3); -new fn4(3, ''); +// Generic overloads with constraints called without type arguments but with types that satisfy the constraints new fn4('', 3); new fn4(3, ''); new fn4(3, undefined); new fn4('', null); -new fn4(null, null); -new fn4(true, null); -new fn4(null, true); +// Generic overloads with constraints called with type arguments that do not satisfy the constraints +new fn4(null, null); // Error +// Generic overloads with constraints called without type arguments but with types that do not satisfy the constraints +new fn4(true, null); // Error +new fn4(null, true); // Error var fn5; var n = new fn5(function (n) { return n.toFixed(); }); var s = new fn5(function (n) { return n.substr(0); }); diff --git a/tests/baselines/reference/overloadResolutionOverCTLambda.js b/tests/baselines/reference/overloadResolutionOverCTLambda.js index 6876795e2c6..07cd4232bde 100644 --- a/tests/baselines/reference/overloadResolutionOverCTLambda.js +++ b/tests/baselines/reference/overloadResolutionOverCTLambda.js @@ -5,4 +5,4 @@ foo(a => a); // can not convert (number)=>bool to (number)=>number //// [overloadResolutionOverCTLambda.js] function foo(b) { } -foo(function (a) { return a; }); +foo(function (a) { return a; }); // can not convert (number)=>bool to (number)=>number diff --git a/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js index 4446d0f69cc..86e84ced58f 100644 --- a/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js +++ b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js @@ -31,6 +31,7 @@ var Bugs; } return A; })(); + // replace(searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string; function bug2(message) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { diff --git a/tests/baselines/reference/overloadResolutionOverNonCTLambdas.types b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.types new file mode 100644 index 00000000000..6e129400736 --- /dev/null +++ b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.types @@ -0,0 +1,75 @@ +=== tests/cases/compiler/overloadResolutionOverNonCTLambdas.ts === +module Bugs { +>Bugs : typeof Bugs + + class A { +>A : A + } + + // replace(searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string; + function bug2(message:string, ...args:any[]):string { +>bug2 : (message: string, ...args: any[]) => string +>message : string +>args : any[] + + var result= message.replace(/\{(\d+)\}/g, function(match, ...rest) { +>result : string +>message.replace(/\{(\d+)\}/g, function(match, ...rest) { var index= rest[0]; return typeof args[index] !== 'undefined' ? args[index] : match; }) : string +>message.replace : { (searchValue: string, replaceValue: string): string; (searchValue: string, replaceValue: (substring: string, ...args: any[]) => string): string; (searchValue: RegExp, replaceValue: string): string; (searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string; } +>message : string +>replace : { (searchValue: string, replaceValue: string): string; (searchValue: string, replaceValue: (substring: string, ...args: any[]) => string): string; (searchValue: RegExp, replaceValue: string): string; (searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string; } +>function(match, ...rest) { var index= rest[0]; return typeof args[index] !== 'undefined' ? args[index] : match; } : (match: string, ...rest: any[]) => any +>match : string +>rest : any[] + + var index= rest[0]; +>index : any +>rest[0] : any +>rest : any[] + + return typeof args[index] !== 'undefined' +>typeof args[index] !== 'undefined' ? args[index] : match : any +>typeof args[index] !== 'undefined' : boolean +>typeof args[index] : string +>args[index] : any +>args : any[] +>index : any + + ? args[index] +>args[index] : any +>args : any[] +>index : any + + : match; +>match : string + + }); + return result; +>result : string + } +} + +function bug3(f:(x:string)=>string) { return f("s") } +>bug3 : (f: (x: string) => string) => string +>f : (x: string) => string +>x : string +>f("s") : string +>f : (x: string) => string + +function fprime(x:string):string { return x; } +>fprime : (x: string) => string +>x : string +>x : string + +bug3(fprime); +>bug3(fprime) : string +>bug3 : (f: (x: string) => string) => string +>fprime : (x: string) => string + +bug3(function(x:string):string { return x; }); +>bug3(function(x:string):string { return x; }) : string +>bug3 : (f: (x: string) => string) => string +>function(x:string):string { return x; } : (x: string) => string +>x : string +>x : string + diff --git a/tests/baselines/reference/overloadResolutionOverNonCTObjectLit.types b/tests/baselines/reference/overloadResolutionOverNonCTObjectLit.types new file mode 100644 index 00000000000..6bc491fd157 --- /dev/null +++ b/tests/baselines/reference/overloadResolutionOverNonCTObjectLit.types @@ -0,0 +1,67 @@ +=== tests/cases/compiler/overloadResolutionOverNonCTObjectLit.ts === +module Bugs { +>Bugs : typeof Bugs + + export interface IToken { +>IToken : IToken + + startIndex:number; +>startIndex : number + + type:string; +>type : string + + bracket:number; +>bracket : number + } + + export interface IState { +>IState : IState + } + + export interface IStateToken extends IToken { +>IStateToken : IStateToken +>IToken : IToken + + state: IState; +>state : IState +>IState : IState + + length: number; +>length : number + } + + function bug3() { +>bug3 : () => void + + var tokens:IToken[]= []; +>tokens : IToken[] +>IToken : IToken +>[] : IToken[] + + tokens.push({ startIndex: 1, type: '', bracket: 3 }); +>tokens.push({ startIndex: 1, type: '', bracket: 3 }) : number +>tokens.push : (...items: IToken[]) => number +>tokens : IToken[] +>push : (...items: IToken[]) => number +>{ startIndex: 1, type: '', bracket: 3 } : { startIndex: number; type: string; bracket: number; } +>startIndex : number +>type : string +>bracket : number + + tokens.push(({ startIndex: 1, type: '', bracket: 3, state: null, length: 10 })); +>tokens.push(({ startIndex: 1, type: '', bracket: 3, state: null, length: 10 })) : number +>tokens.push : (...items: IToken[]) => number +>tokens : IToken[] +>push : (...items: IToken[]) => number +>({ startIndex: 1, type: '', bracket: 3, state: null, length: 10 }) : IToken +>IToken : IToken +>({ startIndex: 1, type: '', bracket: 3, state: null, length: 10 }) : { startIndex: number; type: string; bracket: number; state: null; length: number; } +>{ startIndex: 1, type: '', bracket: 3, state: null, length: 10 } : { startIndex: number; type: string; bracket: number; state: null; length: number; } +>startIndex : number +>type : string +>bracket : number +>state : any +>length : number + } +} diff --git a/tests/baselines/reference/overloadResolutionTest1.js b/tests/baselines/reference/overloadResolutionTest1.js index b24723d8210..a08243fb27a 100644 --- a/tests/baselines/reference/overloadResolutionTest1.js +++ b/tests/baselines/reference/overloadResolutionTest1.js @@ -30,19 +30,19 @@ function foo(bar) { return bar; } ; -var x1 = foo([{ a: true }]); -var x11 = foo([{ a: 0 }]); -var x111 = foo([{ a: "s" }]); -var x1111 = foo([{ a: null }]); +var x1 = foo([{ a: true }]); // works +var x11 = foo([{ a: 0 }]); // works +var x111 = foo([{ a: "s" }]); // error - does not match any signature +var x1111 = foo([{ a: null }]); // works - ambiguous call is resolved to be the first in the overload set so this returns a string function foo2(bar) { return bar; } ; -var x2 = foo2({ a: 0 }); -var x3 = foo2({ a: true }); -var x4 = foo2({ a: "s" }); +var x2 = foo2({ a: 0 }); // works +var x3 = foo2({ a: true }); // works +var x4 = foo2({ a: "s" }); // error function foo4(bar) { return bar; } ; -var x = foo4({ a: true }); +var x = foo4({ a: true }); // error diff --git a/tests/baselines/reference/overloadResolutionWithAny.js b/tests/baselines/reference/overloadResolutionWithAny.js index 6f4e2b15216..2765982a58f 100644 --- a/tests/baselines/reference/overloadResolutionWithAny.js +++ b/tests/baselines/reference/overloadResolutionWithAny.js @@ -23,12 +23,12 @@ func2("", x); // RegExp //// [overloadResolutionWithAny.js] var func; -func(""); -func(3); +func(""); // number +func(3); // string var x; -func(x); +func(x); // string var func2; -func2(x, x); -func2("", ""); -func2(x, ""); -func2("", x); +func2(x, x); // string +func2("", ""); // number +func2(x, ""); // boolean +func2("", x); // RegExp diff --git a/tests/baselines/reference/overloadResolutionWithAny.types b/tests/baselines/reference/overloadResolutionWithAny.types new file mode 100644 index 00000000000..14d378c9fac --- /dev/null +++ b/tests/baselines/reference/overloadResolutionWithAny.types @@ -0,0 +1,69 @@ +=== tests/cases/compiler/overloadResolutionWithAny.ts === +var func: { +>func : { (s: string): number; (s: any): string; } + + (s: string): number; +>s : string + + (s: any): string; +>s : any + +}; + +func(""); // number +>func("") : number +>func : { (s: string): number; (s: any): string; } + +func(3); // string +>func(3) : string +>func : { (s: string): number; (s: any): string; } + +var x: any; +>x : any + +func(x); // string +>func(x) : string +>func : { (s: string): number; (s: any): string; } +>x : any + +var func2: { +>func2 : { (s: string, t: string): number; (s: any, t: string): boolean; (s: string, t: any): RegExp; (s: any, t: any): string; } + + (s: string, t: string): number; +>s : string +>t : string + + (s: any, t: string): boolean; +>s : any +>t : string + + (s: string, t: any): RegExp; +>s : string +>t : any +>RegExp : RegExp + + (s: any, t: any): string; +>s : any +>t : any +} + +func2(x, x); // string +>func2(x, x) : string +>func2 : { (s: string, t: string): number; (s: any, t: string): boolean; (s: string, t: any): RegExp; (s: any, t: any): string; } +>x : any +>x : any + +func2("", ""); // number +>func2("", "") : number +>func2 : { (s: string, t: string): number; (s: any, t: string): boolean; (s: string, t: any): RegExp; (s: any, t: any): string; } + +func2(x, ""); // boolean +>func2(x, "") : boolean +>func2 : { (s: string, t: string): number; (s: any, t: string): boolean; (s: string, t: any): RegExp; (s: any, t: any): string; } +>x : any + +func2("", x); // RegExp +>func2("", x) : RegExp +>func2 : { (s: string, t: string): number; (s: any, t: string): boolean; (s: string, t: any): RegExp; (s: any, t: any): string; } +>x : any + diff --git a/tests/baselines/reference/overloadRet.types b/tests/baselines/reference/overloadRet.types new file mode 100644 index 00000000000..b4eb8538dbc --- /dev/null +++ b/tests/baselines/reference/overloadRet.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/overloadRet.ts === +interface I { +>I : I + + f(s:string):number; +>f : { (s: string): number; (n: number): string; } +>s : string + + f(n:number):string; +>f : { (s: string): number; (n: number): string; } +>n : number + + g(n:number):any; +>g : { (n: number): any; (n: number, m: number): string; } +>n : number + + g(n:number,m:number):string; +>g : { (n: number): any; (n: number, m: number): string; } +>n : number +>m : number + + h(n:number):I; +>h : { (n: number): I; (b: boolean): number; } +>n : number +>I : I + + h(b:boolean):number; +>h : { (n: number): I; (b: boolean): number; } +>b : boolean + + i(b:boolean):number; +>i : { (b: boolean): number; (b: boolean): any; } +>b : boolean + + i(b:boolean):any; +>i : { (b: boolean): number; (b: boolean): any; } +>b : boolean +} diff --git a/tests/baselines/reference/overloadReturnTypes.js b/tests/baselines/reference/overloadReturnTypes.js index 161f5056266..127063caaae 100644 --- a/tests/baselines/reference/overloadReturnTypes.js +++ b/tests/baselines/reference/overloadReturnTypes.js @@ -31,9 +31,11 @@ var Accessor = (function () { })(); function attr(nameOrMap, value) { if (nameOrMap && typeof nameOrMap === "object") { + // handle map case return new Accessor; } else { + // handle string case return "s"; } } diff --git a/tests/baselines/reference/overloadReturnTypes.types b/tests/baselines/reference/overloadReturnTypes.types new file mode 100644 index 00000000000..1823c752ae7 --- /dev/null +++ b/tests/baselines/reference/overloadReturnTypes.types @@ -0,0 +1,62 @@ +=== tests/cases/compiler/overloadReturnTypes.ts === +class Accessor {} +>Accessor : Accessor + +function attr(name: string): string; +>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; } +>name : string + +function attr(name: string, value: string): Accessor; +>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; } +>name : string +>value : string +>Accessor : Accessor + +function attr(map: any): Accessor; +>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; } +>map : any +>Accessor : Accessor + +function attr(nameOrMap: any, value?: string): any { +>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; } +>nameOrMap : any +>value : string + + if (nameOrMap && typeof nameOrMap === "object") { +>nameOrMap && typeof nameOrMap === "object" : boolean +>nameOrMap : any +>typeof nameOrMap === "object" : boolean +>typeof nameOrMap : string +>nameOrMap : any + + // handle map case + return new Accessor; +>new Accessor : Accessor +>Accessor : typeof Accessor + } + else { + // handle string case + return "s"; + } +} + + +interface IFace { +>IFace : IFace + + attr(name:string):string; +>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; } +>name : string + + attr(name: string, value: string): Accessor; +>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; } +>name : string +>value : string +>Accessor : Accessor + + attr(map: any): Accessor; +>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; } +>map : any +>Accessor : Accessor +} + diff --git a/tests/baselines/reference/overloadWithCallbacksWithDifferingOptionalityOnArgs.types b/tests/baselines/reference/overloadWithCallbacksWithDifferingOptionalityOnArgs.types new file mode 100644 index 00000000000..2ed804ad012 --- /dev/null +++ b/tests/baselines/reference/overloadWithCallbacksWithDifferingOptionalityOnArgs.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/overloadWithCallbacksWithDifferingOptionalityOnArgs.ts === +function x2(callback: (x?: number) => number); +>x2 : { (callback: (x?: number) => number): any; (callback: (x: string) => number): any; } +>callback : (x?: number) => number +>x : number + +function x2(callback: (x: string) => number); +>x2 : { (callback: (x?: number) => number): any; (callback: (x: string) => number): any; } +>callback : (x: string) => number +>x : string + +function x2(callback: (x: any) => number) { } +>x2 : { (callback: (x?: number) => number): any; (callback: (x: string) => number): any; } +>callback : (x: any) => number +>x : any + +x2(() => 1); +>x2(() => 1) : any +>x2 : { (callback: (x?: number) => number): any; (callback: (x: string) => number): any; } +>() => 1 : () => number + +x2((x) => 1 ); +>x2((x) => 1 ) : any +>x2 : { (callback: (x?: number) => number): any; (callback: (x: string) => number): any; } +>(x) => 1 : (x: number) => number +>x : number + diff --git a/tests/baselines/reference/overloadedStaticMethodSpecialization.types b/tests/baselines/reference/overloadedStaticMethodSpecialization.types new file mode 100644 index 00000000000..bd60fc16fe0 --- /dev/null +++ b/tests/baselines/reference/overloadedStaticMethodSpecialization.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/overloadedStaticMethodSpecialization.ts === +class A { +>A : A +>T : T + + static B(v: A): A; +>B : { (v: A): A; (v: S): A; } +>S : S +>v : A +>A : A +>S : S +>A : A +>S : S + + static B(v: S): A; +>B : { (v: A): A; (v: S): A; } +>S : S +>v : S +>S : S +>A : A +>S : S + + static B(v: any): A { +>B : { (v: A): A; (v: S): A; } +>S : S +>v : any +>A : A +>S : S + + return null; + } +} + diff --git a/tests/baselines/reference/overloadingOnConstants1.js b/tests/baselines/reference/overloadingOnConstants1.js index 8ba27fa41bf..e325e7ad8c0 100644 --- a/tests/baselines/reference/overloadingOnConstants1.js +++ b/tests/baselines/reference/overloadingOnConstants1.js @@ -67,10 +67,12 @@ var Derived3 = (function (_super) { return Derived3; })(Base); var d2; +// these are ok var htmlElement = d2.createElement("yo"); var htmlCanvasElement = d2.createElement("canvas"); var htmlDivElement = d2.createElement("div"); var htmlSpanElement = d2.createElement("span"); +// these are errors var htmlElement2 = d2.createElement("yo"); var htmlCanvasElement2 = d2.createElement("canvas"); var htmlDivElement2 = d2.createElement("div"); diff --git a/tests/baselines/reference/overloadingOnConstants2.js b/tests/baselines/reference/overloadingOnConstants2.js index 34094804f6a..4a3f49d1b06 100644 --- a/tests/baselines/reference/overloadingOnConstants2.js +++ b/tests/baselines/reference/overloadingOnConstants2.js @@ -56,12 +56,12 @@ var E = (function () { function foo(x, items) { return null; } -var a = foo("hi", []); -var b = foo("bye", []); -var c = foo("um", []); +var a = foo("hi", []); // D +var b = foo("bye", []); // E +var c = foo("um", []); // error function bar(x, items) { return null; } -var d = bar("hi", []); -var e = bar("bye", []); -var f = bar("um", []); +var d = bar("hi", []); // D +var e = bar("bye", []); // E +var f = bar("um", []); // C diff --git a/tests/baselines/reference/overloadresolutionWithConstraintCheckingDeferred.js b/tests/baselines/reference/overloadresolutionWithConstraintCheckingDeferred.js index b56693c97cd..0e5f84c8d69 100644 --- a/tests/baselines/reference/overloadresolutionWithConstraintCheckingDeferred.js +++ b/tests/baselines/reference/overloadresolutionWithConstraintCheckingDeferred.js @@ -28,9 +28,9 @@ var G = (function () { } return G; })(); -var result = foo(function (x) { return new G(x); }); -var result2 = foo(function (x) { return new G(x); }); +var result = foo(function (x) { return new G(x); }); // No error, returns number +var result2 = foo(function (x) { return new G(x); }); // No error, returns number var result3 = foo(function (x) { - var y; + var y; // error that C does not satisfy constraint return y; }); diff --git a/tests/baselines/reference/overloadsAndTypeArgumentArity.js b/tests/baselines/reference/overloadsAndTypeArgumentArity.js index e08a64b6e47..fd8f3a81661 100644 --- a/tests/baselines/reference/overloadsAndTypeArgumentArity.js +++ b/tests/baselines/reference/overloadsAndTypeArgumentArity.js @@ -8,5 +8,5 @@ Callbacks('s'); // no error new Callbacks('s'); // no error //// [overloadsAndTypeArgumentArity.js] -Callbacks('s'); -new Callbacks('s'); +Callbacks('s'); // no error +new Callbacks('s'); // no error diff --git a/tests/baselines/reference/overloadsAndTypeArgumentArity.types b/tests/baselines/reference/overloadsAndTypeArgumentArity.types new file mode 100644 index 00000000000..1b76b8e13fe --- /dev/null +++ b/tests/baselines/reference/overloadsAndTypeArgumentArity.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/overloadsAndTypeArgumentArity.ts === +declare function Callbacks(flags?: string): void; +>Callbacks : { (flags?: string): void; (flags?: string): void; (flags?: string): void; (flags?: string): void; } +>flags : string + +declare function Callbacks(flags?: string): void; +>Callbacks : { (flags?: string): void; (flags?: string): void; (flags?: string): void; (flags?: string): void; } +>T : T +>flags : string + +declare function Callbacks(flags?: string): void; +>Callbacks : { (flags?: string): void; (flags?: string): void; (flags?: string): void; (flags?: string): void; } +>T1 : T1 +>T2 : T2 +>flags : string + +declare function Callbacks(flags?: string): void; +>Callbacks : { (flags?: string): void; (flags?: string): void; (flags?: string): void; (flags?: string): void; } +>T1 : T1 +>T2 : T2 +>T3 : T3 +>flags : string + +Callbacks('s'); // no error +>Callbacks('s') : void +>Callbacks : { (flags?: string): void; (flags?: string): void; (flags?: string): void; (flags?: string): void; } + +new Callbacks('s'); // no error +>new Callbacks('s') : any +>Callbacks : { (flags?: string): void; (flags?: string): void; (flags?: string): void; (flags?: string): void; } + diff --git a/tests/baselines/reference/overloadsAndTypeArgumentArityErrors.js b/tests/baselines/reference/overloadsAndTypeArgumentArityErrors.js index 7809929aab8..1117bc43e1a 100644 --- a/tests/baselines/reference/overloadsAndTypeArgumentArityErrors.js +++ b/tests/baselines/reference/overloadsAndTypeArgumentArityErrors.js @@ -7,5 +7,5 @@ Callbacks('s'); // wrong number of type arguments new Callbacks('s'); // wrong number of type arguments //// [overloadsAndTypeArgumentArityErrors.js] -Callbacks('s'); -new Callbacks('s'); +Callbacks('s'); // wrong number of type arguments +new Callbacks('s'); // wrong number of type arguments diff --git a/tests/baselines/reference/overloadsWithProvisionalErrors.js b/tests/baselines/reference/overloadsWithProvisionalErrors.js index 5d201e770cd..c7fb4785d09 100644 --- a/tests/baselines/reference/overloadsWithProvisionalErrors.js +++ b/tests/baselines/reference/overloadsWithProvisionalErrors.js @@ -10,6 +10,6 @@ func(s => ({ a: blah })); // Two errors here, one for blah not being defined, an //// [overloadsWithProvisionalErrors.js] var func; -func(function (s) { return ({}); }); -func(function (s) { return ({ a: blah, b: 3 }); }); -func(function (s) { return ({ a: blah }); }); +func(function (s) { return ({}); }); // Error for no applicable overload (object type is missing a and b) +func(function (s) { return ({ a: blah, b: 3 }); }); // Only error inside the function, but not outside (since it would be applicable if not for the provisional error) +func(function (s) { return ({ a: blah }); }); // Two errors here, one for blah not being defined, and one for the overload since it would not be applicable anyway diff --git a/tests/baselines/reference/overloadsWithinClasses.js b/tests/baselines/reference/overloadsWithinClasses.js index 8ef9341ec15..79f3c332be5 100644 --- a/tests/baselines/reference/overloadsWithinClasses.js +++ b/tests/baselines/reference/overloadsWithinClasses.js @@ -30,14 +30,14 @@ var foo = (function () { foo.fnOverload = function () { }; foo.fnOverload = function (foo) { - }; + }; // error return foo; })(); var bar = (function () { function bar() { } bar.fnOverload = function (foo) { - }; + }; // no error return bar; })(); var X = (function () { diff --git a/tests/baselines/reference/paramPropertiesInSignatures.js b/tests/baselines/reference/paramPropertiesInSignatures.js index 03e73d143ae..15d7f616bdf 100644 --- a/tests/baselines/reference/paramPropertiesInSignatures.js +++ b/tests/baselines/reference/paramPropertiesInSignatures.js @@ -15,6 +15,6 @@ declare class C2 { var C1 = (function () { function C1(p3) { this.p3 = p3; - } + } // OK return C1; })(); diff --git a/tests/baselines/reference/parameterPropertyInitializerInInitializers.types b/tests/baselines/reference/parameterPropertyInitializerInInitializers.types new file mode 100644 index 00000000000..c15ace849af --- /dev/null +++ b/tests/baselines/reference/parameterPropertyInitializerInInitializers.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/parameterPropertyInitializerInInitializers.ts === +class Foo { +>Foo : Foo + + constructor(public x: number, public y: number = x) { } +>x : number +>y : number +>x : number +} diff --git a/tests/baselines/reference/parameterPropertyReferencingOtherParameter.types b/tests/baselines/reference/parameterPropertyReferencingOtherParameter.types new file mode 100644 index 00000000000..0cf31b8e3f8 --- /dev/null +++ b/tests/baselines/reference/parameterPropertyReferencingOtherParameter.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/parameterPropertyReferencingOtherParameter.ts === +class Foo { +>Foo : Foo + + constructor(public x: number, public y: number = x) { } +>x : number +>y : number +>x : number +} + diff --git a/tests/baselines/reference/parameterReferencesOtherParameter1.types b/tests/baselines/reference/parameterReferencesOtherParameter1.types new file mode 100644 index 00000000000..bab9ef89189 --- /dev/null +++ b/tests/baselines/reference/parameterReferencesOtherParameter1.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/parameterReferencesOtherParameter1.ts === +class Model { +>Model : Model + + public name: string; +>name : string +} + +class UI { +>UI : UI + + constructor(model: Model, foo:string = model.name) +>model : Model +>Model : Model +>foo : string +>model.name : string +>model : Model +>name : string + { + } +} diff --git a/tests/baselines/reference/parameterReferencesOtherParameter2.types b/tests/baselines/reference/parameterReferencesOtherParameter2.types new file mode 100644 index 00000000000..3aac2cfd345 --- /dev/null +++ b/tests/baselines/reference/parameterReferencesOtherParameter2.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/parameterReferencesOtherParameter2.ts === +class Model { +>Model : Model + + public name: string; +>name : string +} + +class UI { +>UI : UI + + constructor(model: Model, foo = model.name) +>model : Model +>Model : Model +>foo : string +>model.name : string +>model : Model +>name : string + { + } +} diff --git a/tests/baselines/reference/parametersWithNoAnnotationAreAny.types b/tests/baselines/reference/parametersWithNoAnnotationAreAny.types new file mode 100644 index 00000000000..9629d06c114 --- /dev/null +++ b/tests/baselines/reference/parametersWithNoAnnotationAreAny.types @@ -0,0 +1,88 @@ +=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/parametersWithNoAnnotationAreAny.ts === +function foo(x) { return x; } +>foo : (x: any) => any +>x : any +>x : any + +var f = function foo(x) { return x; } +>f : (x: any) => any +>function foo(x) { return x; } : (x: any) => any +>foo : (x: any) => any +>x : any +>x : any + +var f2 = (x) => x; +>f2 : (x: any) => any +>(x) => x : (x: any) => any +>x : any +>x : any + +var f3 = (x) => x; +>f3 : (x: any) => any +>(x) => x : (x: any) => any +>T : T +>x : any +>x : any + +class C { +>C : C + + foo(x) { +>foo : (x: any) => any +>x : any + + return x; +>x : any + } +} + +interface I { +>I : I + + foo(x); +>foo : (x: any) => any +>x : any + + foo2(x, y); +>foo2 : (x: any, y: any) => any +>x : any +>y : any +} + +var a: { +>a : { foo(x: any): any; } + + foo(x); +>foo : (x: any) => any +>x : any +} + +var b = { +>b : { foo: (x: any) => any; a: (x: any) => any; b: (x: any) => any; } +>{ foo(x) { return x; }, a: function foo(x) { return x; }, b: (x) => x} : { foo: (x: any) => any; a: (x: any) => any; b: (x: any) => any; } + + foo(x) { +>foo : (x: any) => any +>foo(x) { return x; } : (x: any) => any +>x : any + + return x; +>x : any + + }, + a: function foo(x) { +>a : (x: any) => any +>function foo(x) { return x; } : (x: any) => any +>foo : (x: any) => any +>x : any + + return x; +>x : any + + }, + b: (x) => x +>b : (x: any) => any +>(x) => x : (x: any) => any +>x : any +>x : any +} diff --git a/tests/baselines/reference/parseShortform.types b/tests/baselines/reference/parseShortform.types new file mode 100644 index 00000000000..21aff67ead4 --- /dev/null +++ b/tests/baselines/reference/parseShortform.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/parseShortform.ts === +interface I { +>I : I + + w: { +>w : { (): boolean; [x: string]: { x: any; y: any; }; [x: number]: { x: any; y: any; }; z: I; } + + z: I; +>z : I +>I : I + + (): boolean; + [s: string]: { x: any; y: any; }; +>s : string +>x : any +>y : any + + [n: number]: { x: any; y: any; }; +>n : number +>x : any +>y : any + + }; + x: boolean; +>x : boolean + + y: (s: string) => boolean; +>y : (s: string) => boolean +>s : string + + z: I; +>z : I +>I : I +} diff --git a/tests/baselines/reference/parser15.4.4.14-9-2.js b/tests/baselines/reference/parser15.4.4.14-9-2.js index 0b965e55ac0..9680dbff36b 100644 --- a/tests/baselines/reference/parser15.4.4.14-9-2.js +++ b/tests/baselines/reference/parser15.4.4.14-9-2.js @@ -27,6 +27,15 @@ runTestCase(testcase); //// [parser15.4.4.14-9-2.js] +/// Copyright (c) 2012 Ecma International. All rights reserved. +/// Ecma International makes this code available under the terms and conditions set +/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the +/// "Use Terms"). Any redistribution of this code must retain the above +/// copyright and this notice and otherwise comply with the Use Terms. +/** + * @path ch15/15.4/15.4.4/15.4.4.14/15.4.4.14-9-2.js + * @description Array.prototype.indexOf must return correct index (Number) + */ function testcase() { var obj = { toString: function () { return 0; diff --git a/tests/baselines/reference/parser509534.js b/tests/baselines/reference/parser509534.js index c066d5c0895..4562c7ef7a4 100644 --- a/tests/baselines/reference/parser509534.js +++ b/tests/baselines/reference/parser509534.js @@ -16,7 +16,9 @@ module.exports.route = function (server) { "use strict"; var config = require("../config"); module.exports.route = function (server) { + // General Login Page server.get(config.env.siteRoot + "/auth/login", function (req, res, next) { + // TODO Should render login page that shows auth options req.redirect("/auth/live"); }); }; diff --git a/tests/baselines/reference/parser509677.types b/tests/baselines/reference/parser509677.types new file mode 100644 index 00000000000..2e5c8244923 --- /dev/null +++ b/tests/baselines/reference/parser509677.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509677.ts === +var n: { y: string }; +>n : { y: string; } +>y : string + diff --git a/tests/baselines/reference/parser537152.types b/tests/baselines/reference/parser537152.types new file mode 100644 index 00000000000..5c07bd6ae2d --- /dev/null +++ b/tests/baselines/reference/parser537152.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser537152.ts === +var t; +>t : any + +var y = t.e1; +>y : any +>t.e1 : any +>t : any +>e1 : any + diff --git a/tests/baselines/reference/parser579071.types b/tests/baselines/reference/parser579071.types new file mode 100644 index 00000000000..6ae9576c036 --- /dev/null +++ b/tests/baselines/reference/parser579071.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser579071.ts === +var x = /fo(o/; +>x : RegExp + diff --git a/tests/baselines/reference/parser596700.types b/tests/baselines/reference/parser596700.types new file mode 100644 index 00000000000..d92d4b68ef5 --- /dev/null +++ b/tests/baselines/reference/parser596700.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser596700.ts === +var regex2 = /[a-z/]$/i; +>regex2 : RegExp + diff --git a/tests/baselines/reference/parser630933.types b/tests/baselines/reference/parser630933.types new file mode 100644 index 00000000000..4b1686fcbf2 --- /dev/null +++ b/tests/baselines/reference/parser630933.types @@ -0,0 +1,11 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser630933.ts === +var a = "Hello"; +>a : string + +var b = a.match(/\/ver=([^/]+)/); +>b : RegExpMatchArray +>a.match(/\/ver=([^/]+)/) : RegExpMatchArray +>a.match : { (regexp: string): RegExpMatchArray; (regexp: RegExp): RegExpMatchArray; } +>a : string +>match : { (regexp: string): RegExpMatchArray; (regexp: RegExp): RegExpMatchArray; } + diff --git a/tests/baselines/reference/parser642331.types b/tests/baselines/reference/parser642331.types new file mode 100644 index 00000000000..19cd40b76b8 --- /dev/null +++ b/tests/baselines/reference/parser642331.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser642331.ts === +class test { +>test : test + + constructor (static) { } +>static : any +} + diff --git a/tests/baselines/reference/parser643728.types b/tests/baselines/reference/parser643728.types new file mode 100644 index 00000000000..55c5377b6f7 --- /dev/null +++ b/tests/baselines/reference/parser643728.types @@ -0,0 +1,11 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser643728.ts === +interface C { +>C : C + + foo; +>foo : any + + new; +>new : any +} + diff --git a/tests/baselines/reference/parser645086_3.types b/tests/baselines/reference/parser645086_3.types new file mode 100644 index 00000000000..57ca07e1b2a --- /dev/null +++ b/tests/baselines/reference/parser645086_3.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_3.ts === +var v = /[\]/]/ +>v : RegExp + diff --git a/tests/baselines/reference/parser645086_4.types b/tests/baselines/reference/parser645086_4.types new file mode 100644 index 00000000000..01a702e2a06 --- /dev/null +++ b/tests/baselines/reference/parser645086_4.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_4.ts === +var v = /[^\]/]/ +>v : RegExp + diff --git a/tests/baselines/reference/parser645484.types b/tests/baselines/reference/parser645484.types new file mode 100644 index 00000000000..60ab6719e3c --- /dev/null +++ b/tests/baselines/reference/parser645484.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645484.ts === +var c : { +>c : { new?(): any; } + + new?(): any; +>new : () => any +} diff --git a/tests/baselines/reference/parser768531.types b/tests/baselines/reference/parser768531.types new file mode 100644 index 00000000000..2da2298c8e2 --- /dev/null +++ b/tests/baselines/reference/parser768531.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/Fuzz/parser768531.ts === +{a: 3} +No type information for this code./x/ +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic11.types b/tests/baselines/reference/parserAccessibilityAfterStatic11.types new file mode 100644 index 00000000000..c3b3699bb27 --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic11.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic11.ts === +class Outer +>Outer : Outer +{ +static public() {} +>public : () => void +} + diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic14.types b/tests/baselines/reference/parserAccessibilityAfterStatic14.types new file mode 100644 index 00000000000..6b4cff3e17f --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic14.types @@ -0,0 +1,9 @@ +=== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic14.ts === +class Outer +>Outer : Outer +{ +static public() {} +>public : () => void +>T : T +} + diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic2.types b/tests/baselines/reference/parserAccessibilityAfterStatic2.types new file mode 100644 index 00000000000..d22f2fe7876 --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic2.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic2.ts === +class Outer +>Outer : Outer +{ +static public; +>public : any +} + diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic3.types b/tests/baselines/reference/parserAccessibilityAfterStatic3.types new file mode 100644 index 00000000000..b8eeb416c92 --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic3.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic3.ts === +class Outer +>Outer : Outer +{ +static public = 1; +>public : number +} + diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic4.types b/tests/baselines/reference/parserAccessibilityAfterStatic4.types new file mode 100644 index 00000000000..2e987cb0946 --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic4.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic4.ts === +class Outer +>Outer : Outer +{ +static public: number; +>public : number +} + diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic5.types b/tests/baselines/reference/parserAccessibilityAfterStatic5.types new file mode 100644 index 00000000000..34cc33ce34c --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic5.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic5.ts === +class Outer +>Outer : Outer +{ +static public +>public : any +} + diff --git a/tests/baselines/reference/parserAccessors2.types b/tests/baselines/reference/parserAccessors2.types new file mode 100644 index 00000000000..9a0d9b0fdaa --- /dev/null +++ b/tests/baselines/reference/parserAccessors2.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/Accessors/parserAccessors2.ts === +class C { +>C : C + + set Foo(a) { } +>Foo : any +>a : any +} diff --git a/tests/baselines/reference/parserAccessors4.types b/tests/baselines/reference/parserAccessors4.types new file mode 100644 index 00000000000..d2db232d796 --- /dev/null +++ b/tests/baselines/reference/parserAccessors4.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/Accessors/parserAccessors4.ts === +var v = { set Foo(a) { } }; +>v : { Foo: any; } +>{ set Foo(a) { } } : { Foo: any; } +>Foo : any +>a : any + diff --git a/tests/baselines/reference/parserArrayLiteralExpression1.types b/tests/baselines/reference/parserArrayLiteralExpression1.types new file mode 100644 index 00000000000..d31f5ee3bfb --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression1.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression1.ts === +var v = []; +>v : any[] +>[] : undefined[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression10.types b/tests/baselines/reference/parserArrayLiteralExpression10.types new file mode 100644 index 00000000000..d324d42aa46 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression10.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression10.ts === +var v = [1,1,]; +>v : number[] +>[1,1,] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression11.types b/tests/baselines/reference/parserArrayLiteralExpression11.types new file mode 100644 index 00000000000..44ac1f6c5aa --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression11.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression11.ts === +var v = [1,,1]; +>v : number[] +>[1,,1] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression12.types b/tests/baselines/reference/parserArrayLiteralExpression12.types new file mode 100644 index 00000000000..a2ea5f12404 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression12.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression12.ts === +var v = [1,,,1]; +>v : number[] +>[1,,,1] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression13.types b/tests/baselines/reference/parserArrayLiteralExpression13.types new file mode 100644 index 00000000000..bf8c15ac6b2 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression13.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression13.ts === +var v = [1,,1,,1]; +>v : number[] +>[1,,1,,1] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression14.types b/tests/baselines/reference/parserArrayLiteralExpression14.types new file mode 100644 index 00000000000..4de3139c4b8 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression14.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression14.ts === +var v = [,,1,1,,1,,1,1,,1]; +>v : number[] +>[,,1,1,,1,,1,1,,1] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression15.types b/tests/baselines/reference/parserArrayLiteralExpression15.types new file mode 100644 index 00000000000..b484c537f70 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression15.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression15.ts === +var v = [,,1,1,,1,,1,1,,1,]; +>v : number[] +>[,,1,1,,1,,1,1,,1,] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression2.types b/tests/baselines/reference/parserArrayLiteralExpression2.types new file mode 100644 index 00000000000..dd16681ab82 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression2.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression2.ts === +var v = [,]; +>v : any[] +>[,] : undefined[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression3.types b/tests/baselines/reference/parserArrayLiteralExpression3.types new file mode 100644 index 00000000000..d0fbaa9b67b --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression3.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression3.ts === +var v = [,,]; +>v : any[] +>[,,] : undefined[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression4.types b/tests/baselines/reference/parserArrayLiteralExpression4.types new file mode 100644 index 00000000000..0ceded3e62a --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression4.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression4.ts === +var v = [,,,]; +>v : any[] +>[,,,] : undefined[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression5.types b/tests/baselines/reference/parserArrayLiteralExpression5.types new file mode 100644 index 00000000000..b729f7fed86 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression5.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression5.ts === +var v = [1]; +>v : number[] +>[1] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression6.types b/tests/baselines/reference/parserArrayLiteralExpression6.types new file mode 100644 index 00000000000..a72a8eda339 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression6.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression6.ts === +var v = [,1]; +>v : number[] +>[,1] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression7.types b/tests/baselines/reference/parserArrayLiteralExpression7.types new file mode 100644 index 00000000000..ca8c5d6e890 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression7.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression7.ts === +var v = [1,]; +>v : number[] +>[1,] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression8.types b/tests/baselines/reference/parserArrayLiteralExpression8.types new file mode 100644 index 00000000000..06824d77a1a --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression8.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression8.ts === +var v = [,1,]; +>v : number[] +>[,1,] : number[] + diff --git a/tests/baselines/reference/parserArrayLiteralExpression9.types b/tests/baselines/reference/parserArrayLiteralExpression9.types new file mode 100644 index 00000000000..7107f9e4090 --- /dev/null +++ b/tests/baselines/reference/parserArrayLiteralExpression9.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ArrayLiteralExpressions/parserArrayLiteralExpression9.ts === +var v = [1,1]; +>v : number[] +>[1,1] : number[] + diff --git a/tests/baselines/reference/parserClassDeclaration16.types b/tests/baselines/reference/parserClassDeclaration16.types new file mode 100644 index 00000000000..646e3db8789 --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration16.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration16.ts === +class C { +>C : C + + foo(); +>foo : () => any + + foo() { } +>foo : () => any +} diff --git a/tests/baselines/reference/parserClassDeclaration17.types b/tests/baselines/reference/parserClassDeclaration17.types new file mode 100644 index 00000000000..665d4b8cb60 --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration17.types @@ -0,0 +1,17 @@ +=== tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration17.ts === +declare class Enumerator { +>Enumerator : Enumerator + + public atEnd(): boolean; +>atEnd : () => boolean + + public moveNext(); +>moveNext : () => any + + public item(): any; +>item : () => any + + constructor (o: any); +>o : any +} + diff --git a/tests/baselines/reference/parserClassDeclaration19.types b/tests/baselines/reference/parserClassDeclaration19.types new file mode 100644 index 00000000000..1f6a25bbdc8 --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration19.types @@ -0,0 +1,9 @@ +=== tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration19.ts === +class C { +>C : C + + foo(); +>foo : () => any + + "foo"() { } +} diff --git a/tests/baselines/reference/parserClassDeclaration20.types b/tests/baselines/reference/parserClassDeclaration20.types new file mode 100644 index 00000000000..e8014bf3af5 --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration20.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration20.ts === +class C { +>C : C + + 0(); + "0"() { } +} diff --git a/tests/baselines/reference/parserClassDeclaration23.types b/tests/baselines/reference/parserClassDeclaration23.types new file mode 100644 index 00000000000..71f293f5894 --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration23.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration23.ts === +class C\u0032 { +>C\u0032 : C\u0032 +} diff --git a/tests/baselines/reference/parserClassDeclaration26.types b/tests/baselines/reference/parserClassDeclaration26.types new file mode 100644 index 00000000000..567872e245e --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration26.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration26.ts === +class C { +>C : C + + var +>var : any + + public +>public : any +} diff --git a/tests/baselines/reference/parserClassDeclaration7.d.types b/tests/baselines/reference/parserClassDeclaration7.d.types new file mode 100644 index 00000000000..968f16d296a --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration7.d.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclaration7.d.ts === +declare class C { +>C : C +} diff --git a/tests/baselines/reference/parserClassDeclarationIndexSignature1.types b/tests/baselines/reference/parserClassDeclarationIndexSignature1.types new file mode 100644 index 00000000000..f4d2adeedcd --- /dev/null +++ b/tests/baselines/reference/parserClassDeclarationIndexSignature1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/ClassDeclarations/parserClassDeclarationIndexSignature1.ts === +class C { +>C : C + + [index:number]:number +>index : number +} diff --git a/tests/baselines/reference/parserConstructorDeclaration1.types b/tests/baselines/reference/parserConstructorDeclaration1.types new file mode 100644 index 00000000000..cc0d6f7a5c5 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration1.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration1.ts === +class C { +>C : C + + public constructor() { } +} diff --git a/tests/baselines/reference/parserDebuggerStatement1.types b/tests/baselines/reference/parserDebuggerStatement1.types new file mode 100644 index 00000000000..bfc1785f927 --- /dev/null +++ b/tests/baselines/reference/parserDebuggerStatement1.types @@ -0,0 +1,3 @@ +=== tests/cases/conformance/parser/ecmascript5/parserDebuggerStatement1.ts === +debugger +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserDebuggerStatement2.types b/tests/baselines/reference/parserDebuggerStatement2.types new file mode 100644 index 00000000000..9916218897c --- /dev/null +++ b/tests/baselines/reference/parserDebuggerStatement2.types @@ -0,0 +1,3 @@ +=== tests/cases/conformance/parser/ecmascript5/parserDebuggerStatement2.ts === +debugger; +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserDoStatement2.types b/tests/baselines/reference/parserDoStatement2.types new file mode 100644 index 00000000000..62790b49103 --- /dev/null +++ b/tests/baselines/reference/parserDoStatement2.types @@ -0,0 +1,3 @@ +=== tests/cases/conformance/parser/ecmascript5/Statements/parserDoStatement2.ts === +do{;}while(false)false +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserEmptyFile1.types b/tests/baselines/reference/parserEmptyFile1.types new file mode 100644 index 00000000000..d48ac0a4841 --- /dev/null +++ b/tests/baselines/reference/parserEmptyFile1.types @@ -0,0 +1,3 @@ +=== tests/cases/conformance/parser/ecmascript5/parserEmptyFile1.ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserEmptyStatement1.types b/tests/baselines/reference/parserEmptyStatement1.types new file mode 100644 index 00000000000..585c87f202b --- /dev/null +++ b/tests/baselines/reference/parserEmptyStatement1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/parserEmptyStatement1.ts === +; ; +var a = 1; +>a : number + +; + diff --git a/tests/baselines/reference/parserEnum6.types b/tests/baselines/reference/parserEnum6.types new file mode 100644 index 00000000000..9b9e2a4909a --- /dev/null +++ b/tests/baselines/reference/parserEnum6.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum6.ts === +enum E { +>E : E + + "A", "B", "C" +} diff --git a/tests/baselines/reference/parserEnum7.types b/tests/baselines/reference/parserEnum7.types new file mode 100644 index 00000000000..63a77cb9d23 --- /dev/null +++ b/tests/baselines/reference/parserEnum7.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum7.ts === +enum E { +>E : E + + 1, 2, 3 +} diff --git a/tests/baselines/reference/parserEnumDeclaration1.types b/tests/baselines/reference/parserEnumDeclaration1.types new file mode 100644 index 00000000000..86ac928d20f --- /dev/null +++ b/tests/baselines/reference/parserEnumDeclaration1.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnumDeclaration1.ts === +enum E { +>E : E + + Foo = 1, +>Foo : E + + Bar +>Bar : E +} diff --git a/tests/baselines/reference/parserEnumDeclaration2.d.types b/tests/baselines/reference/parserEnumDeclaration2.d.types new file mode 100644 index 00000000000..782c530e505 --- /dev/null +++ b/tests/baselines/reference/parserEnumDeclaration2.d.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnumDeclaration2.d.ts === +declare enum E { +>E : E +} diff --git a/tests/baselines/reference/parserEnumDeclaration3.types b/tests/baselines/reference/parserEnumDeclaration3.types new file mode 100644 index 00000000000..a2a5542c060 --- /dev/null +++ b/tests/baselines/reference/parserEnumDeclaration3.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnumDeclaration3.ts === +declare enum E { +>E : E + + A = 1 +>A : E +} diff --git a/tests/baselines/reference/parserEnumDeclaration5.types b/tests/baselines/reference/parserEnumDeclaration5.types new file mode 100644 index 00000000000..be3559bd2b9 --- /dev/null +++ b/tests/baselines/reference/parserEnumDeclaration5.types @@ -0,0 +1,16 @@ +=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnumDeclaration5.ts === +enum E { +>E : E + + A = 1, +>A : E + + B, +>B : E + + C = 2, +>C : E + + D +>D : E +} diff --git a/tests/baselines/reference/parserExportAsFunctionIdentifier.types b/tests/baselines/reference/parserExportAsFunctionIdentifier.types new file mode 100644 index 00000000000..6e8fb29287f --- /dev/null +++ b/tests/baselines/reference/parserExportAsFunctionIdentifier.types @@ -0,0 +1,19 @@ +=== tests/cases/conformance/parser/ecmascript5/parserExportAsFunctionIdentifier.ts === +interface Foo { +>Foo : Foo + + export(): string; +>export : () => string +} + +var f: Foo; +>f : Foo +>Foo : Foo + +var x = f.export(); +>x : string +>f.export() : string +>f.export : () => string +>f : Foo +>export : () => string + diff --git a/tests/baselines/reference/parserExportAssignment7.errors.txt b/tests/baselines/reference/parserExportAssignment7.errors.txt index 0f9b4254760..3bd5fe1f79f 100644 --- a/tests/baselines/reference/parserExportAssignment7.errors.txt +++ b/tests/baselines/reference/parserExportAssignment7.errors.txt @@ -6,6 +6,6 @@ export = B; ~~~~~~~~~~~ -!!! An export assignment cannot be used in a module with other exported elements. +!!! Cannot find name 'B'. ~~~~~~~~~~~ -!!! Cannot find name 'B'. \ No newline at end of file +!!! An export assignment cannot be used in a module with other exported elements. \ No newline at end of file diff --git a/tests/baselines/reference/parserExportAssignment8.errors.txt b/tests/baselines/reference/parserExportAssignment8.errors.txt index cfa28eaa2a3..7e808fec631 100644 --- a/tests/baselines/reference/parserExportAssignment8.errors.txt +++ b/tests/baselines/reference/parserExportAssignment8.errors.txt @@ -3,9 +3,9 @@ ~~~~~~~~~~~ !!! Cannot compile external modules unless the '--module' flag is provided. ~~~~~~~~~~~ -!!! An export assignment cannot be used in a module with other exported elements. - ~~~~~~~~~~~ !!! Cannot find name 'B'. + ~~~~~~~~~~~ +!!! An export assignment cannot be used in a module with other exported elements. export class C { } \ No newline at end of file diff --git a/tests/baselines/reference/parserForStatement3.errors.txt b/tests/baselines/reference/parserForStatement3.errors.txt index 8af66924fc0..91fb6ec21a2 100644 --- a/tests/baselines/reference/parserForStatement3.errors.txt +++ b/tests/baselines/reference/parserForStatement3.errors.txt @@ -1,9 +1,9 @@ ==== tests/cases/conformance/parser/ecmascript5/Statements/parserForStatement3.ts (7 errors) ==== for(d in _.jh[a]=_.jh[a]||[],b); ~ -!!! The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. - ~ !!! Cannot find name 'd'. + ~ +!!! The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. ~ !!! Cannot find name '_'. ~ diff --git a/tests/baselines/reference/parserFunctionDeclaration1.d.types b/tests/baselines/reference/parserFunctionDeclaration1.d.types new file mode 100644 index 00000000000..cb62ab01c90 --- /dev/null +++ b/tests/baselines/reference/parserFunctionDeclaration1.d.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/FunctionDeclarations/parserFunctionDeclaration1.d.ts === +declare function F(); +>F : () => any + diff --git a/tests/baselines/reference/parserFunctionDeclaration5.types b/tests/baselines/reference/parserFunctionDeclaration5.types new file mode 100644 index 00000000000..a3cf71336ea --- /dev/null +++ b/tests/baselines/reference/parserFunctionDeclaration5.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/FunctionDeclarations/parserFunctionDeclaration5.ts === +function foo(); +>foo : () => any + +function foo() { } +>foo : () => any + diff --git a/tests/baselines/reference/parserFunctionDeclaration8.types b/tests/baselines/reference/parserFunctionDeclaration8.types new file mode 100644 index 00000000000..ebb8ff8d409 --- /dev/null +++ b/tests/baselines/reference/parserFunctionDeclaration8.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/FunctionDeclarations/parserFunctionDeclaration8.ts === +declare module M { +>M : typeof M + + function foo(); +>foo : () => any +} diff --git a/tests/baselines/reference/parserFunctionPropertyAssignment1.types b/tests/baselines/reference/parserFunctionPropertyAssignment1.types new file mode 100644 index 00000000000..d84e798d023 --- /dev/null +++ b/tests/baselines/reference/parserFunctionPropertyAssignment1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertyAssignments/parserFunctionPropertyAssignment1.ts === +var v = { foo() { } }; +>v : { foo: () => void; } +>{ foo() { } } : { foo: () => void; } +>foo : () => void +>foo() { } : () => void + diff --git a/tests/baselines/reference/parserFunctionPropertyAssignment2.types b/tests/baselines/reference/parserFunctionPropertyAssignment2.types new file mode 100644 index 00000000000..21d182993bb --- /dev/null +++ b/tests/baselines/reference/parserFunctionPropertyAssignment2.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertyAssignments/parserFunctionPropertyAssignment2.ts === +var v = { 0() { } }; +>v : { 0: () => void; } +>{ 0() { } } : { 0: () => void; } +>0() { } : () => void + diff --git a/tests/baselines/reference/parserFunctionPropertyAssignment3.types b/tests/baselines/reference/parserFunctionPropertyAssignment3.types new file mode 100644 index 00000000000..2c76fdf07a4 --- /dev/null +++ b/tests/baselines/reference/parserFunctionPropertyAssignment3.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertyAssignments/parserFunctionPropertyAssignment3.ts === +var v = { "foo"() { } }; +>v : { "foo": () => void; } +>{ "foo"() { } } : { "foo": () => void; } +>"foo"() { } : () => void + diff --git a/tests/baselines/reference/parserFunctionPropertyAssignment4.types b/tests/baselines/reference/parserFunctionPropertyAssignment4.types new file mode 100644 index 00000000000..4aec89e265f --- /dev/null +++ b/tests/baselines/reference/parserFunctionPropertyAssignment4.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertyAssignments/parserFunctionPropertyAssignment4.ts === +var v = { 0() { } }; +>v : { 0: () => void; } +>{ 0() { } } : { 0: () => void; } +>0() { } : () => void +>T : T + diff --git a/tests/baselines/reference/parserGenericClass1.types b/tests/baselines/reference/parserGenericClass1.types new file mode 100644 index 00000000000..546da49f9ab --- /dev/null +++ b/tests/baselines/reference/parserGenericClass1.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass1.ts === +class C { +>C : C +>T : T +} diff --git a/tests/baselines/reference/parserGenericClass2.types b/tests/baselines/reference/parserGenericClass2.types new file mode 100644 index 00000000000..b577eef39f3 --- /dev/null +++ b/tests/baselines/reference/parserGenericClass2.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericClass2.ts === +class C { +>C : C +>K : K +>V : V +} diff --git a/tests/baselines/reference/parserGenericConstraint1.types b/tests/baselines/reference/parserGenericConstraint1.types new file mode 100644 index 00000000000..2b03617861c --- /dev/null +++ b/tests/baselines/reference/parserGenericConstraint1.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint1.ts === +class C { +>C : C +>T : T +} diff --git a/tests/baselines/reference/parserGenericsInTypeContexts1.errors.txt b/tests/baselines/reference/parserGenericsInTypeContexts1.errors.txt index 574c03823df..07d04e34ffb 100644 --- a/tests/baselines/reference/parserGenericsInTypeContexts1.errors.txt +++ b/tests/baselines/reference/parserGenericsInTypeContexts1.errors.txt @@ -30,9 +30,9 @@ function f2(): F { ~~~~ -!!! A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. - ~~~~ !!! Cannot find name 'F'. + ~~~~ +!!! A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGenericsInTypeContexts2.errors.txt b/tests/baselines/reference/parserGenericsInTypeContexts2.errors.txt index f3b47f04368..cf3f3550d1e 100644 --- a/tests/baselines/reference/parserGenericsInTypeContexts2.errors.txt +++ b/tests/baselines/reference/parserGenericsInTypeContexts2.errors.txt @@ -30,9 +30,9 @@ function f2(): F, Y>> { ~~~~~~~~~~~~~~~~ -!!! A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. - ~~~~~~~~~~~~~~~~ !!! Cannot find name 'F'. + ~~~~~~~~~~~~~~~~ +!!! A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity1.types b/tests/baselines/reference/parserGreaterThanTokenAmbiguity1.types new file mode 100644 index 00000000000..451ff65cdd9 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity1.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity1.ts === +1 >> 2; +>1 >> 2 : number + diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity10.types b/tests/baselines/reference/parserGreaterThanTokenAmbiguity10.types new file mode 100644 index 00000000000..f58be05c966 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity10.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity10.ts === +1 +>1 // before>>> // after2 : number + +// before +>>> // after +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity5.types b/tests/baselines/reference/parserGreaterThanTokenAmbiguity5.types new file mode 100644 index 00000000000..770d3fa611f --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity5.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity5.ts === +1 +>1 // before>> // after2 : number + +// before +>> // after +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity6.types b/tests/baselines/reference/parserGreaterThanTokenAmbiguity6.types new file mode 100644 index 00000000000..fc7616eef90 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity6.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity6.ts === +1 >>> 2; +>1 >>> 2 : number + diff --git a/tests/baselines/reference/parserIndexMemberDeclaration1.types b/tests/baselines/reference/parserIndexMemberDeclaration1.types new file mode 100644 index 00000000000..83bcfe79678 --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration1.ts === +class C { +>C : C + + [a: string]: number +>a : string +} diff --git a/tests/baselines/reference/parserIndexMemberDeclaration2.types b/tests/baselines/reference/parserIndexMemberDeclaration2.types new file mode 100644 index 00000000000..00ef9a54880 --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration2.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration2.ts === +class C { +>C : C + + [a: string]: number +>a : string + + public v: number +>v : number +} diff --git a/tests/baselines/reference/parserIndexMemberDeclaration3.types b/tests/baselines/reference/parserIndexMemberDeclaration3.types new file mode 100644 index 00000000000..15a7d63ab8a --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration3.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration3.ts === +class C { +>C : C + + [a: string]: number; +>a : string + + public v: number +>v : number +} diff --git a/tests/baselines/reference/parserIndexMemberDeclaration4.types b/tests/baselines/reference/parserIndexMemberDeclaration4.types new file mode 100644 index 00000000000..a8d8880261d --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration4.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration4.ts === +class C { +>C : C + + [a: string]: number; public v: number +>a : string +>v : number +} diff --git a/tests/baselines/reference/parserInterfaceKeywordInEnum.types b/tests/baselines/reference/parserInterfaceKeywordInEnum.types new file mode 100644 index 00000000000..aa71126883d --- /dev/null +++ b/tests/baselines/reference/parserInterfaceKeywordInEnum.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserInterfaceKeywordInEnum.ts === +enum Bar { +>Bar : Bar + + interface, +>interface : Bar +} + diff --git a/tests/baselines/reference/parserInterfaceKeywordInEnum1.types b/tests/baselines/reference/parserInterfaceKeywordInEnum1.types new file mode 100644 index 00000000000..f17bfeacf88 --- /dev/null +++ b/tests/baselines/reference/parserInterfaceKeywordInEnum1.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserInterfaceKeywordInEnum1.ts === +"use strict"; + +enum Bar { +>Bar : Bar + + interface, +>interface : Bar +} + diff --git a/tests/baselines/reference/parserKeywordsAsIdentifierName1.types b/tests/baselines/reference/parserKeywordsAsIdentifierName1.types new file mode 100644 index 00000000000..e917dc76cf0 --- /dev/null +++ b/tests/baselines/reference/parserKeywordsAsIdentifierName1.types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/parser/ecmascript5/parserKeywordsAsIdentifierName1.ts === +var big = { +>big : { break: number; super: number; const: number; } +>{ break : 0, super : 0, const : 0} : { break: number; super: number; const: number; } + + break : 0, +>break : number + + super : 0, +>super : number + + const : 0 +>const : number +} + diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration4.types b/tests/baselines/reference/parserMemberAccessorDeclaration4.types new file mode 100644 index 00000000000..de4bc245d2e --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration4.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/MemberAccessorDeclarations/parserMemberAccessorDeclaration4.ts === +class C { +>C : C + + set a(i) { } +>a : any +>i : any +} diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration5.types b/tests/baselines/reference/parserMemberAccessorDeclaration5.types new file mode 100644 index 00000000000..d22ee2d775a --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration5.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/MemberAccessorDeclarations/parserMemberAccessorDeclaration5.ts === +class C { +>C : C + + set "a"(i) { } +>i : any +} diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration6.types b/tests/baselines/reference/parserMemberAccessorDeclaration6.types new file mode 100644 index 00000000000..a06b6ddfa0c --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration6.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/MemberAccessorDeclarations/parserMemberAccessorDeclaration6.ts === +class C { +>C : C + + set 0(i) { } +>i : any +} diff --git a/tests/baselines/reference/parserMethodSignature1.types b/tests/baselines/reference/parserMethodSignature1.types new file mode 100644 index 00000000000..fe016067294 --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature1.ts === +interface I { +>I : I + + A(); +>A : () => any +} diff --git a/tests/baselines/reference/parserMethodSignature10.types b/tests/baselines/reference/parserMethodSignature10.types new file mode 100644 index 00000000000..34b3bfcbd33 --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature10.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature10.ts === +interface I { +>I : I + + 1?(); +} diff --git a/tests/baselines/reference/parserMethodSignature11.types b/tests/baselines/reference/parserMethodSignature11.types new file mode 100644 index 00000000000..f47eda1e9cd --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature11.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature11.ts === +interface I { +>I : I + + 2(); +>T : T +} diff --git a/tests/baselines/reference/parserMethodSignature12.types b/tests/baselines/reference/parserMethodSignature12.types new file mode 100644 index 00000000000..b5b38fadb4b --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature12.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature12.ts === +interface I { +>I : I + + 3?(); +>T : T +} diff --git a/tests/baselines/reference/parserMethodSignature2.types b/tests/baselines/reference/parserMethodSignature2.types new file mode 100644 index 00000000000..380c66c6a87 --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature2.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature2.ts === +interface I { +>I : I + + B?(); +>B : () => any +} diff --git a/tests/baselines/reference/parserMethodSignature3.types b/tests/baselines/reference/parserMethodSignature3.types new file mode 100644 index 00000000000..c08081993fd --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature3.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature3.ts === +interface I { +>I : I + + C(); +>C : () => any +>T : T +} diff --git a/tests/baselines/reference/parserMethodSignature4.types b/tests/baselines/reference/parserMethodSignature4.types new file mode 100644 index 00000000000..e569b8e36a5 --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature4.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature4.ts === +interface I { +>I : I + + D?(); +>D : () => any +>T : T +} diff --git a/tests/baselines/reference/parserMethodSignature5.types b/tests/baselines/reference/parserMethodSignature5.types new file mode 100644 index 00000000000..86053a7c1f8 --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature5.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature5.ts === +interface I { +>I : I + + "E"(); +} diff --git a/tests/baselines/reference/parserMethodSignature6.types b/tests/baselines/reference/parserMethodSignature6.types new file mode 100644 index 00000000000..184cdc1148a --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature6.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature6.ts === +interface I { +>I : I + + "F"?(); +} diff --git a/tests/baselines/reference/parserMethodSignature7.types b/tests/baselines/reference/parserMethodSignature7.types new file mode 100644 index 00000000000..58a029c0a4a --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature7.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature7.ts === +interface I { +>I : I + + "G"(); +>T : T +} diff --git a/tests/baselines/reference/parserMethodSignature8.types b/tests/baselines/reference/parserMethodSignature8.types new file mode 100644 index 00000000000..7480e3d92a2 --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature8.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature8.ts === +interface I { +>I : I + + "H"?(); +>T : T +} diff --git a/tests/baselines/reference/parserMethodSignature9.types b/tests/baselines/reference/parserMethodSignature9.types new file mode 100644 index 00000000000..ac2f85d002d --- /dev/null +++ b/tests/baselines/reference/parserMethodSignature9.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/MethodSignatures/parserMethodSignature9.ts === +interface I { +>I : I + + 0(); +} diff --git a/tests/baselines/reference/parserModifierOnPropertySignature2.types b/tests/baselines/reference/parserModifierOnPropertySignature2.types new file mode 100644 index 00000000000..adf8b411565 --- /dev/null +++ b/tests/baselines/reference/parserModifierOnPropertySignature2.types @@ -0,0 +1,11 @@ +=== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserModifierOnPropertySignature2.ts === +interface Foo{ +>Foo : Foo + + public +>public : any + + biz; +>biz : any +} + diff --git a/tests/baselines/reference/parserModuleDeclaration11.types b/tests/baselines/reference/parserModuleDeclaration11.types new file mode 100644 index 00000000000..bd66d638ddf --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration11.types @@ -0,0 +1,22 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration11.ts === +declare module string { +>string : typeof string + + interface X { } +>X : X + + export function foo(s: string); +>foo : (s: string) => any +>s : string +} +string.foo("abc"); +>string.foo("abc") : any +>string.foo : (s: string) => any +>string : typeof string +>foo : (s: string) => any + +var x: string.X; +>x : string.X +>string : unknown +>X : string.X + diff --git a/tests/baselines/reference/parserModuleDeclaration12.types b/tests/baselines/reference/parserModuleDeclaration12.types new file mode 100644 index 00000000000..cffa3cba358 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration12.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration12.ts === +module A.string { +>A : unknown +>string : unknown +} diff --git a/tests/baselines/reference/parserModuleDeclaration2.types b/tests/baselines/reference/parserModuleDeclaration2.types new file mode 100644 index 00000000000..340cee697f1 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration2.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration2.ts === +declare module "Foo" { +No type information for this code.} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserModuleDeclaration3.d.types b/tests/baselines/reference/parserModuleDeclaration3.d.types new file mode 100644 index 00000000000..1fbd92c86af --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration3.d.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration3.d.ts === +declare module M { +>M : unknown +} diff --git a/tests/baselines/reference/parserModuleDeclaration4.types b/tests/baselines/reference/parserModuleDeclaration4.types new file mode 100644 index 00000000000..165378e62fa --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration4.types @@ -0,0 +1,12 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration4.ts === +module M { +>M : unknown + + declare module M1 { +>M1 : unknown + + module M2 { +>M2 : unknown + } + } +} diff --git a/tests/baselines/reference/parserModuleDeclaration6.types b/tests/baselines/reference/parserModuleDeclaration6.types new file mode 100644 index 00000000000..012ad6f8270 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration6.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration6.ts === +module number { +>number : unknown +} diff --git a/tests/baselines/reference/parserModuleDeclaration7.types b/tests/baselines/reference/parserModuleDeclaration7.types new file mode 100644 index 00000000000..38f1c29e642 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration7.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration7.ts === +module number.a { +>number : unknown +>a : unknown +} diff --git a/tests/baselines/reference/parserModuleDeclaration8.types b/tests/baselines/reference/parserModuleDeclaration8.types new file mode 100644 index 00000000000..474e81dbda0 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration8.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration8.ts === +module a.number { +>a : unknown +>number : unknown +} diff --git a/tests/baselines/reference/parserModuleDeclaration9.types b/tests/baselines/reference/parserModuleDeclaration9.types new file mode 100644 index 00000000000..1898d461290 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration9.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration9.ts === +module a.number.b { +>a : unknown +>number : unknown +>b : unknown +} diff --git a/tests/baselines/reference/parserNotHexLiteral1.js b/tests/baselines/reference/parserNotHexLiteral1.js index a38ace7a32d..89b978fcaa8 100644 --- a/tests/baselines/reference/parserNotHexLiteral1.js +++ b/tests/baselines/reference/parserNotHexLiteral1.js @@ -9,4 +9,6 @@ console.info (x.e0); //// [parserNotHexLiteral1.js] var x = { e0: 'cat', x0: 'dog' }; console.info(x.x0); +// tsc dies on this next line with "bug.ts (5,16): Expected ')'" +// tsc seems to be parsing the e0 as a hex constant. console.info(x.e0); diff --git a/tests/baselines/reference/parserObjectLiterals1.types b/tests/baselines/reference/parserObjectLiterals1.types new file mode 100644 index 00000000000..c38adbf55b6 --- /dev/null +++ b/tests/baselines/reference/parserObjectLiterals1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/ObjectLiterals/parserObjectLiterals1.ts === +var v = { a: 1, b: 2 }; +>v : { a: number; b: number; } +>{ a: 1, b: 2 } : { a: number; b: number; } +>a : number +>b : number + diff --git a/tests/baselines/reference/parserObjectType1.types b/tests/baselines/reference/parserObjectType1.types new file mode 100644 index 00000000000..4f333a41c4d --- /dev/null +++ b/tests/baselines/reference/parserObjectType1.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/ObjectTypes/parserObjectType1.ts === +var v: {}; +>v : {} + diff --git a/tests/baselines/reference/parserObjectType2.types b/tests/baselines/reference/parserObjectType2.types new file mode 100644 index 00000000000..cdc055a1660 --- /dev/null +++ b/tests/baselines/reference/parserObjectType2.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ObjectTypes/parserObjectType2.ts === +var v: { x: number }; +>v : { x: number; } +>x : number + diff --git a/tests/baselines/reference/parserObjectType3.types b/tests/baselines/reference/parserObjectType3.types new file mode 100644 index 00000000000..2cc6e50e807 --- /dev/null +++ b/tests/baselines/reference/parserObjectType3.types @@ -0,0 +1,11 @@ +=== tests/cases/conformance/parser/ecmascript5/ObjectTypes/parserObjectType3.ts === +var v: { +>v : { x: any; y: any; } + + x; +>x : any + + y +>y : any + +}; diff --git a/tests/baselines/reference/parserObjectType4.types b/tests/baselines/reference/parserObjectType4.types new file mode 100644 index 00000000000..bbed75a7478 --- /dev/null +++ b/tests/baselines/reference/parserObjectType4.types @@ -0,0 +1,11 @@ +=== tests/cases/conformance/parser/ecmascript5/ObjectTypes/parserObjectType4.ts === +var v: { +>v : { x: any; y: any; } + + x +>x : any + + y +>y : any + +}; diff --git a/tests/baselines/reference/parserParameterList7.js b/tests/baselines/reference/parserParameterList7.js index f2ab0291817..5485d74315a 100644 --- a/tests/baselines/reference/parserParameterList7.js +++ b/tests/baselines/reference/parserParameterList7.js @@ -9,6 +9,6 @@ class C1 { var C1 = (function () { function C1(p3) { this.p3 = p3; - } + } // OK return C1; })(); diff --git a/tests/baselines/reference/parserPropertySignature1.types b/tests/baselines/reference/parserPropertySignature1.types new file mode 100644 index 00000000000..43a754c7751 --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature1.ts === +interface I { +>I : I + + A; +>A : any +} diff --git a/tests/baselines/reference/parserPropertySignature10.types b/tests/baselines/reference/parserPropertySignature10.types new file mode 100644 index 00000000000..06d1e78f0f1 --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature10.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature10.ts === +interface I { +>I : I + + 1?; +} diff --git a/tests/baselines/reference/parserPropertySignature11.types b/tests/baselines/reference/parserPropertySignature11.types new file mode 100644 index 00000000000..55776f4f820 --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature11.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature11.ts === +interface I { +>I : I + + 2:any; +} diff --git a/tests/baselines/reference/parserPropertySignature12.types b/tests/baselines/reference/parserPropertySignature12.types new file mode 100644 index 00000000000..1c37dcaa460 --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature12.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature12.ts === +interface I { +>I : I + + 3?:any; +} diff --git a/tests/baselines/reference/parserPropertySignature2.types b/tests/baselines/reference/parserPropertySignature2.types new file mode 100644 index 00000000000..fe67046e238 --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature2.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature2.ts === +interface I { +>I : I + + B?; +>B : any +} diff --git a/tests/baselines/reference/parserPropertySignature3.types b/tests/baselines/reference/parserPropertySignature3.types new file mode 100644 index 00000000000..04c3d21b0a1 --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature3.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature3.ts === +interface I { +>I : I + + C:any; +>C : any +} diff --git a/tests/baselines/reference/parserPropertySignature4.types b/tests/baselines/reference/parserPropertySignature4.types new file mode 100644 index 00000000000..c1dda0e533d --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature4.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature4.ts === +interface I { +>I : I + + D?:any; +>D : any +} diff --git a/tests/baselines/reference/parserPropertySignature5.types b/tests/baselines/reference/parserPropertySignature5.types new file mode 100644 index 00000000000..c85c814fc70 --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature5.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature5.ts === +interface I { +>I : I + + "E"; +} diff --git a/tests/baselines/reference/parserPropertySignature6.types b/tests/baselines/reference/parserPropertySignature6.types new file mode 100644 index 00000000000..94ca4e313df --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature6.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature6.ts === +interface I { +>I : I + + "F"?; +} diff --git a/tests/baselines/reference/parserPropertySignature7.types b/tests/baselines/reference/parserPropertySignature7.types new file mode 100644 index 00000000000..0f78332d756 --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature7.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature7.ts === +interface I { +>I : I + + "G":any; +} diff --git a/tests/baselines/reference/parserPropertySignature8.types b/tests/baselines/reference/parserPropertySignature8.types new file mode 100644 index 00000000000..79594cec56a --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature8.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature8.ts === +interface I { +>I : I + + "H"?:any; +} diff --git a/tests/baselines/reference/parserPropertySignature9.types b/tests/baselines/reference/parserPropertySignature9.types new file mode 100644 index 00000000000..b7dbff8cbee --- /dev/null +++ b/tests/baselines/reference/parserPropertySignature9.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/PropertySignatures/parserPropertySignature9.ts === +interface I { +>I : I + + 0; +} diff --git a/tests/baselines/reference/parserReturnStatement3.types b/tests/baselines/reference/parserReturnStatement3.types new file mode 100644 index 00000000000..6484050efee --- /dev/null +++ b/tests/baselines/reference/parserReturnStatement3.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/parser/ecmascript5/Statements/ReturnStatements/parserReturnStatement3.ts === +function f() { +>f : () => void + + return; +} diff --git a/tests/baselines/reference/parserS7.2_A1.5_T2.js b/tests/baselines/reference/parserS7.2_A1.5_T2.js index d3b58e3d9b3..76ee647e43e 100644 --- a/tests/baselines/reference/parserS7.2_A1.5_T2.js +++ b/tests/baselines/reference/parserS7.2_A1.5_T2.js @@ -25,10 +25,20 @@ if (x !== 1) { //// [parserS7.2_A1.5_T2.js] +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/** + * NO-BREAK SPACE (U+00A0) between any two tokens is allowed + * + * @path ch07/7.2/S7.2_A1.5_T2.js + * @description Insert real NO-BREAK SPACE between tokens of var x=1 + */ +//CHECK#1 eval("\u00A0var x\u00A0= 1\u00A0"); if (x !== 1) { $ERROR('#1: eval("\\u00A0var x\\u00A0= 1\\u00A0"); x === 1. Actual: ' + (x)); } +//CHECK#2 var x = 1; if (x !== 1) { $ERROR('#2:  var x = 1 ; x === 1. Actual: ' + (x)); diff --git a/tests/baselines/reference/parserS7.3_A1.1_T2.js b/tests/baselines/reference/parserS7.3_A1.1_T2.js index bb16f0e0d8e..5e58e74b34e 100644 --- a/tests/baselines/reference/parserS7.3_A1.1_T2.js +++ b/tests/baselines/reference/parserS7.3_A1.1_T2.js @@ -21,6 +21,15 @@ if (x !== 1) { //// [parserS7.3_A1.1_T2.js] +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/** + * LINE FEED (U+000A) may occur between any two tokens + * + * @path ch07/7.3/S7.3_A1.1_T2.js + * @description Insert real LINE FEED between tokens of var x=1 + */ +//CHECK#1 var x = 1; if (x !== 1) { $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x)); 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 ce427cbf159..04e0076b16a 100644 --- a/tests/baselines/reference/parserS7.6.1.1_A1.10.js +++ b/tests/baselines/reference/parserS7.6.1.1_A1.10.js @@ -15,3 +15,5 @@ //// [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. diff --git a/tests/baselines/reference/parserS7.6.1.1_A1.10.types b/tests/baselines/reference/parserS7.6.1.1_A1.10.types new file mode 100644 index 00000000000..28441e36fe6 --- /dev/null +++ b/tests/baselines/reference/parserS7.6.1.1_A1.10.types @@ -0,0 +1,16 @@ +=== tests/cases/conformance/parser/ecmascript5/parserS7.6.1.1_A1.10.ts === +// Copyright 2009 the Sputnik authors. All rights reserved. +No type information for this code.// This code is governed by the BSD license found in the LICENSE file. +No type information for this code. +No type information for this code./** +No type information for this code. * The "for" token can not be used as identifier +No type information for this code. * +No type information for this code. * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.10.js +No type information for this code. * @description Checking if execution of "for=1" fails +No type information for this code. * @negative +No type information for this code. */ +No type information for this code. +No type information for this code.//for = 1; +No type information for this code. +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserS7.6_A4.2_T1.js b/tests/baselines/reference/parserS7.6_A4.2_T1.js index b8395e6fa18..2053e615f7c 100644 --- a/tests/baselines/reference/parserS7.6_A4.2_T1.js +++ b/tests/baselines/reference/parserS7.6_A4.2_T1.js @@ -146,6 +146,15 @@ if (Ё !== 1) { //// [parserS7.6_A4.2_T1.js] +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/** + * Correct interpretation of RUSSIAN ALPHABET + * + * @path ch07/7.6/S7.6_A4.2_T1.js + * @description Check RUSSIAN CAPITAL ALPHABET + */ +//CHECK#А-Я var \u0410 = 1; if (А !== 1) { $ERROR('#А'); diff --git a/tests/baselines/reference/parserS7.9_A5.7_T1.js b/tests/baselines/reference/parserS7.9_A5.7_T1.js index cb8a76bfd4b..ae5896c28e5 100644 --- a/tests/baselines/reference/parserS7.9_A5.7_T1.js +++ b/tests/baselines/reference/parserS7.9_A5.7_T1.js @@ -21,6 +21,16 @@ y //// [parserS7.9_A5.7_T1.js] +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/** + * Since LineTerminator(LT) between Postfix Increment/Decrement Operator(I/DO) and operand is not allowed, two IO(just as two DO and their combination) + * between two references separated by [LT] after automatic semicolon insertion lead to syntax error + * + * @path ch07/7.9/S7.9_A5.7_T1.js + * @description Try use Variable1 \n ++ \n ++ \n Variable2 construction + * @negative + */ var x = 0, y = 0; var z = x; ++++y; diff --git a/tests/baselines/reference/parserSbp_7.9_A9_T3.js b/tests/baselines/reference/parserSbp_7.9_A9_T3.js index 973c1752294..60c8c4ad6eb 100644 --- a/tests/baselines/reference/parserSbp_7.9_A9_T3.js +++ b/tests/baselines/reference/parserSbp_7.9_A9_T3.js @@ -17,6 +17,8 @@ do { //// [parserSbp_7.9_A9_T3.js] +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. do { ; } while (false); diff --git a/tests/baselines/reference/parserSbp_7.9_A9_T3.types b/tests/baselines/reference/parserSbp_7.9_A9_T3.types new file mode 100644 index 00000000000..0d6df58ed39 --- /dev/null +++ b/tests/baselines/reference/parserSbp_7.9_A9_T3.types @@ -0,0 +1,18 @@ +=== tests/cases/conformance/parser/ecmascript5/parserSbp_7.9_A9_T3.ts === +// Copyright 2009 the Sputnik authors. All rights reserved. +No type information for this code.// This code is governed by the BSD license found in the LICENSE file. +No type information for this code. +No type information for this code./** +No type information for this code. * Check Do-While Statement for automatic semicolon insertion +No type information for this code. * +No type information for this code. * @path bestPractice/Sbp_7.9_A9_T3.js +No type information for this code. * @description Execute do { \n ; \n }while(false) true +No type information for this code. */ +No type information for this code. +No type information for this code.//CHECK#1 +No type information for this code.do { +No type information for this code. ; +No type information for this code.} while (false) true +No type information for this code. +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserStrictMode14.errors.txt b/tests/baselines/reference/parserStrictMode14.errors.txt index 87439c1a29d..1a5337c4443 100644 --- a/tests/baselines/reference/parserStrictMode14.errors.txt +++ b/tests/baselines/reference/parserStrictMode14.errors.txt @@ -4,7 +4,7 @@ ~~~~ !!! 'with' statements are not allowed in strict mode. ~ -!!! All symbols within a 'with' block will be resolved to 'any'. - ~ !!! Cannot find name 'a'. + ~ +!!! All symbols within a 'with' block will be resolved to 'any'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserStrictMode16.types b/tests/baselines/reference/parserStrictMode16.types new file mode 100644 index 00000000000..6e68c0cbc6b --- /dev/null +++ b/tests/baselines/reference/parserStrictMode16.types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode16.ts === +"use strict"; +delete this; +>delete this : boolean +>this : any + +delete 1; +>delete 1 : boolean + +delete null; +>delete null : boolean + +delete "a"; +>delete "a" : boolean + diff --git a/tests/baselines/reference/parserSuperExpression2.errors.txt b/tests/baselines/reference/parserSuperExpression2.errors.txt index 4bb9404cc04..d8921ad7654 100644 --- a/tests/baselines/reference/parserSuperExpression2.errors.txt +++ b/tests/baselines/reference/parserSuperExpression2.errors.txt @@ -3,7 +3,7 @@ M() { super(0); ~ -!!! 'super' must be followed by argument list or member access. +!!! 'super' must be followed by an argument list or member access. ~~~~~ !!! 'super' can only be referenced in a derived class. } diff --git a/tests/baselines/reference/parserSyntaxWalker.generated.js b/tests/baselines/reference/parserSyntaxWalker.generated.js index 5cad4fe1ab7..3b78baa0f74 100644 --- a/tests/baselines/reference/parserSyntaxWalker.generated.js +++ b/tests/baselines/reference/parserSyntaxWalker.generated.js @@ -280,3 +280,12 @@ //// [parserSyntaxWalker.generated.js] +//declare module "fs" { +// export class File { +// constructor(filename: string); +// public ReadAllText(): string; +// } +// export interface IFile { +// [index: number]: string; +// } +//} diff --git a/tests/baselines/reference/parserSyntaxWalker.generated.types b/tests/baselines/reference/parserSyntaxWalker.generated.types new file mode 100644 index 00000000000..dde34e06746 --- /dev/null +++ b/tests/baselines/reference/parserSyntaxWalker.generated.types @@ -0,0 +1,281 @@ +=== tests/cases/conformance/parser/ecmascript5/parserSyntaxWalker.generated.ts === +//declare module "fs" { +No type information for this code.// export class File { +No type information for this code.// constructor(filename: string); +No type information for this code.// public ReadAllText(): string; +No type information for this code.// } +No type information for this code.// export interface IFile { +No type information for this code.// [index: number]: string; +No type information for this code.// } +No type information for this code.//} +No type information for this code. +No type information for this code.//import fs = module("fs"); +No type information for this code. +No type information for this code. +No type information for this code.//module TypeScriptAllInOne { +No type information for this code.// export class Program { +No type information for this code.// static Main(...args: string[]) { +No type information for this code.// try { +No type information for this code.// var bfs = new BasicFeatures(); +No type information for this code.// var retValue: number = 0; +No type information for this code. +No type information for this code.// retValue = bfs.VARIABLES(); +No type information for this code.// if (retValue != 0) { +No type information for this code. +No type information for this code.// return 1; +No type information for this code.// } +No type information for this code. +No type information for this code.// retValue = bfs.STATEMENTS(4); +No type information for this code.// if (retValue != 0) { +No type information for this code. +No type information for this code.// return 1; +No type information for this code.// } +No type information for this code. +No type information for this code. +No type information for this code.// retValue = bfs.TYPES(); +No type information for this code.// if (retValue != 0) { +No type information for this code. +No type information for this code.// return 1; +No type information for this code.// } +No type information for this code. +No type information for this code.// retValue = bfs.OPERATOR(); +No type information for this code.// if (retValue != 0) { +No type information for this code. +No type information for this code.// return 1; +No type information for this code.// } +No type information for this code.// } +No type information for this code.// catch (e) { +No type information for this code.// console.log(e); +No type information for this code.// } +No type information for this code.// finally { +No type information for this code. +No type information for this code.// } +No type information for this code. +No type information for this code.// console.log('Done'); +No type information for this code. +No type information for this code.// return 0; +No type information for this code. +No type information for this code.// } +No type information for this code.// } +No type information for this code. +No type information for this code.// class BasicFeatures { +No type information for this code.// /// +No type information for this code.// /// Test various of variables. Including nullable,key world as variable,special format +No type information for this code.// /// +No type information for this code.// /// +No type information for this code.// public VARIABLES(): number { +No type information for this code.// var local = Number.MAX_VALUE; +No type information for this code.// var min = Number.MIN_VALUE; +No type information for this code.// var inf = Number.NEGATIVE_INFINITY; +No type information for this code.// var nan = Number.NaN; +No type information for this code.// var undef = undefined; +No type information for this code. +No type information for this code.// var п = local; +No type information for this code.// var м = local; +No type information for this code. +No type information for this code.// var local5 = null; +No type information for this code.// var local6 = local5 instanceof fs.File; +No type information for this code. +No type information for this code.// var hex = 0xBADC0DE, Hex = 0XDEADBEEF; +No type information for this code.// var float = 6.02e23, float2 = 6.02E-23 +No type information for this code.// var char = 'c', \u0066 = '\u0066', hexchar = '\x42'; +No type information for this code.// var quoted = '"', quoted2 = "'"; +No type information for this code.// var reg = /\w*/; +No type information for this code.// var objLit = { "var": number = 42, equals: function (x) { return x["var"] === 42; }, toString: () => 'objLit{42}' }; +No type information for this code.// var weekday = Weekdays.Monday; +No type information for this code. +No type information for this code.// var con = char + f + hexchar + float.toString() + float2.toString() + reg.toString() + objLit + weekday; +No type information for this code. +No type information for this code.// // +No type information for this code.// var any = 0; +No type information for this code.// var boolean = 0; +No type information for this code.// var declare = 0; +No type information for this code.// var constructor = 0; +No type information for this code.// var get = 0; +No type information for this code.// var implements = 0; +No type information for this code.// var interface = 0; +No type information for this code.// var let = 0; +No type information for this code.// var module = 0; +No type information for this code.// var number = 0; +No type information for this code.// var package = 0; +No type information for this code.// var private = 0; +No type information for this code.// var protected = 0; +No type information for this code.// var public = 0; +No type information for this code.// var set = 0; +No type information for this code.// var static = 0; +No type information for this code.// var string = 0; +No type information for this code.// var yield = 0; +No type information for this code. +No type information for this code.// var sum3 = any + boolean + declare + constructor + get + implements + interface + let + module + number + package + private + protected + public + set + static + string + yield; +No type information for this code. +No type information for this code.// return 0; +No type information for this code.// } +No type information for this code. +No type information for this code.// /// +No type information for this code.// /// Test different statements. Including if-else,swith,foreach,(un)checked,lock,using,try-catch-finally +No type information for this code.// /// +No type information for this code.// /// +No type information for this code.// /// +No type information for this code.// STATEMENTS(i: number): number { +No type information for this code.// var retVal = 0; +No type information for this code.// if (i == 1) +No type information for this code.// retVal = 1; +No type information for this code.// else +No type information for this code.// retVal = 0; +No type information for this code.// switch (i) { +No type information for this code.// case 2: +No type information for this code.// retVal = 1; +No type information for this code.// break; +No type information for this code.// case 3: +No type information for this code.// retVal = 1; +No type information for this code.// break; +No type information for this code.// default: +No type information for this code.// break; +No type information for this code.// } +No type information for this code. +No type information for this code.// for (var x in { x: 0, y: 1 }) { +No type information for this code.// } +No type information for this code. +No type information for this code.// try { +No type information for this code.// throw null; +No type information for this code.// } +No type information for this code.// catch (Exception) { +No type information for this code.// } +No type information for this code.// finally { +No type information for this code.// try { } +No type information for this code.// catch (Exception) { } +No type information for this code.// } +No type information for this code. +No type information for this code.// return retVal; +No type information for this code.// } +No type information for this code. +No type information for this code.// /// +No type information for this code.// /// Test types in ts language. Including class,struct,interface,delegate,anonymous type +No type information for this code.// /// +No type information for this code.// /// +No type information for this code.// public TYPES(): number { +No type information for this code.// var retVal = 0; +No type information for this code.// var c = new CLASS(); +No type information for this code.// var xx: IF = c; +No type information for this code.// retVal += c.Property; +No type information for this code.// retVal += c.Member(); +No type information for this code.// retVal += xx ^= Foo() ? 0 : 1; +No type information for this code. +No type information for this code.// //anonymous type +No type information for this code.// var anony = { a: new CLASS() }; +No type information for this code. +No type information for this code.// retVal += anony.a.d(); +No type information for this code. +No type information for this code.// return retVal; +No type information for this code.// } +No type information for this code. +No type information for this code. +No type information for this code.// ///// +No type information for this code.// ///// Test different operators +No type information for this code.// ///// +No type information for this code.// ///// +No type information for this code.// public OPERATOR(): number { +No type information for this code.// var a: number[] = [1, 2, 3, 4, implements , ];/*[] bug*/ // YES [] +No type information for this code.// var i = a[1];/*[]*/ +No type information for this code.// i = i + i - i * i / i % i & i | i ^ i;/*+ - * / % & | ^*/ +No type information for this code.// var b = true && false || true ^ false;/*& | ^*/ +No type information for this code.// b = !b;/*!*/ +No type information for this code.// i = ~i;/*~i*/ +No type information for this code.// b = i < (i - continue ) && (i + 1) > i;/*< && >*/ +No type information for this code.// var f = true ? 1 : 0;/*? :*/ // YES : +No type information for this code.// i++;/*++*/ +No type information for this code.// i--;/*--*/ +No type information for this code.// b = true && false || true;/*&& ||*/ +No type information for this code.// i = i << 5;/*<<*/ +No type information for this code.// i = i >> 5;/*>>*/ +No type information for this code.// var j = i; +No type information for this code.// b = i == j && i != j && i <= j && i >= j;/*= == && != <= >=*/ +No type information for this code.// i += 5.0;/*+=*/ +No type information for this code.// i -= i;/*-=*/ +No type information for this code.// i *= i;/**=*/ +No type information for this code.// if (i == 0) +No type information for this code.// i++; +No type information for this code.// i /= i;/*/=*/ +No type information for this code.// i %= i;/*%=*/ +No type information for this code.// i &= i;/*&=*/ +No type information for this code.// i |= i;/*|=*/ +No type information for this code.// i ^= i;/*^=*/ +No type information for this code.// i <<= i;/*<<=*/ +No type information for this code.// i >>= i;/*>>=*/ +No type information for this code. +No type information for this code.// if (i == 0 && !b && f == 1) +No type information for this code.// return 0; +No type information for this code.// else return 1; +No type information for this code.// } +No type information for this code. +No type information for this code.// } +No type information for this code. +No type information for this code.// interface IF { +No type information for this code.// Foo