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/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..5268e75b842 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}'." }, + 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: 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." }, + 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,11 @@ 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" } + 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." } }; })(ts || (ts = {})); var ts; @@ -559,6 +580,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 +605,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 +671,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 +684,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 +696,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 +721,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 +902,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 +1050,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 +1064,6 @@ var ts; pos++; } if (!commentClosed) { - pos++; error(ts.Diagnostics.Asterisk_Slash_expected); } if (onComment) { @@ -1457,6 +1491,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 +1514,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 +1628,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 +1831,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); } @@ -2293,9 +2331,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 +2353,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 +2402,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 +2442,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 +2574,22 @@ 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; function forEachChild(node, cbNode, cbNodes) { function child(node) { if (node) @@ -2873,6 +2920,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 +3704,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 +3748,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 +3762,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 +3822,9 @@ var ts; } }); } + if (token === 23 /* EqualsGreaterThanToken */) { + return 1 /* True */; + } return 0 /* False */; } function tryParseSignatureIfArrowOrBraceFollows() { @@ -3912,7 +3955,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)); @@ -5216,7 +5259,7 @@ var ts; 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 +5297,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 +5333,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 +5813,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 +5899,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 +5936,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 +5953,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(sys.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 +6052,20 @@ 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 detachedCommentsInfo; + var emitDetachedComments = compilerOptions.removeComments ? function (node) { + } : emitDetachedCommentsAtPosition; + 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 +6145,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 +6159,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 +6218,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 +6286,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 +6456,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 +6591,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 +6619,7 @@ var ts; emitEmbeddedStatement(node.elseStatement); } } + emitTrailingComments(node); } function emitDoStatement(node) { write("do"); @@ -6518,9 +6682,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 +6772,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 +6814,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 +6847,26 @@ 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.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 +6877,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,9 +6917,11 @@ var ts; } else { writeLine(); + emitLeadingComments(node.body); write("return "); emit(node.body); write(";"); + emitTrailingComments(node.body); } decreaseIndent(); writeLine(); @@ -6803,6 +6990,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,6 +7005,7 @@ var ts; emit(member.initializer); write(";"); emitEnd(member); + emitTrailingComments(member); } }); } @@ -6826,6 +7015,7 @@ var ts; if (!member.body) return; writeLine(); + emitLeadingComments(member); emitStart(member); emitStart(member.name); emitNode(node.name); @@ -6840,6 +7030,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 +7050,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 +7083,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 +7102,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 +7132,62 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); + function emitConstructorOfClass() { + 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); + } + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); + scopeEmitEnd(); + emitEnd(ctor || node); + if (ctor) { + emitTrailingComments(ctor); + } + } } function emitEnumDeclaration(node) { + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) { emitStart(node); write("var "); @@ -6993,26 +7204,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 +7225,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 */) { @@ -7043,6 +7260,7 @@ var ts; function emitModuleDeclaration(node) { if (!ts.isInstantiated(node)) return; + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) { emitStart(node); write("var "); @@ -7089,6 +7307,7 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); } function emitImportDeclaration(node) { var emitImportDeclaration = resolver.isReferencedImportDeclaration(node); @@ -7099,16 +7318,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 +7348,7 @@ var ts; } write(";"); emitEnd(node); + emitTrailingComments(node); } } } @@ -7215,6 +7438,7 @@ var ts; } function emitSourceFile(node) { currentSourceFile = node; + emitDetachedComments(node); var startIndex = emitDirectivePrologues(node.statements, false); if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) { writeLine(); @@ -7362,6 +7586,64 @@ var ts; return emitSourceFile(node); } } + function emitLeadingDeclarationComments(node) { + if (node.parent.kind === 177 /* SourceFile */ || node.pos !== node.parent.pos) { + var leadingComments; + if (detachedCommentsInfo === undefined || detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos !== node.pos) { + leadingComments = ts.getLeadingCommentsOfNode(node, currentSourceFile); + } + else { + leadingComments = ts.getLeadingComments(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); + if (detachedCommentsInfo.length - 1) { + detachedCommentsInfo.pop(); + } + else { + detachedCommentsInfo = undefined; + } + } + 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 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 && 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]; + } + } + } + } + } if (compilerOptions.sourceMap) { initializeEmitterWithSourceMaps(); } @@ -7386,16 +7668,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 +7721,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 +7764,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 +7832,7 @@ var ts; } function emitEnumDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("enum "); emitSourceTextOfNode(node.name); @@ -7505,6 +7846,7 @@ var ts; } } function emitEnumMemberDeclaration(node) { + emitJsDocComments(node); emitSourceTextOfNode(node.name); var enumMemberValue = resolver.getEnumMemberValue(node); if (enumMemberValue !== undefined) { @@ -7554,12 +7896,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 +7919,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 +7957,7 @@ var ts; } } if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("class "); emitSourceTextOfNode(node.name); @@ -7645,6 +7981,7 @@ var ts; } function emitInterfaceDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("interface "); emitSourceTextOfNode(node.name); @@ -7663,6 +8000,7 @@ var ts; } } function emitPropertyDeclaration(node) { + emitJsDocComments(node); emitDeclarationFlags(node); emitVariableDeclaration(node); write(";"); @@ -7676,13 +8014,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 +8055,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 +8118,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 +8142,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 +8192,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 +8309,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 +8339,8 @@ var ts; if (compilerOptions.out) { emitFile(compilerOptions.out); } + diagnostics.sort(ts.compareDiagnostics); + diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); return { errors: diagnostics, sourceMaps: sourceMapDataList @@ -7867,13 +8353,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 +8413,6 @@ var ts; var globalBooleanType; var globalRegExpType; var stringLiteralTypes = {}; - var fullTypeCheck = false; var emitExtends = false; var mergedSymbols = []; var symbolLinks = []; @@ -7910,33 +8420,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 +8661,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 +8674,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 +8932,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 +8993,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) { @@ -8518,13 +9082,23 @@ var ts; 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 +9177,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 +9191,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 +9335,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 +9367,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 +9399,7 @@ var ts; if (node) { var links = getNodeLinks(node); if (links.isVisible === undefined) { - links.isVisible = determineIfDeclarationIsVisible(); + links.isVisible = !!determineIfDeclarationIsVisible(); } return links.isVisible; } @@ -8867,7 +9459,7 @@ var ts; checkImplicitAny(type); return type; function checkImplicitAny(type) { - if (!program.getCompilerOptions().noImplicitAny) { + if (!fullTypeCheck || !program.getCompilerOptions().noImplicitAny) { return; } if (getInnermostTypeOfNestedArrayTypes(type) !== anyType) { @@ -9717,6 +10309,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; } @@ -11210,7 +11806,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); @@ -11366,7 +11962,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 +11990,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 +12003,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 +12064,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 +12298,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); @@ -11790,24 +12389,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 +12444,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 +12514,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 +12564,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 +12596,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 +12608,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 +12621,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 +12663,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 +12788,9 @@ var ts; } } function checkExportsOnMergedDeclarations(node) { + if (!fullTypeCheck) { + return; + } var symbol; var symbol = node.localSymbol; if (!symbol) { @@ -12238,7 +12859,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 +12977,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 +13095,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 +13179,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 +13202,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 +13312,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 +13355,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 +13414,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 +13581,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 +13597,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 +13694,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 +13768,129 @@ 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 */: + 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 (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; + } if (isExpression(entityName)) { if (entityName.kind === 55 /* Identifier */) { var meaning = ts.SymbolFlags.Value | 4194304 /* Import */; @@ -13178,11 +13912,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 +13952,43 @@ 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; + symbol = node.parent.kind === 175 /* ExportAssignment */ ? getSymbolInfo(node) : getSymbolOfPartOfRightHandSideOfImport(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) { @@ -13384,7 +14149,8 @@ var ts; writeTypeAtLocation: writeTypeAtLocation, writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, writeSymbol: writeSymbolToTextWriter, - isSymbolAccessible: isSymbolAccessible + isSymbolAccessible: isSymbolAccessible, + isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile }; checkProgram(); return ts.emitFiles(resolver); @@ -13657,7 +14423,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) { @@ -13882,7 +14648,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 +14658,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..127aac0fc68 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}'." }, + 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: 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." }, + 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,11 @@ 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" } + 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." } }; })(ts || (ts = {})); var ts; @@ -559,6 +580,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 +605,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 +671,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 +684,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 +696,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 +721,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 +902,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 +1050,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 +1064,6 @@ var ts; pos++; } if (!commentClosed) { - pos++; error(ts.Diagnostics.Asterisk_Slash_expected); } if (onComment) { @@ -1457,6 +1491,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 +1514,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 +1628,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 +1831,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); } @@ -2293,9 +2331,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 +2353,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 +2402,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 +2442,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 +2574,22 @@ 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; function forEachChild(node, cbNode, cbNodes) { function child(node) { if (node) @@ -2873,6 +2920,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 +3704,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 +3748,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 +3762,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 +3822,9 @@ var ts; } }); } + if (token === 23 /* EqualsGreaterThanToken */) { + return 1 /* True */; + } return 0 /* False */; } function tryParseSignatureIfArrowOrBraceFollows() { @@ -3912,7 +3955,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)); @@ -5216,7 +5259,7 @@ var ts; 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 +5297,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 +5333,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 +5813,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 +5899,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 +5936,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 +5953,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(sys.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 +6052,20 @@ 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 detachedCommentsInfo; + var emitDetachedComments = compilerOptions.removeComments ? function (node) { + } : emitDetachedCommentsAtPosition; + 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 +6145,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 +6159,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 +6218,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 +6286,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 +6456,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 +6591,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 +6619,7 @@ var ts; emitEmbeddedStatement(node.elseStatement); } } + emitTrailingComments(node); } function emitDoStatement(node) { write("do"); @@ -6518,9 +6682,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 +6772,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 +6814,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 +6847,26 @@ 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.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 +6877,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,9 +6917,11 @@ var ts; } else { writeLine(); + emitLeadingComments(node.body); write("return "); emit(node.body); write(";"); + emitTrailingComments(node.body); } decreaseIndent(); writeLine(); @@ -6803,6 +6990,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,6 +7005,7 @@ var ts; emit(member.initializer); write(";"); emitEnd(member); + emitTrailingComments(member); } }); } @@ -6826,6 +7015,7 @@ var ts; if (!member.body) return; writeLine(); + emitLeadingComments(member); emitStart(member); emitStart(member.name); emitNode(node.name); @@ -6840,6 +7030,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 +7050,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 +7083,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 +7102,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 +7132,62 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); + function emitConstructorOfClass() { + 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); + } + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); + scopeEmitEnd(); + emitEnd(ctor || node); + if (ctor) { + emitTrailingComments(ctor); + } + } } function emitEnumDeclaration(node) { + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) { emitStart(node); write("var "); @@ -6993,26 +7204,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 +7225,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 */) { @@ -7043,6 +7260,7 @@ var ts; function emitModuleDeclaration(node) { if (!ts.isInstantiated(node)) return; + emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) { emitStart(node); write("var "); @@ -7089,6 +7307,7 @@ var ts; emitEnd(node); write(";"); } + emitTrailingComments(node); } function emitImportDeclaration(node) { var emitImportDeclaration = resolver.isReferencedImportDeclaration(node); @@ -7099,16 +7318,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 +7348,7 @@ var ts; } write(";"); emitEnd(node); + emitTrailingComments(node); } } } @@ -7215,6 +7438,7 @@ var ts; } function emitSourceFile(node) { currentSourceFile = node; + emitDetachedComments(node); var startIndex = emitDirectivePrologues(node.statements, false); if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) { writeLine(); @@ -7362,6 +7586,64 @@ var ts; return emitSourceFile(node); } } + function emitLeadingDeclarationComments(node) { + if (node.parent.kind === 177 /* SourceFile */ || node.pos !== node.parent.pos) { + var leadingComments; + if (detachedCommentsInfo === undefined || detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos !== node.pos) { + leadingComments = ts.getLeadingCommentsOfNode(node, currentSourceFile); + } + else { + leadingComments = ts.getLeadingComments(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); + if (detachedCommentsInfo.length - 1) { + detachedCommentsInfo.pop(); + } + else { + detachedCommentsInfo = undefined; + } + } + 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 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 && 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]; + } + } + } + } + } if (compilerOptions.sourceMap) { initializeEmitterWithSourceMaps(); } @@ -7386,16 +7668,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 +7721,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 +7764,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 +7832,7 @@ var ts; } function emitEnumDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("enum "); emitSourceTextOfNode(node.name); @@ -7505,6 +7846,7 @@ var ts; } } function emitEnumMemberDeclaration(node) { + emitJsDocComments(node); emitSourceTextOfNode(node.name); var enumMemberValue = resolver.getEnumMemberValue(node); if (enumMemberValue !== undefined) { @@ -7554,12 +7896,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 +7919,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 +7957,7 @@ var ts; } } if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("class "); emitSourceTextOfNode(node.name); @@ -7645,6 +7981,7 @@ var ts; } function emitInterfaceDeclaration(node) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("interface "); emitSourceTextOfNode(node.name); @@ -7663,6 +8000,7 @@ var ts; } } function emitPropertyDeclaration(node) { + emitJsDocComments(node); emitDeclarationFlags(node); emitVariableDeclaration(node); write(";"); @@ -7676,13 +8014,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 +8055,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 +8118,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 +8142,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 +8192,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 +8309,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 +8339,8 @@ var ts; if (compilerOptions.out) { emitFile(compilerOptions.out); } + diagnostics.sort(ts.compareDiagnostics); + diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); return { errors: diagnostics, sourceMaps: sourceMapDataList @@ -7867,13 +8353,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 +8413,6 @@ var ts; var globalBooleanType; var globalRegExpType; var stringLiteralTypes = {}; - var fullTypeCheck = false; var emitExtends = false; var mergedSymbols = []; var symbolLinks = []; @@ -7910,33 +8420,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 +8661,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 +8674,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 +8932,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 +8993,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) { @@ -8518,13 +9082,23 @@ var ts; 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 +9177,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 +9191,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 +9335,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 +9367,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 +9399,7 @@ var ts; if (node) { var links = getNodeLinks(node); if (links.isVisible === undefined) { - links.isVisible = determineIfDeclarationIsVisible(); + links.isVisible = !!determineIfDeclarationIsVisible(); } return links.isVisible; } @@ -8867,7 +9459,7 @@ var ts; checkImplicitAny(type); return type; function checkImplicitAny(type) { - if (!program.getCompilerOptions().noImplicitAny) { + if (!fullTypeCheck || !program.getCompilerOptions().noImplicitAny) { return; } if (getInnermostTypeOfNestedArrayTypes(type) !== anyType) { @@ -9717,6 +10309,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; } @@ -11210,7 +11806,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); @@ -11366,7 +11962,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 +11990,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 +12003,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 +12064,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 +12298,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); @@ -11790,24 +12389,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 +12444,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 +12514,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 +12564,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 +12596,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 +12608,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 +12621,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 +12663,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 +12788,9 @@ var ts; } } function checkExportsOnMergedDeclarations(node) { + if (!fullTypeCheck) { + return; + } var symbol; var symbol = node.localSymbol; if (!symbol) { @@ -12238,7 +12859,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 +12977,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 +13095,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 +13179,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 +13202,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 +13312,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 +13355,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 +13414,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 +13581,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 +13597,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 +13694,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 +13768,129 @@ 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 */: + 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 (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; + } if (isExpression(entityName)) { if (entityName.kind === 55 /* Identifier */) { var meaning = ts.SymbolFlags.Value | 4194304 /* Import */; @@ -13178,11 +13912,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 +13952,43 @@ 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; + symbol = node.parent.kind === 175 /* ExportAssignment */ ? getSymbolInfo(node) : getSymbolOfPartOfRightHandSideOfImport(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) { @@ -13384,7 +14149,8 @@ var ts; writeTypeAtLocation: writeTypeAtLocation, writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, writeSymbol: writeSymbolToTextWriter, - isSymbolAccessible: isSymbolAccessible + isSymbolAccessible: isSymbolAccessible, + isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile }; checkProgram(); return ts.emitFiles(resolver); @@ -25151,85 +25917,60 @@ 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); + var depth = 0; + var maxDepth = 20; + function walk(n) { + if (depth > maxDepth) { + return; } - _super.prototype.visitGetAccessor.call(this, node); - }; - OutliningElementsCollector.prototype.visitSetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); + 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; } - _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 = {})); + 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) { @@ -29781,17 +30522,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,6 +31014,9 @@ 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(); }; @@ -30330,9 +31074,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; @@ -30358,6 +31102,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) { @@ -30534,30 +31279,58 @@ var ts; this.host = host; this.currentfilename = ""; this.currentFileVersion = -1; + 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; + 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); + var editRange = this.hostCache.getScriptTextChangeRangeSinceVersion(filename, this.currentFileVersion); + sourceFile = !editRange ? createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, true) : this.currentSourceFile.update(scriptSnapshot, version, true, editRange); + fixupParentReferences(sourceFile); } if (syntaxTree !== null) { + ts.Debug.assert(sourceFile); this.currentFileScriptSnapshot = scriptSnapshot; this.currentFileVersion = version; 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; @@ -30607,6 +31380,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 +31420,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 +31472,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 +31485,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) { @@ -30787,16 +31567,18 @@ var ts; 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 +31596,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 +31758,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 +31785,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 +31813,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: "" }; } @@ -31155,13 +31937,13 @@ var ts; 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)), + memberName: new TypeScript.MemberNameString(typeInfoResolver.typeToString(type)), docComment: "", - fullSymbolName: typeChecker.symbolToString(symbol, getContainerNode(node)), + fullSymbolName: typeInfoResolver.symbolToString(symbol, getContainerNode(node)), kind: getSymbolKind(symbol), minChar: node.pos, limChar: node.end @@ -31282,16 +32064,16 @@ var ts; } 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 +32086,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(); @@ -31367,8 +32154,8 @@ var ts; } function getOutliningRegions(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); @@ -31456,113 +32243,184 @@ var ts; 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 addResult(text, offset, result, length, kind) { - if (length > 0) { - if (result.entries.length === 0) { - length -= offset; + function addLeadingWhiteSpace(start, end) { + if (start > lastTokenOrCommentEnd) { + addResult(start - lastTokenOrCommentEnd, 4 /* Whitespace */); + } + lastTokenOrCommentEnd = end; + } + 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 +32457,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* 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, + getTypeOfNode: getTypeOfNode, + getApparentType: getApparentType, typeToString: typeToString, symbolToString: symbolToString, getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType, @@ -360,8 +358,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; } @@ -375,6 +372,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); } @@ -782,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 @@ -905,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); } @@ -2300,6 +2324,12 @@ module ts { return getTypeFromArrayTypeNode(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; } @@ -6550,14 +6580,242 @@ module ts { return mapToArray(symbols); } - function getSymbolOfIdentifier(identifier: Identifier) { - if (isDeclarationIdentifier(identifier)) { - return getSymbolOfNode(identifier.parent); + // 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; + } + + // True if the given identifier, string literal, or number literal is the name of a declaration node + function isDeclarationOrFunctionExpressionOrCatchVariableName(name: Node): boolean { + if (name.kind !== SyntaxKind.Identifier && name.kind !== SyntaxKind.StringLiteral && name.kind !== SyntaxKind.NumericLiteral) { + return false; } - var entityName: Node = identifier; - while (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) + 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; + } + + function isTypeDeclaration(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.TypeParameter: + case SyntaxKind.ClassDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.EnumDeclaration: + return true; + } + } + + 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 is part of a type reference + function isTypeReferenceIdentifier(entityName: EntityName): boolean { + var node: Node = entityName; + while (node.parent && node.parent.kind === SyntaxKind.QualifiedName) node = node.parent; + return node.parent && node.parent.kind === SyntaxKind.TypeReference; + } + + function isExpression(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.ThisKeyword: + case SyntaxKind.SuperKeyword: + case SyntaxKind.NullKeyword: + case SyntaxKind.TrueKeyword: + case SyntaxKind.FalseKeyword: + case SyntaxKind.RegularExpressionLiteral: + case SyntaxKind.ArrayLiteral: + case SyntaxKind.ObjectLiteral: + case SyntaxKind.PropertyAccess: + case SyntaxKind.IndexedAccess: + case SyntaxKind.CallExpression: + case SyntaxKind.NewExpression: + case SyntaxKind.TypeAssertion: + case SyntaxKind.ParenExpression: + case SyntaxKind.FunctionExpression: + case SyntaxKind.ArrowFunction: + case SyntaxKind.PrefixOperator: + case SyntaxKind.PostfixOperator: + case SyntaxKind.BinaryExpression: + case SyntaxKind.ConditionalExpression: + case SyntaxKind.OmittedExpression: + return true; + case SyntaxKind.QualifiedName: + 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; + 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; + 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 getSymbolOfEntityName(entityName: EntityName): Symbol { + if (isDeclarationOrFunctionExpressionOrCatchVariableName(entityName)) { + return getSymbolOfNode(entityName.parent); + } + + if (entityName.parent.kind === SyntaxKind.ExportAssignment) { + return resolveEntityName(/*location*/ entityName.parent.parent, entityName, + /*all meanings*/ SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Import); + } + + if (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; + } if (isExpression(entityName)) { if (entityName.kind === SyntaxKind.Identifier) { @@ -6585,12 +6843,17 @@ module ts { meaning |= SymbolFlags.Import; return resolveEntityName(entityName, entityName, meaning); } + + // Do we want to return undefined here? + return undefined; } function getSymbolInfo(node: 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: @@ -6645,16 +6908,56 @@ module ts { 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: Symbol; + symbol = node.parent.kind === SyntaxKind.ExportAssignment + ? getSymbolInfo(node) + : getSymbolOfPartOfRightHandSideOfImport(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); @@ -6663,13 +6966,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); @@ -6677,7 +6980,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); diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 8f6ac1ddfc8..39a18167878 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -68,8 +68,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); } diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 7b0f27d6327..eb787cf91e0 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." }, @@ -106,193 +84,259 @@ module ts { An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: DiagnosticCategory.Error, key: "An object literal cannot have property and accessor with the same name." }, 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." }, - 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}'." }, + 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: 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." }, + 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}'" }, + 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." }, @@ -303,13 +347,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" }, @@ -317,29 +358,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." }, @@ -347,83 +384,10 @@ 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" }, }; } \ No newline at end of file diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 02cad50d8bb..104cd76b5a0 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 @@ -416,740 +327,1002 @@ "category": "Error", "code": 1121 }, - "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 + }, + + "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 @@ -1163,9 +1336,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 @@ -1178,6 +1355,7 @@ "category": "Error", "code": 5039 }, + "Concatenate and emit output to single file.": { "category": "Message", "code": 6001 @@ -1206,10 +1384,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 @@ -1226,14 +1400,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 @@ -1254,7 +1420,6 @@ "category": "Message", "code": 6027 }, - "Version {0}": { "category": "Message", "code": 6029 @@ -1263,17 +1428,9 @@ "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", @@ -1295,19 +1452,7 @@ "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.": { + "Compilation complete. Watching for file changes.": { "category": "Message", "code": 6042 }, @@ -1325,36 +1470,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 @@ -1383,14 +1533,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 @@ -1410,313 +1552,5 @@ "Call signature, which lacks return-type annotation, implicitly has an 'any' return type.": { "category": "Error", "code": 7020 - }, - "Variable declaration list cannot be empty.": { - "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 } } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 7e11b978c67..47d47461ae8 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,6 +115,15 @@ 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); @@ -138,6 +155,7 @@ module ts { return { write: write, writeSymbol: writeSymbol, + rawWrite: rawWrite, writeLiteral: writeLiteral, writeLine: writeLine, increaseIndent: () => indent++, @@ -145,8 +163,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 +177,141 @@ 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(sys.newLine); + } + } + + function calculateIndent(pos: number, end: number) { + var currentLineIndent = 0; + while (pos < end && isWhiteSpace(currentSourceFile.text.charCodeAt(pos))) { + pos++; + if (currentSourceFile.text.charCodeAt(pos) === CharacterCodes.tab) { + // Tabs = size of the indent + currentLineIndent += getIndentSize(); + } + else { + // Single space + currentLineIndent++; + } + } + + return currentLineIndent; + } + } + function emitJavaScript(jsFilePath: string, root?: SourceFile) { var writer = createTextWriter(writeSymbol); var write = writer.write; @@ -177,14 +324,26 @@ 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 detachedCommentsInfo: { nodePos: number; detachedCommentEndPos: number }[]; + /** Emit detached comments of the node */ + var emitDetachedComments = compilerOptions.removeComments ? (node: TextRange) => { } : emitDetachedCommentsAtPosition; + + 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 +353,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 +478,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 +498,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 +586,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 +674,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 +861,11 @@ module ts { } function emitPropertyAssignment(node: PropertyDeclaration) { + emitLeadingComments(node); emit(node.name); write(": "); emit(node.initializer); + emitTrailingComments(node); } function emitPropertyAccess(node: PropertyAccess) { @@ -866,13 +1032,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 +1059,7 @@ module ts { emitEmbeddedStatement(node.elseStatement); } } + emitTrailingComments(node); } function emitDoStatement(node: DoStatement) { @@ -958,9 +1128,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 +1229,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 +1274,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 +1308,27 @@ 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.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 +1341,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 +1356,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,9 +1384,11 @@ module ts { } else { writeLine(); + emitLeadingComments(node.body); write("return "); emit(node.body); write(";"); + emitTrailingComments(node.body); } decreaseIndent(); writeLine(); @@ -1266,6 +1461,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 +1476,7 @@ module ts { emit((member).initializer); write(";"); emitEnd(member); + emitTrailingComments(member); } }); } @@ -1289,6 +1486,7 @@ module ts { if (member.kind === SyntaxKind.Method) { if (!(member).body) return; writeLine(); + emitLeadingComments(member); emitStart(member); emitStart((member).name); emitNode(node.name); @@ -1303,6 +1501,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 +1521,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 +1555,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 +1574,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 +1604,63 @@ module ts { emitEnd(node); write(";"); } + emitTrailingComments(node); + + function emitConstructorOfClass() { + 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); + } + decreaseIndent(); + writeLine(); + emitToken(SyntaxKind.CloseBraceToken, ctor ? (ctor.body).statements.end : node.members.end); + scopeEmitEnd(); + emitEnd(ctor || node); + if (ctor) { + emitTrailingComments(ctor); + } + } } function emitEnumDeclaration(node: EnumDeclaration) { + emitLeadingComments(node); if (!(node.flags & NodeFlags.Export)) { emitStart(node); write("var "); @@ -1456,26 +1677,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 +1698,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 { @@ -1507,6 +1735,7 @@ module ts { function emitModuleDeclaration(node: ModuleDeclaration) { if (!isInstantiated(node)) return; + emitLeadingComments(node); if (!(node.flags & NodeFlags.Export)) { emitStart(node); write("var "); @@ -1553,6 +1782,7 @@ module ts { emitEnd(node); write(";"); } + emitTrailingComments(node); } function emitImportDeclaration(node: ImportDeclaration) { @@ -1569,16 +1799,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 +1828,7 @@ module ts { } write(";"); emitEnd(node); + emitTrailingComments(node); } } } @@ -1691,6 +1925,7 @@ module ts { function emitSourceFile(node: SourceFile) { currentSourceFile = node; + emitDetachedComments(node); // emit prologue directives prior to __extends var startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ false); if (!extendsEmitted && resolver.getNodeCheckFlags(node) & NodeCheckFlags.EmitExtends) { @@ -1840,6 +2075,84 @@ module ts { } } + function emitLeadingDeclarationComments(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 (detachedCommentsInfo === undefined || detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos !== node.pos) { + // get the leading comments from the node + leadingComments = getLeadingCommentsOfNode(node, currentSourceFile); + } + else { + // get the leading comments from detachedPos + leadingComments = getLeadingComments(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); + if (detachedCommentsInfo.length - 1) { + detachedCommentsInfo.pop(); + } + else { + detachedCommentsInfo = undefined; + } + } + 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 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 && 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]; + } + } + } + } + } + if (compilerOptions.sourceMap) { initializeEmitterWithSourceMaps(); } @@ -1869,6 +2182,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 +2261,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 +2328,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 +2368,7 @@ module ts { function emitModuleDeclaration(node: ModuleDeclaration) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("module "); emitSourceTextOfNode(node.name); @@ -2066,6 +2392,7 @@ module ts { function emitEnumDeclaration(node: EnumDeclaration) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("enum "); emitSourceTextOfNode(node.name); @@ -2080,6 +2407,7 @@ module ts { } function emitEnumMemberDeclaration(node: EnumMember) { + emitJsDocComments(node); emitSourceTextOfNode(node.name); var enumMemberValue = resolver.getEnumMemberValue(node); if (enumMemberValue !== undefined) { @@ -2155,6 +2483,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 +2562,7 @@ module ts { } if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("class "); emitSourceTextOfNode(node.name); @@ -2255,6 +2587,7 @@ module ts { function emitInterfaceDeclaration(node: InterfaceDeclaration) { if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); emitDeclarationFlags(node); write("interface "); emitSourceTextOfNode(node.name); @@ -2274,6 +2607,7 @@ module ts { } function emitPropertyDeclaration(node: PropertyDeclaration) { + emitJsDocComments(node); emitDeclarationFlags(node); emitVariableDeclaration(node); write(";"); @@ -2340,6 +2674,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 +2686,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 +2748,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 +2768,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 +2872,8 @@ module ts { } function emitParameterDeclaration(node: ParameterDeclaration) { + increaseIndent(); + emitJsDocComments(node); if (node.flags & NodeFlags.Rest) { write("..."); } @@ -2536,6 +2881,7 @@ module ts { if (node.initializer || (node.flags & NodeFlags.QuestionMark)) { write("?"); } + decreaseIndent(); if (!(node.parent.flags & NodeFlags.Private)) { write(": "); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 1a12cbdaa3f..114b55cfa2e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -139,6 +139,32 @@ 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; + } + } + // 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 @@ -646,6 +672,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; @@ -2024,7 +2057,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); @@ -2077,13 +2110,12 @@ 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(); parseExpected(SyntaxKind.CloseBracketToken); @@ -3581,7 +3613,7 @@ module ts { 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({ @@ -3626,6 +3658,7 @@ module ts { file.filename = normalizePath(filename); file.text = sourceText; file.getLineAndCharacterFromPosition = getLineAndCharacterlFromSourcePosition; + file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; file.syntacticErrors = []; file.semanticErrors = []; var referenceComments = processReferenceComments(); diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 8be954a6079..f932e8771b9 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -264,6 +264,11 @@ module ts { 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,13 +291,13 @@ 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 { + export function isLineBreak(ch: number): boolean { return ch === CharacterCodes.lineFeed || ch === CharacterCodes.carriageReturn || ch === CharacterCodes.lineSeparator || ch === CharacterCodes.paragraphSeparator; } @@ -359,9 +364,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 +378,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 +390,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 +414,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,11 +433,11 @@ 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); } @@ -601,7 +614,7 @@ module ts { } if (isLineBreak(ch)) { result += text.substring(start, pos); - error(Diagnostics.Unterminated_string_constant); + error(Diagnostics.Unterminated_string_literal); break; } pos++; @@ -762,9 +775,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) { @@ -780,7 +792,6 @@ module ts { } if (!commentClosed) { - pos++; error(Diagnostics.Asterisk_Slash_expected); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 5c18e765715..768fd780a52 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -217,7 +217,11 @@ module ts { FirstKeyword = BreakKeyword, LastKeyword = StringKeyword, FirstFutureReservedWord = ImplementsKeyword, - LastFutureReservedWord = YieldKeyword + LastFutureReservedWord = YieldKeyword, + FirstTypeNode = TypeReference, + LastTypeNode = ArrayType, + FirstPunctuation= OpenBraceToken, + LastPunctuation = CaretEqualsToken } export enum NodeFlags { @@ -512,10 +516,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[]; @@ -593,19 +602,17 @@ 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[]; @@ -937,7 +944,6 @@ module ts { Warning, Error, Message, - NoPrefix } export interface CompilerOptions { diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index 81802516532..a3357826142 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -39,8 +39,9 @@ class CompilerBaselineRunner extends RunnerBase { public checkTestCodeOutput(fileName: string) { describe('compiler tests for ' + fileName, () => { - // strips the fileName from the path. - var justName = fileName.replace(/^.*[\\\/]/, ''); + // Mocha holds onto the closure environment of the describe callback even after the test is done. + // Everything declared here should be cleared out in the "after" callback. + var justName = fileName.replace(/^.*[\\\/]/, ''); // strips the fileName from the path. var content = Harness.IO.readFile(fileName); var testCaseContent = Harness.TestCaseParser.makeUnitsFromTest(content, fileName); @@ -52,6 +53,7 @@ class CompilerBaselineRunner extends RunnerBase { var rootDir = lastUnit.originalFilePath.indexOf('conformance') === -1 ? 'tests/cases/compiler/' : lastUnit.originalFilePath.substring(0, lastUnit.originalFilePath.lastIndexOf('/')) + '/'; 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 }[]; @@ -85,8 +87,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 +101,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 +123,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" : ""; } @@ -251,32 +277,15 @@ 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 => { + walker.getTypes(file.unitName).forEach(result => { var formattedLine = result.identifierName + " : " + result.type; if (!typeMap[file.unitName]) { typeMap[file.unitName] = {}; @@ -290,23 +299,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/harness.ts b/src/harness/harness.ts index 37edd1d4162..7c03fa8c505 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -571,10 +571,6 @@ module Harness { this.lastErrors = []; } - public emitAllDeclarations() { - // NEWTODO: Do something here? - } - public reportCompilationErrors() { return this.lastErrors; } @@ -604,12 +600,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 +697,10 @@ module Harness { sys.newLine = setting.value; break; + case 'comments': + options.removeComments = setting.value === 'false'; + break; + case 'mapsourcefiles': case 'maproot': case 'generatedeclarationfiles': @@ -702,7 +708,6 @@ module Harness { case 'gatherDiagnostics': case 'codepage': case 'createFileLog': - case 'comments': case 'filename': case 'propagateenumconstants': case 'removecomments': @@ -755,7 +760,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'; @@ -764,7 +769,8 @@ 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 }; + 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 }; } export function getErrorBaseline(inputFiles: { unitName: string; content: string }[], diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index cb8ef61f413..33f8f67c17a 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -167,7 +167,6 @@ module Harness.LanguageService { } export class TypeScriptLS implements ts.LanguageServiceShimHost { private ls: ts.LanguageServiceShim = null; - public newLS: ts.LanguageService; private fileNameToScript: ts.Map = {}; @@ -268,12 +267,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 */ 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..b8d25b890e6 100644 --- a/src/harness/rwcRunner.ts +++ b/src/harness/rwcRunner.ts @@ -102,7 +102,12 @@ module RWC { getSourceFile: (fileName, languageVersion) => { var fileContents: string; try { - fileContents = sys.readFile(fileName); + if (libPath === fileName) { + fileContents = Harness.IO.readFile(Harness.libFolder + "lib.d.ts"); + } + else { + fileContents = sys.readFile(fileName); + } } catch (e) { // Leave fileContents undefined; @@ -134,9 +139,14 @@ module RWC { // Load the files inputList.forEach((item: string) => { - var resolvedPath = Harness.Path.switchToForwardSlashes(sys.resolvePath(item)); + var resolvedPath = libPath === item ? item : Harness.Path.switchToForwardSlashes(sys.resolvePath(item)); try { - var content = sys.readFile(resolvedPath); + if (libPath === item) { + var content = Harness.IO.readFile(Harness.libFolder + "lib.d.ts"); + } + else { + var content = sys.readFile(resolvedPath); + } } catch (e) { // Leave content undefined. @@ -148,13 +158,16 @@ module RWC { // 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'; + if (err.filename) { + errors += err.filename + ' (' + err.line + "," + err.character + "): " + err.message + '\r\n'; + } + else { + errors += err.message + '\r\n'; + } }); }); }); @@ -165,25 +178,23 @@ 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(emitterIOHost, fn => Harness.Compiler.isJS(fn), 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'); + var result = collateOutputs(emitterIOHost, fn => Harness.Compiler.isDTS(fn)); return result.length > 0 ? result : null; }, 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; }, false, baselineOpts); }); - */ it('has the expected errors', () => { Harness.Baseline.runBaseline('has the expected errors', baseName + '.errors.txt', () => { diff --git a/src/harness/typeWriter.ts b/src/harness/typeWriter.ts index b8501850ac7..87f215d5b72 100644 --- a/src/harness/typeWriter.ts +++ b/src/harness/typeWriter.ts @@ -1,180 +1,99 @@ - -/** 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; + identifierName: 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.RegularExpressionLiteral: + 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); + var isUnknownType = (type).intrinsicName === "unknown"; + + // 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], + identifierName: sourceText, + type: isUnknownType ? sourceText : this.checker.typeToString(type) + }); } - 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/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/declarationEmitter.ts b/src/services/compiler/declarationEmitter.ts index d3052389cb0..5e931b590c6 100644 --- a/src/services/compiler/declarationEmitter.ts +++ b/src/services/compiler/declarationEmitter.ts @@ -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/services.ts b/src/services/services.ts index 4491f2c6c8f..fe4eef69c6f 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -310,6 +310,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[]; @@ -657,6 +658,7 @@ module ts { InMultiLineCommentTrivia, InSingleQuoteStringLiteral, InDoubleQuoteStringLiteral, + EndingWithDotToken, } export enum TokenClass { @@ -691,8 +693,7 @@ module ts { compilationSettings: CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, version: number, - isOpen: boolean, - referencedFiles: string[]): SourceFile; + isOpen: boolean): SourceFile; updateDocument( sourceFile: SourceFile, @@ -1488,7 +1489,7 @@ module ts { 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 @@ -1779,7 +1780,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; } @@ -2758,50 +2759,41 @@ module ts { } /// Classifier - export function createClassifier(host: Logger): Classifier { - var scanner: TypeScript.Scanner.IScanner; - var lastDiagnosticKey: string = null; - var noRegexTable: boolean[]; - var reportDiagnostic = (position: number, fullWidth: number, key: string, args: any[]) => { - lastDiagnosticKey = key; - }; - - 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; - } - + var scanner: Scanner; + var noRegexTable: boolean[]; + /// 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[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 = { @@ -2809,94 +2801,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..2d110c2de31 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -840,8 +840,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); 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..ff49e1c530f --- /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 Point +>A : typeof A +>Point : typeof 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) : Point +>A.Point : typeof Point +>A : typeof A +>Point : typeof 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..b928b699b95 --- /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 Point +>A : typeof A +>Point : typeof 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) : Point +>A.Point : typeof Point +>A : typeof A +>Point : typeof 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/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..50768c8c2f9 --- /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) : Point +>enumdule.Point : typeof Point +>enumdule : typeof enumdule +>Point : typeof 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..8d6c43a9a78 --- /dev/null +++ b/tests/baselines/reference/ExportInterfaceWithInaccessibleTypeInIndexerTypeAnnotations.types @@ -0,0 +1,28 @@ +=== tests/cases/conformance/internalModules/exportDeclarations/ExportInterfaceWithInaccessibleTypeInIndexerTypeAnnotations.ts === +module A { +>A : A + + 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..3110020b9bc --- /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 Point +>B : typeof B +>Point : typeof 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..c33be647018 --- /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) : Point +>enumdule.Point : typeof Point +>enumdule : typeof enumdule +>Point : typeof 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..9fc4a86e362 --- /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: Point) => { x: number; y: number; } +>p : Point +>A : A +>Point : Point + + return { x: p.x, y: p.y }; +>{ x: p.x, y: p.y } : { x: number; y: number; } +>x : number +>p.x : number +>p : Point +>x : number +>y : number +>p.y : number +>p : 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 : A +>Point : 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 : X +>Y : Y +>Z : Z +>Line : 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..c589eae642f --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.types @@ -0,0 +1,103 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedAndNonExportedInterfacesOfTheSameName.ts === +module A { +>A : A + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + + toCarth(): Point; +>toCarth : () => Point +>Point : Point + } +} + +module A { +>A : A + + 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(): Point; } +>x : number +>y : number +>toCarth : () => Point +>A : A +>Point : Point + +var p: A.Point; +>p : { x: number; y: number; toCarth(): Point; } +>A : A +>Point : Point + +module X.Y.Z { +>X : X +>Y : Y +>Z : Z + + export interface Line { +>Line : Line + + new (start: A.Point, end: A.Point); +>start : Point +>A : A +>Point : Point +>end : Point +>A : A +>Point : Point + } +} + +module X { +>X : X + + export module Y.Z { +>Y : Y +>Z : Z + + interface Line { +>Line : Line + + start: A.Point; +>start : Point +>A : A +>Point : Point + + end: A.Point; +>end : Point +>A : A +>Point : Point + } + } +} + +// ensure merges as expected +var l: { new (s: A.Point, e: A.Point); } +>l : new (s: Point, e: Point) => any +>s : Point +>A : A +>Point : Point +>e : Point +>A : A +>Point : Point + +var l: X.Y.Z.Line; +>l : new (s: Point, e: Point) => any +>X : X +>Y : Y +>Z : Z +>Line : 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..44472c4da6b --- /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 : A +>Point : Point + +var o = A.Origin; +>o : { x: number; y: number; } +>A.Origin : Point +>A : typeof A +>Origin : 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 Utils +>A : typeof A +>Utils : typeof Utils +>mirror : (p: T) => { x: number; y: number; } +>o : { x: number; y: number; } + +var p: { tl: A.Point; br: A.Point }; +>p : { tl: Point; br: Point; } +>tl : Point +>A : A +>Point : Point +>br : Point +>A : A +>Point : Point + +var p: A.Utils.Plane; +>p : { tl: Point; br: Point; } +>A : A +>Utils : Utils +>Plane : Plane + +var p = new A.Utils.Plane(o, { x: 1, y: 1 }); +>p : { tl: Point; br: Point; } +>new A.Utils.Plane(o, { x: 1, y: 1 }) : Plane +>A.Utils.Plane : typeof Plane +>A.Utils : typeof Utils +>A : typeof A +>Utils : typeof Utils +>Plane : typeof 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..6a3bc7d15bd --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.types @@ -0,0 +1,112 @@ +=== tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedInterfacesOfTheSameName.ts === +module A { +>A : A + + export interface Point { +>Point : Point + + x: number; +>x : number + + y: number; +>y : number + + toCarth(): Point; +>toCarth : () => Point +>Point : Point + } +} + +module A { +>A : A + + 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(): Point; fromCarth(): Point; } +>x : number +>y : number +>toCarth : () => Point +>A : A +>Point : Point +>fromCarth : () => Point +>A : A +>Point : Point + +var p: A.Point; +>p : { x: number; y: number; toCarth(): Point; fromCarth(): Point; } +>A : A +>Point : Point + +module X.Y.Z { +>X : X +>Y : Y +>Z : Z + + export interface Line { +>Line : Line + + new (start: A.Point, end: A.Point); +>start : Point +>A : A +>Point : Point +>end : Point +>A : A +>Point : Point + } +} + +module X { +>X : X + + export module Y.Z { +>Y : Y +>Z : Z + + export interface Line { +>Line : Line + + start: A.Point; +>start : Point +>A : A +>Point : Point + + end: A.Point; +>end : Point +>A : A +>Point : Point + } + } +} + +// ensure merges as expected +var l: { start: A.Point; end: A.Point; new (s: A.Point, e: A.Point); } +>l : { new (s: Point, e: Point): any; start: Point; end: Point; } +>start : Point +>A : A +>Point : Point +>end : Point +>A : A +>Point : Point +>s : Point +>A : A +>Point : Point +>e : Point +>A : A +>Point : Point + +var l: X.Y.Z.Line; +>l : { new (s: Point, e: Point): any; start: Point; end: Point; } +>X : X +>Y : Y +>Z : Z +>Line : 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..3903b181a03 --- /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 B +>A : typeof A +>B : typeof 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 : X +>Y : Y +>Z : Z +>Line : 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..15f596622e7 --- /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 : Point +>Root : Root +>A : A +>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: Root.A.Point, public br: Root.A.Point) { } +>tl : Point +>Root : Root +>A : A +>Point : Point +>br : Point +>Root : Root +>A : A +>Point : 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..0bcc1b750c8 --- /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 : A +>Point : Point + +var o = A.Origin; +>o : { x: number; y: number; } +>A.Origin : Point +>A : typeof A +>Origin : 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 Utils +>A : typeof A +>Utils : typeof Utils +>mirror : (p: T) => { x: number; y: number; } +>o : { x: number; y: number; } + +var p: { tl: A.Point; br: A.Point }; +>p : { tl: Point; br: Point; } +>tl : Point +>A : A +>Point : Point +>br : Point +>A : A +>Point : Point + +var p: A.Utils.Plane; +>p : { tl: Point; br: Point; } +>A : A +>Utils : Utils +>Plane : Plane + +var p = new A.Utils.Plane(o, { x: 1, y: 1 }); +>p : { tl: Point; br: Point; } +>new A.Utils.Plane(o, { x: 1, y: 1 }) : Plane +>A.Utils.Plane : typeof Plane +>A.Utils : typeof Utils +>A : typeof A +>Utils : typeof Utils +>Plane : typeof Plane +>o : { x: number; y: number; } +>{ x: 1, y: 1 } : { x: number; y: number; } +>x : number +>y : number + + diff --git a/tests/baselines/reference/acceptableAlias1.types b/tests/baselines/reference/acceptableAlias1.types new file mode 100644 index 00000000000..3375ceee302 --- /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 : N + } + export import X = N; +>X : X +>N : N +} + +import r = M.X; +>r : r +>M : typeof M +>X : X + diff --git a/tests/baselines/reference/accessOverriddenBaseClassMember1.types b/tests/baselines/reference/accessOverriddenBaseClassMember1.types new file mode 100644 index 00000000000..89701992cae --- /dev/null +++ b/tests/baselines/reference/accessOverriddenBaseClassMember1.types @@ -0,0 +1,52 @@ +=== 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 +>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 +>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..8753eb64ae4 --- /dev/null +++ b/tests/baselines/reference/accessorWithES5.types @@ -0,0 +1,41 @@ +=== 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..8dc3aadedae --- /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 "tests/cases/compiler/aliasUsage1_backbone" + +import moduleA = require("aliasUsage1_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsage1_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsage1_backbone" +>Model : typeof 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 "tests/cases/compiler/aliasUsage1_moduleA" +>x : IHasVisualizationModel +>moduleA : typeof "tests/cases/compiler/aliasUsage1_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 "tests/cases/compiler/aliasUsage1_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInArray.types b/tests/baselines/reference/aliasUsageInArray.types new file mode 100644 index 00000000000..9903592ffdc --- /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 "tests/cases/compiler/aliasUsageInArray_backbone" + +import moduleA = require("aliasUsageInArray_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsageInArray_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsageInArray_backbone" +>Model : typeof Model +} + +var xs: IHasVisualizationModel[] = [moduleA]; +>xs : IHasVisualizationModel[] +>IHasVisualizationModel : IHasVisualizationModel +>[moduleA] : IHasVisualizationModel[] +>moduleA : typeof "tests/cases/compiler/aliasUsageInArray_moduleA" + +var xs2: typeof moduleA[] = [moduleA]; +>xs2 : typeof "tests/cases/compiler/aliasUsageInArray_moduleA"[] +>moduleA : typeof "tests/cases/compiler/aliasUsageInArray_moduleA" +>[moduleA] : typeof "tests/cases/compiler/aliasUsageInArray_moduleA"[] +>moduleA : typeof "tests/cases/compiler/aliasUsageInArray_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 "tests/cases/compiler/aliasUsageInArray_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInFunctionExpression.types b/tests/baselines/reference/aliasUsageInFunctionExpression.types new file mode 100644 index 00000000000..1ab7065f00f --- /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 "tests/cases/compiler/aliasUsageInFunctionExpression_backbone" + +import moduleA = require("aliasUsageInFunctionExpression_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsageInFunctionExpression_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsageInFunctionExpression_backbone" +>Model : typeof 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 "tests/cases/compiler/aliasUsageInFunctionExpression_moduleA" +>f : (x: IHasVisualizationModel) => IHasVisualizationModel +>(x) => moduleA : (x: IHasVisualizationModel) => typeof "tests/cases/compiler/aliasUsageInFunctionExpression_moduleA" +>x : IHasVisualizationModel +>moduleA : typeof "tests/cases/compiler/aliasUsageInFunctionExpression_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 "tests/cases/compiler/aliasUsageInFunctionExpression_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInGenericFunction.types b/tests/baselines/reference/aliasUsageInGenericFunction.types new file mode 100644 index 00000000000..2d357d58ceb --- /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 "tests/cases/compiler/aliasUsageInGenericFunction_backbone" + +import moduleA = require("aliasUsageInGenericFunction_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsageInGenericFunction_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsageInGenericFunction_backbone" +>Model : typeof 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 "tests/cases/compiler/aliasUsageInGenericFunction_moduleA"; } +>foo({ a: moduleA }) : { a: typeof "tests/cases/compiler/aliasUsageInGenericFunction_moduleA"; } +>foo : (x: T) => T +>{ a: moduleA } : { a: typeof "tests/cases/compiler/aliasUsageInGenericFunction_moduleA"; } +>a : typeof "tests/cases/compiler/aliasUsageInGenericFunction_moduleA" +>moduleA : 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 "tests/cases/compiler/aliasUsageInGenericFunction_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInIndexerOfClass.types b/tests/baselines/reference/aliasUsageInIndexerOfClass.types new file mode 100644 index 00000000000..dab53004c49 --- /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 "tests/cases/compiler/aliasUsageInIndexerOfClass_backbone" + +import moduleA = require("aliasUsageInIndexerOfClass_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsageInIndexerOfClass_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsageInIndexerOfClass_backbone" +>Model : typeof Model +} +class N { +>N : N + + [idx: string]: IHasVisualizationModel +>idx : string +>IHasVisualizationModel : IHasVisualizationModel + + x = moduleA; +>x : typeof "tests/cases/compiler/aliasUsageInIndexerOfClass_moduleA" +>moduleA : typeof "tests/cases/compiler/aliasUsageInIndexerOfClass_moduleA" +} +class N2 { +>N2 : N2 + + [idx: string]: typeof moduleA +>idx : string +>moduleA : typeof "tests/cases/compiler/aliasUsageInIndexerOfClass_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 "tests/cases/compiler/aliasUsageInIndexerOfClass_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInObjectLiteral.types b/tests/baselines/reference/aliasUsageInObjectLiteral.types new file mode 100644 index 00000000000..4fccdbf0c19 --- /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 "tests/cases/compiler/aliasUsageInObjectLiteral_backbone" + +import moduleA = require("aliasUsageInObjectLiteral_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsageInObjectLiteral_backbone" +>Model : typeof Model +} +var a: { x: typeof moduleA } = { x: moduleA }; +>a : { x: typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA"; } +>x : typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA" +>moduleA : typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA" +>{ x: moduleA } : { x: typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA"; } +>x : typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA" +>moduleA : moduleA + +var b: { x: IHasVisualizationModel } = { x: moduleA }; +>b : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>{ x: moduleA } : { x: typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA"; } +>x : typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA" +>moduleA : 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 "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA"; }; } +>y : { z: typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA"; } +>{ z: moduleA } : { z: typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA"; } +>z : typeof "tests/cases/compiler/aliasUsageInObjectLiteral_moduleA" +>moduleA : 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 "tests/cases/compiler/aliasUsageInObjectLiteral_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInOrExpression.types b/tests/baselines/reference/aliasUsageInOrExpression.types new file mode 100644 index 00000000000..45f1fc50302 --- /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 "tests/cases/compiler/aliasUsageInOrExpression_backbone" + +import moduleA = require("aliasUsageInOrExpression_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsageInOrExpression_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsageInOrExpression_backbone" +>Model : typeof Model +} +var i: IHasVisualizationModel; +>i : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel + +var d1 = i || moduleA; +>d1 : IHasVisualizationModel +>i || moduleA : IHasVisualizationModel +>i : IHasVisualizationModel +>moduleA : typeof "tests/cases/compiler/aliasUsageInOrExpression_moduleA" + +var d2: IHasVisualizationModel = i || moduleA; +>d2 : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>i || moduleA : IHasVisualizationModel +>i : IHasVisualizationModel +>moduleA : typeof "tests/cases/compiler/aliasUsageInOrExpression_moduleA" + +var d2: IHasVisualizationModel = moduleA || i; +>d2 : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>moduleA || i : IHasVisualizationModel +>moduleA : typeof "tests/cases/compiler/aliasUsageInOrExpression_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 "tests/cases/compiler/aliasUsageInOrExpression_moduleA"; } +>x : typeof "tests/cases/compiler/aliasUsageInOrExpression_moduleA" +>moduleA : 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 "tests/cases/compiler/aliasUsageInOrExpression_moduleA"; } +>x : typeof "tests/cases/compiler/aliasUsageInOrExpression_moduleA" +>moduleA : 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 "tests/cases/compiler/aliasUsageInOrExpression_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types b/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types new file mode 100644 index 00000000000..d66878258f8 --- /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 "tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_backbone" + +import moduleA = require("aliasUsageInTypeArgumentOfExtendsClause_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_backbone" +>Model : typeof 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 "tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_moduleA" +>moduleA : typeof "tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_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 "tests/cases/compiler/aliasUsageInTypeArgumentOfExtendsClause_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/aliasUsageInVarAssignment.types b/tests/baselines/reference/aliasUsageInVarAssignment.types new file mode 100644 index 00000000000..a258652d6c9 --- /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 "tests/cases/compiler/aliasUsageInVarAssignment_backbone" + +import moduleA = require("aliasUsageInVarAssignment_moduleA"); +>moduleA : typeof "tests/cases/compiler/aliasUsageInVarAssignment_moduleA" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/aliasUsageInVarAssignment_backbone" +>Model : typeof Model +} +var i: IHasVisualizationModel; +>i : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel + +var m: typeof moduleA = i; +>m : typeof "tests/cases/compiler/aliasUsageInVarAssignment_moduleA" +>moduleA : typeof "tests/cases/compiler/aliasUsageInVarAssignment_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 "tests/cases/compiler/aliasUsageInVarAssignment_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : 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..3eebbdce7fd --- /dev/null +++ b/tests/baselines/reference/aliasUsedAsNameValue.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/aliasUsedAsNameValue_2.ts === +/// +/// +import mod = require("aliasUsedAsNameValue_0"); +>mod : typeof "tests/cases/compiler/aliasUsedAsNameValue_0" + +import b = require("aliasUsedAsNameValue_1"); +>b : typeof "tests/cases/compiler/aliasUsedAsNameValue_1" + +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 "tests/cases/compiler/aliasUsedAsNameValue_1" +>b : (a: any) => any +>mod : typeof "tests/cases/compiler/aliasUsedAsNameValue_0" +} + +=== 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..ae37e5b7581 --- /dev/null +++ b/tests/baselines/reference/ambientExternalModuleWithInternalImportDeclaration.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/ambientExternalModuleWithInternalImportDeclaration_1.ts === +/// +import A = require('M'); +>A : typeof C + +var c = new A(); +>c : C +>new A() : C +>A : typeof C + +=== tests/cases/compiler/ambientExternalModuleWithInternalImportDeclaration_0.ts === +declare module 'M' { + module C { +>C : typeof C + + export var f: number; +>f : number + } + class C { +>C : C + + foo(): void; +>foo : () => void + } + import X = C; +>X : typeof C +>C : C + + export = X; +>X : C + +} + diff --git a/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types b/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types new file mode 100644 index 00000000000..d23f33402bc --- /dev/null +++ b/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/ambientExternalModuleWithoutInternalImportDeclaration_1.ts === +/// +import A = require('M'); +>A : typeof C + +var c = new A(); +>c : C +>new A() : C +>A : typeof C + +=== 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..bb964bd3927 --- /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 : C +>new Foo.C() : C +>Foo.C : typeof C +>Foo : typeof Foo +>C : typeof 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 : C +>new Foo2.C() : C +>Foo2.C : typeof C +>Foo2 : typeof Foo2 +>C : typeof 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..da6d3b77201 --- /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 Bar +>Foo : typeof Foo +>Bar : typeof 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..ac2f63709df --- /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 "tests/cases/conformance/externalModules/foo_0" + +if(foo.E1.A === 0){ +>foo.E1.A === 0 : boolean +>foo.E1.A : E1 +>foo.E1 : typeof E1 +>foo : typeof "tests/cases/conformance/externalModules/foo_0" +>E1 : typeof E1 +>A : 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..affce41c42e --- /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 "tests/cases/conformance/externalModules/foo_0" + +// None of the below should cause a runtime dependency on foo_0 +import f = foo.M1; +>f : f +>foo : typeof "tests/cases/conformance/externalModules/foo_0" +>M1 : M1 + +var i: f.I2; +>i : I2 +>f : f +>I2 : I2 + +var x: foo.C1 = <{m1: number}>{}; +>x : C1 +>foo : foo +>C1 : C1 +><{m1: number}>{} : { m1: number; } +>m1 : number +>{} : {} + +var y: typeof foo.C1.s1 = false; +>y : boolean +>foo : typeof "tests/cases/conformance/externalModules/foo_0" +>C1 : typeof C1 +>s1 : boolean + +var z: foo.M1.I2; +>z : I2 +>foo : foo +>M1 : M1 +>I2 : I2 + +var e: number = 0; +>e : number +>0 : E1 +>foo : foo +>E1 : 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 : M1 + + 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..b71f7526b3f --- /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 : C +>new M.C() : C +>M.C : typeof C +>M : typeof M +>C : typeof 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 : 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..ac249f83414 --- /dev/null +++ b/tests/baselines/reference/anyInferenceAnonymousFunctions.types @@ -0,0 +1,93 @@ +=== 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..532412d0c08 --- /dev/null +++ b/tests/baselines/reference/argumentsUsedInObjectLiteralProperty.types @@ -0,0 +1,23 @@ +=== 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..d3381315aaf --- /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 : anyObj +>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 : anyObj +>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 : anyObj +>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..643f1a6a57e --- /dev/null +++ b/tests/baselines/reference/arrayConcatMap.types @@ -0,0 +1,26 @@ +=== 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..a5f1cb97084 --- /dev/null +++ b/tests/baselines/reference/arrayLiteralTypeInference.types @@ -0,0 +1,156 @@ +=== 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..5425ccf9344 --- /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) => Promise[]> +>indices : number[] +>options : any +>WinJS : WinJS +>Promise : 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) => Promise[]> +>indices : number[] +>options : any +>WinJS : WinJS +>Promise : 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..0ae65d31426 --- /dev/null +++ b/tests/baselines/reference/arrayconcat.types @@ -0,0 +1,123 @@ +=== 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..6d23dcd6600 --- /dev/null +++ b/tests/baselines/reference/arrowFunctionExpressions.types @@ -0,0 +1,288 @@ +=== 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..5a4ae5fbcc4 --- /dev/null +++ b/tests/baselines/reference/asiArith.types @@ -0,0 +1,79 @@ +=== 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..aa80e3e073e --- /dev/null +++ b/tests/baselines/reference/asiInES6Classes.types @@ -0,0 +1,32 @@ +=== 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..6fec8d187d3 --- /dev/null +++ b/tests/baselines/reference/assignToPrototype1.types @@ -0,0 +1,24 @@ +=== 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 deleted file mode 100644 index 14b49dcd1e7..00000000000 --- a/tests/baselines/reference/assignmentCompatWithObjectMembers.js +++ /dev/null @@ -1,168 +0,0 @@ -//// [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 { - class S { foo: string; } - class T { foo: string; } - var s: S; - var t: T; - - interface S2 { foo: string; } - interface T2 { foo: string; } - var s2: S2; - var t2: T2; - - var a: { foo: string; } - var b: { foo: string; } - - var a2 = { foo: '' }; - var b2 = { foo: '' }; - - 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; -} - -module ObjectTypes { - class S { foo: S; } - class T { foo: T; } - var s: S; - var t: T; - - interface S2 { foo: S2; } - interface T2 { foo: T2; } - var s2: S2; - var t2: T2; - - var a: { foo: typeof a; } - var b: { foo: typeof b; } - - var a2 = { foo: a2 }; - var b2 = { foo: b2 }; - - 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; - -} - -//// [assignmentCompatWithObjectMembers.js] -var SimpleTypes; -(function (SimpleTypes) { - var S = (function () { - function S() { - } - return S; - })(); - var T = (function () { - function T() { - } - return T; - })(); - var s; - var t; - var s2; - var t2; - var a; - var b; - var a2 = { foo: '' }; - var b2 = { foo: '' }; - 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; -})(SimpleTypes || (SimpleTypes = {})); -var ObjectTypes; -(function (ObjectTypes) { - var S = (function () { - function S() { - } - return S; - })(); - var T = (function () { - function T() { - } - return T; - })(); - var s; - var t; - var s2; - var t2; - var a; - var b; - var a2 = { foo: a2 }; - var b2 = { foo: b2 }; - 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; -})(ObjectTypes || (ObjectTypes = {})); 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..43f2466f48b --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__aa : {} +>__test2__ : typeof __test2__ +>__val__aa : {} +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability2.types b/tests/baselines/reference/assignmentCompatability2.types new file mode 100644 index 00000000000..5e27bf37521 --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__aa : {} +>__test2__ : typeof __test2__ +>__val__aa : {} +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability3.types b/tests/baselines/reference/assignmentCompatability3.types new file mode 100644 index 00000000000..94676fbfbe1 --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__obj : { one: number; } +>__test2__ : typeof __test2__ +>__val__obj : { one: number; } +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability4.types b/tests/baselines/reference/assignmentCompatability4.types new file mode 100644 index 00000000000..89281dae988 --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__aa : { one: number; } +>__test2__ : typeof __test2__ +>__val__aa : { one: number; } +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability5.types b/tests/baselines/reference/assignmentCompatability5.types new file mode 100644 index 00000000000..e5d69b4a6a4 --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__obj1 : interfaceOne +>__test2__ : typeof __test2__ +>__val__obj1 : interfaceOne +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability6.types b/tests/baselines/reference/assignmentCompatability6.types new file mode 100644 index 00000000000..d7662f0bb2c --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__obj3 : interfaceWithOptional +>__test2__ : typeof __test2__ +>__val__obj3 : interfaceWithOptional +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability7.types b/tests/baselines/reference/assignmentCompatability7.types new file mode 100644 index 00000000000..e48e164aa55 --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__obj4 : interfaceWithPublicAndOptional +>__test2__ : typeof __test2__ +>__val__obj4 : interfaceWithPublicAndOptional +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability8.types b/tests/baselines/reference/assignmentCompatability8.types new file mode 100644 index 00000000000..581ad05c5a2 --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__x1 : classWithPublic +>__test2__ : typeof __test2__ +>__val__x1 : classWithPublic +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : interfaceWithPublicAndOptional + diff --git a/tests/baselines/reference/assignmentCompatability9.types b/tests/baselines/reference/assignmentCompatability9.types new file mode 100644 index 00000000000..d71cb54e225 --- /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 : interfaceWithPublicAndOptional +>__test2__.__val__x3 : classWithOptional +>__test2__ : typeof __test2__ +>__val__x3 : classWithOptional +>__test1__.__val__obj4 : interfaceWithPublicAndOptional +>__test1__ : typeof __test1__ +>__val__obj4 : 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..852fb02f58e --- /dev/null +++ b/tests/baselines/reference/badThisBinding.types @@ -0,0 +1,44 @@ +=== 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..5ee96dad667 --- /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 : e + +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/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/callOverloads2.js b/tests/baselines/reference/callOverloads2.js index 2bffd50a2ab..f152bde71aa 100644 --- a/tests/baselines/reference/callOverloads2.js +++ b/tests/baselines/reference/callOverloads2.js @@ -38,7 +38,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..0791be6530f 100644 --- a/tests/baselines/reference/callOverloads3.js +++ b/tests/baselines/reference/callOverloads3.js @@ -26,6 +26,7 @@ var Foo = (function () { }; return Foo; })(); +//class Foo(s: String); var f1 = new Foo("hey"); f1.bar1(); Foo(); diff --git a/tests/baselines/reference/callOverloads5.js b/tests/baselines/reference/callOverloads5.js index b1dba82ae3c..4b93fee7a40 100644 --- a/tests/baselines/reference/callOverloads5.js +++ b/tests/baselines/reference/callOverloads5.js @@ -27,6 +27,7 @@ var Foo = (function () { }; 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..2bb38c096f6 --- /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 : x +} +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..b38b5687ed4 --- /dev/null +++ b/tests/baselines/reference/callSignaturesWithOptionalParameters.types @@ -0,0 +1,196 @@ +=== 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..dc11b56ada2 --- /dev/null +++ b/tests/baselines/reference/captureThisInSuperCall.types @@ -0,0 +1,25 @@ +=== 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 +>{ 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..590c23b048f --- /dev/null +++ b/tests/baselines/reference/castExpressionParentheses.types @@ -0,0 +1,170 @@ +=== 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 +>/regexp/g : RegExp + +(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..42a721d8fff --- /dev/null +++ b/tests/baselines/reference/castTest.types @@ -0,0 +1,129 @@ +=== 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..4a94cf6867e --- /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 "tests/cases/compiler/chainedImportAlias_file0" + +import y = x; +>y : typeof "tests/cases/compiler/chainedImportAlias_file0" +>x : typeof "tests/cases/compiler/chainedImportAlias_file0" + +y.m.foo(); +>y.m.foo() : void +>y.m.foo : () => void +>y.m : typeof m +>y : typeof "tests/cases/compiler/chainedImportAlias_file0" +>m : typeof 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.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..a8d952ae993 --- /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 B + + export import a = A; +>a : typeof A +>A : typeof A + + export class D extends a.C { +>D : D +>a : a +>C : C + + id: number; +>id : number + } +} + +module A { +>A : typeof 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() : C +>B.a.C : typeof C +>B.a : typeof A +>B : typeof B +>a : typeof A +>C : typeof 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..c58b1dd898d --- /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 : M +>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..e2e1b7dfdd8 --- /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 : M +>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..ef02896a945 --- /dev/null +++ b/tests/baselines/reference/classImplementsImportedInterface.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/classImplementsImportedInterface.ts === +module M1 { +>M1 : M1 + + export interface I { +>I : I + + foo(); +>foo : () => any + } +} + +module M2 { +>M2 : typeof M2 + + import T = M1.I; +>T : T +>M1 : M1 +>I : I + + class C implements T { +>C : C +>T : I + + 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..aabba3c1b2c 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,11 @@ 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 }; } 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..81b6eb08e65 100644 --- a/tests/baselines/reference/classMemberInitializerWithLamdaScoping2.js +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping2.js @@ -24,7 +24,7 @@ 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 }; } 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..689ff5bdf41 --- /dev/null +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping5.types @@ -0,0 +1,32 @@ +=== 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.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..8f89cca44bd --- /dev/null +++ b/tests/baselines/reference/classSideInheritance2.types @@ -0,0 +1,46 @@ +=== 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 + } +} + +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..3bd384b6e95 --- /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 : B +>A : A +>B : B + diff --git a/tests/baselines/reference/cloduleAndTypeParameters.types b/tests/baselines/reference/cloduleAndTypeParameters.types new file mode 100644 index 00000000000..dc4d6579467 --- /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 : 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..d9f28399a53 --- /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 C + + export var C = M.C +>C : typeof C +>M.C : typeof C +>M : typeof M +>C : typeof 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..d9901034517 --- /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 +>new m1.m1() : m1 +>m1.m1 : typeof m1 +>m1 : typeof m1 +>m1 : typeof m1 + +module m2 { +>m2 : typeof m2 + + export class m2 { +>m2 : m2 + } + + export class _m2 { +>_m2 : _m2 + } +} +var foo = new m2.m2(); +>foo : m1 +>new m2.m2() : m2 +>m2.m2 : typeof m2 +>m2 : typeof m2 +>m2 : typeof m2 + +var foo = new m2._m2(); +>foo : m1 +>new m2._m2() : _m2 +>m2._m2 : typeof _m2 +>m2 : typeof m2 +>_m2 : typeof _m2 + diff --git a/tests/baselines/reference/collisionCodeGenModuleWithMemberInterfaceConflict.types b/tests/baselines/reference/collisionCodeGenModuleWithMemberInterfaceConflict.types new file mode 100644 index 00000000000..fde4c2fefeb --- /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 : m2 +>new m1.m2() : m2 +>m1.m2 : typeof m2 +>m1 : typeof m1 +>m2 : typeof 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..7a8090a6666 --- /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 +>new m1.m1() : m1 +>m1.m1 : typeof m1 +>m1 : typeof m1 +>m1 : typeof 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 : c1 +>new m1.c1() : c1 +>m1.c1 : typeof c1 +>m1 : typeof m1 +>c1 : typeof 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 : c1 +>new m2.c1() : c1 +>m2.c1 : typeof c1 +>m2 : typeof m2 +>c1 : typeof 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 : c1 +>new m2.c1() : c1 +>m2.c1 : typeof c1 +>m2 : typeof m2 +>c1 : typeof c1 + +var foo2 = new m2.m2(); +>foo2 : c1 +>new m2.m2() : m2 +>m2.m2 : typeof m2 +>m2 : typeof m2 +>m2 : typeof m2 + diff --git a/tests/baselines/reference/collisionCodeGenModuleWithPrivateMember.types b/tests/baselines/reference/collisionCodeGenModuleWithPrivateMember.types new file mode 100644 index 00000000000..47898d28352 --- /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 : c1 +>new m1.c1() : c1 +>m1.c1 : typeof c1 +>m1 : typeof m1 +>c1 : typeof c1 + diff --git a/tests/baselines/reference/collisionCodeGenModuleWithUnicodeNames.types b/tests/baselines/reference/collisionCodeGenModuleWithUnicodeNames.types new file mode 100644 index 00000000000..e690ba6b713 --- /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 +>new 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123() : 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 +>才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123.才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 : typeof 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 +>才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 : typeof 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 +>才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 : typeof 才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüß才能ソЫⅨ蒤郳र्क्ड्राüışğİliيونيكودöÄüßAbcd123 + + + diff --git a/tests/baselines/reference/collisionExportsRequireAndAlias.js b/tests/baselines/reference/collisionExportsRequireAndAlias.js index 938bf77428d..83f23accccf 100644 --- a/tests/baselines/reference/collisionExportsRequireAndAlias.js +++ b/tests/baselines/reference/collisionExportsRequireAndAlias.js @@ -20,3 +20,4 @@ //} //// [collisionExportsRequireAndAlias.js] +// TODO: re-enable, fails when run in the browser with full compiler suite, but not when run alone diff --git a/tests/baselines/reference/collisionExportsRequireAndAlias.types b/tests/baselines/reference/collisionExportsRequireAndAlias.types new file mode 100644 index 00000000000..0e13caf3247 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAlias.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/collisionExportsRequireAndAlias.ts === +// TODO: re-enable, fails when run in the browser with full compiler suite, but not when run alone +No type information for this code. +No type information for this code.////@module: amd +No type information for this code.//// @Filename: collisionExportsRequireAndAlias_file1.ts +No type information for this code.//export function bar() { +No type information for this code.//} +No type information for this code. +No type information for this code.//// @Filename: collisionExportsRequireAndAlias_file3333.ts +No type information for this code.//export function bar2() { +No type information for this code.//} +No type information for this code.//// @Filename: collisionExportsRequireAndAlias_file2.ts +No type information for this code.//import require = require('collisionExportsRequireAndAlias_file1'); // Error +No type information for this code.//import exports = require('collisionExportsRequireAndAlias_file3333'); // Error +No type information for this code.//export function foo() { +No type information for this code.// require.bar(); +No type information for this code.//} +No type information for this code.//export function foo2() { +No type information for this code.// exports.bar2(); +No type information for this code.//} +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndClass.types b/tests/baselines/reference/collisionExportsRequireAndClass.types new file mode 100644 index 00000000000..07debc40147 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndClass.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/collisionExportsRequireAndClass.ts === +export class require { +>require : require +} +export class exports { +>exports : exports +} + diff --git a/tests/baselines/reference/collisionExportsRequireAndEnum.types b/tests/baselines/reference/collisionExportsRequireAndEnum.types new file mode 100644 index 00000000000..b347b72284b --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndEnum.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/collisionExportsRequireAndEnum.ts === +export enum require { // Error +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require +} +export enum exports { // Error +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports +} diff --git a/tests/baselines/reference/collisionExportsRequireAndFunction.types b/tests/baselines/reference/collisionExportsRequireAndFunction.types new file mode 100644 index 00000000000..8b90397c6fe --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndFunction.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/collisionExportsRequireAndFunction.ts === +export function exports() { +>exports : () => number + + return 1; +} +export function require() { +>require : () => string + + return "require"; +} + diff --git a/tests/baselines/reference/collisionExportsRequireAndModule.types b/tests/baselines/reference/collisionExportsRequireAndModule.types new file mode 100644 index 00000000000..e2956ee1ba8 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndModule.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/collisionExportsRequireAndModule.ts === +export module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } +} +export function foo(): require.I { +>foo : () => I +>require : require +>I : I + + return null; +} +export module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } +} +export function foo2(): exports.I { +>foo2 : () => I +>exports : exports +>I : I + + return null; +} diff --git a/tests/baselines/reference/collisionExportsRequireAndUninstantiatedModule.types b/tests/baselines/reference/collisionExportsRequireAndUninstantiatedModule.types new file mode 100644 index 00000000000..4b219229ef3 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndUninstantiatedModule.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/collisionExportsRequireAndUninstantiatedModule.ts === +export module require { // no error +>require : require + + export interface I { +>I : I + } +} +export function foo(): require.I { +>foo : () => I +>require : require +>I : I + + return null; +} +export module exports { // no error +>exports : exports + + export interface I { +>I : I + } +} +export function foo2(): exports.I { +>foo2 : () => I +>exports : exports +>I : I + + return null; +} diff --git a/tests/baselines/reference/collisionExportsRequireAndVar.types b/tests/baselines/reference/collisionExportsRequireAndVar.types new file mode 100644 index 00000000000..656c705aa23 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndVar.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/collisionExportsRequireAndVar.ts === +export function foo() { +>foo : () => void +} +var exports = 1; +>exports : number + +var require = "require"; +>require : string + 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..dad966bd3df --- /dev/null +++ b/tests/baselines/reference/commentInMethodCall.types @@ -0,0 +1,15 @@ +=== 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.types b/tests/baselines/reference/commentOnAmbientClass1.types new file mode 100644 index 00000000000..f7b9f206f0d --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientClass1.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/commentOnAmbientClass1.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/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.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/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.types b/tests/baselines/reference/commentOnElidedModule1.types new file mode 100644 index 00000000000..1a13ba668cf --- /dev/null +++ b/tests/baselines/reference/commentOnElidedModule1.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/commentOnElidedModule1.ts === +/*! Keep this pinned comment */ +module ElidedModule { +>ElidedModule : ElidedModule +} + +// Don't keep this comment. +module ElidedModule2 { +>ElidedModule2 : ElidedModule2 +} 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.types b/tests/baselines/reference/commentOnInterface1.types new file mode 100644 index 00000000000..60ddb0ccae6 --- /dev/null +++ b/tests/baselines/reference/commentOnInterface1.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/commentOnInterface1.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.types b/tests/baselines/reference/commentOnSignature1.types new file mode 100644 index 00000000000..6fd4516d4e9 --- /dev/null +++ b/tests/baselines/reference/commentOnSignature1.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/commentOnSignature1.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 +} diff --git a/tests/baselines/reference/commentOnSimpleArrowFunctionBody1.types b/tests/baselines/reference/commentOnSimpleArrowFunctionBody1.types new file mode 100644 index 00000000000..797da3e419a --- /dev/null +++ b/tests/baselines/reference/commentOnSimpleArrowFunctionBody1.types @@ -0,0 +1,19 @@ +=== 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..50bb6352fad --- /dev/null +++ b/tests/baselines/reference/commentsBeforeFunctionExpression1.types @@ -0,0 +1,13 @@ +=== 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..f7f6025dc11 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; @@ -66,27 +66,32 @@ var i8_c = c8; //// [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,21 +99,29 @@ 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() { } return c8; @@ -118,20 +131,25 @@ var i8_c = c8; //// [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,8 +167,13 @@ 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; diff --git a/tests/baselines/reference/commentsClass.types b/tests/baselines/reference/commentsClass.types new file mode 100644 index 00000000000..5719059adfd --- /dev/null +++ b/tests/baselines/reference/commentsClass.types @@ -0,0 +1,132 @@ +=== 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 + diff --git a/tests/baselines/reference/commentsClassMembers.js b/tests/baselines/reference/commentsClassMembers.js index 999ba787bd9..298991c2eef 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; @@ -497,9 +567,13 @@ 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; 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..cff7702fcfa --- /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 "tests/cases/compiler/commentsExternalModules_0" + +extMod.m1.fooExport(); +>extMod.m1.fooExport() : number +>extMod.m1.fooExport : () => number +>extMod.m1 : typeof m1 +>extMod : typeof "tests/cases/compiler/commentsExternalModules_0" +>m1 : typeof m1 +>fooExport : () => number + +var newVar = new extMod.m1.m2.c(); +>newVar : c +>new extMod.m1.m2.c() : c +>extMod.m1.m2.c : typeof c +>extMod.m1.m2 : typeof m2 +>extMod.m1 : typeof m1 +>extMod : typeof "tests/cases/compiler/commentsExternalModules_0" +>m1 : typeof m1 +>m2 : typeof m2 +>c : typeof c + +extMod.m4.fooExport(); +>extMod.m4.fooExport() : number +>extMod.m4.fooExport : () => number +>extMod.m4 : typeof m4 +>extMod : typeof "tests/cases/compiler/commentsExternalModules_0" +>m4 : typeof m4 +>fooExport : () => number + +var newVar2 = new extMod.m4.m2.c(); +>newVar2 : c +>new extMod.m4.m2.c() : c +>extMod.m4.m2.c : typeof c +>extMod.m4.m2 : typeof m2 +>extMod.m4 : typeof m4 +>extMod : typeof "tests/cases/compiler/commentsExternalModules_0" +>m4 : typeof m4 +>m2 : typeof m2 +>c : typeof 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 : c +>new m1.m2.c() : c +>m1.m2.c : typeof c +>m1.m2 : typeof m2 +>m1 : typeof m1 +>m2 : typeof m2 +>c : typeof 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 : c +>new m4.m2.c() : c +>m4.m2.c : typeof c +>m4.m2 : typeof m2 +>m4 : typeof m4 +>m2 : typeof m2 +>c : typeof 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..d7f72277b2e --- /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 "tests/cases/compiler/commentsExternalModules2_0" + +extMod.m1.fooExport(); +>extMod.m1.fooExport() : number +>extMod.m1.fooExport : () => number +>extMod.m1 : typeof m1 +>extMod : typeof "tests/cases/compiler/commentsExternalModules2_0" +>m1 : typeof m1 +>fooExport : () => number + +export var newVar = new extMod.m1.m2.c(); +>newVar : c +>new extMod.m1.m2.c() : c +>extMod.m1.m2.c : typeof c +>extMod.m1.m2 : typeof m2 +>extMod.m1 : typeof m1 +>extMod : typeof "tests/cases/compiler/commentsExternalModules2_0" +>m1 : typeof m1 +>m2 : typeof m2 +>c : typeof c + +extMod.m4.fooExport(); +>extMod.m4.fooExport() : number +>extMod.m4.fooExport : () => number +>extMod.m4 : typeof m4 +>extMod : typeof "tests/cases/compiler/commentsExternalModules2_0" +>m4 : typeof m4 +>fooExport : () => number + +export var newVar2 = new extMod.m4.m2.c(); +>newVar2 : c +>new extMod.m4.m2.c() : c +>extMod.m4.m2.c : typeof c +>extMod.m4.m2 : typeof m2 +>extMod.m4 : typeof m4 +>extMod : typeof "tests/cases/compiler/commentsExternalModules2_0" +>m4 : typeof m4 +>m2 : typeof m2 +>c : typeof 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 : c +>new m1.m2.c() : c +>m1.m2.c : typeof c +>m1.m2 : typeof m2 +>m1 : typeof m1 +>m2 : typeof m2 +>c : typeof 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 : c +>new m4.m2.c() : c +>m4.m2.c : typeof c +>m4.m2 : typeof m2 +>m4 : typeof m4 +>m2 : typeof m2 +>c : typeof 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..d7f72277b2e --- /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 "tests/cases/compiler/commentsExternalModules2_0" + +extMod.m1.fooExport(); +>extMod.m1.fooExport() : number +>extMod.m1.fooExport : () => number +>extMod.m1 : typeof m1 +>extMod : typeof "tests/cases/compiler/commentsExternalModules2_0" +>m1 : typeof m1 +>fooExport : () => number + +export var newVar = new extMod.m1.m2.c(); +>newVar : c +>new extMod.m1.m2.c() : c +>extMod.m1.m2.c : typeof c +>extMod.m1.m2 : typeof m2 +>extMod.m1 : typeof m1 +>extMod : typeof "tests/cases/compiler/commentsExternalModules2_0" +>m1 : typeof m1 +>m2 : typeof m2 +>c : typeof c + +extMod.m4.fooExport(); +>extMod.m4.fooExport() : number +>extMod.m4.fooExport : () => number +>extMod.m4 : typeof m4 +>extMod : typeof "tests/cases/compiler/commentsExternalModules2_0" +>m4 : typeof m4 +>fooExport : () => number + +export var newVar2 = new extMod.m4.m2.c(); +>newVar2 : c +>new extMod.m4.m2.c() : c +>extMod.m4.m2.c : typeof c +>extMod.m4.m2 : typeof m2 +>extMod.m4 : typeof m4 +>extMod : typeof "tests/cases/compiler/commentsExternalModules2_0" +>m4 : typeof m4 +>m2 : typeof m2 +>c : typeof 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 : c +>new m1.m2.c() : c +>m1.m2.c : typeof c +>m1.m2 : typeof m2 +>m1 : typeof m1 +>m2 : typeof m2 +>c : typeof 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 : c +>new m4.m2.c() : c +>m4.m2.c : typeof c +>m4.m2 : typeof m2 +>m4 : typeof m4 +>m2 : typeof m2 +>c : typeof c + diff --git a/tests/baselines/reference/commentsFormatting.js b/tests/baselines/reference/commentsFormatting.js new file mode 100644 index 00000000000..4ad0d8d6f23 --- /dev/null +++ b/tests/baselines/reference/commentsFormatting.js @@ -0,0 +1,220 @@ +//// [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 { + } +} + +//// [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; +})(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 { + } +} diff --git a/tests/baselines/reference/commentsFormatting.types b/tests/baselines/reference/commentsFormatting.types new file mode 100644 index 00000000000..62e8941b180 --- /dev/null +++ b/tests/baselines/reference/commentsFormatting.types @@ -0,0 +1,75 @@ +=== 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 + } +} diff --git a/tests/baselines/reference/commentsFunction.js b/tests/baselines/reference/commentsFunction.js index 70ac9bc76d3..69061278feb 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,79 @@ 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*/) { +} //// [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*/) { +} //// [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; diff --git a/tests/baselines/reference/commentsFunction.types b/tests/baselines/reference/commentsFunction.types new file mode 100644 index 00000000000..5a1667fad39 --- /dev/null +++ b/tests/baselines/reference/commentsFunction.types @@ -0,0 +1,112 @@ +=== 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 +} 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..5fc9a564cf1 --- /dev/null +++ b/tests/baselines/reference/commentsInheritance.types @@ -0,0 +1,319 @@ +=== 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 + } + /** 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..74ae683cff2 --- /dev/null +++ b/tests/baselines/reference/commentsInterface.types @@ -0,0 +1,276 @@ +=== 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..253ec964c1d --- /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 : c +>new m1.m2.c() : c +>m1.m2.c : typeof c +>m1.m2 : typeof m2 +>m1 : typeof m1 +>m2 : typeof m2 +>c : typeof 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() : c +>m2.m3.c : typeof c +>m2.m3 : typeof m3 +>m2 : typeof m2 +>m3 : typeof m3 +>c : typeof 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() : c +>m3.m4.m5.c : typeof c +>m3.m4.m5 : typeof m5 +>m3.m4 : typeof m4 +>m3 : typeof m3 +>m4 : typeof m4 +>m5 : typeof m5 +>c : typeof 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() : c +>m4.m5.m6.m7.c : typeof c +>m4.m5.m6.m7 : typeof m7 +>m4.m5.m6 : typeof m6 +>m4.m5 : typeof m5 +>m4 : typeof m4 +>m5 : typeof m5 +>m6 : typeof m6 +>m7 : typeof m7 +>c : typeof 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() : c +>m5.m6.m7.m8.c : typeof c +>m5.m6.m7.m8 : typeof m8 +>m5.m6.m7 : typeof m7 +>m5.m6 : typeof m6 +>m5 : typeof m5 +>m6 : typeof m6 +>m7 : typeof m7 +>m8 : typeof m8 +>c : typeof 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() : c +>m6.m7.m8.c : typeof c +>m6.m7.m8 : typeof m8 +>m6.m7 : typeof m7 +>m6 : typeof m6 +>m7 : typeof m7 +>m8 : typeof m8 +>c : typeof 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() : c +>m7.m8.m9.c : typeof c +>m7.m8.m9 : typeof m9 +>m7.m8 : typeof m8 +>m7 : typeof m7 +>m8 : typeof m8 +>m9 : typeof m9 +>c : typeof 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..cb3db3961f0 --- /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 "tests/cases/compiler/commentsMultiModuleMultiFile_0" + +/** 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() : d +>multiM.d : typeof d +>multiM : typeof multiM +>d : typeof 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() : b +>multiM.b : typeof b +>multiM : typeof multiM +>b : typeof b + +new multiM.c(); +>new multiM.c() : c +>multiM.c : typeof c +>multiM : typeof multiM +>c : typeof 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..c77d5e972e0 --- /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() : b +>multiM.b : typeof b +>multiM : typeof multiM +>b : typeof b + +new multiM.c(); +>new multiM.c() : c +>multiM.c : typeof c +>multiM : typeof multiM +>c : typeof 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..b9bdc09506f --- /dev/null +++ b/tests/baselines/reference/commentsOnObjectLiteral3.types @@ -0,0 +1,63 @@ +=== 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..6f89ba78ea4 --- /dev/null +++ b/tests/baselines/reference/commentsOnObjectLiteral4.types @@ -0,0 +1,25 @@ +=== 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..c2fe276a410 --- /dev/null +++ b/tests/baselines/reference/commentsPropertySignature1.types @@ -0,0 +1,14 @@ +=== 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..8cc0b26028d --- /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 : m2 + } +} + +/// 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..0defb522428 --- /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 : m2 + } +} + +/// 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..b1a0a7e49ac --- /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 "tests/cases/conformance/externalModules/foo_0" + +if(foo.C1.s1){ +>foo.C1.s1 : boolean +>foo.C1 : typeof C1 +>foo : typeof "tests/cases/conformance/externalModules/foo_0" +>C1 : typeof 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..affce41c42e --- /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 "tests/cases/conformance/externalModules/foo_0" + +// None of the below should cause a runtime dependency on foo_0 +import f = foo.M1; +>f : f +>foo : typeof "tests/cases/conformance/externalModules/foo_0" +>M1 : M1 + +var i: f.I2; +>i : I2 +>f : f +>I2 : I2 + +var x: foo.C1 = <{m1: number}>{}; +>x : C1 +>foo : foo +>C1 : C1 +><{m1: number}>{} : { m1: number; } +>m1 : number +>{} : {} + +var y: typeof foo.C1.s1 = false; +>y : boolean +>foo : typeof "tests/cases/conformance/externalModules/foo_0" +>C1 : typeof C1 +>s1 : boolean + +var z: foo.M1.I2; +>z : I2 +>foo : foo +>M1 : M1 +>I2 : I2 + +var e: number = 0; +>e : number +>0 : E1 +>foo : foo +>E1 : 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 : M1 + + 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..021574dfbfa --- /dev/null +++ b/tests/baselines/reference/conditionallyDuplicateOverloadsCausedByOverloadResolution.types @@ -0,0 +1,97 @@ +=== 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..de3ed3ae5f1 --- /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 : MyFunc +>Test : Test +>MyFunc : MyFunc + +Test.F(func); // OK +>Test.F(func) : void +>Test.F : (func: MyFunc) => void +>Test : typeof Test +>F : (func: MyFunc) => void +>func : MyFunc + +var test = new Test.MyClass(func); // Should be OK +>test : MyClass +>new Test.MyClass(func) : MyClass +>Test.MyClass : typeof MyClass +>Test : typeof Test +>MyClass : typeof MyClass +>func : MyFunc + diff --git a/tests/baselines/reference/constructorArgs.types b/tests/baselines/reference/constructorArgs.types new file mode 100644 index 00000000000..14971ac935f --- /dev/null +++ b/tests/baselines/reference/constructorArgs.types @@ -0,0 +1,32 @@ +=== 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 +>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..b9fccd0efea --- /dev/null +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types @@ -0,0 +1,62 @@ +=== 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 +>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 +>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..fc5b97723b4 --- /dev/null +++ b/tests/baselines/reference/constructorOverloads2.types @@ -0,0 +1,73 @@ +=== 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 +>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..9ea4c5c2139 --- /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 : x + +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..2ae7600faa5 --- /dev/null +++ b/tests/baselines/reference/contextualTypeAppliedToVarArgs.types @@ -0,0 +1,52 @@ +=== 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..62790f234ce --- /dev/null +++ b/tests/baselines/reference/contextualTypeArrayReturnType.types @@ -0,0 +1,57 @@ +=== 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/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..839c5b5f580 --- /dev/null +++ b/tests/baselines/reference/convertKeywordsYes.types @@ -0,0 +1,936 @@ +=== 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..44cdf018fee --- /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 : a + + 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 : b +} + + 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.types b/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.types new file mode 100644 index 00000000000..fb937443e85 --- /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 : c +>SubModule : SubModule +>m : m +>m3 : m3 +>c : c + + +=== tests/cases/compiler/declFileAmbientExternalModuleWithSingleExportedModule_0.ts === + +declare module "SubModule" { + export module m { +>m : m + + export module m3 { +>m3 : m3 + + 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..7a690b83de1 --- /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 : m2 + + 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 : { (): connectExport; test1: connectModule; test2(): connectModule; } + + (): m2.connectExport; +>m2 : m2 +>connectExport : connectExport + + test1: m2.connectModule; +>test1 : connectModule +>m2 : m2 +>connectModule : connectModule + + test2(): m2.connectModule; +>test2 : () => connectModule +>m2 : m2 +>connectModule : 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..b7e14978048 --- /dev/null +++ b/tests/baselines/reference/declFileExportAssignmentOfGenericInterface.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/declFileExportAssignmentOfGenericInterface_1.ts === +import a = require('declFileExportAssignmentOfGenericInterface_0'); +>a : a + +export var x: a>; +>x : Foo> +>a : Foo +>a : Foo + +x.a; +>x.a : string +>x : Foo> +>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..8e72c07fb9f --- /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 "tests/cases/compiler/declFileExportImportChain_c" + +export var x: c.b1.a.m2.c1; +>x : c1 +>c : c +>b1 : b1 +>a : a +>m2 : m2 +>c1 : 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 m1 + +=== tests/cases/compiler/declFileExportImportChain_b1.ts === +import b = require("declFileExportImportChain_b"); +>b : typeof "tests/cases/compiler/declFileExportImportChain_b" + +export = b; +>b : typeof "tests/cases/compiler/declFileExportImportChain_b" + +=== tests/cases/compiler/declFileExportImportChain_c.ts === +export import b1 = require("declFileExportImportChain_b1"); +>b1 : typeof "tests/cases/compiler/declFileExportImportChain_b" + diff --git a/tests/baselines/reference/declFileExportImportChain2.types b/tests/baselines/reference/declFileExportImportChain2.types new file mode 100644 index 00000000000..3c0c3f89837 --- /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 "tests/cases/compiler/declFileExportImportChain2_c" + +export var x: c.b.m2.c1; +>x : c1 +>c : c +>b : b +>m2 : m2 +>c1 : 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 m1 + +export = a; +>a : typeof m1 + +=== tests/cases/compiler/declFileExportImportChain2_c.ts === +export import b = require("declFileExportImportChain2_b"); +>b : typeof m1 + 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..110865677c1 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; diff --git a/tests/baselines/reference/declFileForExportedImport.types b/tests/baselines/reference/declFileForExportedImport.types new file mode 100644 index 00000000000..95224208188 --- /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 "tests/cases/compiler/declFileForExportedImport_0" + +var y = a.x; +>y : number +>a.x : number +>a : typeof "tests/cases/compiler/declFileForExportedImport_0" +>x : number + +export import b = a; +>b : typeof "tests/cases/compiler/declFileForExportedImport_0" +>a : typeof "tests/cases/compiler/declFileForExportedImport_0" + +var z = b.x; +>z : number +>b.x : number +>b : typeof "tests/cases/compiler/declFileForExportedImport_0" +>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..b5018e1fb1d 100644 --- a/tests/baselines/reference/declFileFunctions.js +++ b/tests/baselines/reference/declFileFunctions.js @@ -60,10 +60,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 +83,13 @@ function fooWithOverloads(a) { return a; } exports.fooWithOverloads = fooWithOverloads; +/** 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 +103,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 +125,22 @@ 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; //// [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..46281813eb0 --- /dev/null +++ b/tests/baselines/reference/declFileFunctions.types @@ -0,0 +1,142 @@ +=== 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 +} + +/** 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..1e85eef3824 --- /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 : C +>A : A +>C : C +>B : B + + export function F3(x: T): C.A[] { return null; } +>F3 : (x: T) => A[] +>T : T +>x : T +>T : T +>C : C +>A : A +>C : C +>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 : C +>A : A +>C : C +>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 : A +>C : C +>A : A +>C : C +>B : B + +export var b = C.F; +>b : (x: T) => A +>C.F : (x: T) => A +>C : typeof C +>F : (x: T) => A + +export var c = C.F2; +>c : (x: T) => A +>C.F2 : (x: T) => A +>C : typeof C +>F2 : (x: T) => A + +export var d = C.F3; +>d : (x: T) => A[] +>C.F3 : (x: T) => A[] +>C : typeof C +>F3 : (x: T) => A[] + +export var e = C.F4; +>e : >(x: T) => A[] +>C.F4 : >(x: T) => A[] +>C : typeof C +>F4 : >(x: T) => A[] + +export var x = (new C.D>(new C.A())).val; +>x : A +>(new C.D>(new C.A())).val : A +>(new C.D>(new C.A())) : D> +>new C.D>(new C.A()) : D> +>C.D : typeof D +>C : typeof C +>D : typeof D +>C : C +>A : A +>C : C +>B : B +>new C.A() : A +>C.A : typeof A +>C : typeof C +>A : typeof A +>C : C +>B : B +>val : A + +export function f>() { } +>f : >() => void +>T : T +>C : C +>A : A +>C : C +>B : B + +export var g = C.F5>(); +>g : A +>C.F5>() : A +>C.F5 : () => T +>C : typeof C +>F5 : () => T +>C : C +>A : A +>C : C +>B : B + +export class h extends C.A{ } +>h : h +>C : C +>A : A +>C : C +>B : B + +export interface i extends C.A { } +>i : i +>C : C +>A : A +>C : C +>B : 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..bc68a41dc1b --- /dev/null +++ b/tests/baselines/reference/declFileGenericType2.types @@ -0,0 +1,140 @@ +=== 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 : templa +>mvc : mvc +>IModel : IModel + } +} +declare module templa.mvc { +>templa : typeof templa +>mvc : typeof mvc + + class AbstractController implements mvc.IController { +>AbstractController : AbstractController +>ModelType : ModelType +>templa : templa +>mvc : mvc +>IModel : IModel +>mvc : mvc +>IController : IController +>ModelType : ModelType + } +} +declare module templa.mvc.composite { +>templa : typeof templa +>mvc : typeof mvc +>composite : composite + + interface ICompositeControllerModel extends mvc.IModel { +>ICompositeControllerModel : ICompositeControllerModel +>mvc : mvc +>IModel : IModel + + getControllers(): mvc.IController[]; +>getControllers : () => IController[] +>mvc : mvc +>IController : IController +>mvc : mvc +>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 : templa +>mvc : mvc +>IModel : IModel +>templa : templa +>mvc : mvc +>IController : 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 : templa +>mvc : mvc +>IModel : IModel +>templa : templa +>mvc : mvc +>AbstractController : AbstractController +>ModelType : ModelType +>IElementController : IElementController +>ModelType : ModelType + + constructor() { + super(); +>super() : void + } + } +} +// 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 : templa +>mvc : mvc +>composite : composite +>ICompositeControllerModel : ICompositeControllerModel +>templa : templa +>dom : dom +>mvc : mvc +>AbstractElementController : AbstractElementController +>ModelType : ModelType + + public _controllers: templa.mvc.IController[]; +>_controllers : IController[] +>templa : templa +>mvc : mvc +>IController : IController +>templa : templa +>mvc : mvc +>IModel : IModel + + constructor() { + super(); +>super() : void + + this._controllers = []; +>this._controllers = [] : IController[] +>this._controllers : IController[] +>this : AbstractCompositeElementController +>_controllers : IController[] +>[] : IController[] + } + } +} + diff --git a/tests/baselines/reference/declFileImportChainInExportAssignment.types b/tests/baselines/reference/declFileImportChainInExportAssignment.types new file mode 100644 index 00000000000..9f440c231ee --- /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 c + + export class c { +>c : c + } + } +} +import a = m.c; +>a : typeof c +>m : typeof m +>c : typeof c + +import b = a; +>b : typeof c +>a : typeof c + +export = b; +>b : typeof c + 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..328760ed096 --- /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 : { (): connectExport; test1: connectModule; test2(): connectModule; } + +export var a = a1; +>a : { (): connectExport; test1: connectModule; test2(): connectModule; } +>a1 : { (): connectExport; test1: connectModule; test2(): connectModule; } + +a.test1(null, null, null); +>a.test1(null, null, null) : void +>a.test1 : connectModule +>a : { (): connectExport; test1: connectModule; test2(): connectModule; } +>test1 : 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 : { (): connectExport; test1: connectModule; test2(): connectModule; } + + (): m2.connectExport; +>m2 : m2 +>connectExport : connectExport + + test1: m2.connectModule; +>test1 : connectModule +>m2 : m2 +>connectModule : connectModule + + test2(): m2.connectModule; +>test2 : () => connectModule +>m2 : m2 +>connectModule : connectModule + +}; +export = m2; +>m2 : { (): connectExport; test1: connectModule; test2(): connectModule; } + diff --git a/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types b/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types new file mode 100644 index 00000000000..f7cc171ed94 --- /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 'mod1' + + export var p: List; +>p : List +>List : List +>x : x +>Foo : 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..379d70be53d --- /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 c +>m : typeof m +>c : c + + export var d = new x(); // emit the type as m.c +>d : c +>new x() : c +>x : typeof c +} +module m2 { +>m2 : typeof m2 + + export import x = m.c; +>x : typeof c +>m : typeof m +>c : c + + export var d = new x(); // emit the type as x +>d : c +>new x() : c +>x : typeof c +} 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..f13397b1806 --- /dev/null +++ b/tests/baselines/reference/declFileModuleAssignmentInObjectLiteralProperty.types @@ -0,0 +1,31 @@ +=== 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 c; }; } +>{ + m1: { m: m1 }, + m2: { c: m1.c }, +} : { m1: { m: typeof m1; }; m2: { c: typeof c; }; } + + m1: { m: m1 }, +>m1 : { m: typeof m1; } +>{ m: m1 } : { m: typeof m1; } +>m : typeof m1 +>m1 : m1 + + m2: { c: m1.c }, +>m2 : { c: typeof c; } +>{ c: m1.c } : { c: typeof c; } +>c : typeof c +>m1.c : typeof c +>m1 : typeof m1 +>c : typeof c + +}; diff --git a/tests/baselines/reference/declFileModuleContinuation.types b/tests/baselines/reference/declFileModuleContinuation.types new file mode 100644 index 00000000000..06eb82a1933 --- /dev/null +++ b/tests/baselines/reference/declFileModuleContinuation.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/declFileModuleContinuation.ts === +module A.C { +>A : typeof A +>C : C + + 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 : A +>C : C +>Z : 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.types b/tests/baselines/reference/declFileTypeofFunction.types new file mode 100644 index 00000000000..a157f80074c --- /dev/null +++ b/tests/baselines/reference/declFileTypeofFunction.types @@ -0,0 +1,88 @@ +=== 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..f029dc22048 --- /dev/null +++ b/tests/baselines/reference/declFileTypeofInAnonymousType.types @@ -0,0 +1,91 @@ +=== 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: c; } +>c : c +>m1 : m1 +>c : c + +var b = { +>b : { c: typeof c; m1: typeof m1; } +>{ + c: m1.c, + m1: m1 +} : { c: typeof c; m1: typeof m1; } + + c: m1.c, +>c : typeof c +>m1.c : typeof c +>m1 : typeof m1 +>c : typeof c + + m1: m1 +>m1 : typeof m1 +>m1 : m1 + +}; +var c = { m1: m1 }; +>c : { m1: typeof m1; } +>{ m1: m1 } : { m1: typeof m1; } +>m1 : typeof m1 +>m1 : m1 + +var d = { +>d : { m: { mod: typeof m1; }; mc: { cl: typeof c; }; me: { en: typeof e; }; mh: e; } +>{ + m: { mod: m1 }, + mc: { cl: m1.c }, + me: { en: m1.e }, + mh: m1.e.holiday +} : { m: { mod: typeof m1; }; mc: { cl: typeof c; }; me: { en: typeof e; }; mh: e; } + + m: { mod: m1 }, +>m : { mod: typeof m1; } +>{ mod: m1 } : { mod: typeof m1; } +>mod : typeof m1 +>m1 : m1 + + mc: { cl: m1.c }, +>mc : { cl: typeof c; } +>{ cl: m1.c } : { cl: typeof c; } +>cl : typeof c +>m1.c : typeof c +>m1 : typeof m1 +>c : typeof c + + me: { en: m1.e }, +>me : { en: typeof e; } +>{ en: m1.e } : { en: typeof e; } +>en : typeof e +>m1.e : typeof e +>m1 : typeof m1 +>e : typeof e + + mh: m1.e.holiday +>mh : e +>m1.e.holiday : e +>m1.e : typeof e +>m1 : typeof m1 +>e : typeof e +>holiday : 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..4da4b703f5f --- /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 : A +>B : B +>Base : Base +>W : 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 : X +>Y : Y +>base : base +>W : 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..3f0c7d37e58 --- /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 : C + + 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 : A + } + 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 : X +>A : A +>C : C +>Z : Z + } +} diff --git a/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause2.types b/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause2.types new file mode 100644 index 00000000000..8041383332c --- /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 : C + + 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 : A +>C : C +>Z : Z + } +} + +module X.A.B.C { +>X : typeof X +>A : typeof A +>B : typeof B +>C : typeof C + + module A { +>A : A + } +} diff --git a/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause3.types b/tests/baselines/reference/declFileWithInternalModuleNameConflictsInExtendsClause3.types new file mode 100644 index 00000000000..023f4d81465 --- /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 : C + + 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 : X +>A : A +>C : C +>Z : Z + } +} + +module X.A.B.C { +>X : typeof X +>A : typeof A +>B : typeof B +>C : typeof C + + export module A { +>A : A + } +} 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..2b6a8d21827 --- /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 f + +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 f +>im : typeof f +} + +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 C +>M.b : typeof C +>M : typeof M +>b : typeof C + + export var c = M.c; // ok +>c : typeof N +>M.c : typeof N +>M : typeof M +>c : typeof N + + export var g = M.c.g; // ok +>g : () => void +>M.c.g : () => void +>M.c : typeof N +>M : typeof M +>c : typeof N +>g : () => void + + export var d = M.d; // emitted incorrectly as typeof im +>d : typeof f +>M.d : typeof f +>M : typeof M +>d : typeof f +} + +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 : M +>b : C + + export interface I extends M.c.I { } // ok +>I : I +>M : M +>c : c +>I : I + + export module c { +>c : c + + export interface I extends M.c.I { } // ok +>I : I +>M : M +>c : c +>I : 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..d1422468dd3 --- /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 C +>X.Y.base.C : typeof C +>X.Y.base : typeof base +>X.Y : typeof Y +>X : typeof X +>Y : typeof Y +>base : typeof base +>C : typeof C + + export var M = X.Y.base.M; // Should be base.M +>M : typeof M +>X.Y.base.M : typeof M +>X.Y.base : typeof base +>X.Y : typeof Y +>X : typeof X +>Y : typeof Y +>base : typeof base +>M : typeof M + + export var E = X.Y.base.E; // Should be base.E +>E : typeof E +>X.Y.base.E : typeof E +>X.Y.base : typeof base +>X.Y : typeof Y +>X : typeof X +>Y : typeof Y +>base : typeof base +>E : typeof 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..f474b19288e --- /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 : D +>M : M +>D : D + + export var w = M.D.f; // error, should be typeof M.D.f +>w : () => void +>M.D.f : () => void +>M.D : typeof D +>M : typeof M +>D : typeof 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 C +>M : typeof M +>C : typeof 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 E +>M : typeof M +>E : typeof 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..bd905943f4f --- /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 : C +>I : I + +export import v = C; +>v : v +>C : C + +export module M { +>M : typeof M + + export module C { export interface I { } } +>C : C +>I : I + + export var w: v.I; // Gets emitted as C.I, which is the wrong interface +>w : I +>v : v +>I : I +} diff --git a/tests/baselines/reference/declareDottedExtend.types b/tests/baselines/reference/declareDottedExtend.types new file mode 100644 index 00000000000..31f4fe01622 --- /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 B +>A : typeof A +>B : typeof B + +class D extends ab.C{ } +>D : D +>ab : ab +>C : C + +class E extends A.B.C{ } +>E : E +>A : A +>B : B +>C : C + diff --git a/tests/baselines/reference/declareDottedModuleName.types b/tests/baselines/reference/declareDottedModuleName.types new file mode 100644 index 00000000000..2a579cfb1f8 --- /dev/null +++ b/tests/baselines/reference/declareDottedModuleName.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/declareDottedModuleName.ts === +module M { +>M : M + + module P.Q { } // This shouldnt be emitted +>P : P +>Q : Q +} + +module M { +>M : M + + export module R.S { } //This should be emitted +>R : R +>S : S +} + +module T.U { // This needs to be emitted +>T : T +>U : U +} diff --git a/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types b/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types new file mode 100644 index 00000000000..f9f1211c2a7 --- /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 : express +>ExpressServer : 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..613a4cc2071 --- /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 : { (): connectExport; test1: connectModule; test2(): connectModule; } + + (): m2.connectExport; +>m2 : m2 +>connectExport : connectExport + + test1: m2.connectModule; +>test1 : connectModule +>m2 : m2 +>connectModule : connectModule + + test2(): m2.connectModule; +>test2 : () => connectModule +>m2 : m2 +>connectModule : connectModule + +}; + +export = m2; +>m2 : { (): connectExport; test1: connectModule; test2(): connectModule; } + diff --git a/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types b/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types new file mode 100644 index 00000000000..0b173f89f16 --- /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 : { (): connectExport; test1: connectModule; test2(): connectModule; } + + (): m2.connectExport; +>m2 : m2 +>connectExport : connectExport + + test1: m2.connectModule; +>test1 : connectModule +>m2 : m2 +>connectModule : connectModule + + test2(): m2.connectModule; +>test2 : () => connectModule +>m2 : m2 +>connectModule : connectModule + +}; + +export = m2; +>m2 : { (): connectExport; test1: connectModule; test2(): 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..3fb8773aab5 --- /dev/null +++ b/tests/baselines/reference/dependencyViaImportAlias.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/B.ts === +import a = require('A'); +>a : typeof "tests/cases/compiler/A" + +import A = a.A; +>A : typeof A +>a : typeof "tests/cases/compiler/A" +>A : A + +export = 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..e9a24afdba2 --- /dev/null +++ b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types @@ -0,0 +1,60 @@ +=== 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; } +>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; } +>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..6ba99c0eca4 --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction1.types @@ -0,0 +1,30 @@ +=== 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..31f4fc73e9b --- /dev/null +++ b/tests/baselines/reference/detachedCommentAtStartOfLambdaFunction2.types @@ -0,0 +1,32 @@ +=== 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..350cb7401ec --- /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 B +>AA : typeof AA +>B : typeof B +>x : number + +var tmpError = A.B.x; +>tmpError : number +>A.B.x : number +>A.B : typeof B +>A : typeof A +>B : typeof 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 : M + +{ + + import X1 = A; +>X1 : typeof A +>A : typeof A + + import X2 = A.B; +>X2 : typeof B +>A : typeof A +>B : typeof B + + import X3 = A.B.C; +>X3 : typeof C +>A : typeof A +>B : typeof B +>C : typeof 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..5155d067c41 --- /dev/null +++ b/tests/baselines/reference/dottedSymbolResolution1.types @@ -0,0 +1,92 @@ +=== 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/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..a21f68a27ff --- /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 : M + +import a = M; +>a : any +>M : M + 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..bf7da2505de 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,6 +46,7 @@ var Microsoft; var PeopleAtWork = Microsoft.PeopleAtWork; })(Microsoft || (Microsoft = {})); //// [emitMemberAccessExpression_file1.js] +/// "use strict"; //// [emitMemberAccessExpression_file3.js] var Microsoft; 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..67c16c62620 --- /dev/null +++ b/tests/baselines/reference/enumBasics.types @@ -0,0 +1,221 @@ +=== 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..b6c8c75f334 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..e5aa4444094 --- /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 "tests/cases/compiler/enumFromExternalModule_0" + +var x = f.Mode.Open; +>x : Mode +>f.Mode.Open : Mode +>f.Mode : typeof Mode +>f : typeof "tests/cases/compiler/enumFromExternalModule_0" +>Mode : typeof Mode +>Open : 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..da0a30102c7 --- /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 : Color +>A.Color.Yellow : Color +>A.Color : typeof Color +>A : typeof A +>Color : typeof Color +>Yellow : Color + + t = A.Color.Red; +>t = A.Color.Red : Color +>t : Color +>A.Color.Red : Color +>A.Color : typeof Color +>A : typeof A +>Color : typeof Color +>Red : 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..2c74789b587 --- /dev/null +++ b/tests/baselines/reference/es6ClassSuperCodegenBug.types @@ -0,0 +1,24 @@ +=== 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 + + } else { + super('a2', 'b2'); +>super('a2', 'b2') : void + } + } +} + 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..d1d3ab1b780 --- /dev/null +++ b/tests/baselines/reference/es6ClassTest5.types @@ -0,0 +1,29 @@ +=== 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 : C2T5 + +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..149fcac9c1e --- /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 : M +>Foo : 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..5272f192b85 --- /dev/null +++ b/tests/baselines/reference/es6ClassTest8.types @@ -0,0 +1,183 @@ +=== 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..49f2ac2a781 --- /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 : A +>M : M +>A : A +>new M.A() : A +>M.A : typeof A +>M : typeof M +>A : typeof 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..a721a88a5ca --- /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 : A +>new M.A() : A +>M.A : typeof A +>M : typeof M +>A : typeof 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..97289bc09d6 --- /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 : Bar +>Foo : Foo +>Bar : Bar + +var zz: Foo; +>zz : Foo +>Foo : Foo + +zz.x; +>zz.x : Bar +>zz : Foo +>x : Bar + +=== tests/cases/compiler/exportAssignClassAndModule_0.ts === +class Foo { +>Foo : Foo + + x: Foo.Bar; +>x : Bar +>Foo : Foo +>Bar : 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..1d595bf3137 --- /dev/null +++ b/tests/baselines/reference/exportAssignValueAndType.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/exportAssignValueAndType.ts === +declare module http { +>http : http + + export interface Server { openPort: number; } +>Server : Server +>openPort : number +} + +interface server { +>server : server + + (): http.Server; +>http : http +>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/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..b6cd8feb91e --- /dev/null +++ b/tests/baselines/reference/exportAssignedTypeAsTypeAnnotation.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/exportAssignedTypeAsTypeAnnotation_1.ts === +/// +import test = require('exportAssignedTypeAsTypeAnnotation_0'); +>test : test + +var t2: test; // should not raise a 'container type' error +>t2 : x +>test : x + +=== 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..3bc8f09cc85 --- /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 Foo + +module Foo { +>Foo : typeof Foo + + export var x = foo0.x; +>x : any +>foo0.x : any +>foo0 : typeof Foo +>x : any +} +export = Foo; +>Foo : typeof Foo + +=== tests/cases/conformance/externalModules/foo_0.ts === +import foo1 = require('./foo_1'); +>foo1 : typeof Foo + +module Foo { +>Foo : typeof Foo + + export var x = foo1.x; +>x : any +>foo1.x : any +>foo1 : typeof Foo +>x : any +} +export = Foo; +>Foo : typeof Foo + +=== tests/cases/conformance/externalModules/foo_1.ts === +import foo2 = require("./foo_2"); +>foo2 : typeof Foo + +module Foo { +>Foo : typeof Foo + + export var x = foo2.x; +>x : any +>foo2.x : any +>foo2 : typeof Foo +>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..03b16d0ef2f --- /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 C + +var d = new D(); +>d : C +>new D() : C +>D : typeof C + +var x = d.p; +>x : number +>d.p : number +>d : C +>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..6e258339277 --- /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 E + +var a = EnumE.A; +>a : E +>EnumE.A : E +>EnumE : typeof E +>A : E + +var b = EnumE.B; +>b : E +>EnumE.B : E +>EnumE : typeof E +>B : E + +var c = EnumE.C; +>c : E +>EnumE.C : E +>EnumE : typeof E +>C : E + +=== 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..249c6d6bda0 --- /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..429a64c8029 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentInterface.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/exportAssignmentInterface_B.ts === +import I1 = require("exportAssignmentInterface_A"); +>I1 : I1 + +var i: I1; +>i : A +>I1 : A + +var n: number = i.p1; +>n : number +>i.p1 : number +>i : A +>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..c7231cef453 --- /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 M + +var n: number = modM.x; +>n : number +>modM.x : any +>modM : typeof M +>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..53d80ec0434 --- /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 : foo + +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..42dfe518d33 --- /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 Test +>foo : typeof Foo +>Test : typeof 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..86011e614f7 --- /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 T + +class M extends q { } +>M : M +>q : T + +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..7e016c7196e --- /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..b248e35d4a3 --- /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..d7749845000 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentWithImportStatementPrivacyError.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/exportAssignmentWithImportStatementPrivacyError.ts === +module m2 { +>m2 : m2 + + 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 : { (): connectExport; test1: connectModule; test2(): connectModule; } + + (): m2.connectExport; +>m2 : m2 +>connectExport : connectExport + + test1: m2.connectModule; +>test1 : connectModule +>m2 : m2 +>connectModule : connectModule + + test2(): m2.connectModule; +>test2 : () => connectModule +>m2 : m2 +>connectModule : 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..9da65466c63 --- /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 + + 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..3fa93127cc8 --- /dev/null +++ b/tests/baselines/reference/exportImport.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/consumer.ts === +import e = require('./exporter'); +>e : typeof "tests/cases/compiler/exporter" + +export function w(): e.w { // Should be OK +>w : () => Widget1 +>e : e +>w : Widget1 + + return new e.w(); +>new e.w() : Widget1 +>e.w : typeof Widget1 +>e : typeof "tests/cases/compiler/exporter" +>w : typeof Widget1 +} +=== 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 Widget1 + 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..e65b0e8fc8e --- /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 : B + + 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) : Point +>C.a.Point : typeof Point +>C.a : typeof A +>C : typeof C +>a : typeof A +>Point : typeof Point + +var c: { name: string }; +>c : { name: string; } +>name : string + +var c: C.a.B.Id; +>c : { name: string; } +>C : C +>a : a +>B : B +>Id : 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 Y +>Z : typeof Z +>y : typeof 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) : Point +>Z.y.Point : typeof Point +>Z.y : typeof Y +>Z : typeof Z +>y : typeof Y +>Point : typeof 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 L +>K : typeof K +>L : L +} + +var o: { name: string }; +>o : { name: string; } +>name : string + +var o = new M.D('Hello'); +>o : { name: string; } +>new M.D('Hello') : L +>M.D : typeof L +>M : typeof M +>D : typeof 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 : M +>D : D +>Point : Point + diff --git a/tests/baselines/reference/exportImportAndClodule.types b/tests/baselines/reference/exportImportAndClodule.types new file mode 100644 index 00000000000..13734561233 --- /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 L +>K : typeof K +>L : L +} +var o: { name: string }; +>o : { name: string; } +>name : string + +var o = new M.D('Hello'); +>o : { name: string; } +>new M.D('Hello') : L +>M.D : typeof L +>M : typeof M +>D : typeof 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 : M +>D : D +>Point : 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..02b17bd4101 --- /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 "tests/cases/compiler/exportImportMultipleFiles_library" + +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 "tests/cases/compiler/exportImportMultipleFiles_math" +>lib : typeof "tests/cases/compiler/exportImportMultipleFiles_library" +>math : typeof "tests/cases/compiler/exportImportMultipleFiles_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 "tests/cases/compiler/exportImportMultipleFiles_math" + +math.add(3, 4); // OK +>math.add(3, 4) : any +>math.add : (a: any, b: any) => any +>math : typeof "tests/cases/compiler/exportImportMultipleFiles_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..e89b34a2bbf --- /dev/null +++ b/tests/baselines/reference/exportImportNonInstantiatedModule.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/exportImportNonInstantiatedModule.ts === +module A { +>A : A + + export interface I { x: number } +>I : I +>x : number +} + +module B { +>B : typeof B + + export import A1 = A +>A1 : A1 +>A : A + +} + +var x: B.A1.I = { x: 1 }; +>x : I +>B : B +>A1 : A1 +>I : 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..2138bce4831 --- /dev/null +++ b/tests/baselines/reference/exportImportNonInstantiatedModule2.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/consumer.ts === +import e = require('./exporter'); +>e : typeof "tests/cases/compiler/exporter" + +export function w(): e.w { // Should be OK +>w : () => Widget1 +>e : e +>w : Widget1 + + 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 : w + 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..d00c6e632e3 --- /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 : M +>B : 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..20a683c5968 --- /dev/null +++ b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types @@ -0,0 +1,83 @@ +=== tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_main.ts === +import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); +>Backbone : typeof "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_backbone" + +import moduleA = require("extendingClassFromAliasAndUsageInIndexer_moduleA"); +>moduleA : typeof "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_moduleA" + +import moduleB = require("extendingClassFromAliasAndUsageInIndexer_moduleB"); +>moduleB : typeof "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_moduleB" + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Model +>Backbone : typeof "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_backbone" +>Model : typeof Model +} +var moduleATyped: IHasVisualizationModel = moduleA; +>moduleATyped : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>moduleA : typeof "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_moduleA" + +var moduleMap: { [key: string]: IHasVisualizationModel } = { +>moduleMap : { [x: string]: IHasVisualizationModel; } +>key : string +>IHasVisualizationModel : IHasVisualizationModel +>{ + "moduleA": moduleA, + "moduleB": moduleB +} : { [x: string]: IHasVisualizationModel; "moduleA": typeof "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_moduleA"; "moduleB": typeof "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_moduleB"; } + + "moduleA": moduleA, +>moduleA : moduleA + + "moduleB": moduleB +>moduleB : moduleB + +}; +var moduleName: string; +>moduleName : string + +var visModel = new moduleMap[moduleName].VisualizationModel(); +>visModel : Model +>new moduleMap[moduleName].VisualizationModel() : Model +>moduleMap[moduleName].VisualizationModel : typeof Model +>moduleMap[moduleName] : IHasVisualizationModel +>moduleMap : { [x: string]: IHasVisualizationModel; } +>moduleName : string +>VisualizationModel : typeof 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 "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : Model + + // interesting stuff here +} + +=== tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_moduleB.ts === +import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); +>Backbone : typeof "tests/cases/compiler/extendingClassFromAliasAndUsageInIndexer_backbone" + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : Backbone +>Model : 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..ef659a37180 --- /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 : EM +>Position : Position + } +} + +var x:EM.Position; +>x : Position +>EM : EM +>Position : Position + +var ec:EM.EC = new EM.EC(); +>ec : EC +>EM : EM +>EC : EC +>new EM.EC() : EC +>EM.EC : typeof EC +>EM : typeof EM +>EC : typeof EC + +x = ec.getPosition(); +>x = ec.getPosition() : Position +>x : Position +>ec.getPosition() : Position +>ec.getPosition : () => Position +>ec : EC +>getPosition : () => 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..da2973e5965 --- /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 "tests/cases/compiler/externalModuleAssignToVar_core_require" + +var y1: { C: new() => ext.C; } = ext; +>y1 : { C: new () => C; } +>C : new () => C +>ext : ext +>C : C +>ext : typeof "tests/cases/compiler/externalModuleAssignToVar_core_require" + +y1 = ext; // ok +>y1 = ext : typeof "tests/cases/compiler/externalModuleAssignToVar_core_require" +>y1 : { C: new () => C; } +>ext : typeof "tests/cases/compiler/externalModuleAssignToVar_core_require" + +import ext2 = require('externalModuleAssignToVar_core_require2'); +>ext2 : typeof C + +var y2: new() => ext2 = ext2; +>y2 : new () => C +>ext2 : C +>ext2 : typeof C + +y2 = ext2; // ok +>y2 = ext2 : typeof C +>y2 : new () => C +>ext2 : typeof C + +import ext3 = require('externalModuleAssignToVar_ext'); +>ext3 : typeof D + +var y3: new () => ext3 = ext3; +>y3 : new () => D +>ext3 : D +>ext3 : typeof D + +y3 = ext3; // ok +>y3 = ext3 : typeof D +>y3 : new () => D +>ext3 : typeof D + +=== 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..d0e60ad36ed --- /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 "tests/cases/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier_0" + +file1.foo(); +>file1.foo() : void +>file1.foo : () => void +>file1 : typeof "tests/cases/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier_0" +>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..f56fb58e7cd --- /dev/null +++ b/tests/baselines/reference/externalModuleResolution.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/consumer.ts === +import x = require('./foo'); +>x : typeof M2 + +x.Y // .ts should be picked +>x.Y : number +>x : typeof M2 +>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..d44de272fae --- /dev/null +++ b/tests/baselines/reference/externalModuleResolution2.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/consumer.ts === +import x = require('./foo'); +>x : typeof M2 + +x.X // .ts should be picked +>x.X : number +>x : typeof M2 +>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..19d0b2d61b0 --- /dev/null +++ b/tests/baselines/reference/fatArrowSelf.types @@ -0,0 +1,64 @@ +=== 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 : EventEmitter +>Events : Events +>EventEmitter : EventEmitter + + private register() { +>register : () => void + + this.emitter.addListener('change', (e) => { +>this.emitter.addListener('change', (e) => { + this.changed(); + }) : void +>this.emitter.addListener : (type: string, listener: ListenerCallback) => void +>this.emitter : EventEmitter +>this : EventEmitterConsummer +>emitter : EventEmitter +>addListener : (type: string, listener: 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..5863436ef4e --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctions.types @@ -0,0 +1,246 @@ +=== 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..f92f2ae2cb1 --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsInFunctions.types @@ -0,0 +1,61 @@ +=== 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..d8c9d444168 --- /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 : A +>M : M +>A : A +>new M.A() : A +>M.A : typeof A +>M : typeof M +>A : typeof 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..52f73f2a06c --- /dev/null +++ b/tests/baselines/reference/funcdecl.types @@ -0,0 +1,171 @@ +=== 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..2485185bb49 --- /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 : () => c1 +>m1 : m1 +>c1 : c1 +>new m1.c1() : c1 +>m1.c1 : typeof c1 +>m1 : typeof m1 +>c1 : typeof c1 + +var x = foo(); +>x : c1 +>foo() : c1 +>foo : () => 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..b9c100e49b0 --- /dev/null +++ b/tests/baselines/reference/functionImplementations.types @@ -0,0 +1,342 @@ +=== 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..ab048380ae5 --- /dev/null +++ b/tests/baselines/reference/functionSubtypingOfVarArgs.types @@ -0,0 +1,41 @@ +=== 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 +>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..3aeec10f271 --- /dev/null +++ b/tests/baselines/reference/functionSubtypingOfVarArgs2.types @@ -0,0 +1,43 @@ +=== 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 +>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..9a7d54c4eef --- /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 : B +>C : C +} +declare function B(): B.C; // function merged with module +>B : typeof B +>B : B +>C : C + +declare module B { +>B : typeof B + + export class C { // class defined in module +>C : C + } +} +new B.C(); +>new B.C() : C +>B.C : typeof C +>B : typeof B +>C : typeof 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..a7924e89fac --- /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: Promise) => void +>T : T +>promise : Promise +>Q : Q +>Promise : 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..27d9f801dcd --- /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 : M + + interface A { +>A : A +>T : T + + bar: T; +>bar : T +>T : T + } +} + +module M2 { +>M2 : M2 + + interface A { // ok +>A : A + + foo: string; +>foo : string + } +} + +module N { +>N : N + + module M { +>M : M + + interface A { +>A : A +>T : T + + bar: T; +>bar : T +>T : T + } + } + + module M2 { +>M2 : M2 + + 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..d7128e9dac4 --- /dev/null +++ b/tests/baselines/reference/genericArgumentCallSigAssignmentCompat.types @@ -0,0 +1,67 @@ +=== tests/cases/compiler/genericArgumentCallSigAssignmentCompat.ts === +module Underscore { +>Underscore : Underscore + + 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; +>_ : Static +>Underscore : Underscore +>Static : 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?: Iterator, context?: any) => boolean +>_ : Static +>all : (list: T[], iterator?: Iterator, context?: any) => boolean +>[true, 1, null, 'yes'] : {}[] +>_.identity : (value: T) => T +>_ : 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?: Iterator, context?: any) => boolean +>_ : Static +>all : (list: T[], iterator?: Iterator, context?: any) => boolean +>[true] : boolean[] +>_.identity : (value: T) => T +>_ : 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..74b66515dc9 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..9342691aa5a 100644 --- a/tests/baselines/reference/genericCallWithGenericSignatureArguments.js +++ b/tests/baselines/reference/genericCallWithGenericSignatureArguments.js @@ -43,25 +43,28 @@ 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); } function foo2(a, b) { @@ -69,5 +72,5 @@ function foo2(a, b) { 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..76b5380a651 100644 --- a/tests/baselines/reference/genericCallWithObjectLiteralArgs.js +++ b/tests/baselines/reference/genericCallWithObjectLiteralArgs.js @@ -13,7 +13,8 @@ var r4 = foo({ bar: 1, baz: '' }); // T = Object 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 +// BUG 835724 +var r3 = foo({ bar: foo, baz: foo }); // T = any +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..5cf8f12164a --- /dev/null +++ b/tests/baselines/reference/genericCallWithObjectLiteralArgs.types @@ -0,0 +1,50 @@ +=== 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 + +// BUG 835724 +var r3 = foo({ bar: foo, baz: foo }); // T = any +>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 : foo +>baz : (x: { bar: T; baz: T; }) => { bar: T; baz: T; } +>foo : foo + +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..8375bf07dcd 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; 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..dbc1579ab4a 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,15 @@ 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 } 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..583b6163b53 --- /dev/null +++ b/tests/baselines/reference/genericClassImplementingGenericInterfaceFromAnotherModule.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/genericClassImplementingGenericInterfaceFromAnotherModule.ts === +module foo { +>foo : foo + + export interface IFoo { } +>IFoo : IFoo +>T : T +} +module bar { +>bar : typeof bar + + export class Foo implements foo.IFoo { } +>Foo : Foo +>T : T +>foo : foo +>IFoo : 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..1f5f8cd4088 --- /dev/null +++ b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types @@ -0,0 +1,254 @@ +=== 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 : Portal +>Controls : Controls +>Validators : Validators +>Validator : Validator +>TValue : TValue + + constructor(message?: string) { +>message : string + + super(message); +>super(message) : void +>message : string + } + } + +} + +interface Contract { +>Contract : Contract +>TValue : TValue + + validators: KnockoutObservableArray>; +>validators : KnockoutObservableArray> +>KnockoutObservableArray : KnockoutObservableArray +>PortalFx : PortalFx +>ViewModels : ViewModels +>Controls : Controls +>Validators : Validators +>Validator : 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 : PortalFx +>ViewModels : ViewModels +>Controls : Controls +>Validators : Validators +>Validator : Validator +>TValue : TValue +>ko.observableArray>() : KnockoutObservableArray> +>ko.observableArray : KnockoutObservableArrayStatic +>ko : typeof ko +>observableArray : KnockoutObservableArrayStatic +>PortalFx : PortalFx +>ViewModels : ViewModels +>Controls : Controls +>Validators : Validators +>Validator : 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..65262decdb6 --- /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 : B +>new Foo.B() : B +>Foo.B : typeof B +>Foo : typeof Foo +>B : typeof B +>Foo : Foo +>A : 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..b4646fde0a7 --- /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 : B +>A : A +>B : B + +b.foo(); +>b.foo() : void +>b.foo : () => void +>b : 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..920d66fc175 --- /dev/null +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types @@ -0,0 +1,65 @@ +=== 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 : EndGate +>ICloneable : 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 +>from : number + } + } +} diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types new file mode 100644 index 00000000000..94dd467ba80 --- /dev/null +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types @@ -0,0 +1,65 @@ +=== 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 : EndGate +>ICloneable : 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 +>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..0bd8c533759 --- /dev/null +++ b/tests/baselines/reference/genericInference2.types @@ -0,0 +1,102 @@ +=== 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: Observable; age: Observable; } +>{ + name: ko.observable("Bob"), + age: ko.observable(37) + } : { name: Observable; age: Observable; } + + name: ko.observable("Bob"), +>name : Observable +>ko.observable("Bob") : Observable +>ko.observable : (value: T) => Observable +>ko : typeof ko +>observable : (value: T) => Observable + + age: ko.observable(37) +>age : Observable +>ko.observable(37) : Observable +>ko.observable : (value: T) => Observable +>ko : typeof ko +>observable : (value: T) => Observable + + }; + var x_v = o.name().length; // should be 'number' +>x_v : number +>o.name().length : number +>o.name() : string +>o.name : Observable +>o : { name: Observable; age: Observable; } +>name : Observable +>length : number + + var age_v = o.age(); // should be 'number' +>age_v : number +>o.age() : number +>o.age : Observable +>o : { name: Observable; age: Observable; } +>age : Observable + + var name_v = o.name("Robert"); // should be 'any' +>name_v : any +>o.name("Robert") : any +>o.name : Observable +>o : { name: Observable; age: Observable; } +>name : Observable + + var zz_v = o.name.N; // should be 'number' +>zz_v : number +>o.name.N : number +>o.name : Observable +>o : { name: Observable; age: Observable; } +>name : Observable +>N : number + + var yy_v = o.name.g; // should be 'boolean' +>yy_v : boolean +>o.name.g : boolean +>o.name : Observable +>o : { name: Observable; age: Observable; } +>name : Observable +>g : boolean + + var rr_v = o.name.r; // should be 'string' +>rr_v : string +>o.name.r : string +>o.name : Observable +>o : { name: Observable; age: Observable; } +>name : 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..c3f8a86d7eb --- /dev/null +++ b/tests/baselines/reference/genericMethodOverspecialization.types @@ -0,0 +1,93 @@ +=== 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..2241002646a --- /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..b530859140e --- /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 : M +>C : 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..4c224aed12d --- /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 : M +>C : 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..2c85dbe6846 --- /dev/null +++ b/tests/baselines/reference/genericTypeArgumentInference1.types @@ -0,0 +1,88 @@ +=== tests/cases/compiler/genericTypeArgumentInference1.ts === +module Underscore { +>Underscore : Underscore + + 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; +>_ : Static +>Underscore : Underscore +>Static : Static + +var r = _.all([true, 1, null, 'yes'], _.identity); +>r : {} +>_.all([true, 1, null, 'yes'], _.identity) : {} +>_.all : (list: T[], iterator?: Iterator, context?: any) => T +>_ : Static +>all : (list: T[], iterator?: Iterator, context?: any) => T +>[true, 1, null, 'yes'] : {}[] +>_.identity : (value: T) => T +>_ : Static +>identity : (value: T) => T + +var r2 = _.all([true], _.identity); +>r2 : boolean +>_.all([true], _.identity) : boolean +>_.all : (list: T[], iterator?: Iterator, context?: any) => T +>_ : Static +>all : (list: T[], iterator?: Iterator, context?: any) => T +>[true] : boolean[] +>_.identity : (value: T) => T +>_ : Static +>identity : (value: T) => T + +var r3 = _.all([], _.identity); +>r3 : any +>_.all([], _.identity) : any +>_.all : (list: T[], iterator?: Iterator, context?: any) => T +>_ : Static +>all : (list: T[], iterator?: Iterator, context?: any) => T +>[] : any[] +>_.identity : (value: T) => T +>_ : Static +>identity : (value: T) => T + +var r4 = _.all([true], _.identity); +>r4 : any +>_.all([true], _.identity) : any +>_.all : (list: T[], iterator?: Iterator, context?: any) => T +>_ : Static +>all : (list: T[], iterator?: Iterator, context?: any) => T +>[true] : any[] +>true : any +>_.identity : (value: T) => T +>_ : 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..9c9c4e071bc --- /dev/null +++ b/tests/baselines/reference/genericTypeParameterEquivalence2.types @@ -0,0 +1,228 @@ +=== 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..6f9ffe4217e --- /dev/null +++ b/tests/baselines/reference/genericsAndHigherOrderFunctions.types @@ -0,0 +1,131 @@ +=== 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..0094f320051 --- /dev/null +++ b/tests/baselines/reference/genericsManyTypeParameters.types @@ -0,0 +1,565 @@ +=== 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..9bbf3298ffe --- /dev/null +++ b/tests/baselines/reference/getterSetterNonAccessor.types @@ -0,0 +1,48 @@ +=== 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 : getFunc + + set: setFunc, +>set : (v: any) => void +>setFunc : setFunc + + 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..f81f1b2d249 --- /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..46663086532 --- /dev/null +++ b/tests/baselines/reference/ifDoWhileStatements.types @@ -0,0 +1,381 @@ +=== 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]/) { } +>/[a-z]/ : RegExp + +while (/[a-z]/) { } +>/[a-z]/ : RegExp + +do { }while(/[a-z]/) +>/[a-z]/ : RegExp + +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 +>/[a-z]/ : 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..ee9715ef495 --- /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 : Point +>alias : alias +>Point : Point + +var p: moduleA.Point; +>p : Point +>moduleA : moduleA +>Point : Point + +var p: { x: number; y: number; }; +>p : 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 : Point +>clolias : clodule +>Point : Point + +var p: clodule.Point; +>p : Point +>clodule : clodule +>Point : Point + +var p: { x: number; y: number; }; +>p : 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 : Point +>funlias : funlias +>Point : Point + +var p: fundule.Point; +>p : Point +>fundule : fundule +>Point : Point + +var p: { x: number; y: number; }; +>p : 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..e37d46919e9 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(); diff --git a/tests/baselines/reference/importDecl.types b/tests/baselines/reference/importDecl.types new file mode 100644 index 00000000000..e6725e87768 --- /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 "tests/cases/compiler/importDecl_require" + +export var x4 = m4.x; +>x4 : d +>m4.x : d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>x : d + +export var d4 = m4.d; +>d4 : typeof d +>m4.d : typeof d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>d : typeof d + +export var f4 = m4.foo(); +>f4 : d +>m4.foo() : d +>m4.foo : () => d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>foo : () => d + +export module m1 { +>m1 : typeof m1 + + export var x2 = m4.x; +>x2 : d +>m4.x : d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>x : d + + export var d2 = m4.d; +>d2 : typeof d +>m4.d : typeof d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>d : typeof d + + export var f2 = m4.foo(); +>f2 : d +>m4.foo() : d +>m4.foo : () => d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>foo : () => d + + var x3 = m4.x; +>x3 : d +>m4.x : d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>x : d + + var d3 = m4.d; +>d3 : typeof d +>m4.d : typeof d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>d : typeof d + + var f3 = m4.foo(); +>f3 : d +>m4.foo() : d +>m4.foo : () => d +>m4 : typeof "tests/cases/compiler/importDecl_require" +>foo : () => d +} + +//Emit global only usage +import glo_m4 = require("importDecl_require1"); +>glo_m4 : typeof "tests/cases/compiler/importDecl_require1" + +export var useGlo_m4_d4 = glo_m4.d; +>useGlo_m4_d4 : typeof d +>glo_m4.d : typeof d +>glo_m4 : typeof "tests/cases/compiler/importDecl_require1" +>d : typeof d + +export var useGlo_m4_f4 = glo_m4.foo(); +>useGlo_m4_f4 : d +>glo_m4.foo() : d +>glo_m4.foo : () => d +>glo_m4 : typeof "tests/cases/compiler/importDecl_require1" +>foo : () => d + +//Emit even when used just in function type +import fncOnly_m4 = require("importDecl_require2"); +>fncOnly_m4 : typeof "tests/cases/compiler/importDecl_require2" + +export var useFncOnly_m4_f4 = fncOnly_m4.foo(); +>useFncOnly_m4_f4 : d +>fncOnly_m4.foo() : d +>fncOnly_m4.foo : () => d +>fncOnly_m4 : typeof "tests/cases/compiler/importDecl_require2" +>foo : () => d + +// only used privately no need to emit +import private_m4 = require("importDecl_require3"); +>private_m4 : typeof "tests/cases/compiler/importDecl_require3" + +export module usePrivate_m4_m1 { +>usePrivate_m4_m1 : typeof usePrivate_m4_m1 + + var x3 = private_m4.x; +>x3 : d +>private_m4.x : d +>private_m4 : typeof "tests/cases/compiler/importDecl_require3" +>x : d + + var d3 = private_m4.d; +>d3 : typeof d +>private_m4.d : typeof d +>private_m4 : typeof "tests/cases/compiler/importDecl_require3" +>d : typeof d + + var f3 = private_m4.foo(); +>f3 : d +>private_m4.foo() : d +>private_m4.foo : () => d +>private_m4 : typeof "tests/cases/compiler/importDecl_require3" +>foo : () => d +} + +// Do not emit unused import +import m5 = require("importDecl_require4"); +>m5 : typeof "tests/cases/compiler/importDecl_require4" + +export var d = m5.foo2(); +>d : d +>m5.foo2() : d +>m5.foo2 : () => d +>m5 : typeof "tests/cases/compiler/importDecl_require4" +>foo2 : () => d + +// Do not emit multiple used import statements +import multiImport_m4 = require("importDecl_require"); // Emit used +>multiImport_m4 : typeof "tests/cases/compiler/importDecl_require" + +export var useMultiImport_m4_x4 = multiImport_m4.x; +>useMultiImport_m4_x4 : d +>multiImport_m4.x : d +>multiImport_m4 : typeof "tests/cases/compiler/importDecl_require" +>x : d + +export var useMultiImport_m4_d4 = multiImport_m4.d; +>useMultiImport_m4_d4 : typeof d +>multiImport_m4.d : typeof d +>multiImport_m4 : typeof "tests/cases/compiler/importDecl_require" +>d : typeof d + +export var useMultiImport_m4_f4 = multiImport_m4.foo(); +>useMultiImport_m4_f4 : d +>multiImport_m4.foo() : d +>multiImport_m4.foo : () => d +>multiImport_m4 : typeof "tests/cases/compiler/importDecl_require" +>foo : () => 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 "tests/cases/compiler/importDecl_require" + +export function foo2(): m4.d { return null; } +>foo2 : () => d +>m4 : m4 +>d : d + diff --git a/tests/baselines/reference/importDeclWithExportModifierInAmbientContext.types b/tests/baselines/reference/importDeclWithExportModifierInAmbientContext.types new file mode 100644 index 00000000000..0b53cbdd043 --- /dev/null +++ b/tests/baselines/reference/importDeclWithExportModifierInAmbientContext.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/importDeclWithExportModifierInAmbientContext.ts === +declare module "m" { + module x { +>x : x + + interface c { +>c : c + } + } + export import a = x.c; +>a : a +>x : x +>c : c + + var b: a; +>b : c +>a : c +} + diff --git a/tests/baselines/reference/importDeclarationUsedAsTypeQuery.types b/tests/baselines/reference/importDeclarationUsedAsTypeQuery.types new file mode 100644 index 00000000000..6fc80e99913 --- /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 "tests/cases/compiler/importDeclarationUsedAsTypeQuery_require" + +export var x: typeof a; +>x : typeof "tests/cases/compiler/importDeclarationUsedAsTypeQuery_require" +>a : typeof "tests/cases/compiler/importDeclarationUsedAsTypeQuery_require" + +=== 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..cbf9fa29a52 --- /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 "tests/cases/conformance/externalModules/foo_1" + +var x = foo; // Cause a runtime dependency +>x : typeof "tests/cases/conformance/externalModules/foo_1" +>foo : typeof "tests/cases/conformance/externalModules/foo_1" + +=== 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 "tests/cases/conformance/externalModules/foo_0" + +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..8117b9290b7 --- /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 : B + + 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 : Point +>a : a +>Point : Point + + var p = { x: 0, y: 0 }; +>p : 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..a7d2f678a30 --- /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 A +>A : typeof A + + import Z = A.X; // Alias for both type and member A.X +>Z : X +>A : typeof A +>X : X + + var v: Z = Z; +>v : X +>Z : X +>Z : X +} diff --git a/tests/baselines/reference/importShadowsGlobalName.types b/tests/baselines/reference/importShadowsGlobalName.types new file mode 100644 index 00000000000..fd333fc412b --- /dev/null +++ b/tests/baselines/reference/importShadowsGlobalName.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/Bar.ts === +import Error = require('Foo'); +>Error : typeof Foo + +class Bar extends Error {} +>Bar : Bar +>Error : Foo + +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..c7fe4382d30 --- /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 : B + + 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 : Point +>a : a +>Point : Point + + var p = {x:0, y:0 }; +>p : 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 : Point +>new a.Point(1, 1) : Point +>a.Point : typeof Point +>a : typeof A +>Point : typeof Point +} + +module E { +>E : typeof E + + import a = A; +>a : typeof A +>A : typeof A + + export function xDist(x: a.Point) { +>xDist : (x: Point) => number +>x : Point +>a : a +>Point : 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 : Point +>a : typeof A +>Origin : Point +>x : number +>x.x : number +>x : 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..a6937acb734 --- /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 "tests/cases/compiler/importUsedInExtendsList1_require" + +class Sub extends foo.Super { } +>Sub : Sub +>foo : foo +>Super : 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..e1dffabba5a --- /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 App + +import Services = appJs.Services; +>Services : typeof Services +>appJs : typeof App +>Services : typeof Services + +import UserServices = Services.UserServices; +>UserServices : typeof UserServices +>Services : typeof Services +>UserServices : UserServices + +var x = new UserServices().getUserName(); +>x : string +>new UserServices().getUserName() : string +>new UserServices().getUserName : () => string +>new UserServices() : UserServices +>UserServices : typeof 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..6f9628f277a --- /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 "tests/cases/compiler/file1" + +import Services = appJs.App.Services; +>Services : typeof Services +>appJs : typeof "tests/cases/compiler/file1" +>App : typeof 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() : UserServices +>Services.UserServices : typeof UserServices +>Services : typeof Services +>UserServices : typeof 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..1f7c10e0768 --- /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 : ITest + +var testData: ITest[]; +>testData : Name[] +>ITest : Name + +var p = testData[0].name; +>p : string +>testData[0].name : string +>testData[0] : Name +>testData : Name[] +>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..3a51c2216ce --- /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 "tests/cases/compiler/host" + +var hostVar = host; +>hostVar : typeof "tests/cases/compiler/host" +>host : typeof "tests/cases/compiler/host" + +var v = new hostVar.Host(); +>v : Host +>new hostVar.Host() : Host +>hostVar.Host : typeof Host +>hostVar : typeof "tests/cases/compiler/host" +>Host : typeof 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..907626d345b --- /dev/null +++ b/tests/baselines/reference/importedModuleClassNameClash.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/importedModuleClassNameClash.ts === +import foo = m1; +>foo : typeof foo +>m1 : m1 + +export module m1 { } +>m1 : m1 + +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..9831fe89e5b --- /dev/null +++ b/tests/baselines/reference/inferSecondaryParameter.types @@ -0,0 +1,37 @@ +=== 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..7628e9c4a9d --- /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 : identity + 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..ac3d69b9b7d --- /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 : identity + +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..0b1e89012af --- /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 : M +>C1 : C1 + + export class D2 extends M.C2 { } +>D2 : D2 +>T : T +>M : M +>C2 : C2 +>T : T +} + +var c = new M.C2(); // no error +>c : C2 +>new M.C2() : C2 +>M.C2 : typeof C2 +>M : typeof M +>C2 : typeof C2 + +var n = new N.D1(); // no error +>n : D1 +>new N.D1() : D1 +>N.D1 : typeof D1 +>N : typeof N +>D1 : typeof D1 + +var n2 = new N.D2(); // error +>n2 : D2 +>new N.D2() : D2 +>N.D2 : typeof D2 +>N : typeof N +>D2 : typeof D2 + +var n3 = new N.D2(); // no error, D2 +>n3 : D2<{}> +>new N.D2() : D2<{}> +>N.D2 : typeof D2 +>N : typeof N +>D2 : typeof 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..458f0019831 --- /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 : UsefulClass +>provider : provider +>UsefulClass : UsefulClass + + function use():provider.UsefulClass { +>use : () => UsefulClass +>provider : provider +>UsefulClass : UsefulClass + + var p2:provider.UsefulClass= new provider.UsefulClass(); +>p2 : UsefulClass +>provider : provider +>UsefulClass : UsefulClass +>new provider.UsefulClass() : UsefulClass +>provider.UsefulClass : typeof UsefulClass +>provider : typeof _provider +>UsefulClass : typeof UsefulClass + + return p2; +>p2 : UsefulClass + } +} + + diff --git a/tests/baselines/reference/innerBoundLambdaEmit.types b/tests/baselines/reference/innerBoundLambdaEmit.types new file mode 100644 index 00000000000..f800aeb785d --- /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 : () => Foo +>M : M +>Foo : 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..35594ac2d7b --- /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 "tests/cases/compiler/instanceOfInExternalModules_require" + +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 Foo +>Bar : typeof "tests/cases/compiler/instanceOfInExternalModules_require" +>Foo : typeof 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..5021cce8afb --- /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 : M +>Point : 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 Point +>M2 : typeof M2 +>Point : typeof Point + +var a2 = m2.Point; +>a2 : typeof Point +>m2.Point : typeof Point +>m2 : typeof M2 +>Point : typeof Point + +var a2 = M2.Point; +>a2 : typeof Point +>M2.Point : typeof Point +>M2 : typeof M2 +>Point : typeof Point + +var o: M2.Point = a2.Origin(); +>o : Point +>M2 : M2 +>Point : Point +>a2.Origin() : Point +>a2.Origin : () => Point +>a2 : typeof Point +>Origin : () => 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 : M2 +>Point : Point + +var p2 = new m2.Point(); +>p2 : { x: number; y: number; } +>new m2.Point() : Point +>m2.Point : typeof Point +>m2 : typeof M2 +>Point : typeof Point + +var p2 = new M2.Point(); +>p2 : { x: number; y: number; } +>new M2.Point() : Point +>M2.Point : typeof Point +>M2 : typeof M2 +>Point : typeof 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 Color +>M3 : typeof M3 +>Color : typeof Color + +var a3 = m3.Color; +>a3 : typeof Color +>m3.Color : typeof Color +>m3 : typeof M3 +>Color : typeof Color + +var a3 = M3.Color; +>a3 : typeof Color +>M3.Color : typeof Color +>M3 : typeof M3 +>Color : typeof Color + +var blue: M3.Color = a3.Blue; +>blue : Color +>M3 : M3 +>Color : Color +>a3.Blue : Color +>a3 : typeof Color +>Blue : Color + +var p3: M3.Color; +>p3 : Color +>M3 : M3 +>Color : Color + +var p3 = M3.Color.Red; +>p3 : Color +>M3.Color.Red : Color +>M3.Color : typeof Color +>M3 : typeof M3 +>Color : typeof Color +>Red : Color + +var p3 = m3.Color.Blue; +>p3 : Color +>m3.Color.Blue : Color +>m3.Color : typeof Color +>m3 : typeof M3 +>Color : typeof Color +>Blue : 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..a6f132970cd --- /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 : B +>A : A +>B : B +>A.B.createB() : B +>A.B.createB : () => B +>A.B : typeof B +>A : typeof A +>B : typeof B +>createB : () => B + diff --git a/tests/baselines/reference/interMixingModulesInterfaces1.types b/tests/baselines/reference/interMixingModulesInterfaces1.types new file mode 100644 index 00000000000..df54cefd96f --- /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 : B +>A : A +>B : B +>A.B.createB() : B +>A.B.createB : () => B +>A.B : typeof B +>A : typeof A +>B : typeof B +>createB : () => B + diff --git a/tests/baselines/reference/interMixingModulesInterfaces2.types b/tests/baselines/reference/interMixingModulesInterfaces2.types new file mode 100644 index 00000000000..67d8e04c571 --- /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 : B +>A : A +>B : B + diff --git a/tests/baselines/reference/interMixingModulesInterfaces3.types b/tests/baselines/reference/interMixingModulesInterfaces3.types new file mode 100644 index 00000000000..9ffb4149b48 --- /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 : B +>A : A +>B : B + diff --git a/tests/baselines/reference/interMixingModulesInterfaces4.types b/tests/baselines/reference/interMixingModulesInterfaces4.types new file mode 100644 index 00000000000..9df3388a09a --- /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 B +>A : typeof A +>B : typeof B +>createB : () => number + diff --git a/tests/baselines/reference/interMixingModulesInterfaces5.types b/tests/baselines/reference/interMixingModulesInterfaces5.types new file mode 100644 index 00000000000..de08a7be442 --- /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 B +>A : typeof A +>B : typeof 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..65bd6b7ae34 --- /dev/null +++ b/tests/baselines/reference/interfaceContextualType.types @@ -0,0 +1,67 @@ +=== 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..be340c70143 --- /dev/null +++ b/tests/baselines/reference/interfaceWithPropertyOfEveryType.types @@ -0,0 +1,164 @@ +=== 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 : f1 + + m: M, +>m : typeof M +>M : 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..2a026c713ed --- /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 c +>a : typeof a +>c : c + + export var x: b = new b(); +>x : c +>b : c +>new b() : c +>b : typeof c +} diff --git a/tests/baselines/reference/internalAliasClassInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasClassInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..54f69cf2f39 --- /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 : c +>new m2.m3.c() : c +>m2.m3.c : typeof c +>m2.m3 : typeof m3 +>m2 : typeof m2 +>m3 : typeof m3 +>c : typeof 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..a9edf4684c4 --- /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 c +>x : typeof x +>c : c + +export var cProp = new xc(); +>cProp : c +>new xc() : c +>xc : 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/internalAliasClassInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..05309a8f844 --- /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 c +>x : typeof x +>c : c + +export var cProp = new xc(); +>cProp : c +>new xc() : c +>xc : 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/internalAliasEnum.types b/tests/baselines/reference/internalAliasEnum.types new file mode 100644 index 00000000000..8b4706b67f3 --- /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 weekend +>a : typeof a +>weekend : weekend + + export var bVal: b = b.Sunday; +>bVal : weekend +>b : weekend +>b.Sunday : weekend +>b : typeof weekend +>Sunday : weekend +} + diff --git a/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..e990dc2d5e9 --- /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 weekend +>a : typeof a +>weekend : weekend + + export var bVal: b = b.Sunday; +>bVal : weekend +>b : weekend +>b.Sunday : weekend +>b : typeof weekend +>Sunday : weekend +} + diff --git a/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..1182ea3d4f3 --- /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 weekend +>a : typeof a +>weekend : weekend + + export var bVal: b = b.Sunday; +>bVal : weekend +>b : weekend +>b.Sunday : weekend +>b : typeof weekend +>Sunday : weekend +} + diff --git a/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..8fd15e4e210 --- /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 weekend +>a : typeof a +>weekend : weekend + +export var bVal: b = b.Sunday; +>bVal : weekend +>b : weekend +>b.Sunday : weekend +>b : typeof weekend +>Sunday : weekend + diff --git a/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..09ee904abb6 --- /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 weekend +>a : typeof a +>weekend : weekend + +export var bVal: b = b.Sunday; +>bVal : weekend +>b : weekend +>b.Sunday : weekend +>b : typeof weekend +>Sunday : weekend + 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..44d376e913e --- /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 : c +>b : b +>c : c +>new b.c() : c +>b.c : typeof c +>b : typeof b +>c : typeof c +} diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..3dfee66924a --- /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 : c +>b : b +>c : c +>new b.c() : c +>b.c : typeof c +>b : typeof b +>c : typeof c +} diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..4e78a0d7816 --- /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 : c +>b : b +>c : c +>new b.c() : c +>b.c : typeof c +>b : typeof b +>c : typeof c +} diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..a7d7d1937cd --- /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 : c +>b : b +>c : c +>new b.c() : c +>b.c : typeof c +>b : typeof b +>c : typeof c + diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..ffd30968316 --- /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 : c +>b : b +>c : c +>new b.c() : c +>b.c : typeof c +>b : typeof b +>c : typeof c + diff --git a/tests/baselines/reference/internalAliasInterface.types b/tests/baselines/reference/internalAliasInterface.types new file mode 100644 index 00000000000..71a59027d83 --- /dev/null +++ b/tests/baselines/reference/internalAliasInterface.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/internalAliasInterface.ts === +module a { +>a : a + + export interface I { +>I : I + } +} + +module c { +>c : typeof c + + import b = a.I; +>b : b +>a : a +>I : I + + export var x: b; +>x : I +>b : I +} + diff --git a/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..253a778ea3e --- /dev/null +++ b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithExport.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithExport.ts === +export module a { +>a : a + + export interface I { +>I : I + } +} + +export module c { +>c : typeof c + + export import b = a.I; +>b : b +>a : a +>I : I + + export var x: b; +>x : I +>b : I +} + diff --git a/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..ec1e59fd946 --- /dev/null +++ b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.ts === +export module a { +>a : a + + export interface I { +>I : I + } +} + +export module c { +>c : typeof c + + import b = a.I; +>b : b +>a : a +>I : I + + export var x: b; +>x : I +>b : I +} + diff --git a/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..686eba773b1 --- /dev/null +++ b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithExport.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/internalAliasInterfaceInsideTopLevelModuleWithExport.ts === +export module a { +>a : a + + export interface I { +>I : I + } +} + +export import b = a.I; +>b : b +>a : a +>I : I + +export var x: b; +>x : I +>b : I + diff --git a/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..56197b88a1f --- /dev/null +++ b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts === +export module a { +>a : a + + export interface I { +>I : I + } +} + +import b = a.I; +>b : b +>a : a +>I : I + +export var x: b; +>x : I +>b : I + diff --git a/tests/baselines/reference/internalAliasUninitializedModule.types b/tests/baselines/reference/internalAliasUninitializedModule.types new file mode 100644 index 00000000000..2a05858edbf --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModule.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/internalAliasUninitializedModule.ts === +module a { +>a : a + + export module b { +>b : b + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +module c { +>c : typeof c + + import b = a.b; +>b : b +>a : a +>b : b + + export var x: b.I; +>x : I +>b : b +>I : I + + x.foo(); +>x.foo() : any +>x.foo : () => any +>x : I +>foo : () => any +} diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithExport.types b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithExport.types new file mode 100644 index 00000000000..4220c67e677 --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithExport.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/internalAliasUninitializedModuleInsideLocalModuleWithExport.ts === +export module a { +>a : a + + export module b { +>b : b + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +export module c { +>c : typeof c + + export import b = a.b; +>b : b +>a : a +>b : b + + export var x: b.I; +>x : I +>b : b +>I : I + + x.foo(); +>x.foo() : any +>x.foo : () => any +>x : I +>foo : () => any +} diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.types b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.types new file mode 100644 index 00000000000..c42848cdd61 --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.ts === +export module a { +>a : a + + export module b { +>b : b + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +export module c { +>c : typeof c + + import b = a.b; +>b : b +>a : a +>b : b + + export var x: b.I; +>x : I +>b : b +>I : I + + x.foo(); +>x.foo() : any +>x.foo : () => any +>x : I +>foo : () => any +} diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types new file mode 100644 index 00000000000..cd6a928595a --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts === +export module a { +>a : a + + export module b { +>b : b + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +export import b = a.b; +>b : b +>a : a +>b : b + +export var x: b.I; +>x : I +>b : b +>I : I + +x.foo(); +>x.foo() : any +>x.foo : () => any +>x : I +>foo : () => any + diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.types b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.types new file mode 100644 index 00000000000..711e933ee74 --- /dev/null +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.types @@ -0,0 +1,32 @@ +=== tests/cases/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.ts === +export module a { +>a : a + + export module b { +>b : b + + export interface I { +>I : I + + foo(); +>foo : () => any + } + } +} + +import b = a.b; +>b : b +>a : a +>b : b + +export var x: b.I; +>x : I +>b : b +>I : I + +x.foo(); +>x.foo() : any +>x.foo : () => any +>x : 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..8677bb41138 --- /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 : e +>f : f + + import g = b.c; +>g : typeof c +>b : typeof b +>c : typeof c +} + diff --git a/tests/baselines/reference/internalImportInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types b/tests/baselines/reference/internalImportInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types new file mode 100644 index 00000000000..2a1afa214a2 --- /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 : B + + import Y = A; +>Y : typeof A +>A : A +} + diff --git a/tests/baselines/reference/internalImportUnInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types b/tests/baselines/reference/internalImportUnInstantiatedModuleMergedWithClassNotReferencingInstanceNoConflict.types new file mode 100644 index 00000000000..131527c66a0 --- /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 : B + + import Y = A; +>Y : typeof A +>A : A +} + diff --git a/tests/baselines/reference/internalImportUnInstantiatedModuleNotReferencingInstanceNoConflict.types b/tests/baselines/reference/internalImportUnInstantiatedModuleNotReferencingInstanceNoConflict.types new file mode 100644 index 00000000000..01549965a13 --- /dev/null +++ b/tests/baselines/reference/internalImportUnInstantiatedModuleNotReferencingInstanceNoConflict.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/internalImportUnInstantiatedModuleNotReferencingInstanceNoConflict.ts === +module A { +>A : A + + export interface X { s: string } +>X : X +>s : string +} + +module B { +>B : typeof B + + var A = 1; +>A : number + + import Y = A; +>Y : Y +>A : A +} + 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 : Windows +>Foundation : Foundation + + 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 : Windows +>Foundation : Foundation +>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 : Windows +>Foundation : Foundation +>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 : Windows +>Foundation : Foundation +>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 : Windows +>Foundation : Foundation +>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 : IPromise +>Windows : Windows +>Foundation : Foundation +>IPromise : IPromise + +p.then(function (x) { } ); // should not error +>p.then(function (x) { } ) : IPromise +>p.then : { (success?: (value: number) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: number) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: number) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: number) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } +>p : IPromise +>then : { (success?: (value: number) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: number) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: number) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: number) => U, error?: (error: any) => U, progress?: (progress: any) => void): 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 } ) : IPromise +>p.then(function (x) { return "hello"; } ).then : { (success?: (value: string) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: string) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: string) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: string) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } +>p.then(function (x) { return "hello"; } ) : IPromise +>p.then : { (success?: (value: number) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: number) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: number) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: number) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } +>p : IPromise +>then : { (success?: (value: number) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: number) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: number) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: number) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; } +>function (x) { return "hello"; } : (x: number) => string +>x : number +>then : { (success?: (value: string) => IPromise, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: string) => IPromise, error?: (error: any) => U, progress?: (progress: any) => void): IPromise; (success?: (value: string) => U, error?: (error: any) => IPromise, progress?: (progress: any) => void): IPromise; (success?: (value: string) => U, error?: (error: any) => U, progress?: (progress: any) => void): 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..acdbd777f23 --- /dev/null +++ b/tests/baselines/reference/lambdaASIEmit.types @@ -0,0 +1,20 @@ +=== 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..b7c5d672eea --- /dev/null +++ b/tests/baselines/reference/literals1.types @@ -0,0 +1,46 @@ +=== 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 +>/q/ : RegExp + +var n = /\d+/g; +>n : RegExp +>/\d+/g : RegExp + +var o = /[3-5]+/i; +>o : RegExp +>/[3-5]+/i : 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..042d72db50b 100644 --- a/tests/baselines/reference/logicalOrOperatorWithTypeParameters.js +++ b/tests/baselines/reference/logicalOrOperatorWithTypeParameters.js @@ -32,6 +32,7 @@ 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; 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..f549b4078f9 --- /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 "tests/cases/compiler/memberAccessMustUseModuleInstances_0" + +WinJS.Promise.timeout(10); +>WinJS.Promise.timeout(10) : Promise +>WinJS.Promise.timeout : (delay: number) => Promise +>WinJS.Promise : typeof Promise +>WinJS : typeof "tests/cases/compiler/memberAccessMustUseModuleInstances_0" +>Promise : typeof Promise +>timeout : (delay: number) => 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..d2b5cca6426 --- /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 : x +>y : number +>y : y +} +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..08f06f0730c --- /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 f +>M : typeof M +>f : typeof f + +M.f.hello; +>M.f.hello : number +>M.f : typeof f +>M : typeof M +>f : typeof 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..d27056b3bdd --- /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 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..344f052eb4c --- /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 plop + + export function doom() { } +>doom : () => void + + export function M() { } +>M : () => void +} +module M.buz.plop { +>M : typeof M +>buz : typeof buz +>plop : typeof 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..29d39cd9e19 --- /dev/null +++ b/tests/baselines/reference/methodContainingLocalFunction.types @@ -0,0 +1,147 @@ +=== 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.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/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..b62125f179d --- /dev/null +++ b/tests/baselines/reference/missingTypeArguments3.types @@ -0,0 +1,172 @@ +=== tests/cases/compiler/missingTypeArguments3.ts === +declare module linq { +>linq : linq + + 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..c9448423cb9 --- /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 : M1 + + export interface Foo {} +>Foo : Foo + + interface Foo {} +>Foo : Foo +} + +module A { +>A : A + + interface X {x} +>X : X +>x : any + + export module X {} +>X : X + + 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..15954c681e7 --- /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 "tests/cases/compiler/moduleAliasAsFunctionArgument_0" + +function fn(arg: { x: number }) { +>fn : (arg: { x: number; }) => void +>arg : { x: number; } +>x : number +} + +a.x; // OK +>a.x : number +>a : typeof "tests/cases/compiler/moduleAliasAsFunctionArgument_0" +>x : number + +fn(a); // Error: property 'x' is missing from 'a' +>fn(a) : void +>fn : (arg: { x: number; }) => void +>a : typeof "tests/cases/compiler/moduleAliasAsFunctionArgument_0" + +=== 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..809aba0e634 --- /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 : IMode +>modes : modes +>IMode : 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 : IMode +>modes : modes +>IMode : IMode +>p2 : Mode +>modes : modes +>Mode : Mode + + public foo(p1:modes.IMode) { +>foo : (p1: IMode) => void +>p1 : IMode +>modes : modes +>IMode : IMode + + } + } +} + +import modesOuter = _modes; +>modesOuter : typeof _modes +>_modes : typeof _modes + +module editor2 { +>editor2 : typeof editor2 + + var i : modesOuter.IMode; +>i : IMode +>modesOuter : modesOuter +>IMode : IMode + + class Bug { +>Bug : Bug + + constructor(p1: modesOuter.IMode, p2: modesOuter.Mode) { }// no error here, since modesOuter is declared externally +>p1 : IMode +>modesOuter : modesOuter +>IMode : IMode +>p2 : Mode +>modesOuter : modesOuter +>Mode : Mode + + } + + module Foo { export class Bar{} } +>Foo : typeof Foo +>Bar : Bar + + class Bug2 { +>Bug2 : Bug2 + + constructor(p1: Foo.Bar, p2: modesOuter.Mode) { } +>p1 : Bar +>Foo : Foo +>Bar : Bar +>p2 : Mode +>modesOuter : modesOuter +>Mode : 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 A1 +>A1 : typeof A1 + + var i : A1Alias1.A1I1; +>i : A1I1 +>A1Alias1 : A1Alias1 +>A1I1 : A1I1 + + var c : A1Alias1.A1C1; +>c : A1C1 +>A1Alias1 : A1Alias1 +>A1C1 : A1C1 +} + diff --git a/tests/baselines/reference/moduleAndInterfaceSharingName.types b/tests/baselines/reference/moduleAndInterfaceSharingName.types new file mode 100644 index 00000000000..65f8d8c9c70 --- /dev/null +++ b/tests/baselines/reference/moduleAndInterfaceSharingName.types @@ -0,0 +1,24 @@ +=== tests/cases/compiler/moduleAndInterfaceSharingName.ts === +module X { +>X : X + + export module Y { +>Y : Y + + export interface Z { } +>Z : Z + } + export interface Y { } +>Y : Y +} +var z: X.Y.Z = null; +>z : Z +>X : X +>Y : Y +>Z : Z + +var z2: X.Y; +>z2 : Y +>X : X +>Y : Y + diff --git a/tests/baselines/reference/moduleAndInterfaceSharingName3.types b/tests/baselines/reference/moduleAndInterfaceSharingName3.types new file mode 100644 index 00000000000..f2a8b24e6b3 --- /dev/null +++ b/tests/baselines/reference/moduleAndInterfaceSharingName3.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/moduleAndInterfaceSharingName3.ts === +module X { +>X : X + + export module Y { +>Y : Y + + export interface Z { } +>Z : Z + } + export interface Y { } +>Y : Y +>T : T +} +var z: X.Y.Z = null; +>z : Z +>X : X +>Y : Y +>Z : Z + +var z2: X.Y; +>z2 : Y +>X : X +>Y : Y + diff --git a/tests/baselines/reference/moduleAndInterfaceSharingName4.types b/tests/baselines/reference/moduleAndInterfaceSharingName4.types new file mode 100644 index 00000000000..ef933ef7fe5 --- /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 +>D3 : D3 +>Color : Color +>Color : Color + + module Color { +>Color : Color + + 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..73097ef86ce --- /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 "tests/cases/compiler/moduleImportedForTypeArgumentPosition_0" + +class C1{ } +>C1 : C1 +>T : T + +class Test1 extends C1 { +>Test1 : Test1 +>C1 : C1 +>M2 : M2 +>M2C : 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..e60ae3ca51f --- /dev/null +++ b/tests/baselines/reference/moduleOuterQualification.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/moduleOuterQualification.ts === + +declare module outer { +>outer : outer + + interface Beta { } +>Beta : Beta + + module inner { +>inner : inner + + // .d.ts emit: should be 'extends outer.Beta' + export interface Beta extends outer.Beta { } +>Beta : Beta +>outer : outer +>Beta : 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..76d03997550 --- /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..29354592a42 --- /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 : () => I +>A : A +>I : 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..0f266892351 --- /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 OuterInnerMod +>OuterMod : typeof OuterMod +>OuterInnerMod : typeof OuterInnerMod + +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 OuterInnerMod +>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 : I +>M : M +>I : I +>null : I +>M : M +>I : I + +var c = new M.C(); +>c : C +>new M.C() : C +>M.C : typeof C +>M : typeof M +>C : typeof C + +var z = M.x; +>z : number +>M.x : number +>M : typeof M +>x : number + +var alpha = M.E.A; +>alpha : E +>M.E.A : E +>M.E : typeof E +>M : typeof M +>E : typeof E +>A : 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 : 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..1855f6eb587 --- /dev/null +++ b/tests/baselines/reference/moduleWithStatementsOfEveryKind.types @@ -0,0 +1,153 @@ +=== 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..1504fda69d3 --- /dev/null +++ b/tests/baselines/reference/multiImportExport.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/consumer.ts === +import Drawing = require('./Drawing'); +>Drawing : typeof "tests/cases/compiler/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 "tests/cases/compiler/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 : 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..02266304873 --- /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 Y + + var Y = 13; +>Y : number + + export module Z { +>Z : typeof 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 + + 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..4e994d1cd4d --- /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 "tests/cases/conformance/externalModules/test/foo_0" + +var x = foo.foo + 42; +>x : number +>foo.foo + 42 : number +>foo.foo : number +>foo : typeof "tests/cases/conformance/externalModules/test/foo_0" +>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..c20c4bc152d --- /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 "tests/cases/conformance/externalModules/foo_0" + +import foo1 = require('./test/foo_1'); +>foo1 : typeof "tests/cases/conformance/externalModules/test/test/foo_1" + +import foo2 = require('./.././test/foo_2'); +>foo2 : typeof "tests/cases/conformance/externalModules/test/foo_2" + +if(foo2.M2.x){ +>foo2.M2.x : boolean +>foo2.M2 : typeof M2 +>foo2 : typeof "tests/cases/conformance/externalModules/test/foo_2" +>M2 : typeof M2 +>x : boolean + + var x = foo0.foo + foo1.f(); +>x : number +>foo0.foo + foo1.f() : number +>foo0.foo : number +>foo0 : typeof "tests/cases/conformance/externalModules/foo_0" +>foo : number +>foo1.f() : number +>foo1.f : () => number +>foo1 : typeof "tests/cases/conformance/externalModules/test/test/foo_1" +>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..870734b0c6e --- /dev/null +++ b/tests/baselines/reference/namedFunctionExpressionAssignedToClassProperty.types @@ -0,0 +1,21 @@ +=== 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..2f36c07f7d7 --- /dev/null +++ b/tests/baselines/reference/namedFunctionExpressionCall.types @@ -0,0 +1,39 @@ +=== 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..4898b2cbc1e --- /dev/null +++ b/tests/baselines/reference/namedFunctionExpressionInModule.types @@ -0,0 +1,18 @@ +=== 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..22c2887855a --- /dev/null +++ b/tests/baselines/reference/namespaces1.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/namespaces1.ts === +module X { +>X : X + + export module Y { +>Y : Y + + export interface Z { } +>Z : Z + } + export interface Y { } +>Y : Y +} + +var x: X.Y.Z; +>x : Z +>X : X +>Y : Y +>Z : Z + +var x2: X.Y; +>x2 : Y +>X : X +>Y : Y + diff --git a/tests/baselines/reference/namespaces2.types b/tests/baselines/reference/namespaces2.types new file mode 100644 index 00000000000..fb3c0375b7b --- /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 : C +>A : A +>B : B +>C : C +>new A.B.C() : C +>A.B.C : typeof C +>A.B : typeof B +>A : typeof A +>B : typeof B +>C : typeof 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..36e9fc686b4 --- /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 : C + + 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 : Point +>C : C +>Point : 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 X +>M2.X : typeof X +>M2 : typeof M2 +>X : typeof X + +var point: number; +>point : number + +var point = m.Point; +>point : number +>m.Point : number +>m : typeof 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 : M2 +>X : X +>Point : 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..b41f5cd6074 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInConstructor.types @@ -0,0 +1,71 @@ +=== 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..a8e7a622366 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInLambda.types @@ -0,0 +1,48 @@ +=== 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..b08ce3e57c1 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInMethod.types @@ -0,0 +1,71 @@ +=== 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..3ab8c345887 --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInProperty.types @@ -0,0 +1,67 @@ +=== 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/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..64ca01d029d --- /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 : M2 +>Point : 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 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..0395ae8faf5 --- /dev/null +++ b/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.types @@ -0,0 +1,303 @@ +=== 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 +>/1/ : RegExp + +var r5 = true ? null : /1/; +>r5 : RegExp +>true ? null : /1/ : RegExp +>/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..271b3bf4e74 --- /dev/null +++ b/tests/baselines/reference/objectLitGetterSetter.types @@ -0,0 +1,65 @@ +=== 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..90107784324 --- /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 : c + +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 : c +>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..cd62d194f23 --- /dev/null +++ b/tests/baselines/reference/objectLiteralWidened.types @@ -0,0 +1,46 @@ +=== 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..1926969b8bb --- /dev/null +++ b/tests/baselines/reference/objectTypeHidingMembersOfObject.types @@ -0,0 +1,71 @@ +=== 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..2ad370fd7aa --- /dev/null +++ b/tests/baselines/reference/objectTypePropertyAccess.types @@ -0,0 +1,105 @@ +=== 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..fb9e20f94a0 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithNumericProperty.types @@ -0,0 +1,123 @@ +=== 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..8f445923024 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.types @@ -0,0 +1,469 @@ +=== 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/, +>/123/ : RegExp + + "-1": Date +>Date : Date + +}; + +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..032f54a8565 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithStringNamedPropertyOfIllegalCharacters.types @@ -0,0 +1,133 @@ +=== 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..efca8fc72dd --- /dev/null +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.types @@ -0,0 +1,381 @@ +=== 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..8a84c5e48f7 100644 --- a/tests/baselines/reference/out-flag.js +++ b/tests/baselines/reference/out-flag.js @@ -17,9 +17,12 @@ class MyClass } //// [out-flag.js] +//// @out: bin\ +// my class comments var MyClass = (function () { function MyClass() { } + // my function comments MyClass.prototype.Count = function () { return 42; }; diff --git a/tests/baselines/reference/out-flag.js.map b/tests/baselines/reference/out-flag.js.map index c6371924e7c..6240cc58208 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;IAG7BG,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..e778447c991 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,11 +137,11 @@ 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 >^^^^ @@ -123,8 +152,8 @@ sourceFile:out-flag.ts > // > 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(11, 5) Source(15, 5) + SourceIndex(0) name (MyClass.SetCount) +2 >Emitted(11, 6) Source(15, 6) + SourceIndex(0) name (MyClass.SetCount) --- >>> return MyClass; 1->^^^^ @@ -132,8 +161,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(12, 5) Source(16, 1) + SourceIndex(0) name (MyClass) +2 >Emitted(12, 19) Source(16, 2) + SourceIndex(0) name (MyClass) --- >>>})(); 1 > @@ -157,9 +186,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(13, 1) Source(16, 1) + SourceIndex(0) name (MyClass) +2 >Emitted(13, 2) Source(16, 2) + SourceIndex(0) name (MyClass) +3 >Emitted(13, 2) Source(4, 1) + SourceIndex(0) +4 >Emitted(13, 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..4b4781948a5 --- /dev/null +++ b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.types @@ -0,0 +1,88 @@ +=== 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; } +>/\{(\d+)\}/g : RegExp +>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..72fd2cb64be --- /dev/null +++ b/tests/baselines/reference/parametersWithNoAnnotationAreAny.types @@ -0,0 +1,100 @@ +=== 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..bfdece6f787 --- /dev/null +++ b/tests/baselines/reference/parser579071.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser579071.ts === +var x = /fo(o/; +>x : RegExp +>/fo(o/ : RegExp + diff --git a/tests/baselines/reference/parser596700.types b/tests/baselines/reference/parser596700.types new file mode 100644 index 00000000000..b14e28be716 --- /dev/null +++ b/tests/baselines/reference/parser596700.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser596700.ts === +var regex2 = /[a-z/]$/i; +>regex2 : RegExp +>/[a-z/]$/i : RegExp + diff --git a/tests/baselines/reference/parser630933.types b/tests/baselines/reference/parser630933.types new file mode 100644 index 00000000000..5134bda8c1f --- /dev/null +++ b/tests/baselines/reference/parser630933.types @@ -0,0 +1,12 @@ +=== 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; } +>/\/ver=([^/]+)/ : RegExp + 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..8cf6c0e73a5 --- /dev/null +++ b/tests/baselines/reference/parser645086_3.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_3.ts === +var v = /[\]/]/ +>v : RegExp +>/[\]/]/ : RegExp + diff --git a/tests/baselines/reference/parser645086_4.types b/tests/baselines/reference/parser645086_4.types new file mode 100644 index 00000000000..a7c00b04fce --- /dev/null +++ b/tests/baselines/reference/parser645086_4.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_4.ts === +var v = /[^\]/]/ +>v : RegExp +>/[^\]/]/ : 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..43b5dbfa547 --- /dev/null +++ b/tests/baselines/reference/parser768531.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/Fuzz/parser768531.ts === +{a: 3} +/x/ +>/x/ : RegExp + 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..09626481336 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity10.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity10.ts === +1 +>1 +// before +>>> // after +2 : number + +// before +>>> // after +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity5.types b/tests/baselines/reference/parserGreaterThanTokenAmbiguity5.types new file mode 100644 index 00000000000..e62528a1e1f --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity5.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity5.ts === +1 +>1 +// before +>> // after +2 : 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..e940f534c1e --- /dev/null +++ b/tests/baselines/reference/parserKeywordsAsIdentifierName1.types @@ -0,0 +1,19 @@ +=== 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..23c74ae1538 --- /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 : X +>string : string +>X : X + diff --git a/tests/baselines/reference/parserModuleDeclaration12.types b/tests/baselines/reference/parserModuleDeclaration12.types new file mode 100644 index 00000000000..1c3d9e39906 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration12.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration12.ts === +module A.string { +>A : A +>string : string +} 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..221078dacb7 --- /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 : M +} diff --git a/tests/baselines/reference/parserModuleDeclaration4.types b/tests/baselines/reference/parserModuleDeclaration4.types new file mode 100644 index 00000000000..625691557e4 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration4.types @@ -0,0 +1,12 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration4.ts === +module M { +>M : M + + declare module M1 { +>M1 : M1 + + module M2 { +>M2 : M2 + } + } +} diff --git a/tests/baselines/reference/parserModuleDeclaration6.types b/tests/baselines/reference/parserModuleDeclaration6.types new file mode 100644 index 00000000000..7d11c0a5ce3 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration6.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration6.ts === +module number { +>number : number +} diff --git a/tests/baselines/reference/parserModuleDeclaration7.types b/tests/baselines/reference/parserModuleDeclaration7.types new file mode 100644 index 00000000000..a593c2051a4 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration7.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration7.ts === +module number.a { +>number : number +>a : a +} diff --git a/tests/baselines/reference/parserModuleDeclaration8.types b/tests/baselines/reference/parserModuleDeclaration8.types new file mode 100644 index 00000000000..9247cebe11f --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration8.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration8.ts === +module a.number { +>a : a +>number : number +} diff --git a/tests/baselines/reference/parserModuleDeclaration9.types b/tests/baselines/reference/parserModuleDeclaration9.types new file mode 100644 index 00000000000..cb3ab79e93d --- /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 : a +>number : number +>b : b +} 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