From dd8d3535ffa76fae4f3dcd13baf0932e06797ab2 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 2 Feb 2015 15:14:19 -0800 Subject: [PATCH 1/6] Remove the concept of early errors from the compiler. Currently only parse errors prevent emitting (And this will be changed in the next code review as well). --- src/compiler/core.ts | 4 +- .../diagnosticInformationMap.generated.ts | 214 ++++++------ src/compiler/diagnosticMessages.json | 321 ++++++------------ src/compiler/emitter.ts | 149 ++++---- src/compiler/program.ts | 5 - src/compiler/types.ts | 5 - src/harness/harness.ts | 1 - 7 files changed, 297 insertions(+), 402 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 4a710c035ba..3599c95f760 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -280,7 +280,6 @@ module ts { messageText: text, category: message.category, code: message.code, - isEarly: message.isEarly }; } @@ -299,8 +298,7 @@ module ts { messageText: text, category: message.category, - code: message.code, - isEarly: message.isEarly + code: message.code }; } diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 94a026a1858..dc7ef322c9b 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -4,87 +4,87 @@ module ts { export var Diagnostics = { 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.", isEarly: true }, + _0_expected: { code: 1005, category: DiagnosticCategory.Error, key: "'{0}' expected." }, A_file_cannot_have_a_reference_to_itself: { code: 1006, category: DiagnosticCategory.Error, key: "A file cannot have a reference to itself." }, - Trailing_comma_not_allowed: { code: 1009, category: DiagnosticCategory.Error, key: "Trailing comma not allowed.", isEarly: true }, + Trailing_comma_not_allowed: { code: 1009, category: DiagnosticCategory.Error, key: "Trailing comma not allowed." }, Asterisk_Slash_expected: { code: 1010, category: DiagnosticCategory.Error, key: "'*/' expected." }, 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.", isEarly: true }, - 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.", isEarly: true }, - Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: DiagnosticCategory.Error, key: "Parameter cannot have question mark and initializer.", isEarly: true }, - A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: DiagnosticCategory.Error, key: "A required parameter cannot follow an optional parameter.", isEarly: true }, - An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: DiagnosticCategory.Error, key: "An index signature cannot have a rest parameter.", isEarly: true }, - An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: DiagnosticCategory.Error, key: "An index signature parameter cannot have an accessibility modifier.", isEarly: true }, - An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: DiagnosticCategory.Error, key: "An index signature parameter cannot have a question mark.", isEarly: true }, - An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: DiagnosticCategory.Error, key: "An index signature parameter cannot have an initializer.", isEarly: true }, - An_index_signature_must_have_a_type_annotation: { code: 1021, category: DiagnosticCategory.Error, key: "An index signature must have a type annotation.", isEarly: true }, - An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: DiagnosticCategory.Error, key: "An index signature parameter must have a type annotation.", isEarly: true }, - 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'.", isEarly: true }, + 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." }, + Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: DiagnosticCategory.Error, key: "Parameter cannot have question mark and initializer." }, + A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: DiagnosticCategory.Error, key: "A required parameter cannot follow an optional parameter." }, + An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: DiagnosticCategory.Error, key: "An index signature cannot have a rest parameter." }, + An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: DiagnosticCategory.Error, key: "An index signature parameter cannot have an accessibility modifier." }, + An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: DiagnosticCategory.Error, key: "An index signature parameter cannot have a question mark." }, + An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: DiagnosticCategory.Error, key: "An index signature parameter cannot have an initializer." }, + 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'." }, 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.", isEarly: true }, - _0_modifier_must_precede_1_modifier: { code: 1029, category: DiagnosticCategory.Error, key: "'{0}' modifier must precede '{1}' modifier.", isEarly: true }, - _0_modifier_already_seen: { code: 1030, category: DiagnosticCategory.Error, key: "'{0}' modifier already seen.", isEarly: true }, - _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a class element.", isEarly: true }, + 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." }, 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.", isEarly: true }, - Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: DiagnosticCategory.Error, key: "Statements are not allowed in ambient contexts.", isEarly: true }, - A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used in an already ambient context.", isEarly: true }, - Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: DiagnosticCategory.Error, key: "Initializers are not allowed in ambient contexts.", isEarly: true }, - _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a module element.", isEarly: true }, - A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used with an interface declaration.", isEarly: true }, + 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_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used in an already ambient context." }, + Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: DiagnosticCategory.Error, key: "Initializers are not allowed in ambient contexts." }, + _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a module element." }, + A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: DiagnosticCategory.Error, key: "A 'declare' modifier cannot be used with an interface declaration." }, A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: DiagnosticCategory.Error, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, - A_rest_parameter_cannot_be_optional: { code: 1047, category: DiagnosticCategory.Error, key: "A rest parameter cannot be optional.", isEarly: true }, - A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: DiagnosticCategory.Error, key: "A rest parameter cannot have an initializer.", isEarly: true }, - A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: DiagnosticCategory.Error, key: "A 'set' accessor must have exactly one parameter.", isEarly: true }, - A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: DiagnosticCategory.Error, key: "A 'set' accessor cannot have an optional parameter.", isEarly: true }, - A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: DiagnosticCategory.Error, key: "A 'set' accessor parameter cannot have an initializer.", isEarly: true }, - A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: DiagnosticCategory.Error, key: "A 'set' accessor cannot have rest parameter.", isEarly: true }, - A_get_accessor_cannot_have_parameters: { code: 1054, category: DiagnosticCategory.Error, key: "A 'get' accessor cannot have parameters.", isEarly: true }, - 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.", isEarly: true }, - Enum_member_must_have_initializer: { code: 1061, category: DiagnosticCategory.Error, key: "Enum member must have initializer.", isEarly: true }, - 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.", isEarly: true }, - Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: DiagnosticCategory.Error, key: "Ambient enum elements can only have integer literal initializers.", isEarly: true }, + A_rest_parameter_cannot_be_optional: { code: 1047, category: DiagnosticCategory.Error, key: "A rest parameter cannot be optional." }, + A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: DiagnosticCategory.Error, key: "A rest parameter cannot have an initializer." }, + A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: DiagnosticCategory.Error, key: "A 'set' accessor must have exactly one parameter." }, + A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: DiagnosticCategory.Error, key: "A 'set' accessor cannot have an optional parameter." }, + 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." }, + 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: 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." }, 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." }, - 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.", isEarly: true }, + 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.", isEarly: true }, - An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: DiagnosticCategory.Error, key: "An accessor cannot be declared in an ambient context.", isEarly: true }, - _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a constructor declaration.", isEarly: true }, - _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a parameter.", isEarly: true }, - Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: DiagnosticCategory.Error, key: "Only a single variable declaration is allowed in a 'for...in' statement.", isEarly: true }, - Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: DiagnosticCategory.Error, key: "Type parameters cannot appear on a constructor declaration.", isEarly: true }, - Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: DiagnosticCategory.Error, key: "Type annotation cannot appear on a constructor declaration.", isEarly: true }, - An_accessor_cannot_have_type_parameters: { code: 1094, category: DiagnosticCategory.Error, key: "An accessor cannot have type parameters.", isEarly: true }, - A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: DiagnosticCategory.Error, key: "A 'set' accessor cannot have a return type annotation.", isEarly: true }, - An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: DiagnosticCategory.Error, key: "An index signature must have exactly one parameter.", isEarly: true }, - _0_list_cannot_be_empty: { code: 1097, category: DiagnosticCategory.Error, key: "'{0}' list cannot be empty.", isEarly: true }, - Type_parameter_list_cannot_be_empty: { code: 1098, category: DiagnosticCategory.Error, key: "Type parameter list cannot be empty.", isEarly: true }, - Type_argument_list_cannot_be_empty: { code: 1099, category: DiagnosticCategory.Error, key: "Type argument list cannot be empty.", isEarly: true }, - Invalid_use_of_0_in_strict_mode: { code: 1100, category: DiagnosticCategory.Error, key: "Invalid use of '{0}' in strict mode.", isEarly: true }, - with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: DiagnosticCategory.Error, key: "'with' statements are not allowed in strict mode.", isEarly: true }, - 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.", isEarly: true }, - 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.", isEarly: true }, - 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.", isEarly: true }, - Jump_target_cannot_cross_function_boundary: { code: 1107, category: DiagnosticCategory.Error, key: "Jump target cannot cross function boundary.", isEarly: true }, - 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.", isEarly: true }, - Expression_expected: { code: 1109, category: DiagnosticCategory.Error, key: "Expression expected.", isEarly: true }, - Type_expected: { code: 1110, category: DiagnosticCategory.Error, key: "Type expected.", isEarly: true }, - A_class_member_cannot_be_declared_optional: { code: 1112, category: DiagnosticCategory.Error, key: "A class member cannot be declared optional.", isEarly: true }, - 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.", isEarly: true }, - Duplicate_label_0: { code: 1114, category: DiagnosticCategory.Error, key: "Duplicate label '{0}'", isEarly: true }, - A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: DiagnosticCategory.Error, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement.", isEarly: true }, - A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: DiagnosticCategory.Error, key: "A 'break' statement can only jump to a label of an enclosing statement.", isEarly: true }, - An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: DiagnosticCategory.Error, key: "An object literal cannot have multiple properties with the same name in strict mode.", isEarly: true }, - An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: DiagnosticCategory.Error, key: "An object literal cannot have multiple get/set accessors with the same name.", isEarly: true }, - 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.", isEarly: true }, - An_export_assignment_cannot_have_modifiers: { code: 1120, category: DiagnosticCategory.Error, key: "An export assignment cannot have modifiers.", isEarly: true }, - Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: DiagnosticCategory.Error, key: "Octal literals are not allowed in strict mode.", isEarly: true }, - A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: DiagnosticCategory.Error, key: "A tuple type element list cannot be empty.", isEarly: true }, - Variable_declaration_list_cannot_be_empty: { code: 1123, category: DiagnosticCategory.Error, key: "Variable declaration list cannot be empty.", isEarly: true }, + 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." }, + An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: DiagnosticCategory.Error, key: "An accessor cannot be declared in an ambient context." }, + _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a constructor declaration." }, + _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: DiagnosticCategory.Error, key: "'{0}' modifier cannot appear on a parameter." }, + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: DiagnosticCategory.Error, key: "Only a single variable declaration is allowed in a 'for...in' statement." }, + Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: DiagnosticCategory.Error, key: "Type parameters cannot appear on a constructor declaration." }, + Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: DiagnosticCategory.Error, key: "Type annotation cannot appear on a constructor declaration." }, + An_accessor_cannot_have_type_parameters: { code: 1094, category: DiagnosticCategory.Error, key: "An accessor cannot have type parameters." }, + A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: DiagnosticCategory.Error, key: "A 'set' accessor cannot have a return type annotation." }, + An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: DiagnosticCategory.Error, key: "An index signature must have exactly one parameter." }, + _0_list_cannot_be_empty: { code: 1097, category: DiagnosticCategory.Error, key: "'{0}' list cannot be empty." }, + Type_parameter_list_cannot_be_empty: { code: 1098, category: DiagnosticCategory.Error, key: "Type parameter list cannot be empty." }, + Type_argument_list_cannot_be_empty: { code: 1099, category: DiagnosticCategory.Error, key: "Type argument list cannot be empty." }, + 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." }, + 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: 1109, category: DiagnosticCategory.Error, key: "Expression expected." }, + Type_expected: { code: 1110, category: DiagnosticCategory.Error, key: "Type expected." }, + 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." }, + Duplicate_label_0: { code: 1114, category: DiagnosticCategory.Error, key: "Duplicate label '{0}'" }, + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: DiagnosticCategory.Error, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: DiagnosticCategory.Error, key: "A 'break' statement can only jump to a label of an enclosing statement." }, + An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: DiagnosticCategory.Error, key: "An object literal cannot have multiple properties with the same name in strict mode." }, + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: DiagnosticCategory.Error, key: "An object literal cannot have multiple get/set accessors with the same name." }, + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 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." }, + A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: DiagnosticCategory.Error, key: "A tuple type element list cannot be empty." }, + 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." }, @@ -96,53 +96,53 @@ module ts { 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.", isEarly: true }, + 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.", isEarly: true }, - Line_break_not_permitted_here: { code: 1142, category: DiagnosticCategory.Error, key: "Line break not permitted here.", isEarly: true }, + 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." }, or_expected: { code: 1144, category: DiagnosticCategory.Error, key: "'{' or ';' expected." }, - Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: DiagnosticCategory.Error, key: "Modifiers not permitted on index signature members.", isEarly: true }, + 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.", isEarly: true }, + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: DiagnosticCategory.Error, key: "Import declarations in an internal module cannot reference an external module." }, Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: DiagnosticCategory.Error, key: "Cannot compile external modules unless the '--module' flag is provided." }, Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: DiagnosticCategory.Error, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, - new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead.", isEarly: true }, + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, var_let_or_const_expected: { code: 1152, category: DiagnosticCategory.Error, key: "'var', 'let' or 'const' expected." }, - let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: DiagnosticCategory.Error, key: "'let' declarations are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: DiagnosticCategory.Error, key: "'const' declarations are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - const_declarations_must_be_initialized: { code: 1155, category: DiagnosticCategory.Error, key: "'const' declarations must be initialized", isEarly: true }, - const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: DiagnosticCategory.Error, key: "'const' declarations can only be declared inside a block.", isEarly: true }, - let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: DiagnosticCategory.Error, key: "'let' declarations can only be declared inside a block.", isEarly: true }, - Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: DiagnosticCategory.Error, key: "Tagged templates are only available when targeting ECMAScript 6 and higher.", isEarly: true }, + let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: DiagnosticCategory.Error, key: "'let' declarations are only available when targeting ECMAScript 6 and higher." }, + const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: DiagnosticCategory.Error, key: "'const' declarations are only available when targeting ECMAScript 6 and higher." }, + const_declarations_must_be_initialized: { code: 1155, category: DiagnosticCategory.Error, key: "'const' declarations must be initialized" }, + const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: DiagnosticCategory.Error, key: "'const' declarations can only be declared inside a block." }, + let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: DiagnosticCategory.Error, key: "'let' declarations can only be declared inside a block." }, + Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: DiagnosticCategory.Error, key: "Tagged templates are only available when targeting ECMAScript 6 and higher." }, Unterminated_template_literal: { code: 1160, category: DiagnosticCategory.Error, key: "Unterminated template literal." }, Unterminated_regular_expression_literal: { code: 1161, category: DiagnosticCategory.Error, key: "Unterminated regular expression literal." }, - An_object_member_cannot_be_declared_optional: { code: 1162, category: DiagnosticCategory.Error, key: "An object member cannot be declared optional.", isEarly: true }, - yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: DiagnosticCategory.Error, key: "'yield' expression must be contained_within a generator declaration.", isEarly: true }, - Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in enums.", isEarly: true }, - Computed_property_names_are_not_allowed_in_an_ambient_context: { code: 1165, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in an ambient context.", isEarly: true }, - Computed_property_names_are_not_allowed_in_class_property_declarations: { code: 1166, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in class property declarations.", isEarly: true }, - Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: DiagnosticCategory.Error, key: "Computed property names are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - Computed_property_names_are_not_allowed_in_method_overloads: { code: 1168, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in method overloads.", isEarly: true }, - Computed_property_names_are_not_allowed_in_interfaces: { code: 1169, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in interfaces.", isEarly: true }, - Computed_property_names_are_not_allowed_in_type_literals: { code: 1170, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in type literals.", isEarly: true }, + An_object_member_cannot_be_declared_optional: { code: 1162, category: DiagnosticCategory.Error, key: "An object member cannot be declared optional." }, + yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: DiagnosticCategory.Error, key: "'yield' expression must be contained_within a generator declaration." }, + Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in enums." }, + Computed_property_names_are_not_allowed_in_an_ambient_context: { code: 1165, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in an ambient context." }, + Computed_property_names_are_not_allowed_in_class_property_declarations: { code: 1166, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in class property declarations." }, + Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: DiagnosticCategory.Error, key: "Computed property names are only available when targeting ECMAScript 6 and higher." }, + Computed_property_names_are_not_allowed_in_method_overloads: { code: 1168, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in method overloads." }, + Computed_property_names_are_not_allowed_in_interfaces: { code: 1169, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in interfaces." }, + Computed_property_names_are_not_allowed_in_type_literals: { code: 1170, category: DiagnosticCategory.Error, key: "Computed property names are not allowed in type literals." }, A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: DiagnosticCategory.Error, key: "A comma expression is not allowed in a computed property name." }, - extends_clause_already_seen: { code: 1172, category: DiagnosticCategory.Error, key: "'extends' clause already seen.", isEarly: true }, - extends_clause_must_precede_implements_clause: { code: 1173, category: DiagnosticCategory.Error, key: "'extends' clause must precede 'implements' clause.", isEarly: true }, - Classes_can_only_extend_a_single_class: { code: 1174, category: DiagnosticCategory.Error, key: "Classes can only extend a single class.", isEarly: true }, - implements_clause_already_seen: { code: 1175, category: DiagnosticCategory.Error, key: "'implements' clause already seen.", isEarly: true }, - Interface_declaration_cannot_have_implements_clause: { code: 1176, category: DiagnosticCategory.Error, key: "Interface declaration cannot have 'implements' clause.", isEarly: true }, + extends_clause_already_seen: { code: 1172, category: DiagnosticCategory.Error, key: "'extends' clause already seen." }, + extends_clause_must_precede_implements_clause: { code: 1173, category: DiagnosticCategory.Error, key: "'extends' clause must precede 'implements' clause." }, + Classes_can_only_extend_a_single_class: { code: 1174, category: DiagnosticCategory.Error, key: "Classes can only extend a single class." }, + implements_clause_already_seen: { code: 1175, category: DiagnosticCategory.Error, key: "'implements' clause already seen." }, + Interface_declaration_cannot_have_implements_clause: { code: 1176, category: DiagnosticCategory.Error, key: "Interface declaration cannot have 'implements' clause." }, Binary_digit_expected: { code: 1177, category: DiagnosticCategory.Error, key: "Binary digit expected." }, Octal_digit_expected: { code: 1178, category: DiagnosticCategory.Error, key: "Octal digit expected." }, Unexpected_token_expected: { code: 1179, category: DiagnosticCategory.Error, key: "Unexpected token. '{' expected." }, Property_destructuring_pattern_expected: { code: 1180, category: DiagnosticCategory.Error, key: "Property destructuring pattern expected." }, Array_element_destructuring_pattern_expected: { code: 1181, category: DiagnosticCategory.Error, key: "Array element destructuring pattern expected." }, - A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: DiagnosticCategory.Error, key: "A destructuring declaration must have an initializer.", isEarly: true }, - Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: DiagnosticCategory.Error, key: "Destructuring declarations are not allowed in ambient contexts.", isEarly: true }, - An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: DiagnosticCategory.Error, key: "An implementation cannot be declared in ambient contexts.", isEarly: true }, + A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: DiagnosticCategory.Error, key: "A destructuring declaration must have an initializer." }, + Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: DiagnosticCategory.Error, key: "Destructuring declarations are not allowed in ambient contexts." }, + An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: DiagnosticCategory.Error, key: "An implementation cannot be declared in ambient contexts." }, Modifiers_cannot_appear_here: { code: 1184, category: DiagnosticCategory.Error, key: "Modifiers cannot appear here." }, Merge_conflict_marker_encountered: { code: 1185, category: DiagnosticCategory.Error, key: "Merge conflict marker encountered." }, A_rest_element_cannot_have_an_initializer: { code: 1186, category: DiagnosticCategory.Error, key: "A rest element cannot have an initializer." }, @@ -284,10 +284,10 @@ module ts { Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." }, Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." }, The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: DiagnosticCategory.Error, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." }, - Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: DiagnosticCategory.Error, key: "Block-scoped variable '{0}' used before its declaration.", isEarly: true }, - The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: DiagnosticCategory.Error, key: "The operand of an increment or decrement operator cannot be a constant.", isEarly: true }, - Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: DiagnosticCategory.Error, key: "Left-hand side of assignment expression cannot be a constant.", isEarly: true }, - Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: DiagnosticCategory.Error, key: "Cannot redeclare block-scoped variable '{0}'.", isEarly: true }, + Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: DiagnosticCategory.Error, key: "Block-scoped variable '{0}' used before its declaration." }, + The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: DiagnosticCategory.Error, key: "The operand of an increment or decrement operator cannot be a constant." }, + Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: DiagnosticCategory.Error, key: "Left-hand side of assignment expression cannot be a constant." }, + Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: DiagnosticCategory.Error, key: "Cannot redeclare block-scoped variable '{0}'." }, An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: DiagnosticCategory.Error, key: "An enum member cannot have a numeric name." }, The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: DiagnosticCategory.Error, key: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." }, Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: DiagnosticCategory.Error, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." }, @@ -373,12 +373,12 @@ module ts { 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}'." }, Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: DiagnosticCategory.Error, key: "Exported type alias '{0}' has or is using private name '{1}'." }, Enum_declarations_must_all_be_const_or_non_const: { code: 4082, category: DiagnosticCategory.Error, key: "Enum declarations must all be const or non-const." }, - In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 4083, category: DiagnosticCategory.Error, key: "In 'const' enum declarations member initializer must be constant expression.", isEarly: true }, + In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 4083, category: DiagnosticCategory.Error, key: "In 'const' enum declarations member initializer must be constant expression." }, const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 4084, category: DiagnosticCategory.Error, key: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." }, - A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 4085, category: DiagnosticCategory.Error, key: "A const enum member can only be accessed using a string literal.", isEarly: true }, + A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 4085, category: DiagnosticCategory.Error, key: "A const enum member can only be accessed using a string literal." }, const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 4086, category: DiagnosticCategory.Error, key: "'const' enum member initializer was evaluated to a non-finite value." }, const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 4087, category: DiagnosticCategory.Error, key: "'const' enum member initializer was evaluated to disallowed value 'NaN'." }, - Property_0_does_not_exist_on_const_enum_1: { code: 4088, category: DiagnosticCategory.Error, key: "Property '{0}' does not exist on 'const' enum '{1}'.", isEarly: true }, + Property_0_does_not_exist_on_const_enum_1: { code: 4088, category: DiagnosticCategory.Error, key: "Property '{0}' does not exist on 'const' enum '{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}" }, @@ -450,8 +450,8 @@ module ts { _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: DiagnosticCategory.Error, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: DiagnosticCategory.Error, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, You_cannot_rename_this_element: { code: 8000, category: DiagnosticCategory.Error, key: "You cannot rename this element." }, - yield_expressions_are_not_currently_supported: { code: 9000, category: DiagnosticCategory.Error, key: "'yield' expressions are not currently supported.", isEarly: true }, - Generators_are_not_currently_supported: { code: 9001, category: DiagnosticCategory.Error, key: "Generators are not currently supported.", isEarly: true }, + yield_expressions_are_not_currently_supported: { code: 9000, category: DiagnosticCategory.Error, key: "'yield' expressions are not currently supported." }, + Generators_are_not_currently_supported: { code: 9001, category: DiagnosticCategory.Error, key: "Generators are not currently supported." }, The_arguments_object_cannot_be_referenced_in_an_arrow_function_Consider_using_a_standard_function_expression: { code: 9002, category: DiagnosticCategory.Error, key: "The 'arguments' object cannot be referenced in an arrow function. Consider using a standard function expression." }, }; } \ No newline at end of file diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index a20f6adf649..5ee826812f2 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -9,8 +9,7 @@ }, "'{0}' expected.": { "category": "Error", - "code": 1005, - "isEarly": true + "code": 1005 }, "A file cannot have a reference to itself.": { "category": "Error", @@ -18,8 +17,7 @@ }, "Trailing comma not allowed.": { "category": "Error", - "code": 1009, - "isEarly": true + "code": 1009 }, "'*/' expected.": { "category": "Error", @@ -31,58 +29,47 @@ }, "Catch clause parameter cannot have a type annotation.": { "category": "Error", - "code": 1013, - "isEarly": true + "code": 1013 }, "A rest parameter must be last in a parameter list.": { "category": "Error", - "code": 1014, - "isEarly": true + "code": 1014 }, "Parameter cannot have question mark and initializer.": { "category": "Error", - "code": 1015, - "isEarly": true + "code": 1015 }, "A required parameter cannot follow an optional parameter.": { "category": "Error", - "code": 1016, - "isEarly": true + "code": 1016 }, "An index signature cannot have a rest parameter.": { "category": "Error", - "code": 1017, - "isEarly": true + "code": 1017 }, "An index signature parameter cannot have an accessibility modifier.": { "category": "Error", - "code": 1018, - "isEarly": true + "code": 1018 }, "An index signature parameter cannot have a question mark.": { "category": "Error", - "code": 1019, - "isEarly": true + "code": 1019 }, "An index signature parameter cannot have an initializer.": { "category": "Error", - "code": 1020, - "isEarly": true + "code": 1020 }, "An index signature must have a type annotation.": { "category": "Error", - "code": 1021, - "isEarly": true + "code": 1021 }, "An index signature parameter must have a type annotation.": { "category": "Error", - "code": 1022, - "isEarly": true + "code": 1022 }, "An index signature parameter type must be 'string' or 'number'.": { "category": "Error", - "code": 1023, - "isEarly": true + "code": 1023 }, "A class or interface declaration can only have one 'extends' clause.": { "category": "Error", @@ -102,23 +89,19 @@ }, "Accessibility modifier already seen.": { "category": "Error", - "code": 1028, - "isEarly": true + "code": 1028 }, "'{0}' modifier must precede '{1}' modifier.": { "category": "Error", - "code": 1029, - "isEarly": true + "code": 1029 }, "'{0}' modifier already seen.": { "category": "Error", - "code": 1030, - "isEarly": true + "code": 1030 }, "'{0}' modifier cannot appear on a class element.": { "category": "Error", - "code": 1031, - "isEarly": true + "code": 1031 }, "An interface declaration cannot have an 'implements' clause.": { "category": "Error", @@ -130,33 +113,27 @@ }, "Only ambient modules can use quoted names.": { "category": "Error", - "code": 1035, - "isEarly": true + "code": 1035 }, "Statements are not allowed in ambient contexts.": { "category": "Error", - "code": 1036, - "isEarly": true + "code": 1036 }, "A 'declare' modifier cannot be used in an already ambient context.": { "category": "Error", - "code": 1038, - "isEarly": true + "code": 1038 }, "Initializers are not allowed in ambient contexts.": { "category": "Error", - "code": 1039, - "isEarly": true + "code": 1039 }, "'{0}' modifier cannot appear on a module element.": { "category": "Error", - "code": 1044, - "isEarly": true + "code": 1044 }, "A 'declare' modifier cannot be used with an interface declaration.": { "category": "Error", - "code": 1045, - "isEarly": true + "code": 1045 }, "A 'declare' modifier is required for a top level declaration in a .d.ts file.": { "category": "Error", @@ -164,58 +141,47 @@ }, "A rest parameter cannot be optional.": { "category": "Error", - "code": 1047, - "isEarly": true + "code": 1047 }, "A rest parameter cannot have an initializer.": { "category": "Error", - "code": 1048, - "isEarly": true + "code": 1048 }, "A 'set' accessor must have exactly one parameter.": { "category": "Error", - "code": 1049, - "isEarly": true + "code": 1049 }, "A 'set' accessor cannot have an optional parameter.": { "category": "Error", - "code": 1051, - "isEarly": true + "code": 1051 }, "A 'set' accessor parameter cannot have an initializer.": { "category": "Error", - "code": 1052, - "isEarly": true + "code": 1052 }, "A 'set' accessor cannot have rest parameter.": { "category": "Error", - "code": 1053, - "isEarly": true + "code": 1053 }, "A 'get' accessor cannot have parameters.": { "category": "Error", - "code": 1054, - "isEarly": true + "code": 1054 }, "Accessors are only available when targeting ECMAScript 5 and higher.": { "category": "Error", - "code": 1056, - "isEarly": true + "code": 1056 }, "Enum member must have initializer.": { "category": "Error", - "code": 1061, - "isEarly": true + "code": 1061 }, "An export assignment cannot be used in an internal module.": { "category": "Error", - "code": 1063, - "isEarly": true + "code": 1063 }, "Ambient enum elements can only have integer literal initializers.": { "category": "Error", - "code": 1066, - "isEarly": true + "code": 1066 }, "Unexpected token. A constructor, method, accessor, or property was expected.": { "category": "Error", @@ -223,8 +189,7 @@ }, "A 'declare' modifier cannot be used with an import declaration.": { "category": "Error", - "code": 1079, - "isEarly": true + "code": 1079 }, "Invalid 'reference' directive syntax.": { "category": "Error", @@ -232,173 +197,139 @@ }, "Octal literals are not available when targeting ECMAScript 5 and higher.": { "category": "Error", - "code": 1085, - "isEarly": true + "code": 1085 }, "An accessor cannot be declared in an ambient context.": { "category": "Error", - "code": 1086, - "isEarly": true + "code": 1086 }, "'{0}' modifier cannot appear on a constructor declaration.": { "category": "Error", - "code": 1089, - "isEarly": true + "code": 1089 }, "'{0}' modifier cannot appear on a parameter.": { "category": "Error", - "code": 1090, - "isEarly": true + "code": 1090 }, "Only a single variable declaration is allowed in a 'for...in' statement.": { "category": "Error", - "code": 1091, - "isEarly": true + "code": 1091 }, "Type parameters cannot appear on a constructor declaration.": { "category": "Error", - "code": 1092, - "isEarly": true + "code": 1092 }, "Type annotation cannot appear on a constructor declaration.": { "category": "Error", - "code": 1093, - "isEarly": true + "code": 1093 }, "An accessor cannot have type parameters.": { "category": "Error", - "code": 1094, - "isEarly": true + "code": 1094 }, "A 'set' accessor cannot have a return type annotation.": { "category": "Error", - "code": 1095, - "isEarly": true + "code": 1095 }, "An index signature must have exactly one parameter.": { "category": "Error", - "code": 1096, - "isEarly": true + "code": 1096 }, "'{0}' list cannot be empty.": { "category": "Error", - "code": 1097, - "isEarly": true + "code": 1097 }, "Type parameter list cannot be empty.": { "category": "Error", - "code": 1098, - "isEarly": true + "code": 1098 }, "Type argument list cannot be empty.": { "category": "Error", - "code": 1099, - "isEarly": true + "code": 1099 }, "Invalid use of '{0}' in strict mode.": { "category": "Error", - "code": 1100, - "isEarly": true + "code": 1100 }, "'with' statements are not allowed in strict mode.": { "category": "Error", - "code": 1101, - "isEarly": true + "code": 1101 }, "'delete' cannot be called on an identifier in strict mode.": { "category": "Error", - "code": 1102, - "isEarly": true + "code": 1102 }, "A 'continue' statement can only be used within an enclosing iteration statement.": { "category": "Error", - "code": 1104, - "isEarly": true + "code": 1104 }, "A 'break' statement can only be used within an enclosing iteration or switch statement.": { "category": "Error", - "code": 1105, - "isEarly": true + "code": 1105 }, "Jump target cannot cross function boundary.": { "category": "Error", - "code": 1107, - "isEarly": true + "code": 1107 }, "A 'return' statement can only be used within a function body.": { "category": "Error", - "code": 1108, - "isEarly": true + "code": 1108 }, "Expression expected.": { "category": "Error", - "code": 1109, - "isEarly": true + "code": 1109 }, "Type expected.": { "category": "Error", - "code": 1110, - "isEarly": true + "code": 1110 }, "A class member cannot be declared optional.": { "category": "Error", - "code": 1112, - "isEarly": true + "code": 1112 }, "A 'default' clause cannot appear more than once in a 'switch' statement.": { "category": "Error", - "code": 1113, - "isEarly": true + "code": 1113 }, "Duplicate label '{0}'": { "category": "Error", - "code": 1114, - "isEarly": true + "code": 1114 }, "A 'continue' statement can only jump to a label of an enclosing iteration statement.": { "category": "Error", - "code": 1115, - "isEarly": true + "code": 1115 }, "A 'break' statement can only jump to a label of an enclosing statement.": { "category": "Error", - "code": 1116, - "isEarly": true + "code": 1116 }, "An object literal cannot have multiple properties with the same name in strict mode.": { "category": "Error", - "code": 1117, - "isEarly": true + "code": 1117 }, "An object literal cannot have multiple get/set accessors with the same name.": { "category": "Error", - "code": 1118, - "isEarly": true + "code": 1118 }, "An object literal cannot have property and accessor with the same name.": { "category": "Error", - "code": 1119, - "isEarly": true + "code": 1119 }, "An export assignment cannot have modifiers.": { "category": "Error", - "code": 1120, - "isEarly": true + "code": 1120 }, "Octal literals are not allowed in strict mode.": { "category": "Error", - "code": 1121, - "isEarly": true + "code": 1121 }, "A tuple type element list cannot be empty.": { "category": "Error", - "code": 1122, - "isEarly": true + "code": 1122 }, "Variable declaration list cannot be empty.": { "category": "Error", - "code": 1123, - "isEarly": true + "code": 1123 }, "Digit expected.": { "category": "Error", @@ -446,8 +377,7 @@ }, "Argument expression expected.": { "category": "Error", - "code": 1135, - "isEarly": true + "code": 1135 }, "Property assignment expected.": { "category": "Error", @@ -471,13 +401,11 @@ }, "String literal expected.": { "category": "Error", - "code": 1141, - "isEarly": true + "code": 1141 }, "Line break not permitted here.": { "category": "Error", - "code": 1142, - "isEarly": true + "code": 1142 }, "'{' or ';' expected.": { "category": "Error", @@ -485,8 +413,7 @@ }, "Modifiers not permitted on index signature members.": { "category": "Error", - "code": 1145, - "isEarly": true + "code": 1145 }, "Declaration expected.": { "category": "Error", @@ -494,8 +421,7 @@ }, "Import declarations in an internal module cannot reference an external module.": { "category": "Error", - "code": 1147, - "isEarly": true + "code": 1147 }, "Cannot compile external modules unless the '--module' flag is provided.": { "category": "Error", @@ -507,8 +433,7 @@ }, "'new T[]' cannot be used to create an array. Use 'new Array()' instead.": { "category": "Error", - "code": 1150, - "isEarly": true + "code": 1150 }, "'var', 'let' or 'const' expected.": { "category": "Error", @@ -516,33 +441,27 @@ }, "'let' declarations are only available when targeting ECMAScript 6 and higher.": { "category": "Error", - "code": 1153, - "isEarly": true + "code": 1153 }, "'const' declarations are only available when targeting ECMAScript 6 and higher.": { "category": "Error", - "code": 1154, - "isEarly": true + "code": 1154 }, "'const' declarations must be initialized": { "category": "Error", - "code": 1155, - "isEarly": true + "code": 1155 }, "'const' declarations can only be declared inside a block.": { "category": "Error", - "code": 1156, - "isEarly": true + "code": 1156 }, "'let' declarations can only be declared inside a block.": { "category": "Error", - "code": 1157, - "isEarly": true + "code": 1157 }, "Tagged templates are only available when targeting ECMAScript 6 and higher.": { "category": "Error", - "code": 1159, - "isEarly": true + "code": 1159 }, "Unterminated template literal.": { "category": "Error", @@ -554,48 +473,39 @@ }, "An object member cannot be declared optional.": { "category": "Error", - "code": 1162, - "isEarly": true + "code": 1162 }, "'yield' expression must be contained_within a generator declaration.": { "category": "Error", - "code": 1163, - "isEarly": true + "code": 1163 }, "Computed property names are not allowed in enums.": { "category": "Error", - "code": 1164, - "isEarly": true + "code": 1164 }, "Computed property names are not allowed in an ambient context.": { "category": "Error", - "code": 1165, - "isEarly": true + "code": 1165 }, "Computed property names are not allowed in class property declarations.": { "category": "Error", - "code": 1166, - "isEarly": true + "code": 1166 }, "Computed property names are only available when targeting ECMAScript 6 and higher.": { "category": "Error", - "code": 1167, - "isEarly": true + "code": 1167 }, "Computed property names are not allowed in method overloads.": { "category": "Error", - "code": 1168, - "isEarly": true + "code": 1168 }, "Computed property names are not allowed in interfaces.": { "category": "Error", - "code": 1169, - "isEarly": true + "code": 1169 }, "Computed property names are not allowed in type literals.": { "category": "Error", - "code": 1170, - "isEarly": true + "code": 1170 }, "A comma expression is not allowed in a computed property name.": { "category": "Error", @@ -603,28 +513,23 @@ }, "'extends' clause already seen.": { "category": "Error", - "code": 1172, - "isEarly": true + "code": 1172 }, "'extends' clause must precede 'implements' clause.": { "category": "Error", - "code": 1173, - "isEarly": true + "code": 1173 }, "Classes can only extend a single class.": { "category": "Error", - "code": 1174, - "isEarly": true + "code": 1174 }, "'implements' clause already seen.": { "category": "Error", - "code": 1175, - "isEarly": true + "code": 1175 }, "Interface declaration cannot have 'implements' clause.": { "category": "Error", - "code": 1176, - "isEarly": true + "code": 1176 }, "Binary digit expected.": { "category": "Error", @@ -648,18 +553,15 @@ }, "A destructuring declaration must have an initializer.": { "category": "Error", - "code": 1182, - "isEarly": true + "code": 1182 }, "Destructuring declarations are not allowed in ambient contexts.": { "category": "Error", - "code": 1183, - "isEarly": true + "code": 1183 }, "An implementation cannot be declared in ambient contexts.": { "category": "Error", - "code": 1184, - "isEarly": true + "code": 1184 }, "Modifiers cannot appear here.": { "category": "Error", @@ -1228,23 +1130,19 @@ }, "Block-scoped variable '{0}' used before its declaration.": { "category": "Error", - "code": 2448, - "isEarly": true + "code": 2448 }, "The operand of an increment or decrement operator cannot be a constant.": { "category": "Error", - "code": 2449, - "isEarly": true + "code": 2449 }, "Left-hand side of assignment expression cannot be a constant.": { "category": "Error", - "code": 2450, - "isEarly": true + "code": 2450 }, "Cannot redeclare block-scoped variable '{0}'.": { "category": "Error", - "code": 2451, - "isEarly": true + "code": 2451 }, "An enum member cannot have a numeric name.": { "category": "Error", @@ -1589,8 +1487,7 @@ }, "In 'const' enum declarations member initializer must be constant expression.": { "category": "Error", - "code": 4083, - "isEarly": true + "code": 4083 }, "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment.": { "category": "Error", @@ -1598,8 +1495,7 @@ }, "A const enum member can only be accessed using a string literal.": { "category": "Error", - "code": 4085, - "isEarly": true + "code": 4085 }, "'const' enum member initializer was evaluated to a non-finite value.": { "category": "Error", @@ -1611,8 +1507,7 @@ }, "Property '{0}' does not exist on 'const' enum '{1}'.": { "category": "Error", - "code": 4088, - "isEarly": true + "code": 4088 }, "The current host does not support the '{0}' option.": { "category": "Error", @@ -1901,13 +1796,11 @@ }, "'yield' expressions are not currently supported.": { "category": "Error", - "code": 9000, - "isEarly": true + "code": 9000 }, "Generators are not currently supported.": { "category": "Error", - "code": 9001, - "isEarly": true + "code": 9001 }, "The 'arguments' object cannot be referenced in an arrow function. Consider using a standard function expression.": { "category": "Error", diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index c33f7fd5234..405cf2d8abe 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2074,8 +2074,6 @@ module ts { return; } - Debug.assert(node.parent.kind !== SyntaxKind.TaggedTemplateExpression); - var emitOuterParens = isExpression(node.parent) && templateNeedsParens(node, node.parent); @@ -2153,10 +2151,9 @@ module ts { case SyntaxKind.CallExpression: case SyntaxKind.NewExpression: return (parent).expression === template; + case SyntaxKind.TaggedTemplateExpression: case SyntaxKind.ParenthesizedExpression: return false; - case SyntaxKind.TaggedTemplateExpression: - Debug.fail("Path should be unreachable; tagged templates not supported pre-ES6."); default: return comparePrecedenceToBinaryPlus(parent) !== Comparison.LessThan; } @@ -2176,7 +2173,6 @@ module ts { // // TODO (drosen): Note that we need to account for the upcoming 'yield' and // spread ('...') unary operators that are anticipated for ES6. - Debug.assert(languageVersion < ScriptTarget.ES6); switch (expression.kind) { case SyntaxKind.BinaryExpression: switch ((expression).operator) { @@ -2530,7 +2526,6 @@ module ts { } function emitTaggedTemplateExpression(node: TaggedTemplateExpression): void { - Debug.assert(languageVersion >= ScriptTarget.ES6, "Trying to emit a tagged template in pre-ES6 mode."); emit(node.tag); write(" "); emit(node.template); @@ -3317,62 +3312,70 @@ module ts { write(" {"); scopeEmitStart(node); - increaseIndent(); - emitDetachedComments(node.body.kind === SyntaxKind.Block ? (node.body).statements : node.body); - - var startIndex = 0; - if (node.body.kind === SyntaxKind.Block) { - startIndex = emitDirectivePrologues((node.body).statements, /*startWithNewLine*/ true); - } - var outPos = writer.getTextPos(); - - emitCaptureThisForNodeIfNecessary(node); - emitDefaultValueAssignments(node); - emitRestParameter(node); - if (node.body.kind !== SyntaxKind.Block && outPos === writer.getTextPos()) { - decreaseIndent(); - write(" "); - emitStart(node.body); - write("return "); - - // Don't emit comments on this body. We'll have already taken care of it above - // when we called emitDetachedComments. - emitNode(node.body, /*disableComments:*/ true); - emitEnd(node.body); - write(";"); - emitTempDeclarations(/*newLine*/ false); - write(" "); - emitStart(node.body); - write("}"); - emitEnd(node.body); - } - else { - if (node.body.kind === SyntaxKind.Block) { - emitLinesStartingAt((node.body).statements, startIndex); - } - else { - writeLine(); - emitLeadingComments(node.body); - write("return "); - emit(node.body, /*disableComments:*/ true); - write(";"); - emitTrailingComments(node.body); - } - emitTempDeclarations(/*newLine*/ true); + if (!node.body) { writeLine(); - if (node.body.kind === SyntaxKind.Block) { - emitLeadingCommentsOfPosition((node.body).statements.end); - decreaseIndent(); - emitToken(SyntaxKind.CloseBraceToken,(node.body).statements.end); - } - else { - decreaseIndent(); - emitStart(node.body); - write("}"); - emitEnd(node.body); - } - } + write("}"); + } + else { + increaseIndent(); + + emitDetachedComments(node.body.kind === SyntaxKind.Block ? (node.body).statements : node.body); + + var startIndex = 0; + if (node.body.kind === SyntaxKind.Block) { + startIndex = emitDirectivePrologues((node.body).statements, /*startWithNewLine*/ true); + } + var outPos = writer.getTextPos(); + + emitCaptureThisForNodeIfNecessary(node); + emitDefaultValueAssignments(node); + emitRestParameter(node); + if (node.body.kind !== SyntaxKind.Block && outPos === writer.getTextPos()) { + decreaseIndent(); + write(" "); + emitStart(node.body); + write("return "); + + // Don't emit comments on this body. We'll have already taken care of it above + // when we called emitDetachedComments. + emitNode(node.body, /*disableComments:*/ true); + emitEnd(node.body); + write(";"); + emitTempDeclarations(/*newLine*/ false); + write(" "); + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + else { + if (node.body.kind === SyntaxKind.Block) { + emitLinesStartingAt((node.body).statements, startIndex); + } + else { + writeLine(); + emitLeadingComments(node.body); + write("return "); + emit(node.body, /*disableComments:*/ true); + write(";"); + emitTrailingComments(node.body); + } + emitTempDeclarations(/*newLine*/ true); + writeLine(); + if (node.body.kind === SyntaxKind.Block) { + emitLeadingCommentsOfPosition((node.body).statements.end); + decreaseIndent(); + emitToken(SyntaxKind.CloseBraceToken, (node.body).statements.end); + } + else { + decreaseIndent(); + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + } + } + scopeEmitEnd(); if (node.flags & NodeFlags.Export) { writeLine(); @@ -3722,18 +3725,30 @@ module ts { write("["); emitExpressionForPropertyName(node.name); write("] = "); - if (node.initializer && !isConst(enumParent)) { - emit(node.initializer); - } - else { - write(resolver.getEnumMemberValue(node).toString()); - } + writeEnumMemberDeclarationValue(node); write("] = "); - emitExpressionForPropertyName(node.name); + emitExpressionForPropertyName(node.name); emitEnd(node); write(";"); } + function writeEnumMemberDeclarationValue(member: EnumMember) { + if (!member.initializer || isConst(member.parent)) { + var value = resolver.getEnumMemberValue(member); + if (value !== undefined) { + write(value.toString()); + return; + } + } + + if (member.initializer) { + emit(member.initializer); + } + else { + write("undefined"); + } + } + function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration: ModuleDeclaration): ModuleDeclaration { if (moduleDeclaration.body.kind === SyntaxKind.ModuleDeclaration) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 06e63635232..cf65d3c053e 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -113,13 +113,8 @@ module ts { return emitHost || (emitHost = createEmitHostFromProgram(program)); } - function hasEarlyErrors(sourceFile?: SourceFile): boolean { - return forEach(getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile), d => d.isEarly); - } - function isEmitBlocked(sourceFile?: SourceFile): boolean { return getDiagnostics(sourceFile).length !== 0 || - hasEarlyErrors(sourceFile) || (options.noEmitOnError && getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile).length !== 0); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 63b0ff94a56..c4f6d552b17 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1418,7 +1418,6 @@ module ts { key: string; category: DiagnosticCategory; code: number; - isEarly?: boolean; } // A linked list of formatted diagnostic messages to be used as part of a multiline message. @@ -1439,10 +1438,6 @@ module ts { messageText: string; category: DiagnosticCategory; code: number; - /** - * Early error - any error (can be produced at parsing\binding\typechecking step) that blocks emit - */ - isEarly?: boolean; } export enum DiagnosticCategory { diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 166ae3c7d63..85bd02c1179 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -308,7 +308,6 @@ module Utils { assert.equal(d1.messageText, d2.messageText, "d1.messageText !== d2.messageText"); assert.equal(d1.category, d2.category, "d1.category !== d2.category"); assert.equal(d1.code, d2.code, "d1.code !== d2.code"); - assert.equal(d1.isEarly, d2.isEarly, "d1.isEarly !== d2.isEarly"); } } From 5343336763a6ea6c30d5a4b62a5385abfa6fe506 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 2 Feb 2015 15:15:54 -0800 Subject: [PATCH 2/6] Baseline updates now that we no longer have early errors. --- tests/baselines/reference/ArrowFunction2.js | 8 + .../reference/FunctionDeclaration10_es6.js | 8 + .../reference/FunctionDeclaration11_es6.js | 7 + .../reference/FunctionDeclaration13_es6.js | 12 + .../reference/FunctionDeclaration1_es6.js | 7 + .../reference/FunctionDeclaration6_es6.js | 8 + .../reference/FunctionDeclaration7_es6.js | 14 + .../reference/FunctionDeclaration8_es6.js | 5 + .../reference/FunctionDeclaration9_es6.js | 9 + .../reference/FunctionExpression1_es6.js | 6 + .../reference/FunctionExpression2_es6.js | 6 + .../FunctionPropertyAssignments1_es6.js | 6 + .../FunctionPropertyAssignments5_es6.js | 6 + .../reference/MemberAccessorDeclaration15.js | 17 + .../MemberFunctionDeclaration1_es6.js | 13 + .../MemberFunctionDeclaration2_es6.js | 13 + .../MemberFunctionDeclaration3_es6.js | 13 + .../MemberFunctionDeclaration7_es6.js | 13 + tests/baselines/reference/Protected1.js | 10 + tests/baselines/reference/Protected2.js | 5 + tests/baselines/reference/Protected3.js | 11 + tests/baselines/reference/Protected4.js | 13 + tests/baselines/reference/Protected6.js | 13 + tests/baselines/reference/Protected7.js | 13 + tests/baselines/reference/TupleType3.js | 5 + tests/baselines/reference/TupleType5.js | 5 + .../reference/VariableDeclaration10_es6.js | 5 + .../reference/VariableDeclaration11_es6.js | 7 + .../reference/VariableDeclaration1_es6.js | 5 + .../reference/VariableDeclaration2_es6.js | 5 + .../reference/VariableDeclaration3_es6.js | 5 + .../reference/VariableDeclaration4_es6.js | 5 + .../reference/VariableDeclaration5_es6.js | 5 + .../reference/VariableDeclaration7_es6.js | 5 + .../reference/VariableDeclaration8_es6.js | 5 + .../reference/VariableDeclaration9_es6.js | 5 + .../reference/YieldExpression10_es6.js | 11 + .../reference/YieldExpression11_es6.js | 16 + .../reference/YieldExpression12_es6.js | 14 + .../reference/YieldExpression13_es6.js | 7 + .../reference/YieldExpression14_es6.js | 16 + .../reference/YieldExpression15_es6.js | 9 + .../reference/YieldExpression16_es6.js | 13 + .../reference/YieldExpression17_es6.js | 7 + .../reference/YieldExpression18_es6.js | 7 + .../reference/YieldExpression19_es6.js | 17 + .../reference/YieldExpression2_es6.js | 5 + .../reference/YieldExpression3_es6.js | 11 + .../reference/YieldExpression4_es6.js | 11 + .../reference/YieldExpression6_es6.js | 9 + .../reference/YieldExpression7_es6.js | 9 + .../reference/YieldExpression8_es6.js | 11 + .../reference/YieldExpression9_es6.js | 9 + .../reference/accessibilityModifiers.js | 171 +++ tests/baselines/reference/accessorWithES3.js | 57 + .../reference/accessorWithInitializer.js | 27 + .../reference/accessorWithRestParam.js | 33 + .../reference/accessorWithoutBody1.js | 6 + .../reference/accessorWithoutBody2.js | 6 + .../accessorsAreNotContextuallyTyped.js | 33 + tests/baselines/reference/accessorsEmit.js | 49 + .../reference/accessorsInAmbientContext.js | 21 + .../reference/accessorsNotAllowedInES3.js | 24 + .../accessors_spec_section-4.5_error-cases.js | 59 + .../accessors_spec_section-4.5_inference.js | 104 ++ tests/baselines/reference/ambientEnum1.js | 11 + .../ambientEnumElementInitializer3.js | 6 + tests/baselines/reference/ambientErrors.js | 63 + tests/baselines/reference/ambientErrors1.js | 4 + tests/baselines/reference/ambientGetters.js | 11 + .../baselines/reference/ambientStatement1.js | 8 + .../reference/ambientWithStatements.js | 30 + .../reference/anyIdenticalToItself.js | 32 + tests/baselines/reference/arraySigChecking.js | 46 + tests/baselines/reference/asiReturn.js | 7 + .../reference/assignmentCompatBug3.js | 61 + tests/baselines/reference/badArrayIndex.js | 5 + tests/baselines/reference/badArraySyntax.js | 26 + .../breakNotInIterationOrSwitchStatement1.js | 5 + .../breakNotInIterationOrSwitchStatement2.js | 13 + tests/baselines/reference/breakTarget5.js | 18 + tests/baselines/reference/breakTarget6.js | 9 + ...tureWithOptionalParameterAndInitializer.js | 112 ++ .../cannotInvokeNewOnErrorExpression.js | 17 + .../catchClauseWithTypeAnnotation.js | 10 + .../classConstructorAccessibility.js | 82 ++ .../classExtendsMultipleBaseClasses.js | 29 + .../classHeritageWithTrailingSeparator.js | 24 + .../reference/classPropertyAsPrivate.js | 63 + .../reference/classPropertyAsProtected.js | 63 + .../classPropertyIsPublicByDefault.js | 61 + .../reference/classWithOptionalParameter.js | 29 + .../reference/classWithStaticMembers.js | 60 + tests/baselines/reference/classdecl.js | 206 +++ .../reference/cloduleWithDuplicateMember1.js | 52 + .../reference/cloduleWithDuplicateMember2.js | 41 + ...lisionCodeGenModuleWithAccessorChildren.js | 126 ++ ...llisionSuperAndLocalFunctionInAccessors.js | 112 ++ .../collisionSuperAndLocalVarInAccessors.js | 98 ++ .../reference/collisionSuperAndParameter.js | 136 ++ ...ionThisExpressionAndLocalVarInAccessors.js | 102 ++ .../reference/commentOnClassAccessor1.js | 24 + .../reference/commentOnClassAccessor2.js | 34 + .../reference/computedPropertyNames12.js | 31 + .../reference/computedPropertyNames35.js | 11 + .../reference/computedPropertyNames42.js | 27 + .../computedPropertyNamesDeclarationEmit3.js | 6 + .../computedPropertyNamesDeclarationEmit4.js | 7 + .../computedPropertyNamesOnOverloads.js | 19 + ...onstDeclarationShadowedByVarDeclaration.js | 43 + .../reference/constDeclarations-access.js | 13 + .../reference/constDeclarations-access2.js | 74 + .../reference/constDeclarations-access3.js | 83 ++ .../reference/constDeclarations-access4.js | 79 ++ .../reference/constDeclarations-access5.js | 89 ++ .../constDeclarations-ambient-errors.js | 13 + .../reference/constDeclarations-errors.js | 36 + .../reference/constDeclarations-es5.js | 11 + .../constDeclarations-invalidContexts.js | 57 + .../constDeclarations-useBeforeDefinition.js | 24 + .../constDeclarations-useBeforeDefinition2.js | 12 + .../reference/constEnumBadPropertyNames.js | 6 + tests/baselines/reference/constEnumErrors.js | 58 + .../reference/constructorArgsErrors1.js | 12 + .../reference/constructorArgsErrors2.js | 14 + .../reference/constructorArgsErrors3.js | 14 + .../reference/constructorArgsErrors4.js | 14 + .../reference/constructorArgsErrors5.js | 13 + .../reference/constructorOverloads6.js | 32 + .../reference/contextualTypingOfAccessors.js | 25 + .../continueNotInIterationStatement1.js | 5 + .../continueNotInIterationStatement2.js | 13 + .../continueNotInIterationStatement3.js | 11 + .../continueNotInIterationStatement4.js | 15 + tests/baselines/reference/continueTarget1.js | 6 + tests/baselines/reference/continueTarget5.js | 18 + tests/baselines/reference/continueTarget6.js | 9 + tests/baselines/reference/createArray.js | 34 + .../declFileObjectLiteralWithAccessors.js | 29 + .../declFileObjectLiteralWithOnlyGetter.js | 22 + .../declFileObjectLiteralWithOnlySetter.js | 23 + .../reference/declFilePrivateStatic.js | 54 + .../reference/declarationInAmbientContext.js | 6 + .../reference/declarationWithNoInitializer.js | 8 + .../baselines/reference/declareAlreadySeen.js | 14 + .../reference/declareModifierOnImport1.js | 4 + .../reference/deleteOperatorInStrictMode.js | 9 + ...ClassFunctionOverridesBaseClassAccessor.js | 48 + .../derivedClassIncludesInheritedMembers.js | 107 ++ .../derivedClassOverridesPublicMembers.js | 155 +++ .../reference/derivedClassWithAny.js | 154 +++ ...hPrivateInstanceShadowingPublicInstance.js | 86 ++ ...sWithPrivateStaticShadowingPublicStatic.js | 88 ++ .../reference/derivedGenericClassWithAny.js | 118 ++ .../reference/duplicateClassElements.js | 105 ++ tests/baselines/reference/duplicateLabel1.js | 9 + tests/baselines/reference/duplicateLabel2.js | 13 + .../duplicateObjectLiteralProperty.js | 41 + .../duplicatePropertiesInStrictMode.js | 13 + .../reference/emptyGenericParamList.js | 11 + .../reference/emptyTypeArgumentList.js | 8 + .../reference/emptyTypeArgumentListWithNew.js | 11 + .../reference/enumConstantMembers.js | 38 + .../enumInitializersWithExponents.js | 12 + ...umWithoutInitializerAfterComputedMember.js | 14 + .../reference/errorSuperPropertyAccess.js | 280 ++++ .../reference/errorsInGenericTypeReference.js | 158 +++ tests/baselines/reference/es6ClassTest.js | 151 ++ tests/baselines/reference/es6ClassTest2.js | 326 +++++ .../baselines/reference/exportAlreadySeen.js | 38 + ...AssignmentWithDeclareAndExportModifiers.js | 7 + .../exportAssignmentWithDeclareModifier.js | 7 + .../exportAssignmentWithExportModifier.js | 7 + .../exportingContainingVisibleType.js | 29 + .../reference/extendsClauseAlreadySeen.js | 29 + .../reference/extendsClauseAlreadySeen2.js | 29 + tests/baselines/reference/externSemantics.js | 7 + tests/baselines/reference/externSyntax.js | 17 + .../fatarrowfunctionsOptionalArgsErrors1.js | 38 + .../fatarrowfunctionsOptionalArgsErrors4.js | 69 + .../reference/fieldAndGetterWithSameName.js | 22 + .../functionAndPropertyNameConflict.js | 23 + .../reference/functionOverloadErrorsSyntax.js | 20 + .../functionsWithModifiersInBlocks1.js | 13 + tests/baselines/reference/genericGetter.js | 26 + tests/baselines/reference/genericGetter2.js | 28 + tests/baselines/reference/genericGetter3.js | 33 + .../reference/genericReturnTypeFromGetter1.js | 27 + ...genericTypeReferenceWithoutTypeArgument.js | 103 ++ ...enericTypeReferenceWithoutTypeArgument2.js | 84 ++ ...enericTypeReferenceWithoutTypeArgument3.js | 31 + ...hImpliedReturnTypeAndFunctionClassMerge.js | 47 + .../reference/getAndSetAsMemberNames.js | 66 + .../reference/getAndSetNotIdenticalType.js | 23 + .../reference/getAndSetNotIdenticalType2.js | 41 + .../reference/getAndSetNotIdenticalType3.js | 41 + ...mitOutputWithEarlySyntacticErrors.baseline | 5 +- .../baselines/reference/getsetReturnTypes.js | 20 + .../reference/getterMissingReturnError.js | 20 + .../getterThatThrowsShouldNotNeedReturn.js | 27 + .../baselines/reference/gettersAndSetters.js | 98 ++ .../gettersAndSettersAccessibility.js | 23 + .../reference/gettersAndSettersErrors.js | 62 + .../reference/gettersAndSettersTypesAgree.js | 48 + tests/baselines/reference/giant.js | 1220 +++++++++++++++++ .../illegalModifiersOnClassElements.js | 14 + .../illegalSuperCallsInConstructor.js | 56 + .../implementClausePrecedingExtends.js | 23 + .../reference/implementsClauseAlreadySeen.js | 21 + .../reference/implicitAnyCastedValue.js | 163 +++ ...itAnyGetAndSetAccessorWithAnyReturnType.js | 67 + .../implicitAnyInAmbientDeclaration.js | 16 + .../reference/importDeclWithClassModifiers.js | 15 + ...DeclWithDeclareModifierInAmbientContext.js | 12 + .../importDeclarationInModuleDeclaration1.js | 6 + .../baselines/reference/importInsideModule.js | 17 + .../reference/importNonStringLiteral.js | 7 + .../indexSignatureMustHaveTypeAnnotation.js | 28 + .../reference/indexSignatureTypeCheck.js | 24 + .../reference/indexSignatureTypeCheck2.js | 25 + ...indexSignatureWithAccessibilityModifier.js | 15 + .../indexSignatureWithInitializer.js | 16 + .../indexSignatureWithInitializer1.js | 11 + .../indexSignatureWithoutTypeAnnotation1.js | 11 + tests/baselines/reference/indexTypeCheck.js | 87 ++ .../reference/indexWithoutParamType.js | 5 + .../reference/indexWithoutParamType2.js | 12 + .../baselines/reference/indexerAsOptional.js | 17 + .../indexerSignatureWithRestParam.js | 15 + .../reference/inferSetterParamType.js | 49 + .../reference/infinitelyExpandingOverloads.js | 52 + ...ritanceMemberAccessorOverridingAccessor.js | 56 + ...heritanceMemberAccessorOverridingMethod.js | 47 + ...ritanceMemberAccessorOverridingProperty.js | 42 + ...inheritanceMemberFuncOverridingAccessor.js | 47 + ...ritanceMemberPropertyOverridingAccessor.js | 44 + ...ritanceStaticAccessorOverridingAccessor.js | 56 + ...heritanceStaticAccessorOverridingMethod.js | 47 + ...ritanceStaticAccessorOverridingProperty.js | 42 + ...inheritanceStaticFuncOverridingAccessor.js | 47 + ...eStaticFuncOverridingAccessorOfFuncType.js | 42 + ...ritanceStaticPropertyOverridingAccessor.js | 42 + .../reference/initializersInDeclarations.js | 23 + ...nstancePropertiesInheritedIntoClassType.js | 121 ++ .../reference/instancePropertyInClassType.js | 97 ++ .../reference/interfaceExtendingClass.js | 42 + .../reference/interfaceImplementation5.js | 110 ++ .../interfaceThatInheritsFromItself.js | 16 + .../reference/interfaceWithImplements1.js | 7 + .../invalidDoWhileBreakStatements.js | 70 + .../invalidDoWhileContinueStatements.js | 70 + .../reference/invalidForBreakStatements.js | 68 + .../reference/invalidForContinueStatements.js | 68 + .../reference/invalidForInBreakStatements.js | 69 + .../invalidForInContinueStatements.js | 69 + .../invalidModuleWithStatementsOfEveryKind.js | 235 ++++ .../invalidModuleWithVarStatements.js | 58 + .../invalidSwitchContinueStatement.js | 15 + .../reference/invalidTryStatements.js | 36 + .../reference/invalidWhileBreakStatements.js | 69 + .../invalidWhileContinueStatements.js | 69 + .../reference/letDeclarations-es5-1.js | 15 + .../reference/letDeclarations-es5.js | 26 + .../letDeclarations-invalidContexts.js | 57 + .../letDeclarations-scopes-duplicates.js | 140 ++ .../letDeclarations-scopes-duplicates2.js | 13 + .../letDeclarations-scopes-duplicates3.js | 13 + .../letDeclarations-scopes-duplicates4.js | 13 + .../letDeclarations-scopes-duplicates5.js | 13 + .../letDeclarations-scopes-duplicates6.js | 13 + .../letDeclarations-scopes-duplicates7.js | 13 + .../letDeclarations-useBeforeDefinition.js | 24 + .../letDeclarations-useBeforeDefinition2.js | 12 + tests/baselines/reference/libMembers.js | 36 + tests/baselines/reference/literals.js | 74 + .../reference/methodInAmbientClass1.js | 7 + tests/baselines/reference/missingArgument1.js | 5 + .../reference/modifierOnParameter1.js | 11 + .../modifiersOnInterfaceIndexSignature1.js | 6 + tests/baselines/reference/moduledecl.js | 378 +++++ .../multipleClassPropertyModifiers.js | 14 + .../multipleClassPropertyModifiersErrors.js | 17 + .../reference/multipleInheritance.js | 121 ++ tests/baselines/reference/newOperator.js | 92 ++ ...ionThisExpressionAndLocalVarInAccessors.js | 98 ++ ...icIndexerConstrainsPropertyDeclarations.js | 151 ++ .../reference/objectLitPropertyScoping.js | 33 + .../reference/objectLiteralErrors.js | 138 ++ .../reference/objectLiteralErrorsES3.js | 18 + .../objectLiteralGettersAndSetters.js | 220 +++ .../objectLiteralMemberWithModifiers2.js | 6 + .../objectLiteralMemberWithQuestionMark1.js | 6 + .../objectLiteralMemberWithoutBlock1.js | 6 + ...ectLiteralWithGetAccessorInsideFunction.js | 19 + .../objectTypeWithOptionalProperty1.js | 9 + .../objectTypesWithOptionalProperties.js | 43 + .../reference/octalLiteralInStrictModeES3.js | 7 + .../optionalArgsWithDefaultValues.js | 37 + .../reference/optionalParamArgsTest.js | 270 ++++ .../reference/optionalSetterParam.js | 19 + tests/baselines/reference/parser509618.js | 7 + .../parserAccessibilityAfterStatic1.js | 13 + .../parserAccessibilityAfterStatic10.js | 15 + .../parserAccessibilityAfterStatic7.js | 15 + tests/baselines/reference/parserAccessors5.js | 6 + tests/baselines/reference/parserAccessors6.js | 6 + tests/baselines/reference/parserAccessors7.js | 6 + tests/baselines/reference/parserAccessors8.js | 6 + tests/baselines/reference/parserAccessors9.js | 6 + tests/baselines/reference/parserAstSpans1.js | 412 ++++++ .../parserCatchClauseWithTypeAnnotation1.js | 11 + .../reference/parserClassDeclaration1.js | 18 + .../reference/parserClassDeclaration18.js | 10 + .../reference/parserClassDeclaration2.js | 10 + .../reference/parserClassDeclaration3.js | 18 + .../reference/parserClassDeclaration4.js | 18 + .../reference/parserClassDeclaration5.js | 18 + .../reference/parserClassDeclaration6.js | 18 + .../reference/parserClassDeclaration7.js | 7 + .../reference/parserComputedPropertyName10.js | 12 + .../reference/parserComputedPropertyName11.js | 11 + .../reference/parserComputedPropertyName13.js | 5 + .../reference/parserComputedPropertyName14.js | 5 + .../reference/parserComputedPropertyName15.js | 5 + .../reference/parserComputedPropertyName16.js | 10 + .../reference/parserComputedPropertyName18.js | 5 + .../reference/parserComputedPropertyName19.js | 5 + .../reference/parserComputedPropertyName20.js | 6 + .../reference/parserComputedPropertyName21.js | 6 + .../reference/parserComputedPropertyName22.js | 6 + .../reference/parserComputedPropertyName23.js | 6 + .../reference/parserComputedPropertyName25.js | 15 + .../reference/parserComputedPropertyName26.js | 13 + .../reference/parserComputedPropertyName28.js | 13 + .../reference/parserComputedPropertyName29.js | 15 + .../reference/parserComputedPropertyName31.js | 13 + .../reference/parserComputedPropertyName32.js | 6 + .../reference/parserComputedPropertyName34.js | 14 + .../reference/parserComputedPropertyName36.js | 11 + .../reference/parserComputedPropertyName7.js | 11 + .../reference/parserComputedPropertyName8.js | 11 + .../reference/parserComputedPropertyName9.js | 11 + .../parserConstructorDeclaration10.js | 11 + .../parserConstructorDeclaration11.js | 11 + .../parserConstructorDeclaration12.js | 18 + .../parserConstructorDeclaration2.js | 11 + .../parserConstructorDeclaration3.js | 11 + .../parserConstructorDeclaration4.js | 11 + .../parserConstructorDeclaration5.js | 11 + .../parserConstructorDeclaration6.js | 11 + .../parserConstructorDeclaration7.js | 11 + .../parserConstructorDeclaration9.js | 11 + .../reference/parserES3Accessors1.js | 17 + .../reference/parserES3Accessors2.js | 17 + .../reference/parserES3Accessors3.js | 6 + .../reference/parserES3Accessors4.js | 6 + .../parserES5ComputedPropertyName1.js | 6 + .../parserES5ComputedPropertyName10.js | 12 + .../parserES5ComputedPropertyName11.js | 11 + .../parserES5ComputedPropertyName2.js | 5 + .../parserES5ComputedPropertyName3.js | 6 + .../parserES5ComputedPropertyName4.js | 6 + .../parserES5ComputedPropertyName5.js | 6 + .../parserES5ComputedPropertyName6.js | 10 + .../parserES5ComputedPropertyName7.js | 11 + .../parserES5ComputedPropertyName8.js | 5 + .../parserES5ComputedPropertyName9.js | 11 + .../reference/parserEnumDeclaration2.js | 7 + .../reference/parserEnumDeclaration6.js | 16 + .../parserErrorRecovery_ArgumentList5.js | 11 + ...rrorRecovery_ExtendsOrImplementsClause1.js | 10 + ...rrorRecovery_ExtendsOrImplementsClause2.js | 18 + ...rrorRecovery_ExtendsOrImplementsClause3.js | 10 + ...rrorRecovery_ExtendsOrImplementsClause4.js | 18 + ...rrorRecovery_ExtendsOrImplementsClause5.js | 18 + ...rrorRecovery_ExtendsOrImplementsClause6.js | 4 + .../parserErrorRecovery_ParameterList3.js | 7 + .../parserErrorRecovery_VariableList1.js | 7 + .../reference/parserExportAssignment5.js | 9 + .../reference/parserForInStatement2.js | 7 + .../reference/parserForInStatement3.js | 7 + .../reference/parserForInStatement6.js | 7 + .../reference/parserForInStatement7.js | 7 + .../reference/parserFunctionDeclaration1.js | 6 + .../reference/parserFunctionDeclaration2.js | 5 + .../parserGetAccessorWithTypeParameters1.js | 17 + .../parserIndexMemberDeclaration10.js | 11 + .../parserIndexMemberDeclaration6.js | 11 + .../parserIndexMemberDeclaration7.js | 11 + .../parserIndexMemberDeclaration8.js | 11 + .../parserIndexMemberDeclaration9.js | 11 + .../reference/parserIndexSignature1.js | 6 + .../reference/parserIndexSignature10.js | 6 + .../reference/parserIndexSignature11.js | 8 + .../reference/parserIndexSignature2.js | 6 + .../reference/parserIndexSignature3.js | 6 + .../reference/parserIndexSignature4.js | 6 + .../reference/parserIndexSignature5.js | 6 + .../reference/parserIndexSignature6.js | 6 + .../reference/parserIndexSignature7.js | 6 + .../reference/parserIndexSignature8.js | 8 + .../reference/parserIndexSignature9.js | 6 + .../reference/parserInterfaceDeclaration1.js | 5 + .../reference/parserInterfaceDeclaration2.js | 5 + .../reference/parserInterfaceDeclaration3.js | 5 + .../reference/parserInterfaceDeclaration4.js | 5 + .../reference/parserInterfaceDeclaration5.js | 5 + .../parserMemberAccessorDeclaration10.js | 18 + .../parserMemberAccessorDeclaration11.js | 17 + .../parserMemberAccessorDeclaration12.js | 17 + .../parserMemberAccessorDeclaration13.js | 17 + .../parserMemberAccessorDeclaration14.js | 17 + .../parserMemberAccessorDeclaration16.js | 18 + .../parserMemberAccessorDeclaration17.js | 17 + .../parserMemberAccessorDeclaration18.js | 21 + .../parserMemberAccessorDeclaration7.js | 17 + .../parserMemberAccessorDeclaration8.js | 17 + .../parserMemberAccessorDeclaration9.js | 17 + .../parserMemberFunctionDeclaration1.js | 13 + .../parserMemberFunctionDeclaration2.js | 13 + .../parserMemberFunctionDeclaration3.js | 13 + .../parserMemberFunctionDeclaration4.js | 14 + .../parserMemberFunctionDeclaration5.js | 13 + .../parserMemberVariableDeclaration1.js | 11 + .../parserMemberVariableDeclaration2.js | 11 + .../parserMemberVariableDeclaration3.js | 11 + .../parserMemberVariableDeclaration4.js | 11 + .../parserMemberVariableDeclaration5.js | 11 + .../parserModifierOnStatementInBlock2.js | 9 + .../reference/parserModuleDeclaration1.js | 5 + .../reference/parserModuleDeclaration3.js | 7 + .../reference/parserModuleDeclaration5.js | 9 + tests/baselines/reference/parserNotRegex1.js | 10 + .../parserObjectCreationArrayLiteral1.js | 5 + .../parserObjectCreationArrayLiteral3.js | 5 + .../baselines/reference/parserObjectType6.js | 8 + .../reference/parserParameterList1.js | 13 + .../reference/parserParameterList10.js | 18 + .../reference/parserParameterList11.js | 11 + .../reference/parserParameterList12.js | 7 + .../reference/parserParameterList2.js | 14 + .../reference/parserParameterList3.js | 13 + .../reference/parserParameterList9.js | 17 + .../reference/parserRegularExpression1.js | 5 + .../reference/parserReturnStatement1.js | 5 + .../reference/parserReturnStatement2.js | 9 + .../reference/parserReturnStatement4.js | 7 + .../parserSetAccessorWithTypeAnnotation1.js | 18 + .../parserSetAccessorWithTypeParameters1.js | 17 + .../parserShorthandPropertyAssignment1.js | 10 + .../parserShorthandPropertyAssignment5.js | 7 + ...atementIsNotAMemberVariableDeclaration1.js | 19 + .../baselines/reference/parserStrictMode10.js | 9 + .../baselines/reference/parserStrictMode11.js | 9 + .../baselines/reference/parserStrictMode12.js | 8 + .../baselines/reference/parserStrictMode13.js | 13 + .../baselines/reference/parserStrictMode14.js | 9 + .../baselines/reference/parserStrictMode15.js | 7 + .../baselines/reference/parserStrictMode3.js | 7 + .../baselines/reference/parserStrictMode4.js | 7 + .../baselines/reference/parserStrictMode5.js | 7 + .../baselines/reference/parserStrictMode6.js | 7 + .../baselines/reference/parserStrictMode7.js | 7 + .../baselines/reference/parserStrictMode8.js | 9 + .../baselines/reference/parserStrictMode9.js | 9 + .../reference/parserVariableDeclaration10.js | 5 + .../reference/parserVariableDeclaration4.js | 6 + .../reference/parserVariableDeclaration5.js | 5 + .../reference/parserVariableDeclaration6.js | 5 + .../reference/parserVariableDeclaration8.js | 5 + .../reference/parserX_ArrowFunction2.js | 8 + ...r_breakNotInIterationOrSwitchStatement1.js | 5 + ...r_breakNotInIterationOrSwitchStatement2.js | 13 + .../reference/parser_breakTarget5.js | 18 + .../reference/parser_breakTarget6.js | 9 + ...parser_continueNotInIterationStatement1.js | 5 + ...parser_continueNotInIterationStatement2.js | 13 + ...parser_continueNotInIterationStatement3.js | 11 + ...parser_continueNotInIterationStatement4.js | 15 + .../reference/parser_continueTarget1.js | 6 + .../reference/parser_continueTarget5.js | 18 + .../reference/parser_continueTarget6.js | 9 + .../reference/parser_duplicateLabel1.js | 9 + .../reference/parser_duplicateLabel2.js | 13 + .../privacyGloImportParseErrors.errors.txt | 8 +- .../reference/privacyGloImportParseErrors.js | 248 ++++ .../privacyImportParseErrors.errors.txt | 14 +- .../reference/privacyImportParseErrors.js | 585 ++++++++ ...ivateClassPropertyAccessibleWithinClass.js | 117 ++ tests/baselines/reference/privateIndexer.js | 32 + .../amd/intReferencingExtAndInt.json | 4 +- .../node/intReferencingExtAndInt.json | 4 +- .../amd/nestedLocalModuleSimpleCase.json | 4 +- .../node/nestedLocalModuleSimpleCase.json | 4 +- ...stedLocalModuleWithRecursiveTypecheck.json | 4 +- ...stedLocalModuleWithRecursiveTypecheck.json | 4 +- ...mportedModuleDeclarationsInsideModule.json | 4 +- .../amd/testGlo.js | 63 + ...mportedModuleDeclarationsInsideModule.json | 4 +- .../node/testGlo.js | 63 + ...leDeclarationsInsideNonExportedModule.json | 4 +- ...leDeclarationsInsideNonExportedModule.json | 4 +- ...edModuleImportStatementInParentModule.json | 4 +- ...edModuleImportStatementInParentModule.json | 4 +- .../propertyAndAccessorWithSameName.js | 60 + .../baselines/reference/propertyAssignment.js | 28 + tests/baselines/reference/protectedMembers.js | 261 ++++ tests/baselines/reference/publicIndexer.js | 32 + .../reference/quotedAccessorName1.js | 18 + .../reference/quotedAccessorName2.js | 18 + .../quotedModuleNameMustBeAmbient.js | 6 + .../reference/recursiveGetterAccess.js | 20 + .../reference/recursiveInferenceBug.js | 25 + .../recursiveSpecializationOfSignatures.js | 21 + .../reference/restParamAsOptional.js | 18 + .../reference/restParameterNotLast.js | 6 + ...estParameterWithoutAnnotationIsAnyArray.js | 80 ++ .../restParametersOfNonArrayTypes.js | 79 ++ .../restParametersOfNonArrayTypes2.js | 161 +++ .../restParametersWithArrayTypeAnnotations.js | 156 +++ .../reference/returnValueInSetter.js | 22 + .../reference/scannerNumericLiteral2.js | 5 + .../reference/scannerNumericLiteral8.js | 5 + .../semicolonsInModuleDeclarations.js | 13 + .../baselines/reference/setterBeforeGetter.js | 31 + tests/baselines/reference/setterWithReturn.js | 30 + ...eBeforeQuestionMarkInPropertyAssignment.js | 5 + tests/baselines/reference/standaloneBreak.js | 5 + .../baselines/reference/staticAsIdentifier.js | 12 + tests/baselines/reference/staticGetter1.js | 23 + .../reference/staticGetterAndSetter.js | 22 + tests/baselines/reference/staticIndexer.js | 11 + tests/baselines/reference/staticIndexers.js | 32 + .../reference/staticModifierAlreadySeen.js | 15 + .../reference/staticMustPrecedePublic.js | 13 + .../reference/staticPropertyNotInClassType.js | 104 ++ tests/baselines/reference/staticVisibility.js | 73 + ...ngIndexerConstrainsPropertyDeclarations.js | 151 ++ .../reference/superCallInNonStaticMethod.js | 113 ++ .../reference/superCallInStaticMethod.js | 108 ++ .../reference/superPropertyAccess.js | 89 ++ .../reference/superPropertyAccess1.js | 74 + .../reference/superPropertyAccess2.js | 74 + .../reference/superPropertyAccessNoError.js | 131 ++ ...side-object-literal-getters-and-setters.js | 73 + .../switchStatementsWithMultipleDefaults.js | 63 + .../switchStatementsWithMultipleDefaults1.js | 26 + ...gedTemplateStringsTypeArgumentInference.js | 172 +++ ...emplateStringsWithIncompatibleTypedTags.js | 48 + ...StringsWithManyCallAndMemberExpressions.js | 20 + ...dTemplateStringsWithOverloadResolution1.js | 44 + ...dTemplateStringsWithOverloadResolution2.js | 39 + ...dTemplateStringsWithOverloadResolution3.js | 123 ++ ...taggedTemplateStringsWithTagsTypedAsAny.js | 41 + ...tionExpressionsInSubstitutionExpression.js | 18 + .../taggedTemplateStringsWithTypedTags.js | 45 + .../templateStringInTaggedTemplate.js | 5 + .../reference/templateStringInYieldKeyword.js | 12 + ...mplateStringWithEmbeddedYieldKeywordES6.js | 12 + ...emplateStringsArrayTypeDefinedInES5Mode.js | 22 + ...mplateStringsArrayTypeNotDefinedES5Mode.js | 14 + tests/baselines/reference/thisInAccessors.js | 86 ++ tests/baselines/reference/thisInStatics.js | 29 + ...side-object-literal-getters-and-setters.js | 34 + .../reference/throwWithoutNewLine2.js | 7 + .../trailingSeparatorInFunctionCall.js | 18 + tests/baselines/reference/tupleTypes.js | 101 ++ .../reference/twoAccessorsWithSameName.js | 90 ++ .../reference/twoAccessorsWithSameName2.js | 56 + tests/baselines/reference/typeOfThis.js | 355 +++++ .../reference/typeOfThisInAccessor.js | 82 ++ .../reference/typeOfThisInInstanceMember.js | 67 + .../reference/typeOfThisInInstanceMember2.js | 73 + .../reference/typeOfThisInStatics.js | 29 + .../reference/typeParameterConstraints1.js | 42 + .../typeParametersInStaticAccessors.js | 25 + tests/baselines/reference/typeQueryOnClass.js | 124 ++ .../reference/typesWithPrivateConstructor.js | 34 + .../reference/unaryOperatorsInStrictMode.js | 23 + tests/baselines/reference/varBlock.js | 49 + .../variableDeclarationInStrictMode1.js | 7 + tests/baselines/reference/withExportDecl.js | 103 ++ tests/baselines/reference/yieldExpression1.js | 9 + tests/cases/unittests/incrementalParser.ts | 1 - 584 files changed, 20993 insertions(+), 16 deletions(-) create mode 100644 tests/baselines/reference/ArrowFunction2.js create mode 100644 tests/baselines/reference/FunctionDeclaration10_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration11_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration13_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration1_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration6_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration7_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration8_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration9_es6.js create mode 100644 tests/baselines/reference/FunctionExpression1_es6.js create mode 100644 tests/baselines/reference/FunctionExpression2_es6.js create mode 100644 tests/baselines/reference/FunctionPropertyAssignments1_es6.js create mode 100644 tests/baselines/reference/FunctionPropertyAssignments5_es6.js create mode 100644 tests/baselines/reference/MemberAccessorDeclaration15.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration1_es6.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration2_es6.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration3_es6.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration7_es6.js create mode 100644 tests/baselines/reference/Protected1.js create mode 100644 tests/baselines/reference/Protected2.js create mode 100644 tests/baselines/reference/Protected3.js create mode 100644 tests/baselines/reference/Protected4.js create mode 100644 tests/baselines/reference/Protected6.js create mode 100644 tests/baselines/reference/Protected7.js create mode 100644 tests/baselines/reference/TupleType3.js create mode 100644 tests/baselines/reference/TupleType5.js create mode 100644 tests/baselines/reference/VariableDeclaration10_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration11_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration1_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration2_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration3_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration4_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration5_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration7_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration8_es6.js create mode 100644 tests/baselines/reference/VariableDeclaration9_es6.js create mode 100644 tests/baselines/reference/YieldExpression10_es6.js create mode 100644 tests/baselines/reference/YieldExpression11_es6.js create mode 100644 tests/baselines/reference/YieldExpression12_es6.js create mode 100644 tests/baselines/reference/YieldExpression13_es6.js create mode 100644 tests/baselines/reference/YieldExpression14_es6.js create mode 100644 tests/baselines/reference/YieldExpression15_es6.js create mode 100644 tests/baselines/reference/YieldExpression16_es6.js create mode 100644 tests/baselines/reference/YieldExpression17_es6.js create mode 100644 tests/baselines/reference/YieldExpression18_es6.js create mode 100644 tests/baselines/reference/YieldExpression19_es6.js create mode 100644 tests/baselines/reference/YieldExpression2_es6.js create mode 100644 tests/baselines/reference/YieldExpression3_es6.js create mode 100644 tests/baselines/reference/YieldExpression4_es6.js create mode 100644 tests/baselines/reference/YieldExpression6_es6.js create mode 100644 tests/baselines/reference/YieldExpression7_es6.js create mode 100644 tests/baselines/reference/YieldExpression8_es6.js create mode 100644 tests/baselines/reference/YieldExpression9_es6.js create mode 100644 tests/baselines/reference/accessibilityModifiers.js create mode 100644 tests/baselines/reference/accessorWithES3.js create mode 100644 tests/baselines/reference/accessorWithInitializer.js create mode 100644 tests/baselines/reference/accessorWithRestParam.js create mode 100644 tests/baselines/reference/accessorWithoutBody1.js create mode 100644 tests/baselines/reference/accessorWithoutBody2.js create mode 100644 tests/baselines/reference/accessorsAreNotContextuallyTyped.js create mode 100644 tests/baselines/reference/accessorsEmit.js create mode 100644 tests/baselines/reference/accessorsInAmbientContext.js create mode 100644 tests/baselines/reference/accessorsNotAllowedInES3.js create mode 100644 tests/baselines/reference/accessors_spec_section-4.5_error-cases.js create mode 100644 tests/baselines/reference/accessors_spec_section-4.5_inference.js create mode 100644 tests/baselines/reference/ambientEnum1.js create mode 100644 tests/baselines/reference/ambientEnumElementInitializer3.js create mode 100644 tests/baselines/reference/ambientErrors.js create mode 100644 tests/baselines/reference/ambientErrors1.js create mode 100644 tests/baselines/reference/ambientGetters.js create mode 100644 tests/baselines/reference/ambientStatement1.js create mode 100644 tests/baselines/reference/ambientWithStatements.js create mode 100644 tests/baselines/reference/anyIdenticalToItself.js create mode 100644 tests/baselines/reference/arraySigChecking.js create mode 100644 tests/baselines/reference/asiReturn.js create mode 100644 tests/baselines/reference/assignmentCompatBug3.js create mode 100644 tests/baselines/reference/badArrayIndex.js create mode 100644 tests/baselines/reference/badArraySyntax.js create mode 100644 tests/baselines/reference/breakNotInIterationOrSwitchStatement1.js create mode 100644 tests/baselines/reference/breakNotInIterationOrSwitchStatement2.js create mode 100644 tests/baselines/reference/breakTarget5.js create mode 100644 tests/baselines/reference/breakTarget6.js create mode 100644 tests/baselines/reference/callSignatureWithOptionalParameterAndInitializer.js create mode 100644 tests/baselines/reference/cannotInvokeNewOnErrorExpression.js create mode 100644 tests/baselines/reference/catchClauseWithTypeAnnotation.js create mode 100644 tests/baselines/reference/classConstructorAccessibility.js create mode 100644 tests/baselines/reference/classExtendsMultipleBaseClasses.js create mode 100644 tests/baselines/reference/classHeritageWithTrailingSeparator.js create mode 100644 tests/baselines/reference/classPropertyAsPrivate.js create mode 100644 tests/baselines/reference/classPropertyAsProtected.js create mode 100644 tests/baselines/reference/classPropertyIsPublicByDefault.js create mode 100644 tests/baselines/reference/classWithOptionalParameter.js create mode 100644 tests/baselines/reference/classWithStaticMembers.js create mode 100644 tests/baselines/reference/classdecl.js create mode 100644 tests/baselines/reference/cloduleWithDuplicateMember1.js create mode 100644 tests/baselines/reference/cloduleWithDuplicateMember2.js create mode 100644 tests/baselines/reference/collisionCodeGenModuleWithAccessorChildren.js create mode 100644 tests/baselines/reference/collisionSuperAndLocalFunctionInAccessors.js create mode 100644 tests/baselines/reference/collisionSuperAndLocalVarInAccessors.js create mode 100644 tests/baselines/reference/collisionSuperAndParameter.js create mode 100644 tests/baselines/reference/collisionThisExpressionAndLocalVarInAccessors.js create mode 100644 tests/baselines/reference/commentOnClassAccessor1.js create mode 100644 tests/baselines/reference/commentOnClassAccessor2.js create mode 100644 tests/baselines/reference/computedPropertyNames12.js create mode 100644 tests/baselines/reference/computedPropertyNames35.js create mode 100644 tests/baselines/reference/computedPropertyNames42.js create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit3.js create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit4.js create mode 100644 tests/baselines/reference/computedPropertyNamesOnOverloads.js create mode 100644 tests/baselines/reference/constDeclarationShadowedByVarDeclaration.js create mode 100644 tests/baselines/reference/constDeclarations-access.js create mode 100644 tests/baselines/reference/constDeclarations-access2.js create mode 100644 tests/baselines/reference/constDeclarations-access3.js create mode 100644 tests/baselines/reference/constDeclarations-access4.js create mode 100644 tests/baselines/reference/constDeclarations-access5.js create mode 100644 tests/baselines/reference/constDeclarations-ambient-errors.js create mode 100644 tests/baselines/reference/constDeclarations-errors.js create mode 100644 tests/baselines/reference/constDeclarations-es5.js create mode 100644 tests/baselines/reference/constDeclarations-invalidContexts.js create mode 100644 tests/baselines/reference/constDeclarations-useBeforeDefinition.js create mode 100644 tests/baselines/reference/constDeclarations-useBeforeDefinition2.js create mode 100644 tests/baselines/reference/constEnumBadPropertyNames.js create mode 100644 tests/baselines/reference/constEnumErrors.js create mode 100644 tests/baselines/reference/constructorArgsErrors1.js create mode 100644 tests/baselines/reference/constructorArgsErrors2.js create mode 100644 tests/baselines/reference/constructorArgsErrors3.js create mode 100644 tests/baselines/reference/constructorArgsErrors4.js create mode 100644 tests/baselines/reference/constructorArgsErrors5.js create mode 100644 tests/baselines/reference/constructorOverloads6.js create mode 100644 tests/baselines/reference/contextualTypingOfAccessors.js create mode 100644 tests/baselines/reference/continueNotInIterationStatement1.js create mode 100644 tests/baselines/reference/continueNotInIterationStatement2.js create mode 100644 tests/baselines/reference/continueNotInIterationStatement3.js create mode 100644 tests/baselines/reference/continueNotInIterationStatement4.js create mode 100644 tests/baselines/reference/continueTarget1.js create mode 100644 tests/baselines/reference/continueTarget5.js create mode 100644 tests/baselines/reference/continueTarget6.js create mode 100644 tests/baselines/reference/createArray.js create mode 100644 tests/baselines/reference/declFileObjectLiteralWithAccessors.js create mode 100644 tests/baselines/reference/declFileObjectLiteralWithOnlyGetter.js create mode 100644 tests/baselines/reference/declFileObjectLiteralWithOnlySetter.js create mode 100644 tests/baselines/reference/declFilePrivateStatic.js create mode 100644 tests/baselines/reference/declarationInAmbientContext.js create mode 100644 tests/baselines/reference/declarationWithNoInitializer.js create mode 100644 tests/baselines/reference/declareAlreadySeen.js create mode 100644 tests/baselines/reference/declareModifierOnImport1.js create mode 100644 tests/baselines/reference/deleteOperatorInStrictMode.js create mode 100644 tests/baselines/reference/derivedClassFunctionOverridesBaseClassAccessor.js create mode 100644 tests/baselines/reference/derivedClassIncludesInheritedMembers.js create mode 100644 tests/baselines/reference/derivedClassOverridesPublicMembers.js create mode 100644 tests/baselines/reference/derivedClassWithAny.js create mode 100644 tests/baselines/reference/derivedClassWithPrivateInstanceShadowingPublicInstance.js create mode 100644 tests/baselines/reference/derivedClassWithPrivateStaticShadowingPublicStatic.js create mode 100644 tests/baselines/reference/derivedGenericClassWithAny.js create mode 100644 tests/baselines/reference/duplicateClassElements.js create mode 100644 tests/baselines/reference/duplicateLabel1.js create mode 100644 tests/baselines/reference/duplicateLabel2.js create mode 100644 tests/baselines/reference/duplicateObjectLiteralProperty.js create mode 100644 tests/baselines/reference/duplicatePropertiesInStrictMode.js create mode 100644 tests/baselines/reference/emptyGenericParamList.js create mode 100644 tests/baselines/reference/emptyTypeArgumentList.js create mode 100644 tests/baselines/reference/emptyTypeArgumentListWithNew.js create mode 100644 tests/baselines/reference/enumConstantMembers.js create mode 100644 tests/baselines/reference/enumInitializersWithExponents.js create mode 100644 tests/baselines/reference/enumWithoutInitializerAfterComputedMember.js create mode 100644 tests/baselines/reference/errorSuperPropertyAccess.js create mode 100644 tests/baselines/reference/errorsInGenericTypeReference.js create mode 100644 tests/baselines/reference/es6ClassTest.js create mode 100644 tests/baselines/reference/es6ClassTest2.js create mode 100644 tests/baselines/reference/exportAlreadySeen.js create mode 100644 tests/baselines/reference/exportAssignmentWithDeclareAndExportModifiers.js create mode 100644 tests/baselines/reference/exportAssignmentWithDeclareModifier.js create mode 100644 tests/baselines/reference/exportAssignmentWithExportModifier.js create mode 100644 tests/baselines/reference/exportingContainingVisibleType.js create mode 100644 tests/baselines/reference/extendsClauseAlreadySeen.js create mode 100644 tests/baselines/reference/extendsClauseAlreadySeen2.js create mode 100644 tests/baselines/reference/externSemantics.js create mode 100644 tests/baselines/reference/externSyntax.js create mode 100644 tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.js create mode 100644 tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.js create mode 100644 tests/baselines/reference/fieldAndGetterWithSameName.js create mode 100644 tests/baselines/reference/functionAndPropertyNameConflict.js create mode 100644 tests/baselines/reference/functionOverloadErrorsSyntax.js create mode 100644 tests/baselines/reference/functionsWithModifiersInBlocks1.js create mode 100644 tests/baselines/reference/genericGetter.js create mode 100644 tests/baselines/reference/genericGetter2.js create mode 100644 tests/baselines/reference/genericGetter3.js create mode 100644 tests/baselines/reference/genericReturnTypeFromGetter1.js create mode 100644 tests/baselines/reference/genericTypeReferenceWithoutTypeArgument.js create mode 100644 tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.js create mode 100644 tests/baselines/reference/genericTypeReferenceWithoutTypeArgument3.js create mode 100644 tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.js create mode 100644 tests/baselines/reference/getAndSetAsMemberNames.js create mode 100644 tests/baselines/reference/getAndSetNotIdenticalType.js create mode 100644 tests/baselines/reference/getAndSetNotIdenticalType2.js create mode 100644 tests/baselines/reference/getAndSetNotIdenticalType3.js create mode 100644 tests/baselines/reference/getsetReturnTypes.js create mode 100644 tests/baselines/reference/getterMissingReturnError.js create mode 100644 tests/baselines/reference/getterThatThrowsShouldNotNeedReturn.js create mode 100644 tests/baselines/reference/gettersAndSetters.js create mode 100644 tests/baselines/reference/gettersAndSettersAccessibility.js create mode 100644 tests/baselines/reference/gettersAndSettersErrors.js create mode 100644 tests/baselines/reference/gettersAndSettersTypesAgree.js create mode 100644 tests/baselines/reference/giant.js create mode 100644 tests/baselines/reference/illegalModifiersOnClassElements.js create mode 100644 tests/baselines/reference/illegalSuperCallsInConstructor.js create mode 100644 tests/baselines/reference/implementClausePrecedingExtends.js create mode 100644 tests/baselines/reference/implementsClauseAlreadySeen.js create mode 100644 tests/baselines/reference/implicitAnyCastedValue.js create mode 100644 tests/baselines/reference/implicitAnyGetAndSetAccessorWithAnyReturnType.js create mode 100644 tests/baselines/reference/implicitAnyInAmbientDeclaration.js create mode 100644 tests/baselines/reference/importDeclWithClassModifiers.js create mode 100644 tests/baselines/reference/importDeclWithDeclareModifierInAmbientContext.js create mode 100644 tests/baselines/reference/importDeclarationInModuleDeclaration1.js create mode 100644 tests/baselines/reference/importInsideModule.js create mode 100644 tests/baselines/reference/importNonStringLiteral.js create mode 100644 tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.js create mode 100644 tests/baselines/reference/indexSignatureTypeCheck.js create mode 100644 tests/baselines/reference/indexSignatureTypeCheck2.js create mode 100644 tests/baselines/reference/indexSignatureWithAccessibilityModifier.js create mode 100644 tests/baselines/reference/indexSignatureWithInitializer.js create mode 100644 tests/baselines/reference/indexSignatureWithInitializer1.js create mode 100644 tests/baselines/reference/indexSignatureWithoutTypeAnnotation1.js create mode 100644 tests/baselines/reference/indexTypeCheck.js create mode 100644 tests/baselines/reference/indexWithoutParamType.js create mode 100644 tests/baselines/reference/indexWithoutParamType2.js create mode 100644 tests/baselines/reference/indexerAsOptional.js create mode 100644 tests/baselines/reference/indexerSignatureWithRestParam.js create mode 100644 tests/baselines/reference/inferSetterParamType.js create mode 100644 tests/baselines/reference/infinitelyExpandingOverloads.js create mode 100644 tests/baselines/reference/inheritanceMemberAccessorOverridingAccessor.js create mode 100644 tests/baselines/reference/inheritanceMemberAccessorOverridingMethod.js create mode 100644 tests/baselines/reference/inheritanceMemberAccessorOverridingProperty.js create mode 100644 tests/baselines/reference/inheritanceMemberFuncOverridingAccessor.js create mode 100644 tests/baselines/reference/inheritanceMemberPropertyOverridingAccessor.js create mode 100644 tests/baselines/reference/inheritanceStaticAccessorOverridingAccessor.js create mode 100644 tests/baselines/reference/inheritanceStaticAccessorOverridingMethod.js create mode 100644 tests/baselines/reference/inheritanceStaticAccessorOverridingProperty.js create mode 100644 tests/baselines/reference/inheritanceStaticFuncOverridingAccessor.js create mode 100644 tests/baselines/reference/inheritanceStaticFuncOverridingAccessorOfFuncType.js create mode 100644 tests/baselines/reference/inheritanceStaticPropertyOverridingAccessor.js create mode 100644 tests/baselines/reference/initializersInDeclarations.js create mode 100644 tests/baselines/reference/instancePropertiesInheritedIntoClassType.js create mode 100644 tests/baselines/reference/instancePropertyInClassType.js create mode 100644 tests/baselines/reference/interfaceExtendingClass.js create mode 100644 tests/baselines/reference/interfaceImplementation5.js create mode 100644 tests/baselines/reference/interfaceThatInheritsFromItself.js create mode 100644 tests/baselines/reference/interfaceWithImplements1.js create mode 100644 tests/baselines/reference/invalidDoWhileBreakStatements.js create mode 100644 tests/baselines/reference/invalidDoWhileContinueStatements.js create mode 100644 tests/baselines/reference/invalidForBreakStatements.js create mode 100644 tests/baselines/reference/invalidForContinueStatements.js create mode 100644 tests/baselines/reference/invalidForInBreakStatements.js create mode 100644 tests/baselines/reference/invalidForInContinueStatements.js create mode 100644 tests/baselines/reference/invalidModuleWithStatementsOfEveryKind.js create mode 100644 tests/baselines/reference/invalidModuleWithVarStatements.js create mode 100644 tests/baselines/reference/invalidSwitchContinueStatement.js create mode 100644 tests/baselines/reference/invalidTryStatements.js create mode 100644 tests/baselines/reference/invalidWhileBreakStatements.js create mode 100644 tests/baselines/reference/invalidWhileContinueStatements.js create mode 100644 tests/baselines/reference/letDeclarations-es5-1.js create mode 100644 tests/baselines/reference/letDeclarations-es5.js create mode 100644 tests/baselines/reference/letDeclarations-invalidContexts.js create mode 100644 tests/baselines/reference/letDeclarations-scopes-duplicates.js create mode 100644 tests/baselines/reference/letDeclarations-scopes-duplicates2.js create mode 100644 tests/baselines/reference/letDeclarations-scopes-duplicates3.js create mode 100644 tests/baselines/reference/letDeclarations-scopes-duplicates4.js create mode 100644 tests/baselines/reference/letDeclarations-scopes-duplicates5.js create mode 100644 tests/baselines/reference/letDeclarations-scopes-duplicates6.js create mode 100644 tests/baselines/reference/letDeclarations-scopes-duplicates7.js create mode 100644 tests/baselines/reference/letDeclarations-useBeforeDefinition.js create mode 100644 tests/baselines/reference/letDeclarations-useBeforeDefinition2.js create mode 100644 tests/baselines/reference/libMembers.js create mode 100644 tests/baselines/reference/literals.js create mode 100644 tests/baselines/reference/methodInAmbientClass1.js create mode 100644 tests/baselines/reference/missingArgument1.js create mode 100644 tests/baselines/reference/modifierOnParameter1.js create mode 100644 tests/baselines/reference/modifiersOnInterfaceIndexSignature1.js create mode 100644 tests/baselines/reference/moduledecl.js create mode 100644 tests/baselines/reference/multipleClassPropertyModifiers.js create mode 100644 tests/baselines/reference/multipleClassPropertyModifiersErrors.js create mode 100644 tests/baselines/reference/multipleInheritance.js create mode 100644 tests/baselines/reference/newOperator.js create mode 100644 tests/baselines/reference/noCollisionThisExpressionAndLocalVarInAccessors.js create mode 100644 tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.js create mode 100644 tests/baselines/reference/objectLitPropertyScoping.js create mode 100644 tests/baselines/reference/objectLiteralErrors.js create mode 100644 tests/baselines/reference/objectLiteralErrorsES3.js create mode 100644 tests/baselines/reference/objectLiteralGettersAndSetters.js create mode 100644 tests/baselines/reference/objectLiteralMemberWithModifiers2.js create mode 100644 tests/baselines/reference/objectLiteralMemberWithQuestionMark1.js create mode 100644 tests/baselines/reference/objectLiteralMemberWithoutBlock1.js create mode 100644 tests/baselines/reference/objectLiteralWithGetAccessorInsideFunction.js create mode 100644 tests/baselines/reference/objectTypeWithOptionalProperty1.js create mode 100644 tests/baselines/reference/objectTypesWithOptionalProperties.js create mode 100644 tests/baselines/reference/octalLiteralInStrictModeES3.js create mode 100644 tests/baselines/reference/optionalArgsWithDefaultValues.js create mode 100644 tests/baselines/reference/optionalParamArgsTest.js create mode 100644 tests/baselines/reference/optionalSetterParam.js create mode 100644 tests/baselines/reference/parser509618.js create mode 100644 tests/baselines/reference/parserAccessibilityAfterStatic1.js create mode 100644 tests/baselines/reference/parserAccessibilityAfterStatic10.js create mode 100644 tests/baselines/reference/parserAccessibilityAfterStatic7.js create mode 100644 tests/baselines/reference/parserAccessors5.js create mode 100644 tests/baselines/reference/parserAccessors6.js create mode 100644 tests/baselines/reference/parserAccessors7.js create mode 100644 tests/baselines/reference/parserAccessors8.js create mode 100644 tests/baselines/reference/parserAccessors9.js create mode 100644 tests/baselines/reference/parserAstSpans1.js create mode 100644 tests/baselines/reference/parserCatchClauseWithTypeAnnotation1.js create mode 100644 tests/baselines/reference/parserClassDeclaration1.js create mode 100644 tests/baselines/reference/parserClassDeclaration18.js create mode 100644 tests/baselines/reference/parserClassDeclaration2.js create mode 100644 tests/baselines/reference/parserClassDeclaration3.js create mode 100644 tests/baselines/reference/parserClassDeclaration4.js create mode 100644 tests/baselines/reference/parserClassDeclaration5.js create mode 100644 tests/baselines/reference/parserClassDeclaration6.js create mode 100644 tests/baselines/reference/parserClassDeclaration7.js create mode 100644 tests/baselines/reference/parserComputedPropertyName10.js create mode 100644 tests/baselines/reference/parserComputedPropertyName11.js create mode 100644 tests/baselines/reference/parserComputedPropertyName13.js create mode 100644 tests/baselines/reference/parserComputedPropertyName14.js create mode 100644 tests/baselines/reference/parserComputedPropertyName15.js create mode 100644 tests/baselines/reference/parserComputedPropertyName16.js create mode 100644 tests/baselines/reference/parserComputedPropertyName18.js create mode 100644 tests/baselines/reference/parserComputedPropertyName19.js create mode 100644 tests/baselines/reference/parserComputedPropertyName20.js create mode 100644 tests/baselines/reference/parserComputedPropertyName21.js create mode 100644 tests/baselines/reference/parserComputedPropertyName22.js create mode 100644 tests/baselines/reference/parserComputedPropertyName23.js create mode 100644 tests/baselines/reference/parserComputedPropertyName25.js create mode 100644 tests/baselines/reference/parserComputedPropertyName26.js create mode 100644 tests/baselines/reference/parserComputedPropertyName28.js create mode 100644 tests/baselines/reference/parserComputedPropertyName29.js create mode 100644 tests/baselines/reference/parserComputedPropertyName31.js create mode 100644 tests/baselines/reference/parserComputedPropertyName32.js create mode 100644 tests/baselines/reference/parserComputedPropertyName34.js create mode 100644 tests/baselines/reference/parserComputedPropertyName36.js create mode 100644 tests/baselines/reference/parserComputedPropertyName7.js create mode 100644 tests/baselines/reference/parserComputedPropertyName8.js create mode 100644 tests/baselines/reference/parserComputedPropertyName9.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration10.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration11.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration12.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration2.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration3.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration4.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration5.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration6.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration7.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration9.js create mode 100644 tests/baselines/reference/parserES3Accessors1.js create mode 100644 tests/baselines/reference/parserES3Accessors2.js create mode 100644 tests/baselines/reference/parserES3Accessors3.js create mode 100644 tests/baselines/reference/parserES3Accessors4.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName1.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName10.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName11.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName2.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName3.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName4.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName5.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName6.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName7.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName8.js create mode 100644 tests/baselines/reference/parserES5ComputedPropertyName9.js create mode 100644 tests/baselines/reference/parserEnumDeclaration2.js create mode 100644 tests/baselines/reference/parserEnumDeclaration6.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ArgumentList5.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause2.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause3.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause4.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause5.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause6.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ParameterList3.js create mode 100644 tests/baselines/reference/parserErrorRecovery_VariableList1.js create mode 100644 tests/baselines/reference/parserExportAssignment5.js create mode 100644 tests/baselines/reference/parserForInStatement2.js create mode 100644 tests/baselines/reference/parserForInStatement3.js create mode 100644 tests/baselines/reference/parserForInStatement6.js create mode 100644 tests/baselines/reference/parserForInStatement7.js create mode 100644 tests/baselines/reference/parserFunctionDeclaration1.js create mode 100644 tests/baselines/reference/parserFunctionDeclaration2.js create mode 100644 tests/baselines/reference/parserGetAccessorWithTypeParameters1.js create mode 100644 tests/baselines/reference/parserIndexMemberDeclaration10.js create mode 100644 tests/baselines/reference/parserIndexMemberDeclaration6.js create mode 100644 tests/baselines/reference/parserIndexMemberDeclaration7.js create mode 100644 tests/baselines/reference/parserIndexMemberDeclaration8.js create mode 100644 tests/baselines/reference/parserIndexMemberDeclaration9.js create mode 100644 tests/baselines/reference/parserIndexSignature1.js create mode 100644 tests/baselines/reference/parserIndexSignature10.js create mode 100644 tests/baselines/reference/parserIndexSignature11.js create mode 100644 tests/baselines/reference/parserIndexSignature2.js create mode 100644 tests/baselines/reference/parserIndexSignature3.js create mode 100644 tests/baselines/reference/parserIndexSignature4.js create mode 100644 tests/baselines/reference/parserIndexSignature5.js create mode 100644 tests/baselines/reference/parserIndexSignature6.js create mode 100644 tests/baselines/reference/parserIndexSignature7.js create mode 100644 tests/baselines/reference/parserIndexSignature8.js create mode 100644 tests/baselines/reference/parserIndexSignature9.js create mode 100644 tests/baselines/reference/parserInterfaceDeclaration1.js create mode 100644 tests/baselines/reference/parserInterfaceDeclaration2.js create mode 100644 tests/baselines/reference/parserInterfaceDeclaration3.js create mode 100644 tests/baselines/reference/parserInterfaceDeclaration4.js create mode 100644 tests/baselines/reference/parserInterfaceDeclaration5.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration10.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration11.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration12.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration13.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration14.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration16.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration17.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration18.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration7.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration8.js create mode 100644 tests/baselines/reference/parserMemberAccessorDeclaration9.js create mode 100644 tests/baselines/reference/parserMemberFunctionDeclaration1.js create mode 100644 tests/baselines/reference/parserMemberFunctionDeclaration2.js create mode 100644 tests/baselines/reference/parserMemberFunctionDeclaration3.js create mode 100644 tests/baselines/reference/parserMemberFunctionDeclaration4.js create mode 100644 tests/baselines/reference/parserMemberFunctionDeclaration5.js create mode 100644 tests/baselines/reference/parserMemberVariableDeclaration1.js create mode 100644 tests/baselines/reference/parserMemberVariableDeclaration2.js create mode 100644 tests/baselines/reference/parserMemberVariableDeclaration3.js create mode 100644 tests/baselines/reference/parserMemberVariableDeclaration4.js create mode 100644 tests/baselines/reference/parserMemberVariableDeclaration5.js create mode 100644 tests/baselines/reference/parserModifierOnStatementInBlock2.js create mode 100644 tests/baselines/reference/parserModuleDeclaration1.js create mode 100644 tests/baselines/reference/parserModuleDeclaration3.js create mode 100644 tests/baselines/reference/parserModuleDeclaration5.js create mode 100644 tests/baselines/reference/parserNotRegex1.js create mode 100644 tests/baselines/reference/parserObjectCreationArrayLiteral1.js create mode 100644 tests/baselines/reference/parserObjectCreationArrayLiteral3.js create mode 100644 tests/baselines/reference/parserObjectType6.js create mode 100644 tests/baselines/reference/parserParameterList1.js create mode 100644 tests/baselines/reference/parserParameterList10.js create mode 100644 tests/baselines/reference/parserParameterList11.js create mode 100644 tests/baselines/reference/parserParameterList12.js create mode 100644 tests/baselines/reference/parserParameterList2.js create mode 100644 tests/baselines/reference/parserParameterList3.js create mode 100644 tests/baselines/reference/parserParameterList9.js create mode 100644 tests/baselines/reference/parserRegularExpression1.js create mode 100644 tests/baselines/reference/parserReturnStatement1.js create mode 100644 tests/baselines/reference/parserReturnStatement2.js create mode 100644 tests/baselines/reference/parserReturnStatement4.js create mode 100644 tests/baselines/reference/parserSetAccessorWithTypeAnnotation1.js create mode 100644 tests/baselines/reference/parserSetAccessorWithTypeParameters1.js create mode 100644 tests/baselines/reference/parserShorthandPropertyAssignment1.js create mode 100644 tests/baselines/reference/parserShorthandPropertyAssignment5.js create mode 100644 tests/baselines/reference/parserStatementIsNotAMemberVariableDeclaration1.js create mode 100644 tests/baselines/reference/parserStrictMode10.js create mode 100644 tests/baselines/reference/parserStrictMode11.js create mode 100644 tests/baselines/reference/parserStrictMode12.js create mode 100644 tests/baselines/reference/parserStrictMode13.js create mode 100644 tests/baselines/reference/parserStrictMode14.js create mode 100644 tests/baselines/reference/parserStrictMode15.js create mode 100644 tests/baselines/reference/parserStrictMode3.js create mode 100644 tests/baselines/reference/parserStrictMode4.js create mode 100644 tests/baselines/reference/parserStrictMode5.js create mode 100644 tests/baselines/reference/parserStrictMode6.js create mode 100644 tests/baselines/reference/parserStrictMode7.js create mode 100644 tests/baselines/reference/parserStrictMode8.js create mode 100644 tests/baselines/reference/parserStrictMode9.js create mode 100644 tests/baselines/reference/parserVariableDeclaration10.js create mode 100644 tests/baselines/reference/parserVariableDeclaration4.js create mode 100644 tests/baselines/reference/parserVariableDeclaration5.js create mode 100644 tests/baselines/reference/parserVariableDeclaration6.js create mode 100644 tests/baselines/reference/parserVariableDeclaration8.js create mode 100644 tests/baselines/reference/parserX_ArrowFunction2.js create mode 100644 tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement1.js create mode 100644 tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement2.js create mode 100644 tests/baselines/reference/parser_breakTarget5.js create mode 100644 tests/baselines/reference/parser_breakTarget6.js create mode 100644 tests/baselines/reference/parser_continueNotInIterationStatement1.js create mode 100644 tests/baselines/reference/parser_continueNotInIterationStatement2.js create mode 100644 tests/baselines/reference/parser_continueNotInIterationStatement3.js create mode 100644 tests/baselines/reference/parser_continueNotInIterationStatement4.js create mode 100644 tests/baselines/reference/parser_continueTarget1.js create mode 100644 tests/baselines/reference/parser_continueTarget5.js create mode 100644 tests/baselines/reference/parser_continueTarget6.js create mode 100644 tests/baselines/reference/parser_duplicateLabel1.js create mode 100644 tests/baselines/reference/parser_duplicateLabel2.js create mode 100644 tests/baselines/reference/privacyGloImportParseErrors.js create mode 100644 tests/baselines/reference/privacyImportParseErrors.js create mode 100644 tests/baselines/reference/privateClassPropertyAccessibleWithinClass.js create mode 100644 tests/baselines/reference/privateIndexer.js create mode 100644 tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/testGlo.js create mode 100644 tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/testGlo.js create mode 100644 tests/baselines/reference/propertyAndAccessorWithSameName.js create mode 100644 tests/baselines/reference/propertyAssignment.js create mode 100644 tests/baselines/reference/protectedMembers.js create mode 100644 tests/baselines/reference/publicIndexer.js create mode 100644 tests/baselines/reference/quotedAccessorName1.js create mode 100644 tests/baselines/reference/quotedAccessorName2.js create mode 100644 tests/baselines/reference/quotedModuleNameMustBeAmbient.js create mode 100644 tests/baselines/reference/recursiveGetterAccess.js create mode 100644 tests/baselines/reference/recursiveInferenceBug.js create mode 100644 tests/baselines/reference/recursiveSpecializationOfSignatures.js create mode 100644 tests/baselines/reference/restParamAsOptional.js create mode 100644 tests/baselines/reference/restParameterNotLast.js create mode 100644 tests/baselines/reference/restParameterWithoutAnnotationIsAnyArray.js create mode 100644 tests/baselines/reference/restParametersOfNonArrayTypes.js create mode 100644 tests/baselines/reference/restParametersOfNonArrayTypes2.js create mode 100644 tests/baselines/reference/restParametersWithArrayTypeAnnotations.js create mode 100644 tests/baselines/reference/returnValueInSetter.js create mode 100644 tests/baselines/reference/scannerNumericLiteral2.js create mode 100644 tests/baselines/reference/scannerNumericLiteral8.js create mode 100644 tests/baselines/reference/semicolonsInModuleDeclarations.js create mode 100644 tests/baselines/reference/setterBeforeGetter.js create mode 100644 tests/baselines/reference/setterWithReturn.js create mode 100644 tests/baselines/reference/spaceBeforeQuestionMarkInPropertyAssignment.js create mode 100644 tests/baselines/reference/standaloneBreak.js create mode 100644 tests/baselines/reference/staticAsIdentifier.js create mode 100644 tests/baselines/reference/staticGetter1.js create mode 100644 tests/baselines/reference/staticGetterAndSetter.js create mode 100644 tests/baselines/reference/staticIndexer.js create mode 100644 tests/baselines/reference/staticIndexers.js create mode 100644 tests/baselines/reference/staticModifierAlreadySeen.js create mode 100644 tests/baselines/reference/staticMustPrecedePublic.js create mode 100644 tests/baselines/reference/staticPropertyNotInClassType.js create mode 100644 tests/baselines/reference/staticVisibility.js create mode 100644 tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.js create mode 100644 tests/baselines/reference/superCallInNonStaticMethod.js create mode 100644 tests/baselines/reference/superCallInStaticMethod.js create mode 100644 tests/baselines/reference/superPropertyAccess.js create mode 100644 tests/baselines/reference/superPropertyAccess1.js create mode 100644 tests/baselines/reference/superPropertyAccess2.js create mode 100644 tests/baselines/reference/superPropertyAccessNoError.js create mode 100644 tests/baselines/reference/super_inside-object-literal-getters-and-setters.js create mode 100644 tests/baselines/reference/switchStatementsWithMultipleDefaults.js create mode 100644 tests/baselines/reference/switchStatementsWithMultipleDefaults1.js create mode 100644 tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.js create mode 100644 tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.js create mode 100644 tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.js create mode 100644 tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.js create mode 100644 tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.js create mode 100644 tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.js create mode 100644 tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.js create mode 100644 tests/baselines/reference/taggedTemplateStringsWithTypeErrorInFunctionExpressionsInSubstitutionExpression.js create mode 100644 tests/baselines/reference/taggedTemplateStringsWithTypedTags.js create mode 100644 tests/baselines/reference/templateStringInTaggedTemplate.js create mode 100644 tests/baselines/reference/templateStringInYieldKeyword.js create mode 100644 tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.js create mode 100644 tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.js create mode 100644 tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.js create mode 100644 tests/baselines/reference/thisInAccessors.js create mode 100644 tests/baselines/reference/thisInStatics.js create mode 100644 tests/baselines/reference/this_inside-object-literal-getters-and-setters.js create mode 100644 tests/baselines/reference/throwWithoutNewLine2.js create mode 100644 tests/baselines/reference/trailingSeparatorInFunctionCall.js create mode 100644 tests/baselines/reference/tupleTypes.js create mode 100644 tests/baselines/reference/twoAccessorsWithSameName.js create mode 100644 tests/baselines/reference/twoAccessorsWithSameName2.js create mode 100644 tests/baselines/reference/typeOfThis.js create mode 100644 tests/baselines/reference/typeOfThisInAccessor.js create mode 100644 tests/baselines/reference/typeOfThisInInstanceMember.js create mode 100644 tests/baselines/reference/typeOfThisInInstanceMember2.js create mode 100644 tests/baselines/reference/typeOfThisInStatics.js create mode 100644 tests/baselines/reference/typeParameterConstraints1.js create mode 100644 tests/baselines/reference/typeParametersInStaticAccessors.js create mode 100644 tests/baselines/reference/typeQueryOnClass.js create mode 100644 tests/baselines/reference/typesWithPrivateConstructor.js create mode 100644 tests/baselines/reference/unaryOperatorsInStrictMode.js create mode 100644 tests/baselines/reference/varBlock.js create mode 100644 tests/baselines/reference/variableDeclarationInStrictMode1.js create mode 100644 tests/baselines/reference/withExportDecl.js create mode 100644 tests/baselines/reference/yieldExpression1.js diff --git a/tests/baselines/reference/ArrowFunction2.js b/tests/baselines/reference/ArrowFunction2.js new file mode 100644 index 00000000000..fa6b8bf3b9e --- /dev/null +++ b/tests/baselines/reference/ArrowFunction2.js @@ -0,0 +1,8 @@ +//// [ArrowFunction2.ts] +var v = (a: b,) => { + +}; + +//// [ArrowFunction2.js] +var v = function (a) { +}; diff --git a/tests/baselines/reference/FunctionDeclaration10_es6.js b/tests/baselines/reference/FunctionDeclaration10_es6.js new file mode 100644 index 00000000000..51694533964 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration10_es6.js @@ -0,0 +1,8 @@ +//// [FunctionDeclaration10_es6.ts] +function * foo(a = yield => yield) { +} + +//// [FunctionDeclaration10_es6.js] +function foo(a) { + if (a === void 0) { a = function (yield) { return yield; }; } +} diff --git a/tests/baselines/reference/FunctionDeclaration11_es6.js b/tests/baselines/reference/FunctionDeclaration11_es6.js new file mode 100644 index 00000000000..ba497b3e529 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration11_es6.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration11_es6.ts] +function * yield() { +} + +//// [FunctionDeclaration11_es6.js] +function yield() { +} diff --git a/tests/baselines/reference/FunctionDeclaration13_es6.js b/tests/baselines/reference/FunctionDeclaration13_es6.js new file mode 100644 index 00000000000..4c82b037569 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration13_es6.js @@ -0,0 +1,12 @@ +//// [FunctionDeclaration13_es6.ts] +function * foo() { + // Legal to use 'yield' in a type context. + var v: yield; +} + + +//// [FunctionDeclaration13_es6.js] +function foo() { + // Legal to use 'yield' in a type context. + var v; +} diff --git a/tests/baselines/reference/FunctionDeclaration1_es6.js b/tests/baselines/reference/FunctionDeclaration1_es6.js new file mode 100644 index 00000000000..262c7ea02fb --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration1_es6.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration1_es6.ts] +function * foo() { +} + +//// [FunctionDeclaration1_es6.js] +function foo() { +} diff --git a/tests/baselines/reference/FunctionDeclaration6_es6.js b/tests/baselines/reference/FunctionDeclaration6_es6.js new file mode 100644 index 00000000000..07b3ff52212 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration6_es6.js @@ -0,0 +1,8 @@ +//// [FunctionDeclaration6_es6.ts] +function*foo(a = yield) { +} + +//// [FunctionDeclaration6_es6.js] +function foo(a) { + if (a === void 0) { a = yield; } +} diff --git a/tests/baselines/reference/FunctionDeclaration7_es6.js b/tests/baselines/reference/FunctionDeclaration7_es6.js new file mode 100644 index 00000000000..661e1668e0f --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration7_es6.js @@ -0,0 +1,14 @@ +//// [FunctionDeclaration7_es6.ts] +function*bar() { + // 'yield' here is an identifier, and not a yield expression. + function*foo(a = yield) { + } +} + +//// [FunctionDeclaration7_es6.js] +function bar() { + // 'yield' here is an identifier, and not a yield expression. + function foo(a) { + if (a === void 0) { a = yield; } + } +} diff --git a/tests/baselines/reference/FunctionDeclaration8_es6.js b/tests/baselines/reference/FunctionDeclaration8_es6.js new file mode 100644 index 00000000000..5f9f0a2a49e --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration8_es6.js @@ -0,0 +1,5 @@ +//// [FunctionDeclaration8_es6.ts] +var v = { [yield]: foo } + +//// [FunctionDeclaration8_es6.js] +var v = { [yield]: foo }; diff --git a/tests/baselines/reference/FunctionDeclaration9_es6.js b/tests/baselines/reference/FunctionDeclaration9_es6.js new file mode 100644 index 00000000000..388275ed4fa --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration9_es6.js @@ -0,0 +1,9 @@ +//// [FunctionDeclaration9_es6.ts] +function * foo() { + var v = { [yield]: foo } +} + +//// [FunctionDeclaration9_es6.js] +function foo() { + var v = { []: foo }; +} diff --git a/tests/baselines/reference/FunctionExpression1_es6.js b/tests/baselines/reference/FunctionExpression1_es6.js new file mode 100644 index 00000000000..7c8d82f4ca8 --- /dev/null +++ b/tests/baselines/reference/FunctionExpression1_es6.js @@ -0,0 +1,6 @@ +//// [FunctionExpression1_es6.ts] +var v = function * () { } + +//// [FunctionExpression1_es6.js] +var v = function () { +}; diff --git a/tests/baselines/reference/FunctionExpression2_es6.js b/tests/baselines/reference/FunctionExpression2_es6.js new file mode 100644 index 00000000000..0a2468bcb8c --- /dev/null +++ b/tests/baselines/reference/FunctionExpression2_es6.js @@ -0,0 +1,6 @@ +//// [FunctionExpression2_es6.ts] +var v = function * foo() { } + +//// [FunctionExpression2_es6.js] +var v = function foo() { +}; diff --git a/tests/baselines/reference/FunctionPropertyAssignments1_es6.js b/tests/baselines/reference/FunctionPropertyAssignments1_es6.js new file mode 100644 index 00000000000..a451dcfb363 --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments1_es6.js @@ -0,0 +1,6 @@ +//// [FunctionPropertyAssignments1_es6.ts] +var v = { *foo() { } } + +//// [FunctionPropertyAssignments1_es6.js] +var v = { foo: function () { +} }; diff --git a/tests/baselines/reference/FunctionPropertyAssignments5_es6.js b/tests/baselines/reference/FunctionPropertyAssignments5_es6.js new file mode 100644 index 00000000000..2bfc675acff --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments5_es6.js @@ -0,0 +1,6 @@ +//// [FunctionPropertyAssignments5_es6.ts] +var v = { *[foo()]() { } } + +//// [FunctionPropertyAssignments5_es6.js] +var v = { [foo()]: function () { +} }; diff --git a/tests/baselines/reference/MemberAccessorDeclaration15.js b/tests/baselines/reference/MemberAccessorDeclaration15.js new file mode 100644 index 00000000000..41ed265a878 --- /dev/null +++ b/tests/baselines/reference/MemberAccessorDeclaration15.js @@ -0,0 +1,17 @@ +//// [MemberAccessorDeclaration15.ts] +class C { + set Foo(public a: number) { } +} + +//// [MemberAccessorDeclaration15.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration1_es6.js b/tests/baselines/reference/MemberFunctionDeclaration1_es6.js new file mode 100644 index 00000000000..86e7c9d418a --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration1_es6.js @@ -0,0 +1,13 @@ +//// [MemberFunctionDeclaration1_es6.ts] +class C { + *foo() { } +} + +//// [MemberFunctionDeclaration1_es6.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration2_es6.js b/tests/baselines/reference/MemberFunctionDeclaration2_es6.js new file mode 100644 index 00000000000..efd60844dc7 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration2_es6.js @@ -0,0 +1,13 @@ +//// [MemberFunctionDeclaration2_es6.ts] +class C { + public * foo() { } +} + +//// [MemberFunctionDeclaration2_es6.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration3_es6.js b/tests/baselines/reference/MemberFunctionDeclaration3_es6.js new file mode 100644 index 00000000000..357f9175b42 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration3_es6.js @@ -0,0 +1,13 @@ +//// [MemberFunctionDeclaration3_es6.ts] +class C { + *[foo]() { } +} + +//// [MemberFunctionDeclaration3_es6.js] +var C = (function () { + function C() { + } + C.prototype[foo] = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration7_es6.js b/tests/baselines/reference/MemberFunctionDeclaration7_es6.js new file mode 100644 index 00000000000..211713c6e14 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration7_es6.js @@ -0,0 +1,13 @@ +//// [MemberFunctionDeclaration7_es6.ts] +class C { + *foo() { } +} + +//// [MemberFunctionDeclaration7_es6.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/Protected1.js b/tests/baselines/reference/Protected1.js new file mode 100644 index 00000000000..eebce2f4ecc --- /dev/null +++ b/tests/baselines/reference/Protected1.js @@ -0,0 +1,10 @@ +//// [Protected1.ts] +protected class C { +} + +//// [Protected1.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/Protected2.js b/tests/baselines/reference/Protected2.js new file mode 100644 index 00000000000..6675d9d50fb --- /dev/null +++ b/tests/baselines/reference/Protected2.js @@ -0,0 +1,5 @@ +//// [Protected2.ts] +protected module M { +} + +//// [Protected2.js] diff --git a/tests/baselines/reference/Protected3.js b/tests/baselines/reference/Protected3.js new file mode 100644 index 00000000000..4c4d5e2a12c --- /dev/null +++ b/tests/baselines/reference/Protected3.js @@ -0,0 +1,11 @@ +//// [Protected3.ts] +class C { + protected constructor() { } +} + +//// [Protected3.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/Protected4.js b/tests/baselines/reference/Protected4.js new file mode 100644 index 00000000000..665a182ef33 --- /dev/null +++ b/tests/baselines/reference/Protected4.js @@ -0,0 +1,13 @@ +//// [Protected4.ts] +class C { + protected public m() { } +} + +//// [Protected4.js] +var C = (function () { + function C() { + } + C.prototype.m = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/Protected6.js b/tests/baselines/reference/Protected6.js new file mode 100644 index 00000000000..004f30b27f8 --- /dev/null +++ b/tests/baselines/reference/Protected6.js @@ -0,0 +1,13 @@ +//// [Protected6.ts] +class C { + static protected m() { } +} + +//// [Protected6.js] +var C = (function () { + function C() { + } + C.m = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/Protected7.js b/tests/baselines/reference/Protected7.js new file mode 100644 index 00000000000..466f6909d67 --- /dev/null +++ b/tests/baselines/reference/Protected7.js @@ -0,0 +1,13 @@ +//// [Protected7.ts] +class C { + protected private m() { } +} + +//// [Protected7.js] +var C = (function () { + function C() { + } + C.prototype.m = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/TupleType3.js b/tests/baselines/reference/TupleType3.js new file mode 100644 index 00000000000..8d357a77be7 --- /dev/null +++ b/tests/baselines/reference/TupleType3.js @@ -0,0 +1,5 @@ +//// [TupleType3.ts] +var v: [] + +//// [TupleType3.js] +var v; diff --git a/tests/baselines/reference/TupleType5.js b/tests/baselines/reference/TupleType5.js new file mode 100644 index 00000000000..5e9a0a580be --- /dev/null +++ b/tests/baselines/reference/TupleType5.js @@ -0,0 +1,5 @@ +//// [TupleType5.ts] +var v: [number,] + +//// [TupleType5.js] +var v; diff --git a/tests/baselines/reference/VariableDeclaration10_es6.js b/tests/baselines/reference/VariableDeclaration10_es6.js new file mode 100644 index 00000000000..14f47cea04d --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration10_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration10_es6.ts] +let a: number = 1 + +//// [VariableDeclaration10_es6.js] +let a = 1; diff --git a/tests/baselines/reference/VariableDeclaration11_es6.js b/tests/baselines/reference/VariableDeclaration11_es6.js new file mode 100644 index 00000000000..83eec6d9a13 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration11_es6.js @@ -0,0 +1,7 @@ +//// [VariableDeclaration11_es6.ts] +"use strict"; +let + +//// [VariableDeclaration11_es6.js] +"use strict"; +let ; diff --git a/tests/baselines/reference/VariableDeclaration1_es6.js b/tests/baselines/reference/VariableDeclaration1_es6.js new file mode 100644 index 00000000000..26433bd88c3 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration1_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration1_es6.ts] +const + +//// [VariableDeclaration1_es6.js] +const ; diff --git a/tests/baselines/reference/VariableDeclaration2_es6.js b/tests/baselines/reference/VariableDeclaration2_es6.js new file mode 100644 index 00000000000..a955315a2f0 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration2_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration2_es6.ts] +const a + +//// [VariableDeclaration2_es6.js] +const a; diff --git a/tests/baselines/reference/VariableDeclaration3_es6.js b/tests/baselines/reference/VariableDeclaration3_es6.js new file mode 100644 index 00000000000..4be8a3daf38 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration3_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration3_es6.ts] +const a = 1 + +//// [VariableDeclaration3_es6.js] +const a = 1; diff --git a/tests/baselines/reference/VariableDeclaration4_es6.js b/tests/baselines/reference/VariableDeclaration4_es6.js new file mode 100644 index 00000000000..7a9934e052b --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration4_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration4_es6.ts] +const a: number + +//// [VariableDeclaration4_es6.js] +const a; diff --git a/tests/baselines/reference/VariableDeclaration5_es6.js b/tests/baselines/reference/VariableDeclaration5_es6.js new file mode 100644 index 00000000000..e6a3c175651 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration5_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration5_es6.ts] +const a: number = 1 + +//// [VariableDeclaration5_es6.js] +const a = 1; diff --git a/tests/baselines/reference/VariableDeclaration7_es6.js b/tests/baselines/reference/VariableDeclaration7_es6.js new file mode 100644 index 00000000000..00ab95503a6 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration7_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration7_es6.ts] +let a + +//// [VariableDeclaration7_es6.js] +let a; diff --git a/tests/baselines/reference/VariableDeclaration8_es6.js b/tests/baselines/reference/VariableDeclaration8_es6.js new file mode 100644 index 00000000000..9178871ef65 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration8_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration8_es6.ts] +let a = 1 + +//// [VariableDeclaration8_es6.js] +let a = 1; diff --git a/tests/baselines/reference/VariableDeclaration9_es6.js b/tests/baselines/reference/VariableDeclaration9_es6.js new file mode 100644 index 00000000000..b22c5691eb2 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration9_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration9_es6.ts] +let a: number + +//// [VariableDeclaration9_es6.js] +let a; diff --git a/tests/baselines/reference/YieldExpression10_es6.js b/tests/baselines/reference/YieldExpression10_es6.js new file mode 100644 index 00000000000..f111e6e1bdf --- /dev/null +++ b/tests/baselines/reference/YieldExpression10_es6.js @@ -0,0 +1,11 @@ +//// [YieldExpression10_es6.ts] +var v = { * foo() { + yield(foo); + } +} + + +//// [YieldExpression10_es6.js] +var v = { foo: function () { + ; +} }; diff --git a/tests/baselines/reference/YieldExpression11_es6.js b/tests/baselines/reference/YieldExpression11_es6.js new file mode 100644 index 00000000000..306cef3051e --- /dev/null +++ b/tests/baselines/reference/YieldExpression11_es6.js @@ -0,0 +1,16 @@ +//// [YieldExpression11_es6.ts] +class C { + *foo() { + yield(foo); + } +} + +//// [YieldExpression11_es6.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + ; + }; + return C; +})(); diff --git a/tests/baselines/reference/YieldExpression12_es6.js b/tests/baselines/reference/YieldExpression12_es6.js new file mode 100644 index 00000000000..020340fc4a3 --- /dev/null +++ b/tests/baselines/reference/YieldExpression12_es6.js @@ -0,0 +1,14 @@ +//// [YieldExpression12_es6.ts] +class C { + constructor() { + yield foo + } +} + +//// [YieldExpression12_es6.js] +var C = (function () { + function C() { + ; + } + return C; +})(); diff --git a/tests/baselines/reference/YieldExpression13_es6.js b/tests/baselines/reference/YieldExpression13_es6.js new file mode 100644 index 00000000000..328fc80dbdd --- /dev/null +++ b/tests/baselines/reference/YieldExpression13_es6.js @@ -0,0 +1,7 @@ +//// [YieldExpression13_es6.ts] +function* foo() { yield } + +//// [YieldExpression13_es6.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression14_es6.js b/tests/baselines/reference/YieldExpression14_es6.js new file mode 100644 index 00000000000..132890b1b6a --- /dev/null +++ b/tests/baselines/reference/YieldExpression14_es6.js @@ -0,0 +1,16 @@ +//// [YieldExpression14_es6.ts] +class C { + foo() { + yield foo + } +} + +//// [YieldExpression14_es6.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + ; + }; + return C; +})(); diff --git a/tests/baselines/reference/YieldExpression15_es6.js b/tests/baselines/reference/YieldExpression15_es6.js new file mode 100644 index 00000000000..13e6b92a577 --- /dev/null +++ b/tests/baselines/reference/YieldExpression15_es6.js @@ -0,0 +1,9 @@ +//// [YieldExpression15_es6.ts] +var v = () => { + yield foo + } + +//// [YieldExpression15_es6.js] +var v = function () { + ; +}; diff --git a/tests/baselines/reference/YieldExpression16_es6.js b/tests/baselines/reference/YieldExpression16_es6.js new file mode 100644 index 00000000000..ee73439a2d5 --- /dev/null +++ b/tests/baselines/reference/YieldExpression16_es6.js @@ -0,0 +1,13 @@ +//// [YieldExpression16_es6.ts] +function* foo() { + function bar() { + yield foo; + } +} + +//// [YieldExpression16_es6.js] +function foo() { + function bar() { + ; + } +} diff --git a/tests/baselines/reference/YieldExpression17_es6.js b/tests/baselines/reference/YieldExpression17_es6.js new file mode 100644 index 00000000000..6fd39844d80 --- /dev/null +++ b/tests/baselines/reference/YieldExpression17_es6.js @@ -0,0 +1,7 @@ +//// [YieldExpression17_es6.ts] +var v = { get foo() { yield foo; } } + +//// [YieldExpression17_es6.js] +var v = { get foo() { + ; +} }; diff --git a/tests/baselines/reference/YieldExpression18_es6.js b/tests/baselines/reference/YieldExpression18_es6.js new file mode 100644 index 00000000000..7fb630b9c08 --- /dev/null +++ b/tests/baselines/reference/YieldExpression18_es6.js @@ -0,0 +1,7 @@ +//// [YieldExpression18_es6.ts] +"use strict"; +yield(foo); + +//// [YieldExpression18_es6.js] +"use strict"; +; diff --git a/tests/baselines/reference/YieldExpression19_es6.js b/tests/baselines/reference/YieldExpression19_es6.js new file mode 100644 index 00000000000..91643e09b0e --- /dev/null +++ b/tests/baselines/reference/YieldExpression19_es6.js @@ -0,0 +1,17 @@ +//// [YieldExpression19_es6.ts] +function*foo() { + function bar() { + function* quux() { + yield(foo); + } + } +} + +//// [YieldExpression19_es6.js] +function foo() { + function bar() { + function quux() { + ; + } + } +} diff --git a/tests/baselines/reference/YieldExpression2_es6.js b/tests/baselines/reference/YieldExpression2_es6.js new file mode 100644 index 00000000000..0207b8afca0 --- /dev/null +++ b/tests/baselines/reference/YieldExpression2_es6.js @@ -0,0 +1,5 @@ +//// [YieldExpression2_es6.ts] +yield foo; + +//// [YieldExpression2_es6.js] +; diff --git a/tests/baselines/reference/YieldExpression3_es6.js b/tests/baselines/reference/YieldExpression3_es6.js new file mode 100644 index 00000000000..cc3716587ea --- /dev/null +++ b/tests/baselines/reference/YieldExpression3_es6.js @@ -0,0 +1,11 @@ +//// [YieldExpression3_es6.ts] +function* foo() { + yield + yield +} + +//// [YieldExpression3_es6.js] +function foo() { + ; + ; +} diff --git a/tests/baselines/reference/YieldExpression4_es6.js b/tests/baselines/reference/YieldExpression4_es6.js new file mode 100644 index 00000000000..84b11a03a2c --- /dev/null +++ b/tests/baselines/reference/YieldExpression4_es6.js @@ -0,0 +1,11 @@ +//// [YieldExpression4_es6.ts] +function* foo() { + yield; + yield; +} + +//// [YieldExpression4_es6.js] +function foo() { + ; + ; +} diff --git a/tests/baselines/reference/YieldExpression6_es6.js b/tests/baselines/reference/YieldExpression6_es6.js new file mode 100644 index 00000000000..5024e9bbd40 --- /dev/null +++ b/tests/baselines/reference/YieldExpression6_es6.js @@ -0,0 +1,9 @@ +//// [YieldExpression6_es6.ts] +function* foo() { + yield*foo +} + +//// [YieldExpression6_es6.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression7_es6.js b/tests/baselines/reference/YieldExpression7_es6.js new file mode 100644 index 00000000000..96ef5af107e --- /dev/null +++ b/tests/baselines/reference/YieldExpression7_es6.js @@ -0,0 +1,9 @@ +//// [YieldExpression7_es6.ts] +function* foo() { + yield foo +} + +//// [YieldExpression7_es6.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression8_es6.js b/tests/baselines/reference/YieldExpression8_es6.js new file mode 100644 index 00000000000..190c2cc3da5 --- /dev/null +++ b/tests/baselines/reference/YieldExpression8_es6.js @@ -0,0 +1,11 @@ +//// [YieldExpression8_es6.ts] +yield(foo); +function* foo() { + yield(foo); +} + +//// [YieldExpression8_es6.js] +yield(foo); +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression9_es6.js b/tests/baselines/reference/YieldExpression9_es6.js new file mode 100644 index 00000000000..978e0d455bd --- /dev/null +++ b/tests/baselines/reference/YieldExpression9_es6.js @@ -0,0 +1,9 @@ +//// [YieldExpression9_es6.ts] +var v = function*() { + yield(foo); +} + +//// [YieldExpression9_es6.js] +var v = function () { + ; +}; diff --git a/tests/baselines/reference/accessibilityModifiers.js b/tests/baselines/reference/accessibilityModifiers.js new file mode 100644 index 00000000000..901b3a29c2e --- /dev/null +++ b/tests/baselines/reference/accessibilityModifiers.js @@ -0,0 +1,171 @@ +//// [accessibilityModifiers.ts] + +// No errors +class C { + private static privateProperty; + private static privateMethod() { } + private static get privateGetter() { return 0; } + private static set privateSetter(a: number) { } + + protected static protectedProperty; + protected static protectedMethod() { } + protected static get protectedGetter() { return 0; } + protected static set protectedSetter(a: number) { } + + public static publicProperty; + public static publicMethod() { } + public static get publicGetter() { return 0; } + public static set publicSetter(a: number) { } +} + +// Errors, accessibility modifiers must precede static +class D { + static private privateProperty; + static private privateMethod() { } + static private get privateGetter() { return 0; } + static private set privateSetter(a: number) { } + + static protected protectedProperty; + static protected protectedMethod() { } + static protected get protectedGetter() { return 0; } + static protected set protectedSetter(a: number) { } + + static public publicProperty; + static public publicMethod() { } + static public get publicGetter() { return 0; } + static public set publicSetter(a: number) { } +} + +// Errors, multiple accessibility modifier +class E { + private public protected property; + public protected method() { } + private protected get getter() { return 0; } + public public set setter(a: number) { } +} + + +//// [accessibilityModifiers.js] +// No errors +var C = (function () { + function C() { + } + C.privateMethod = function () { + }; + Object.defineProperty(C, "privateGetter", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "privateSetter", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + C.protectedMethod = function () { + }; + Object.defineProperty(C, "protectedGetter", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "protectedSetter", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + C.publicMethod = function () { + }; + Object.defineProperty(C, "publicGetter", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "publicSetter", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); +// Errors, accessibility modifiers must precede static +var D = (function () { + function D() { + } + D.privateMethod = function () { + }; + Object.defineProperty(D, "privateGetter", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(D, "privateSetter", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + D.protectedMethod = function () { + }; + Object.defineProperty(D, "protectedGetter", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(D, "protectedSetter", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + D.publicMethod = function () { + }; + Object.defineProperty(D, "publicGetter", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(D, "publicSetter", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + return D; +})(); +// Errors, multiple accessibility modifier +var E = (function () { + function E() { + } + E.prototype.method = function () { + }; + Object.defineProperty(E.prototype, "getter", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(E.prototype, "setter", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + return E; +})(); diff --git a/tests/baselines/reference/accessorWithES3.js b/tests/baselines/reference/accessorWithES3.js new file mode 100644 index 00000000000..6eba5238a91 --- /dev/null +++ b/tests/baselines/reference/accessorWithES3.js @@ -0,0 +1,57 @@ +//// [accessorWithES3.ts] + +// error to use accessors in ES3 mode + +class C { + get x() { + return 1; + } +} + +class D { + set x(v) { + } +} + +var x = { + get a() { return 1 } +} + +var y = { + set b(v) { } +} + +//// [accessorWithES3.js] +// error to use accessors in ES3 mode +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var D = (function () { + function D() { + } + Object.defineProperty(D.prototype, "x", { + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return D; +})(); +var x = { + get a() { + return 1; + } +}; +var y = { + set b(v) { + } +}; diff --git a/tests/baselines/reference/accessorWithInitializer.js b/tests/baselines/reference/accessorWithInitializer.js new file mode 100644 index 00000000000..26e72fe7d7d --- /dev/null +++ b/tests/baselines/reference/accessorWithInitializer.js @@ -0,0 +1,27 @@ +//// [accessorWithInitializer.ts] + +class C { + set X(v = 0) { } + static set X(v2 = 0) { } +} + +//// [accessorWithInitializer.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "X", { + set: function (v) { + if (v === void 0) { v = 0; } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "X", { + set: function (v2) { + if (v2 === void 0) { v2 = 0; } + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/accessorWithRestParam.js b/tests/baselines/reference/accessorWithRestParam.js new file mode 100644 index 00000000000..9feafe1904d --- /dev/null +++ b/tests/baselines/reference/accessorWithRestParam.js @@ -0,0 +1,33 @@ +//// [accessorWithRestParam.ts] + +class C { + set X(...v) { } + static set X(...v2) { } +} + +//// [accessorWithRestParam.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "X", { + set: function () { + var v = []; + for (var _i = 0; _i < arguments.length; _i++) { + v[_i - 0] = arguments[_i]; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "X", { + set: function () { + var v2 = []; + for (var _i = 0; _i < arguments.length; _i++) { + v2[_i - 0] = arguments[_i]; + } + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/accessorWithoutBody1.js b/tests/baselines/reference/accessorWithoutBody1.js new file mode 100644 index 00000000000..37f0ecbcfee --- /dev/null +++ b/tests/baselines/reference/accessorWithoutBody1.js @@ -0,0 +1,6 @@ +//// [accessorWithoutBody1.ts] +var v = { get foo() } + +//// [accessorWithoutBody1.js] +var v = { get foo() { +} }; diff --git a/tests/baselines/reference/accessorWithoutBody2.js b/tests/baselines/reference/accessorWithoutBody2.js new file mode 100644 index 00000000000..9dc34c1e744 --- /dev/null +++ b/tests/baselines/reference/accessorWithoutBody2.js @@ -0,0 +1,6 @@ +//// [accessorWithoutBody2.ts] +var v = { set foo(a) } + +//// [accessorWithoutBody2.js] +var v = { set foo(a) { +} }; diff --git a/tests/baselines/reference/accessorsAreNotContextuallyTyped.js b/tests/baselines/reference/accessorsAreNotContextuallyTyped.js new file mode 100644 index 00000000000..8c01173a13c --- /dev/null +++ b/tests/baselines/reference/accessorsAreNotContextuallyTyped.js @@ -0,0 +1,33 @@ +//// [accessorsAreNotContextuallyTyped.ts] +// accessors are not contextually typed + +class C { + set x(v: (a: string) => string) { + } + + get x() { + return (x: string) => ""; + } +} + +var c: C; +var r = c.x(''); // string + +//// [accessorsAreNotContextuallyTyped.js] +// accessors are not contextually typed +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return function (x) { return ""; }; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var c; +var r = c.x(''); // string diff --git a/tests/baselines/reference/accessorsEmit.js b/tests/baselines/reference/accessorsEmit.js new file mode 100644 index 00000000000..e2c097e263f --- /dev/null +++ b/tests/baselines/reference/accessorsEmit.js @@ -0,0 +1,49 @@ +//// [accessorsEmit.ts] +class Result { } + +class Test { + get Property(): Result { + var x = 1; + return null; + } +} + +class Test2 { + get Property() { + var x = 1; + return null; + } +} + +//// [accessorsEmit.js] +var Result = (function () { + function Result() { + } + return Result; +})(); +var Test = (function () { + function Test() { + } + Object.defineProperty(Test.prototype, "Property", { + get: function () { + var x = 1; + return null; + }, + enumerable: true, + configurable: true + }); + return Test; +})(); +var Test2 = (function () { + function Test2() { + } + Object.defineProperty(Test2.prototype, "Property", { + get: function () { + var x = 1; + return null; + }, + enumerable: true, + configurable: true + }); + return Test2; +})(); diff --git a/tests/baselines/reference/accessorsInAmbientContext.js b/tests/baselines/reference/accessorsInAmbientContext.js new file mode 100644 index 00000000000..e60831ede5b --- /dev/null +++ b/tests/baselines/reference/accessorsInAmbientContext.js @@ -0,0 +1,21 @@ +//// [accessorsInAmbientContext.ts] + +declare module M { + class C { + get X() { return 1; } + set X(v) { } + + static get Y() { return 1; } + static set Y(v) { } + } +} + +declare class C { + get X() { return 1; } + set X(v) { } + + static get Y() { return 1; } + static set Y(v) { } +} + +//// [accessorsInAmbientContext.js] diff --git a/tests/baselines/reference/accessorsNotAllowedInES3.js b/tests/baselines/reference/accessorsNotAllowedInES3.js new file mode 100644 index 00000000000..5cb5a5dc47a --- /dev/null +++ b/tests/baselines/reference/accessorsNotAllowedInES3.js @@ -0,0 +1,24 @@ +//// [accessorsNotAllowedInES3.ts] + +class C { + get x(): number { return 1; } +} +var y = { get foo() { return 3; } }; + + +//// [accessorsNotAllowedInES3.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var y = { get foo() { + return 3; +} }; diff --git a/tests/baselines/reference/accessors_spec_section-4.5_error-cases.js b/tests/baselines/reference/accessors_spec_section-4.5_error-cases.js new file mode 100644 index 00000000000..6a3b3773aa6 --- /dev/null +++ b/tests/baselines/reference/accessors_spec_section-4.5_error-cases.js @@ -0,0 +1,59 @@ +//// [accessors_spec_section-4.5_error-cases.ts] +class LanguageSpec_section_4_5_error_cases { + public set AnnotatedSetter_SetterFirst(a: number) { } + public get AnnotatedSetter_SetterFirst() { return ""; } + + public get AnnotatedSetter_SetterLast() { return ""; } + public set AnnotatedSetter_SetterLast(a: number) { } + + public get AnnotatedGetter_GetterFirst(): string { return ""; } + public set AnnotatedGetter_GetterFirst(aStr) { aStr = 0; } + + public set AnnotatedGetter_GetterLast(aStr) { aStr = 0; } + public get AnnotatedGetter_GetterLast(): string { return ""; } +} + +//// [accessors_spec_section-4.5_error-cases.js] +var LanguageSpec_section_4_5_error_cases = (function () { + function LanguageSpec_section_4_5_error_cases() { + } + Object.defineProperty(LanguageSpec_section_4_5_error_cases.prototype, "AnnotatedSetter_SetterFirst", { + get: function () { + return ""; + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LanguageSpec_section_4_5_error_cases.prototype, "AnnotatedSetter_SetterLast", { + get: function () { + return ""; + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LanguageSpec_section_4_5_error_cases.prototype, "AnnotatedGetter_GetterFirst", { + get: function () { + return ""; + }, + set: function (aStr) { + aStr = 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LanguageSpec_section_4_5_error_cases.prototype, "AnnotatedGetter_GetterLast", { + get: function () { + return ""; + }, + set: function (aStr) { + aStr = 0; + }, + enumerable: true, + configurable: true + }); + return LanguageSpec_section_4_5_error_cases; +})(); diff --git a/tests/baselines/reference/accessors_spec_section-4.5_inference.js b/tests/baselines/reference/accessors_spec_section-4.5_inference.js new file mode 100644 index 00000000000..b140e565b29 --- /dev/null +++ b/tests/baselines/reference/accessors_spec_section-4.5_inference.js @@ -0,0 +1,104 @@ +//// [accessors_spec_section-4.5_inference.ts] +class A { } +class B extends A { } + +class LanguageSpec_section_4_5_inference { + + public set InferredGetterFromSetterAnnotation(a: A) { } + public get InferredGetterFromSetterAnnotation() { return new B(); } + + public get InferredGetterFromSetterAnnotation_GetterFirst() { return new B(); } + public set InferredGetterFromSetterAnnotation_GetterFirst(a: A) { } + + + public get InferredFromGetter() { return new B(); } + public set InferredFromGetter(a) { } + + public set InferredFromGetter_SetterFirst(a) { } + public get InferredFromGetter_SetterFirst() { return new B(); } + + public set InferredSetterFromGetterAnnotation(a) { } + public get InferredSetterFromGetterAnnotation() : A { return new B(); } + + public get InferredSetterFromGetterAnnotation_GetterFirst() : A { return new B(); } + public set InferredSetterFromGetterAnnotation_GetterFirst(a) { } +} + +//// [accessors_spec_section-4.5_inference.js] +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 = (function () { + function A() { + } + return A; +})(); +var B = (function (_super) { + __extends(B, _super); + function B() { + _super.apply(this, arguments); + } + return B; +})(A); +var LanguageSpec_section_4_5_inference = (function () { + function LanguageSpec_section_4_5_inference() { + } + Object.defineProperty(LanguageSpec_section_4_5_inference.prototype, "InferredGetterFromSetterAnnotation", { + get: function () { + return new B(); + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LanguageSpec_section_4_5_inference.prototype, "InferredGetterFromSetterAnnotation_GetterFirst", { + get: function () { + return new B(); + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LanguageSpec_section_4_5_inference.prototype, "InferredFromGetter", { + get: function () { + return new B(); + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LanguageSpec_section_4_5_inference.prototype, "InferredFromGetter_SetterFirst", { + get: function () { + return new B(); + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LanguageSpec_section_4_5_inference.prototype, "InferredSetterFromGetterAnnotation", { + get: function () { + return new B(); + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LanguageSpec_section_4_5_inference.prototype, "InferredSetterFromGetterAnnotation_GetterFirst", { + get: function () { + return new B(); + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + return LanguageSpec_section_4_5_inference; +})(); diff --git a/tests/baselines/reference/ambientEnum1.js b/tests/baselines/reference/ambientEnum1.js new file mode 100644 index 00000000000..8a477ab99fa --- /dev/null +++ b/tests/baselines/reference/ambientEnum1.js @@ -0,0 +1,11 @@ +//// [ambientEnum1.ts] + declare enum E1 { + y = 4.23 + } + + // Ambient enum with computer member + declare enum E2 { + x = 'foo'.length + } + +//// [ambientEnum1.js] diff --git a/tests/baselines/reference/ambientEnumElementInitializer3.js b/tests/baselines/reference/ambientEnumElementInitializer3.js new file mode 100644 index 00000000000..7a7a077ff8f --- /dev/null +++ b/tests/baselines/reference/ambientEnumElementInitializer3.js @@ -0,0 +1,6 @@ +//// [ambientEnumElementInitializer3.ts] +declare enum E { + e = 3.3 // Decimal +} + +//// [ambientEnumElementInitializer3.js] diff --git a/tests/baselines/reference/ambientErrors.js b/tests/baselines/reference/ambientErrors.js new file mode 100644 index 00000000000..c524a6cfe72 --- /dev/null +++ b/tests/baselines/reference/ambientErrors.js @@ -0,0 +1,63 @@ +//// [ambientErrors.ts] +// Ambient variable with an initializer +declare var x = 4; + +// Ambient functions with invalid overloads +declare function fn(x: number): string; +declare function fn(x: 'foo'): number; + +// Ambient functions with duplicate signatures +declare function fn1(x: number): string; +declare function fn1(x: number): string; + +// Ambient function overloads that differ only by return type +declare function fn2(x: number): string; +declare function fn2(x: number): number; + +// Ambient function with default parameter values +declare function fn3(x = 3); + +// Ambient function with function body +declare function fn4() { }; + +// Ambient enum with non - integer literal constant member +declare enum E1 { + y = 4.23 +} + +// Ambient enum with computer member +declare enum E2 { + x = 'foo'.length +} + +// Ambient module with initializers for values, bodies for functions / classes +declare module M1 { + var x = 3; + function fn() { } + class C { + static x = 3; + y = 4; + constructor() { } + fn() { } + static sfn() { } + } +} + +// Ambient external module not in the global module +module M2 { + declare module 'nope' { } +} + +// Ambient external module with a string literal name that isn't a top level external module name +declare module '../foo' { } + +// Ambient external module with export assignment and other exported members +declare module 'bar' { + var n; + export var q; + export = n; +} + + +//// [ambientErrors.js] +; diff --git a/tests/baselines/reference/ambientErrors1.js b/tests/baselines/reference/ambientErrors1.js new file mode 100644 index 00000000000..8605489d3df --- /dev/null +++ b/tests/baselines/reference/ambientErrors1.js @@ -0,0 +1,4 @@ +//// [ambientErrors1.ts] +declare var x = 4; + +//// [ambientErrors1.js] diff --git a/tests/baselines/reference/ambientGetters.js b/tests/baselines/reference/ambientGetters.js new file mode 100644 index 00000000000..9e267a1dddb --- /dev/null +++ b/tests/baselines/reference/ambientGetters.js @@ -0,0 +1,11 @@ +//// [ambientGetters.ts] + +declare class A { + get length() : number; +} + +declare class B { + get length() { return 0; } +} + +//// [ambientGetters.js] diff --git a/tests/baselines/reference/ambientStatement1.js b/tests/baselines/reference/ambientStatement1.js new file mode 100644 index 00000000000..f986f9717ad --- /dev/null +++ b/tests/baselines/reference/ambientStatement1.js @@ -0,0 +1,8 @@ +//// [ambientStatement1.ts] + declare module M1 { + while(true); + + export var v1 = () => false; + } + +//// [ambientStatement1.js] diff --git a/tests/baselines/reference/ambientWithStatements.js b/tests/baselines/reference/ambientWithStatements.js new file mode 100644 index 00000000000..997916d0bf7 --- /dev/null +++ b/tests/baselines/reference/ambientWithStatements.js @@ -0,0 +1,30 @@ +//// [ambientWithStatements.ts] +declare module M { + break; + continue; + debugger; + do { } while (true); + var x; + for (x in null) { } + if (true) { } else { } + 1; + L: var y; + return; + switch (x) { + case 1: + break; + default: + break; + } + throw "nooo"; + try { + } + catch (e) { + } + finally { + } + with (x) { + } +} + +//// [ambientWithStatements.js] diff --git a/tests/baselines/reference/anyIdenticalToItself.js b/tests/baselines/reference/anyIdenticalToItself.js new file mode 100644 index 00000000000..dc221b69aa7 --- /dev/null +++ b/tests/baselines/reference/anyIdenticalToItself.js @@ -0,0 +1,32 @@ +//// [anyIdenticalToItself.ts] +function foo(x: any); +function foo(x: any); +function foo(x: any, y: number) { } + +class C { + get X(): any { + var y: any; + return y; + } + set X(v: any) { + } +} + +//// [anyIdenticalToItself.js] +function foo(x, y) { +} +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "X", { + get: function () { + var y; + return y; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/arraySigChecking.js b/tests/baselines/reference/arraySigChecking.js new file mode 100644 index 00000000000..16189305ead --- /dev/null +++ b/tests/baselines/reference/arraySigChecking.js @@ -0,0 +1,46 @@ +//// [arraySigChecking.ts] +declare module M { + interface iBar { t: any; } + interface iFoo extends iBar { + s: any; + } + + class cFoo { + t: any; + } + + var foo: { [index: any]; }; // expect an error here +} + +interface myInt { + voidFn(): void; +} +var myVar: myInt; +var strArray: string[] = [myVar.voidFn()]; + + +var myArray: number[][][]; +myArray = [[1, 2]]; + +function isEmpty(l: { length: number }) { + return l.length === 0; +} + +isEmpty([]); +isEmpty(new Array(3)); +isEmpty(new Array(3)); +isEmpty(['a']); + + +//// [arraySigChecking.js] +var myVar; +var strArray = [myVar.voidFn()]; +var myArray; +myArray = [[1, 2]]; +function isEmpty(l) { + return l.length === 0; +} +isEmpty([]); +isEmpty(new Array(3)); +isEmpty(new Array(3)); +isEmpty(['a']); diff --git a/tests/baselines/reference/asiReturn.js b/tests/baselines/reference/asiReturn.js new file mode 100644 index 00000000000..ef2aada682c --- /dev/null +++ b/tests/baselines/reference/asiReturn.js @@ -0,0 +1,7 @@ +//// [asiReturn.ts] +// This should be an error for using a return outside a function, but ASI should work properly +return + +//// [asiReturn.js] +// This should be an error for using a return outside a function, but ASI should work properly +return; diff --git a/tests/baselines/reference/assignmentCompatBug3.js b/tests/baselines/reference/assignmentCompatBug3.js new file mode 100644 index 00000000000..6d3deedc5b8 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatBug3.js @@ -0,0 +1,61 @@ +//// [assignmentCompatBug3.ts] +function makePoint(x: number, y: number) { + return { + get x() { return x;}, // shouldn't be "void" + get y() { return y;}, // shouldn't be "void" + //x: "yo", + //y: "boo", + dist: function () { + return Math.sqrt(x*x+y*y); // shouldn't be picking up "x" and "y" from the object lit + } + } +} + +class C { + get x() { + return 0; + } +} + +function foo(test: string) { } + +var x: any; +var y: any; + +foo(x); +foo(x + y); + +//// [assignmentCompatBug3.js] +function makePoint(x, y) { + return { + get x() { + return x; + }, + get y() { + return y; + }, + //x: "yo", + //y: "boo", + dist: function () { + return Math.sqrt(x * x + y * y); // shouldn't be picking up "x" and "y" from the object lit + } + }; +} +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +function foo(test) { +} +var x; +var y; +foo(x); +foo(x + y); diff --git a/tests/baselines/reference/badArrayIndex.js b/tests/baselines/reference/badArrayIndex.js new file mode 100644 index 00000000000..210dd6add8e --- /dev/null +++ b/tests/baselines/reference/badArrayIndex.js @@ -0,0 +1,5 @@ +//// [badArrayIndex.ts] +var results = number[]; + +//// [badArrayIndex.js] +var results = number[]; diff --git a/tests/baselines/reference/badArraySyntax.js b/tests/baselines/reference/badArraySyntax.js new file mode 100644 index 00000000000..f5ca1e0c0ba --- /dev/null +++ b/tests/baselines/reference/badArraySyntax.js @@ -0,0 +1,26 @@ +//// [badArraySyntax.ts] +class Z { + public x = ""; +} + +var a1: Z[] = []; +var a2 = new Z[]; +var a3 = new Z[](); +var a4: Z[] = new Z[]; +var a5: Z[] = new Z[](); +var a6: Z[][] = new Z [ ] [ ]; + + +//// [badArraySyntax.js] +var Z = (function () { + function Z() { + this.x = ""; + } + return Z; +})(); +var a1 = []; +var a2 = new Z[]; +var a3 = new Z[](); +var a4 = new Z[]; +var a5 = new Z[](); +var a6 = new Z[][]; diff --git a/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.js b/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.js new file mode 100644 index 00000000000..21ca5d4cce4 --- /dev/null +++ b/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.js @@ -0,0 +1,5 @@ +//// [breakNotInIterationOrSwitchStatement1.ts] +break; + +//// [breakNotInIterationOrSwitchStatement1.js] +break; diff --git a/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.js b/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.js new file mode 100644 index 00000000000..531e5b5e5b6 --- /dev/null +++ b/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.js @@ -0,0 +1,13 @@ +//// [breakNotInIterationOrSwitchStatement2.ts] +while (true) { + function f() { + break; + } +} + +//// [breakNotInIterationOrSwitchStatement2.js] +while (true) { + function f() { + break; + } +} diff --git a/tests/baselines/reference/breakTarget5.js b/tests/baselines/reference/breakTarget5.js new file mode 100644 index 00000000000..197e4e147bd --- /dev/null +++ b/tests/baselines/reference/breakTarget5.js @@ -0,0 +1,18 @@ +//// [breakTarget5.ts] +target: +while (true) { + function f() { + while (true) { + break target; + } + } +} + +//// [breakTarget5.js] +target: while (true) { + function f() { + while (true) { + break target; + } + } +} diff --git a/tests/baselines/reference/breakTarget6.js b/tests/baselines/reference/breakTarget6.js new file mode 100644 index 00000000000..9c5bcc3ded1 --- /dev/null +++ b/tests/baselines/reference/breakTarget6.js @@ -0,0 +1,9 @@ +//// [breakTarget6.ts] +while (true) { + break target; +} + +//// [breakTarget6.js] +while (true) { + break target; +} diff --git a/tests/baselines/reference/callSignatureWithOptionalParameterAndInitializer.js b/tests/baselines/reference/callSignatureWithOptionalParameterAndInitializer.js new file mode 100644 index 00000000000..0f8a033067d --- /dev/null +++ b/tests/baselines/reference/callSignatureWithOptionalParameterAndInitializer.js @@ -0,0 +1,112 @@ +//// [callSignatureWithOptionalParameterAndInitializer.ts] +// Optional parameters cannot also have initializer expressions, these are all errors + +function foo(x?: number = 1) { } +var f = function foo(x?: number = 1) { } +var f2 = (x: number, y? = 1) => { } + +foo(1); +foo(); +f(1); +f(); +f2(1); +f2(1, 2); + +class C { + foo(x?: number = 1) { } +} + +var c: C; +c.foo(); +c.foo(1); + +interface I { + (x? = 1); + foo(x: number, y?: number = 1); +} + +var i: I; +i(); +i(1); +i.foo(1); +i.foo(1, 2); + +var a: { + (x?: number = 1); + foo(x? = 1); +} + +a(); +a(1); +a.foo(); +a.foo(1); + +var b = { + foo(x?: number = 1) { }, + a: function foo(x: number, y?: number = '') { }, + b: (x?: any = '') => { } +} + +b.foo(); +b.foo(1); +b.a(1); +b.a(1, 2); +b.b(); +b.b(1); + + +//// [callSignatureWithOptionalParameterAndInitializer.js] +// Optional parameters cannot also have initializer expressions, these are all errors +function foo(x) { + if (x === void 0) { x = 1; } +} +var f = function foo(x) { + if (x === void 0) { x = 1; } +}; +var f2 = function (x, y) { + if (y === void 0) { y = 1; } +}; +foo(1); +foo(); +f(1); +f(); +f2(1); +f2(1, 2); +var C = (function () { + function C() { + } + C.prototype.foo = function (x) { + if (x === void 0) { x = 1; } + }; + return C; +})(); +var c; +c.foo(); +c.foo(1); +var i; +i(); +i(1); +i.foo(1); +i.foo(1, 2); +var a; +a(); +a(1); +a.foo(); +a.foo(1); +var b = { + foo: function (x) { + if (x === void 0) { x = 1; } + }, + a: function foo(x, y) { + if (y === void 0) { y = ''; } + }, + b: function (x) { + if (x === void 0) { x = ''; } + } +}; +b.foo(); +b.foo(1); +b.a(1); +b.a(1, 2); +b.b(); +b.b(1); diff --git a/tests/baselines/reference/cannotInvokeNewOnErrorExpression.js b/tests/baselines/reference/cannotInvokeNewOnErrorExpression.js new file mode 100644 index 00000000000..2b05f8d3389 --- /dev/null +++ b/tests/baselines/reference/cannotInvokeNewOnErrorExpression.js @@ -0,0 +1,17 @@ +//// [cannotInvokeNewOnErrorExpression.ts] +module M +{ + class ClassA {} +} +var t = new M.ClassA[]; + +//// [cannotInvokeNewOnErrorExpression.js] +var M; +(function (M) { + var ClassA = (function () { + function ClassA() { + } + return ClassA; + })(); +})(M || (M = {})); +var t = new M.ClassA[]; diff --git a/tests/baselines/reference/catchClauseWithTypeAnnotation.js b/tests/baselines/reference/catchClauseWithTypeAnnotation.js new file mode 100644 index 00000000000..097abe0a9ca --- /dev/null +++ b/tests/baselines/reference/catchClauseWithTypeAnnotation.js @@ -0,0 +1,10 @@ +//// [catchClauseWithTypeAnnotation.ts] +try { +} catch (e: any) { +} + +//// [catchClauseWithTypeAnnotation.js] +try { +} +catch (e) { +} diff --git a/tests/baselines/reference/classConstructorAccessibility.js b/tests/baselines/reference/classConstructorAccessibility.js new file mode 100644 index 00000000000..15b12190392 --- /dev/null +++ b/tests/baselines/reference/classConstructorAccessibility.js @@ -0,0 +1,82 @@ +//// [classConstructorAccessibility.ts] +class C { + public constructor(public x: number) { } +} + +class D { + private constructor(public x: number) { } // error +} + +class E { + protected constructor(public x: number) { } // error +} + +var c = new C(1); +var d = new D(1); +var e = new E(1); + +module Generic { + class C { + public constructor(public x: T) { } + } + + class D { + private constructor(public x: T) { } // error + } + + class E { + protected constructor(public x: T) { } // error + } + + var c = new C(1); + var d = new D(1); + var e = new E(1); +} + + +//// [classConstructorAccessibility.js] +var C = (function () { + function C(x) { + this.x = x; + } + return C; +})(); +var D = (function () { + function D(x) { + this.x = x; + } // error + return D; +})(); +var E = (function () { + function E(x) { + this.x = x; + } // error + return E; +})(); +var c = new C(1); +var d = new D(1); +var e = new E(1); +var Generic; +(function (Generic) { + var C = (function () { + function C(x) { + this.x = x; + } + return C; + })(); + var D = (function () { + function D(x) { + this.x = x; + } // error + return D; + })(); + var E = (function () { + function E(x) { + this.x = x; + } // error + return E; + })(); + var c = new C(1); + var d = new D(1); + var e = new E(1); +})(Generic || (Generic = {})); diff --git a/tests/baselines/reference/classExtendsMultipleBaseClasses.js b/tests/baselines/reference/classExtendsMultipleBaseClasses.js new file mode 100644 index 00000000000..07d6450f405 --- /dev/null +++ b/tests/baselines/reference/classExtendsMultipleBaseClasses.js @@ -0,0 +1,29 @@ +//// [classExtendsMultipleBaseClasses.ts] +class A { } +class B { } +class C extends A,B { } + +//// [classExtendsMultipleBaseClasses.js] +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 = (function () { + function A() { + } + return A; +})(); +var B = (function () { + function B() { + } + return B; +})(); +var C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/classHeritageWithTrailingSeparator.js b/tests/baselines/reference/classHeritageWithTrailingSeparator.js new file mode 100644 index 00000000000..5c6470ffdfd --- /dev/null +++ b/tests/baselines/reference/classHeritageWithTrailingSeparator.js @@ -0,0 +1,24 @@ +//// [classHeritageWithTrailingSeparator.ts] +class C { foo: number } +class D extends C, { +} + +//// [classHeritageWithTrailingSeparator.js] +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 C = (function () { + function C() { + } + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; +})(C); diff --git a/tests/baselines/reference/classPropertyAsPrivate.js b/tests/baselines/reference/classPropertyAsPrivate.js new file mode 100644 index 00000000000..8b59dcde771 --- /dev/null +++ b/tests/baselines/reference/classPropertyAsPrivate.js @@ -0,0 +1,63 @@ +//// [classPropertyAsPrivate.ts] +class C { + private x: string; + private get y() { return null; } + private set y(x) { } + private foo() { } + + private static a: string; + private static get b() { return null; } + private static set b(x) { } + private static foo() { } +} + +var c: C; +// all errors +c.x; +c.y; +c.y = 1; +c.foo(); + +C.a; +C.b(); +C.b = 1; +C.foo(); + +//// [classPropertyAsPrivate.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "y", { + get: function () { + return null; + }, + set: function (x) { + }, + enumerable: true, + configurable: true + }); + C.prototype.foo = function () { + }; + Object.defineProperty(C, "b", { + get: function () { + return null; + }, + set: function (x) { + }, + enumerable: true, + configurable: true + }); + C.foo = function () { + }; + return C; +})(); +var c; +// all errors +c.x; +c.y; +c.y = 1; +c.foo(); +C.a; +C.b(); +C.b = 1; +C.foo(); diff --git a/tests/baselines/reference/classPropertyAsProtected.js b/tests/baselines/reference/classPropertyAsProtected.js new file mode 100644 index 00000000000..ddb193f072a --- /dev/null +++ b/tests/baselines/reference/classPropertyAsProtected.js @@ -0,0 +1,63 @@ +//// [classPropertyAsProtected.ts] +class C { + protected x: string; + protected get y() { return null; } + protected set y(x) { } + protected foo() { } + + protected static a: string; + protected static get b() { return null; } + protected static set b(x) { } + protected static foo() { } +} + +var c: C; +// all errors +c.x; +c.y; +c.y = 1; +c.foo(); + +C.a; +C.b(); +C.b = 1; +C.foo(); + +//// [classPropertyAsProtected.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "y", { + get: function () { + return null; + }, + set: function (x) { + }, + enumerable: true, + configurable: true + }); + C.prototype.foo = function () { + }; + Object.defineProperty(C, "b", { + get: function () { + return null; + }, + set: function (x) { + }, + enumerable: true, + configurable: true + }); + C.foo = function () { + }; + return C; +})(); +var c; +// all errors +c.x; +c.y; +c.y = 1; +c.foo(); +C.a; +C.b(); +C.b = 1; +C.foo(); diff --git a/tests/baselines/reference/classPropertyIsPublicByDefault.js b/tests/baselines/reference/classPropertyIsPublicByDefault.js new file mode 100644 index 00000000000..db1eca56c11 --- /dev/null +++ b/tests/baselines/reference/classPropertyIsPublicByDefault.js @@ -0,0 +1,61 @@ +//// [classPropertyIsPublicByDefault.ts] +class C { + x: string; + get y() { return null; } + set y(x) { } + foo() { } + + static a: string; + static get b() { return null; } + static set b(x) { } + static foo() { } +} + +var c: C; +c.x; +c.y; +c.y = 1; +c.foo(); + +C.a; +C.b(); +C.b = 1; +C.foo(); + +//// [classPropertyIsPublicByDefault.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "y", { + get: function () { + return null; + }, + set: function (x) { + }, + enumerable: true, + configurable: true + }); + C.prototype.foo = function () { + }; + Object.defineProperty(C, "b", { + get: function () { + return null; + }, + set: function (x) { + }, + enumerable: true, + configurable: true + }); + C.foo = function () { + }; + return C; +})(); +var c; +c.x; +c.y; +c.y = 1; +c.foo(); +C.a; +C.b(); +C.b = 1; +C.foo(); diff --git a/tests/baselines/reference/classWithOptionalParameter.js b/tests/baselines/reference/classWithOptionalParameter.js new file mode 100644 index 00000000000..082e624916a --- /dev/null +++ b/tests/baselines/reference/classWithOptionalParameter.js @@ -0,0 +1,29 @@ +//// [classWithOptionalParameter.ts] +// classes do not permit optional parameters, these are errors + +class C { + x?: string; + f?() {} +} + +class C2 { + x?: T; + f?(x: T) {} +} + +//// [classWithOptionalParameter.js] +// classes do not permit optional parameters, these are errors +var C = (function () { + function C() { + } + C.prototype.f = function () { + }; + return C; +})(); +var C2 = (function () { + function C2() { + } + C2.prototype.f = function (x) { + }; + return C2; +})(); diff --git a/tests/baselines/reference/classWithStaticMembers.js b/tests/baselines/reference/classWithStaticMembers.js new file mode 100644 index 00000000000..2cded4b1f2e --- /dev/null +++ b/tests/baselines/reference/classWithStaticMembers.js @@ -0,0 +1,60 @@ +//// [classWithStaticMembers.ts] +class C { + static fn() { return this; } + static get x() { return 1; } + static set x(v) { } + constructor(public a: number, private b: number) { } + static foo: string; +} + +var r = C.fn(); +var r2 = r.x; +var r3 = r.foo; + +class D extends C { + bar: string; +} + +var r = D.fn(); +var r2 = r.x; +var r3 = r.foo; + +//// [classWithStaticMembers.js] +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 C = (function () { + function C(a, b) { + this.a = a; + this.b = b; + } + C.fn = function () { + return this; + }; + Object.defineProperty(C, "x", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var r = C.fn(); +var r2 = r.x; +var r3 = r.foo; +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; +})(C); +var r = D.fn(); +var r2 = r.x; +var r3 = r.foo; diff --git a/tests/baselines/reference/classdecl.js b/tests/baselines/reference/classdecl.js new file mode 100644 index 00000000000..6c6e542e032 --- /dev/null +++ b/tests/baselines/reference/classdecl.js @@ -0,0 +1,206 @@ +//// [classdecl.ts] +class a { + //constructor (); + constructor (n: number); + constructor (s: string); + constructor (ns: any) { + + } + + public pgF() { } + + public pv; + public get d() { + return 30; + } + public set d() { + } + + public static get p2() { + return { x: 30, y: 40 }; + } + + private static d2() { + } + private static get p3() { + return "string"; + } + private pv3; + + private foo(n: number): string; + private foo(s: string): string; + private foo(ns: any) { + return ns.toString(); + } +} + +class b extends a { +} + +module m1 { + export class b { + } + class d { + } + + + export interface ib { + } +} + +module m2 { + + export module m3 { + export class c extends b { + } + export class ib2 implements m1.ib { + } + } +} + +class c extends m1.b { +} + +class ib2 implements m1.ib { +} + +declare class aAmbient { + constructor (n: number); + constructor (s: string); + public pgF(): void; + public pv; + public d : number; + static p2 : { x: number; y: number; }; + static d2(); + static p3; + private pv3; + private foo(s); +} + +class d { + private foo(n: number): string; + private foo(s: string): string; + private foo(ns: any) { + return ns.toString(); + } +} + +class e { + private foo(s: string): string; + private foo(n: number): string; + private foo(ns: any) { + return ns.toString(); + } +} + +//// [classdecl.js] +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 = (function () { + function a(ns) { + } + a.prototype.pgF = function () { + }; + Object.defineProperty(a.prototype, "d", { + get: function () { + return 30; + }, + set: function () { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(a, "p2", { + get: function () { + return { x: 30, y: 40 }; + }, + enumerable: true, + configurable: true + }); + a.d2 = function () { + }; + Object.defineProperty(a, "p3", { + get: function () { + return "string"; + }, + enumerable: true, + configurable: true + }); + a.prototype.foo = function (ns) { + return ns.toString(); + }; + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + return b; +})(a); +var m1; +(function (m1) { + var b = (function () { + function b() { + } + return b; + })(); + m1.b = b; + var d = (function () { + function d() { + } + return d; + })(); +})(m1 || (m1 = {})); +var m2; +(function (m2) { + var m3; + (function (m3) { + var c = (function (_super) { + __extends(c, _super); + function c() { + _super.apply(this, arguments); + } + return c; + })(b); + m3.c = c; + var ib2 = (function () { + function ib2() { + } + return ib2; + })(); + m3.ib2 = ib2; + })(m3 = m2.m3 || (m2.m3 = {})); +})(m2 || (m2 = {})); +var c = (function (_super) { + __extends(c, _super); + function c() { + _super.apply(this, arguments); + } + return c; +})(m1.b); +var ib2 = (function () { + function ib2() { + } + return ib2; +})(); +var d = (function () { + function d() { + } + d.prototype.foo = function (ns) { + return ns.toString(); + }; + return d; +})(); +var e = (function () { + function e() { + } + e.prototype.foo = function (ns) { + return ns.toString(); + }; + return e; +})(); diff --git a/tests/baselines/reference/cloduleWithDuplicateMember1.js b/tests/baselines/reference/cloduleWithDuplicateMember1.js new file mode 100644 index 00000000000..ed4d69545fc --- /dev/null +++ b/tests/baselines/reference/cloduleWithDuplicateMember1.js @@ -0,0 +1,52 @@ +//// [cloduleWithDuplicateMember1.ts] +class C { + get x() { return 1; } + static get x() { + return ''; + } + static foo() { } +} + +module C { + export var x = 1; +} +module C { + export function foo() { } + export function x() { } +} + +//// [cloduleWithDuplicateMember1.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "x", { + get: function () { + return ''; + }, + enumerable: true, + configurable: true + }); + C.foo = function () { + }; + return C; +})(); +var C; +(function (C) { + C.x = 1; +})(C || (C = {})); +var C; +(function (C) { + function foo() { + } + C.foo = foo; + function x() { + } + C.x = x; +})(C || (C = {})); diff --git a/tests/baselines/reference/cloduleWithDuplicateMember2.js b/tests/baselines/reference/cloduleWithDuplicateMember2.js new file mode 100644 index 00000000000..461930c02ae --- /dev/null +++ b/tests/baselines/reference/cloduleWithDuplicateMember2.js @@ -0,0 +1,41 @@ +//// [cloduleWithDuplicateMember2.ts] +class C { + set x(y) { } + static set y(z) { } +} + +module C { + export var x = 1; +} +module C { + export function x() { } +} + +//// [cloduleWithDuplicateMember2.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + set: function (y) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "y", { + set: function (z) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var C; +(function (C) { + C.x = 1; +})(C || (C = {})); +var C; +(function (C) { + function x() { + } + C.x = x; +})(C || (C = {})); diff --git a/tests/baselines/reference/collisionCodeGenModuleWithAccessorChildren.js b/tests/baselines/reference/collisionCodeGenModuleWithAccessorChildren.js new file mode 100644 index 00000000000..9db005de9b9 --- /dev/null +++ b/tests/baselines/reference/collisionCodeGenModuleWithAccessorChildren.js @@ -0,0 +1,126 @@ +//// [collisionCodeGenModuleWithAccessorChildren.ts] +module M { + export var x = 3; + class c { + private y; + set Z(M) { + this.y = x; + } + } +} + +module M { + class d { + private y; + set Z(p) { + var M = 10; + this.y = x; + } + } +} + +module M { // Shouldnt be _M + class e { + private y; + set M(p) { + this.y = x; + } + } +} + +module M { + class f { + get Z() { + var M = 10; + return x; + } + } +} + +module M { // Shouldnt be _M + class e { + get M() { + return x; + } + } +} + +//// [collisionCodeGenModuleWithAccessorChildren.js] +var M; +(function (_M) { + _M.x = 3; + var c = (function () { + function c() { + } + Object.defineProperty(c.prototype, "Z", { + set: function (M) { + this.y = _M.x; + }, + enumerable: true, + configurable: true + }); + return c; + })(); +})(M || (M = {})); +var M; +(function (_M) { + var d = (function () { + function d() { + } + Object.defineProperty(d.prototype, "Z", { + set: function (p) { + var M = 10; + this.y = _M.x; + }, + enumerable: true, + configurable: true + }); + return d; + })(); +})(M || (M = {})); +var M; +(function (M) { + var e = (function () { + function e() { + } + Object.defineProperty(e.prototype, "M", { + set: function (p) { + this.y = M.x; + }, + enumerable: true, + configurable: true + }); + return e; + })(); +})(M || (M = {})); +var M; +(function (_M) { + var f = (function () { + function f() { + } + Object.defineProperty(f.prototype, "Z", { + get: function () { + var M = 10; + return _M.x; + }, + enumerable: true, + configurable: true + }); + return f; + })(); +})(M || (M = {})); +var M; +(function (M) { + var e = (function () { + function e() { + } + Object.defineProperty(e.prototype, "M", { + get: function () { + return M.x; + }, + enumerable: true, + configurable: true + }); + return e; + })(); +})(M || (M = {})); diff --git a/tests/baselines/reference/collisionSuperAndLocalFunctionInAccessors.js b/tests/baselines/reference/collisionSuperAndLocalFunctionInAccessors.js new file mode 100644 index 00000000000..92ddebd156c --- /dev/null +++ b/tests/baselines/reference/collisionSuperAndLocalFunctionInAccessors.js @@ -0,0 +1,112 @@ +//// [collisionSuperAndLocalFunctionInAccessors.ts] +function _super() { // No error +} +class Foo { + get prop1(): number { + function _super() { // No error + } + return 10; + } + set prop1(val: number) { + function _super() { // No error + } + } +} +class b extends Foo { + get prop2(): number { + function _super() { // Should be error + } + return 10; + } + set prop2(val: number) { + function _super() { // Should be error + } + } +} +class c extends Foo { + get prop2(): number { + var x = () => { + function _super() { // Should be error + } + } + return 10; + } + set prop2(val: number) { + var x = () => { + function _super() { // Should be error + } + } + } +} + +//// [collisionSuperAndLocalFunctionInAccessors.js] +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 __(); +}; +function _super() { +} +var Foo = (function () { + function Foo() { + } + Object.defineProperty(Foo.prototype, "prop1", { + get: function () { + function _super() { + } + return 10; + }, + set: function (val) { + function _super() { + } + }, + enumerable: true, + configurable: true + }); + return Foo; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + Object.defineProperty(b.prototype, "prop2", { + get: function () { + function _super() { + } + return 10; + }, + set: function (val) { + function _super() { + } + }, + enumerable: true, + configurable: true + }); + return b; +})(Foo); +var c = (function (_super) { + __extends(c, _super); + function c() { + _super.apply(this, arguments); + } + Object.defineProperty(c.prototype, "prop2", { + get: function () { + var x = function () { + function _super() { + } + }; + return 10; + }, + set: function (val) { + var x = function () { + function _super() { + } + }; + }, + enumerable: true, + configurable: true + }); + return c; +})(Foo); diff --git a/tests/baselines/reference/collisionSuperAndLocalVarInAccessors.js b/tests/baselines/reference/collisionSuperAndLocalVarInAccessors.js new file mode 100644 index 00000000000..5a8e54a6c3d --- /dev/null +++ b/tests/baselines/reference/collisionSuperAndLocalVarInAccessors.js @@ -0,0 +1,98 @@ +//// [collisionSuperAndLocalVarInAccessors.ts] +var _super = 10; // No Error +class Foo { + get prop1(): number { + var _super = 10; // No error + return 10; + } + set prop1(val: number) { + var _super = 10; // No error + } +} +class b extends Foo { + get prop2(): number { + var _super = 10; // Should be error + return 10; + } + set prop2(val: number) { + var _super = 10; // Should be error + } +} +class c extends Foo { + get prop2(): number { + var x = () => { + var _super = 10; // Should be error + } + return 10; + } + set prop2(val: number) { + var x = () => { + var _super = 10; // Should be error + } + } +} + +//// [collisionSuperAndLocalVarInAccessors.js] +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 _super = 10; // No Error +var Foo = (function () { + function Foo() { + } + Object.defineProperty(Foo.prototype, "prop1", { + get: function () { + var _super = 10; // No error + return 10; + }, + set: function (val) { + var _super = 10; // No error + }, + enumerable: true, + configurable: true + }); + return Foo; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + Object.defineProperty(b.prototype, "prop2", { + get: function () { + var _super = 10; // Should be error + return 10; + }, + set: function (val) { + var _super = 10; // Should be error + }, + enumerable: true, + configurable: true + }); + return b; +})(Foo); +var c = (function (_super) { + __extends(c, _super); + function c() { + _super.apply(this, arguments); + } + Object.defineProperty(c.prototype, "prop2", { + get: function () { + var x = function () { + var _super = 10; // Should be error + }; + return 10; + }, + set: function (val) { + var x = function () { + var _super = 10; // Should be error + }; + }, + enumerable: true, + configurable: true + }); + return c; +})(Foo); diff --git a/tests/baselines/reference/collisionSuperAndParameter.js b/tests/baselines/reference/collisionSuperAndParameter.js new file mode 100644 index 00000000000..be9e0ce3f68 --- /dev/null +++ b/tests/baselines/reference/collisionSuperAndParameter.js @@ -0,0 +1,136 @@ +//// [collisionSuperAndParameter.ts] +class Foo { + a() { + var lamda = (_super: number) => { // No Error + return x => this; // New scope. So should inject new _this capture + } + } + b(_super: number) { // No Error + var lambda = () => { + return x => this; // New scope. So should inject new _this capture + } + } + set c(_super: number) { // No error + } +} +class Foo2 extends Foo { + x() { + var lamda = (_super: number) => { // Error + return x => this; // New scope. So should inject new _this capture + } + } + y(_super: number) { // Error + var lambda = () => { + return x => this; // New scope. So should inject new _this capture + } + } + set z(_super: number) { // Error + } + public prop3: { + doStuff: (_super: number) => void; // no error - no code gen + } + public prop4 = { + doStuff: (_super: number) => { // should be error + } + } + constructor(_super: number) { // should be error + super(); + } +} +declare class Foo3 extends Foo { + x(); + y(_super: number); // No error - no code gen + constructor(_super: number); // No error - no code gen + public prop2: { + doStuff: (_super: number) => void; // no error - no code gen + }; + public _super: number; // No error +} + +class Foo4 extends Foo { + constructor(_super: number); // no code gen - no error + constructor(_super: string);// no code gen - no error + constructor(_super: any) { // should be error + super(); + } + y(_super: number); // no code gen - no error + y(_super: string); // no code gen - no error + y(_super: any) { // Error + var lambda = () => { + return x => this; // New scope. So should inject new _this capture + } + } +} + +//// [collisionSuperAndParameter.js] +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 Foo = (function () { + function Foo() { + } + Foo.prototype.a = function () { + var _this = this; + var lamda = function (_super) { + return function (x) { return _this; }; // New scope. So should inject new _this capture + }; + }; + Foo.prototype.b = function (_super) { + var _this = this; + var lambda = function () { + return function (x) { return _this; }; // New scope. So should inject new _this capture + }; + }; + Object.defineProperty(Foo.prototype, "c", { + set: function (_super) { + }, + enumerable: true, + configurable: true + }); + return Foo; +})(); +var Foo2 = (function (_super) { + __extends(Foo2, _super); + function Foo2(_super) { + _super.call(this); + this.prop4 = { + doStuff: function (_super) { + } + }; + } + Foo2.prototype.x = function () { + var _this = this; + var lamda = function (_super) { + return function (x) { return _this; }; // New scope. So should inject new _this capture + }; + }; + Foo2.prototype.y = function (_super) { + var _this = this; + var lambda = function () { + return function (x) { return _this; }; // New scope. So should inject new _this capture + }; + }; + Object.defineProperty(Foo2.prototype, "z", { + set: function (_super) { + }, + enumerable: true, + configurable: true + }); + return Foo2; +})(Foo); +var Foo4 = (function (_super) { + __extends(Foo4, _super); + function Foo4(_super) { + _super.call(this); + } + Foo4.prototype.y = function (_super) { + var _this = this; + var lambda = function () { + return function (x) { return _this; }; // New scope. So should inject new _this capture + }; + }; + return Foo4; +})(Foo); diff --git a/tests/baselines/reference/collisionThisExpressionAndLocalVarInAccessors.js b/tests/baselines/reference/collisionThisExpressionAndLocalVarInAccessors.js new file mode 100644 index 00000000000..53df2984544 --- /dev/null +++ b/tests/baselines/reference/collisionThisExpressionAndLocalVarInAccessors.js @@ -0,0 +1,102 @@ +//// [collisionThisExpressionAndLocalVarInAccessors.ts] +class class1 { + get a(): number { + var x2 = { + doStuff: (callback) => () => { + var _this = 2; + return callback(this); + } + } + + return 10; + } + set a(val: number) { + var x2 = { + doStuff: (callback) => () => { + var _this = 2; + return callback(this); + } + } + + } +} + +class class2 { + get a(): number { + var _this = 2; + var x2 = { + doStuff: (callback) => () => { + return callback(this); + } + } + + return 10; + } + set a(val: number) { + var _this = 2; + var x2 = { + doStuff: (callback) => () => { + return callback(this); + } + } + + } +} + +//// [collisionThisExpressionAndLocalVarInAccessors.js] +var class1 = (function () { + function class1() { + } + Object.defineProperty(class1.prototype, "a", { + get: function () { + var _this = this; + var x2 = { + doStuff: function (callback) { return function () { + var _this = 2; + return callback(_this); + }; } + }; + return 10; + }, + set: function (val) { + var _this = this; + var x2 = { + doStuff: function (callback) { return function () { + var _this = 2; + return callback(_this); + }; } + }; + }, + enumerable: true, + configurable: true + }); + return class1; +})(); +var class2 = (function () { + function class2() { + } + Object.defineProperty(class2.prototype, "a", { + get: function () { + var _this = this; + var _this = 2; + var x2 = { + doStuff: function (callback) { return function () { + return callback(_this); + }; } + }; + return 10; + }, + set: function (val) { + var _this = this; + var _this = 2; + var x2 = { + doStuff: function (callback) { return function () { + return callback(_this); + }; } + }; + }, + enumerable: true, + configurable: true + }); + return class2; +})(); diff --git a/tests/baselines/reference/commentOnClassAccessor1.js b/tests/baselines/reference/commentOnClassAccessor1.js new file mode 100644 index 00000000000..cdd14a829fc --- /dev/null +++ b/tests/baselines/reference/commentOnClassAccessor1.js @@ -0,0 +1,24 @@ +//// [commentOnClassAccessor1.ts] +class C { + /** + * @type {number} + */ + get bar(): number { return 1;} +} + +//// [commentOnClassAccessor1.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "bar", { + /** + * @type {number} + */ + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/commentOnClassAccessor2.js b/tests/baselines/reference/commentOnClassAccessor2.js new file mode 100644 index 00000000000..c85d17e6e19 --- /dev/null +++ b/tests/baselines/reference/commentOnClassAccessor2.js @@ -0,0 +1,34 @@ +//// [commentOnClassAccessor2.ts] +class C { + /** + * Getter. + */ + get bar(): number { return 1;} + + /** + * Setter. + */ + set bar(v) { } +} + +//// [commentOnClassAccessor2.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "bar", { + /** + * Getter. + */ + get: function () { + return 1; + }, + /** + * Setter. + */ + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/computedPropertyNames12.js b/tests/baselines/reference/computedPropertyNames12.js new file mode 100644 index 00000000000..5e5dec0c549 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames12.js @@ -0,0 +1,31 @@ +//// [computedPropertyNames12.ts] +var s: string; +var n: number; +var a: any; +class C { + [s]: number; + [n] = n; + static [s + s]: string; + [s + n] = 2; + [+s]: typeof s; + static [""]: number; + [0]: number; + [a]: number; + static [true]: number; + [`hello bye`] = 0; + static [`hello ${a} bye`] = 0 +} + +//// [computedPropertyNames12.js] +var s; +var n; +var a; +var C = (function () { + function C() { + this[n] = n; + this[s + n] = 2; + this[`hello bye`] = 0; + } + C[`hello ${a} bye`] = 0; + return C; +})(); diff --git a/tests/baselines/reference/computedPropertyNames35.js b/tests/baselines/reference/computedPropertyNames35.js new file mode 100644 index 00000000000..5a731fd8bda --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames35.js @@ -0,0 +1,11 @@ +//// [computedPropertyNames35.ts] +function foo() { return '' } +interface I { + bar(): string; + [foo()](): void; +} + +//// [computedPropertyNames35.js] +function foo() { + return ''; +} diff --git a/tests/baselines/reference/computedPropertyNames42.js b/tests/baselines/reference/computedPropertyNames42.js new file mode 100644 index 00000000000..c9f24a1c708 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNames42.js @@ -0,0 +1,27 @@ +//// [computedPropertyNames42.ts] +class Foo { x } +class Foo2 { x; y } + +class C { + [s: string]: Foo2; + + // Computed properties + [""]: Foo; +} + +//// [computedPropertyNames42.js] +var Foo = (function () { + function Foo() { + } + return Foo; +})(); +var Foo2 = (function () { + function Foo2() { + } + return Foo2; +})(); +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit3.js b/tests/baselines/reference/computedPropertyNamesDeclarationEmit3.js new file mode 100644 index 00000000000..df351acf6e9 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit3.js @@ -0,0 +1,6 @@ +//// [computedPropertyNamesDeclarationEmit3.ts] +interface I { + ["" + ""](): void; +} + +//// [computedPropertyNamesDeclarationEmit3.js] diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit4.js b/tests/baselines/reference/computedPropertyNamesDeclarationEmit4.js new file mode 100644 index 00000000000..870f87bb613 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit4.js @@ -0,0 +1,7 @@ +//// [computedPropertyNamesDeclarationEmit4.ts] +var v: { + ["" + ""](): void; +} + +//// [computedPropertyNamesDeclarationEmit4.js] +var v; diff --git a/tests/baselines/reference/computedPropertyNamesOnOverloads.js b/tests/baselines/reference/computedPropertyNamesOnOverloads.js new file mode 100644 index 00000000000..1db857620e9 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesOnOverloads.js @@ -0,0 +1,19 @@ +//// [computedPropertyNamesOnOverloads.ts] +var methodName = "method"; +var accessorName = "accessor"; +class C { + [methodName](v: string); + [methodName](); + [methodName](v?: string) { } +} + +//// [computedPropertyNamesOnOverloads.js] +var methodName = "method"; +var accessorName = "accessor"; +var C = (function () { + function C() { + } + C.prototype[methodName] = function (v) { + }; + return C; +})(); diff --git a/tests/baselines/reference/constDeclarationShadowedByVarDeclaration.js b/tests/baselines/reference/constDeclarationShadowedByVarDeclaration.js new file mode 100644 index 00000000000..9fcc9f8f568 --- /dev/null +++ b/tests/baselines/reference/constDeclarationShadowedByVarDeclaration.js @@ -0,0 +1,43 @@ +//// [constDeclarationShadowedByVarDeclaration.ts] + +// Error as declaration of var would cause a write to the const value +var x = 0; +{ + const x = 0; + + var x = 0; +} + + +var y = 0; +{ + const y = 0; + { + var y = 0; + } +} + + +{ + const z = 0; + var z = 0 +} + +//// [constDeclarationShadowedByVarDeclaration.js] +// Error as declaration of var would cause a write to the const value +var x = 0; +{ + const x = 0; + var x = 0; +} +var y = 0; +{ + const y = 0; + { + var y = 0; + } +} +{ + const z = 0; + var z = 0; +} diff --git a/tests/baselines/reference/constDeclarations-access.js b/tests/baselines/reference/constDeclarations-access.js new file mode 100644 index 00000000000..ba913f2d5fc --- /dev/null +++ b/tests/baselines/reference/constDeclarations-access.js @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/constDeclarations-access.ts] //// + +//// [file1.ts] + +const x = 0 + +//// [file2.ts] +x++; + +//// [file1.js] +const x = 0; +//// [file2.js] +x++; diff --git a/tests/baselines/reference/constDeclarations-access2.js b/tests/baselines/reference/constDeclarations-access2.js new file mode 100644 index 00000000000..fd51c932636 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-access2.js @@ -0,0 +1,74 @@ +//// [constDeclarations-access2.ts] + +const x = 0 + +// Errors +x = 1; +x += 2; +x -= 3; +x *= 4; +x /= 5; +x %= 6; +x <<= 7; +x >>= 8; +x >>>= 9; +x &= 10; +x |= 11; +x ^= 12; + +x++; +x--; +++x; +--x; + +++((x)); + +// OK +var a = x + 1; + +function f(v: number) { } +f(x); + +if (x) { } + +x; +(x); + +-x; ++x; + +x.toString(); + + +//// [constDeclarations-access2.js] +const x = 0; +// Errors +x = 1; +x += 2; +x -= 3; +x *= 4; +x /= 5; +x %= 6; +x <<= 7; +x >>= 8; +x >>>= 9; +x &= 10; +x |= 11; +x ^= 12; +x++; +x--; +++x; +--x; +++((x)); +// OK +var a = x + 1; +function f(v) { +} +f(x); +if (x) { +} +x; +(x); +-x; ++x; +x.toString(); diff --git a/tests/baselines/reference/constDeclarations-access3.js b/tests/baselines/reference/constDeclarations-access3.js new file mode 100644 index 00000000000..9ac4880bdd1 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-access3.js @@ -0,0 +1,83 @@ +//// [constDeclarations-access3.ts] + + +module M { + export const x = 0; +} + +// Errors +M.x = 1; +M.x += 2; +M.x -= 3; +M.x *= 4; +M.x /= 5; +M.x %= 6; +M.x <<= 7; +M.x >>= 8; +M.x >>>= 9; +M.x &= 10; +M.x |= 11; +M.x ^= 12; + +M.x++; +M.x--; +++M.x; +--M.x; + +++((M.x)); + +M["x"] = 0; + +// OK +var a = M.x + 1; + +function f(v: number) { } +f(M.x); + +if (M.x) { } + +M.x; +(M.x); + +-M.x; ++M.x; + +M.x.toString(); + + +//// [constDeclarations-access3.js] +var M; +(function (M) { + M.x = 0; +})(M || (M = {})); +// Errors +M.x = 1; +M.x += 2; +M.x -= 3; +M.x *= 4; +M.x /= 5; +M.x %= 6; +M.x <<= 7; +M.x >>= 8; +M.x >>>= 9; +M.x &= 10; +M.x |= 11; +M.x ^= 12; +M.x++; +M.x--; +++M.x; +--M.x; +++((M.x)); +M["x"] = 0; +// OK +var a = M.x + 1; +function f(v) { +} +f(M.x); +if (M.x) { +} +M.x; +(M.x); +-M.x; ++M.x; +M.x.toString(); diff --git a/tests/baselines/reference/constDeclarations-access4.js b/tests/baselines/reference/constDeclarations-access4.js new file mode 100644 index 00000000000..b226e746bba --- /dev/null +++ b/tests/baselines/reference/constDeclarations-access4.js @@ -0,0 +1,79 @@ +//// [constDeclarations-access4.ts] + + +declare module M { + const x: number; +} + +// Errors +M.x = 1; +M.x += 2; +M.x -= 3; +M.x *= 4; +M.x /= 5; +M.x %= 6; +M.x <<= 7; +M.x >>= 8; +M.x >>>= 9; +M.x &= 10; +M.x |= 11; +M.x ^= 12; + +M.x++; +M.x--; +++M.x; +--M.x; + +++((M.x)); + +M["x"] = 0; + +// OK +var a = M.x + 1; + +function f(v: number) { } +f(M.x); + +if (M.x) { } + +M.x; +(M.x); + +-M.x; ++M.x; + +M.x.toString(); + + +//// [constDeclarations-access4.js] +// Errors +M.x = 1; +M.x += 2; +M.x -= 3; +M.x *= 4; +M.x /= 5; +M.x %= 6; +M.x <<= 7; +M.x >>= 8; +M.x >>>= 9; +M.x &= 10; +M.x |= 11; +M.x ^= 12; +M.x++; +M.x--; +++M.x; +--M.x; +++((M.x)); +M["x"] = 0; +// OK +var a = M.x + 1; +function f(v) { +} +f(M.x); +if (M.x) { +} +M.x; +(M.x); +-M.x; ++M.x; +M.x.toString(); diff --git a/tests/baselines/reference/constDeclarations-access5.js b/tests/baselines/reference/constDeclarations-access5.js new file mode 100644 index 00000000000..7acc95ad055 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-access5.js @@ -0,0 +1,89 @@ +//// [tests/cases/compiler/constDeclarations-access5.ts] //// + +//// [constDeclarations_access_1.ts] + + +export const x = 0; + +//// [constDeclarations_access_2.ts] +/// +import m = require('constDeclarations_access_1'); +// Errors +m.x = 1; +m.x += 2; +m.x -= 3; +m.x *= 4; +m.x /= 5; +m.x %= 6; +m.x <<= 7; +m.x >>= 8; +m.x >>>= 9; +m.x &= 10; +m.x |= 11; +m.x ^= 12; +m +m.x++; +m.x--; +++m.x; +--m.x; + +++((m.x)); + +m["x"] = 0; + +// OK +var a = m.x + 1; + +function f(v: number) { } +f(m.x); + +if (m.x) { } + +m.x; +(m.x); + +-m.x; ++m.x; + +m.x.toString(); + + +//// [constDeclarations_access_1.js] +define(["require", "exports"], function (require, exports) { + exports.x = 0; +}); +//// [constDeclarations_access_2.js] +define(["require", "exports", 'constDeclarations_access_1'], function (require, exports, m) { + // Errors + m.x = 1; + m.x += 2; + m.x -= 3; + m.x *= 4; + m.x /= 5; + m.x %= 6; + m.x <<= 7; + m.x >>= 8; + m.x >>>= 9; + m.x &= 10; + m.x |= 11; + m.x ^= 12; + m; + m.x++; + m.x--; + ++m.x; + --m.x; + ++((m.x)); + m["x"] = 0; + // OK + var a = m.x + 1; + function f(v) { + } + f(m.x); + if (m.x) { + } + m.x; + (m.x); + -m.x; + +m.x; + m.x.toString(); +}); diff --git a/tests/baselines/reference/constDeclarations-ambient-errors.js b/tests/baselines/reference/constDeclarations-ambient-errors.js new file mode 100644 index 00000000000..e6e7ac1fb16 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-ambient-errors.js @@ -0,0 +1,13 @@ +//// [constDeclarations-ambient-errors.ts] + +// error: no intialization expected in ambient declarations +declare const c1: boolean = true; +declare const c2: number = 0; +declare const c3 = null, c4 :string = "", c5: any = 0; + +declare module M { + const c6 = 0; + const c7: number = 7; +} + +//// [constDeclarations-ambient-errors.js] diff --git a/tests/baselines/reference/constDeclarations-errors.js b/tests/baselines/reference/constDeclarations-errors.js new file mode 100644 index 00000000000..0af646010f0 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-errors.js @@ -0,0 +1,36 @@ +//// [constDeclarations-errors.ts] + +// error, missing intialicer +const c1; +const c2: number; +const c3, c4, c5 :string, c6; // error, missing initialicer + +// error, can not be unintalized +for(const c in {}) { } + +// error, assigning to a const +for(const c8 = 0; c8 < 1; c8++) { } + +// error, can not be unintalized +for(const c9; c9 < 1;) { } + +// error, can not be unintalized +for(const c10 = 0, c11; c10 < 1;) { } + +//// [constDeclarations-errors.js] +// error, missing intialicer +const c1; +const c2; +const c3, c4, c5, c6; // error, missing initialicer +// error, can not be unintalized +for (var c in {}) { +} +// error, assigning to a const +for (const c8 = 0; c8 < 1; c8++) { +} +// error, can not be unintalized +for (const c9; c9 < 1;) { +} +// error, can not be unintalized +for (const c10 = 0, c11; c10 < 1;) { +} diff --git a/tests/baselines/reference/constDeclarations-es5.js b/tests/baselines/reference/constDeclarations-es5.js new file mode 100644 index 00000000000..20deb9dca37 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-es5.js @@ -0,0 +1,11 @@ +//// [constDeclarations-es5.ts] + +const z7 = false; +const z8: number = 23; +const z9 = 0, z10 :string = "", z11 = null; + + +//// [constDeclarations-es5.js] +const z7 = false; +const z8 = 23; +const z9 = 0, z10 = "", z11 = null; diff --git a/tests/baselines/reference/constDeclarations-invalidContexts.js b/tests/baselines/reference/constDeclarations-invalidContexts.js new file mode 100644 index 00000000000..a9dc1b47145 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-invalidContexts.js @@ -0,0 +1,57 @@ +//// [constDeclarations-invalidContexts.ts] + +// Errors, const must be defined inside a block +if (true) + const c1 = 0; +else + const c2 = 0; + +while (true) + const c3 = 0; + +do + const c4 = 0; +while (true); + +var obj; +with (obj) + const c5 = 0; // No Error will be reported here since we turn off all type checking + +for (var i = 0; i < 10; i++) + const c6 = 0; + +for (var i2 in {}) + const c7 = 0; + +if (true) + label: const c8 = 0; + +while (false) + label2: label3: label4: const c9 = 0; + + + + + +//// [constDeclarations-invalidContexts.js] +// Errors, const must be defined inside a block +if (true) + const c1 = 0; +else + const c2 = 0; +while (true) + const c3 = 0; +do + const c4 = 0; +while (true); +var obj; +with (obj) + const c5 = 0; // No Error will be reported here since we turn off all type checking +for (var i = 0; i < 10; i++) + const c6 = 0; +for (var i2 in {}) + const c7 = 0; +if (true) + label: const c8 = 0; +while (false) + label2: label3: label4: const c9 = 0; diff --git a/tests/baselines/reference/constDeclarations-useBeforeDefinition.js b/tests/baselines/reference/constDeclarations-useBeforeDefinition.js new file mode 100644 index 00000000000..4fe0e64f275 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-useBeforeDefinition.js @@ -0,0 +1,24 @@ +//// [constDeclarations-useBeforeDefinition.ts] + +{ + c1; + const c1 = 0; +} + +var v1; +{ + v1; + const v1 = 0; +} + + +//// [constDeclarations-useBeforeDefinition.js] +{ + c1; + const c1 = 0; +} +var v1; +{ + v1; + const v1 = 0; +} diff --git a/tests/baselines/reference/constDeclarations-useBeforeDefinition2.js b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.js new file mode 100644 index 00000000000..7d1f4cf5725 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.js @@ -0,0 +1,12 @@ +//// [tests/cases/compiler/constDeclarations-useBeforeDefinition2.ts] //// + +//// [file1.ts] + +c; + +//// [file2.ts] +const c = 0; + +//// [out.js] +c; +const c = 0; diff --git a/tests/baselines/reference/constEnumBadPropertyNames.js b/tests/baselines/reference/constEnumBadPropertyNames.js new file mode 100644 index 00000000000..b73eed780e5 --- /dev/null +++ b/tests/baselines/reference/constEnumBadPropertyNames.js @@ -0,0 +1,6 @@ +//// [constEnumBadPropertyNames.ts] +const enum E { A } +var x = E["B"] + +//// [constEnumBadPropertyNames.js] +var x = E["B"]; diff --git a/tests/baselines/reference/constEnumErrors.js b/tests/baselines/reference/constEnumErrors.js new file mode 100644 index 00000000000..4afd98982f0 --- /dev/null +++ b/tests/baselines/reference/constEnumErrors.js @@ -0,0 +1,58 @@ +//// [constEnumErrors.ts] +const enum E { + A +} + +module E { + var x = 1; +} + +const enum E1 { + // illegal case + // forward reference to the element of the same enum + X = Y, + // forward reference to the element of the same enum + Y = E1.Z, + Y1 = E1["Z"] +} + +const enum E2 { + A +} + +var y0 = E2[1] +var name = "A"; +var y1 = E2[name]; + +var x = E2; +var y = [E2]; + +function foo(t: any): void { +} + +foo(E2); + +const enum NaNOrInfinity { + A = 9007199254740992, + B = A * A, + C = B * B, + D = C * C, + E = D * D, + F = E * E, // overflow + G = 1 / 0, // overflow + H = 0 / 0 // NaN +} + +//// [constEnumErrors.js] +var E; +(function (E) { + var x = 1; +})(E || (E = {})); +var y0 = E2[1]; +var name = "A"; +var y1 = E2[name]; +var x = E2; +var y = [E2]; +function foo(t) { +} +foo(E2); diff --git a/tests/baselines/reference/constructorArgsErrors1.js b/tests/baselines/reference/constructorArgsErrors1.js new file mode 100644 index 00000000000..25701901e13 --- /dev/null +++ b/tests/baselines/reference/constructorArgsErrors1.js @@ -0,0 +1,12 @@ +//// [constructorArgsErrors1.ts] +class foo { + constructor (static a: number) { + } +} + +//// [constructorArgsErrors1.js] +var foo = (function () { + function foo(a) { + } + return foo; +})(); diff --git a/tests/baselines/reference/constructorArgsErrors2.js b/tests/baselines/reference/constructorArgsErrors2.js new file mode 100644 index 00000000000..a0cab9f39f8 --- /dev/null +++ b/tests/baselines/reference/constructorArgsErrors2.js @@ -0,0 +1,14 @@ +//// [constructorArgsErrors2.ts] +class foo { + constructor (public static a: number) { + } +} + + +//// [constructorArgsErrors2.js] +var foo = (function () { + function foo(a) { + this.a = a; + } + return foo; +})(); diff --git a/tests/baselines/reference/constructorArgsErrors3.js b/tests/baselines/reference/constructorArgsErrors3.js new file mode 100644 index 00000000000..3f9b09254a1 --- /dev/null +++ b/tests/baselines/reference/constructorArgsErrors3.js @@ -0,0 +1,14 @@ +//// [constructorArgsErrors3.ts] +class foo { + constructor (public public a: number) { + } +} + + +//// [constructorArgsErrors3.js] +var foo = (function () { + function foo(a) { + this.a = a; + } + return foo; +})(); diff --git a/tests/baselines/reference/constructorArgsErrors4.js b/tests/baselines/reference/constructorArgsErrors4.js new file mode 100644 index 00000000000..c0646a54148 --- /dev/null +++ b/tests/baselines/reference/constructorArgsErrors4.js @@ -0,0 +1,14 @@ +//// [constructorArgsErrors4.ts] +class foo { + constructor (private public a: number) { + } +} + + +//// [constructorArgsErrors4.js] +var foo = (function () { + function foo(a) { + this.a = a; + } + return foo; +})(); diff --git a/tests/baselines/reference/constructorArgsErrors5.js b/tests/baselines/reference/constructorArgsErrors5.js new file mode 100644 index 00000000000..3455490aa6f --- /dev/null +++ b/tests/baselines/reference/constructorArgsErrors5.js @@ -0,0 +1,13 @@ +//// [constructorArgsErrors5.ts] +class foo { + constructor (export a: number) { + } +} + + +//// [constructorArgsErrors5.js] +var foo = (function () { + function foo(a) { + } + return foo; +})(); diff --git a/tests/baselines/reference/constructorOverloads6.js b/tests/baselines/reference/constructorOverloads6.js new file mode 100644 index 00000000000..1996449165c --- /dev/null +++ b/tests/baselines/reference/constructorOverloads6.js @@ -0,0 +1,32 @@ +//// [constructorOverloads6.ts] +declare class FooBase { + constructor(s: string); + constructor(n: number); + constructor(x: any) { + + } + bar1():void; +} + + declare class Foo extends FooBase { + constructor(s: string); + constructor(n: number); + constructor(x: any, y?:any); + + bar1():void; +} + +var f1 = new Foo("hey"); +var f2 = new Foo(0); +var f3 = new Foo(f1); +var f4 = new Foo([f1,f2,f3]); + +f1.bar1(); + + +//// [constructorOverloads6.js] +var f1 = new Foo("hey"); +var f2 = new Foo(0); +var f3 = new Foo(f1); +var f4 = new Foo([f1, f2, f3]); +f1.bar1(); diff --git a/tests/baselines/reference/contextualTypingOfAccessors.js b/tests/baselines/reference/contextualTypingOfAccessors.js new file mode 100644 index 00000000000..45463936831 --- /dev/null +++ b/tests/baselines/reference/contextualTypingOfAccessors.js @@ -0,0 +1,25 @@ +//// [contextualTypingOfAccessors.ts] +// not contextually typing accessors + +var x: { + foo: (x: number) => number; +} + +x = { + get foo() { + return (n)=>n + }, + set foo(x) {} +} + + +//// [contextualTypingOfAccessors.js] +// not contextually typing accessors +var x; +x = { + get foo() { + return function (n) { return n; }; + }, + set foo(x) { + } +}; diff --git a/tests/baselines/reference/continueNotInIterationStatement1.js b/tests/baselines/reference/continueNotInIterationStatement1.js new file mode 100644 index 00000000000..b6fd1786cdf --- /dev/null +++ b/tests/baselines/reference/continueNotInIterationStatement1.js @@ -0,0 +1,5 @@ +//// [continueNotInIterationStatement1.ts] +continue; + +//// [continueNotInIterationStatement1.js] +continue; diff --git a/tests/baselines/reference/continueNotInIterationStatement2.js b/tests/baselines/reference/continueNotInIterationStatement2.js new file mode 100644 index 00000000000..047c3b49f06 --- /dev/null +++ b/tests/baselines/reference/continueNotInIterationStatement2.js @@ -0,0 +1,13 @@ +//// [continueNotInIterationStatement2.ts] +while (true) { + function f() { + continue; + } +} + +//// [continueNotInIterationStatement2.js] +while (true) { + function f() { + continue; + } +} diff --git a/tests/baselines/reference/continueNotInIterationStatement3.js b/tests/baselines/reference/continueNotInIterationStatement3.js new file mode 100644 index 00000000000..11018019871 --- /dev/null +++ b/tests/baselines/reference/continueNotInIterationStatement3.js @@ -0,0 +1,11 @@ +//// [continueNotInIterationStatement3.ts] +switch (0) { + default: + continue; +} + +//// [continueNotInIterationStatement3.js] +switch (0) { + default: + continue; +} diff --git a/tests/baselines/reference/continueNotInIterationStatement4.js b/tests/baselines/reference/continueNotInIterationStatement4.js new file mode 100644 index 00000000000..f3f52ecb48c --- /dev/null +++ b/tests/baselines/reference/continueNotInIterationStatement4.js @@ -0,0 +1,15 @@ +//// [continueNotInIterationStatement4.ts] +TWO: +while (true){ + var x = () => { + continue TWO; + } +} + + +//// [continueNotInIterationStatement4.js] +TWO: while (true) { + var x = function () { + continue TWO; + }; +} diff --git a/tests/baselines/reference/continueTarget1.js b/tests/baselines/reference/continueTarget1.js new file mode 100644 index 00000000000..07e5a7b9b50 --- /dev/null +++ b/tests/baselines/reference/continueTarget1.js @@ -0,0 +1,6 @@ +//// [continueTarget1.ts] +target: + continue target; + +//// [continueTarget1.js] +target: continue target; diff --git a/tests/baselines/reference/continueTarget5.js b/tests/baselines/reference/continueTarget5.js new file mode 100644 index 00000000000..5bf309d2690 --- /dev/null +++ b/tests/baselines/reference/continueTarget5.js @@ -0,0 +1,18 @@ +//// [continueTarget5.ts] +target: +while (true) { + function f() { + while (true) { + continue target; + } + } +} + +//// [continueTarget5.js] +target: while (true) { + function f() { + while (true) { + continue target; + } + } +} diff --git a/tests/baselines/reference/continueTarget6.js b/tests/baselines/reference/continueTarget6.js new file mode 100644 index 00000000000..aefa8e97652 --- /dev/null +++ b/tests/baselines/reference/continueTarget6.js @@ -0,0 +1,9 @@ +//// [continueTarget6.ts] +while (true) { + continue target; +} + +//// [continueTarget6.js] +while (true) { + continue target; +} diff --git a/tests/baselines/reference/createArray.js b/tests/baselines/reference/createArray.js new file mode 100644 index 00000000000..82572e05cad --- /dev/null +++ b/tests/baselines/reference/createArray.js @@ -0,0 +1,34 @@ +//// [createArray.ts] +var na=new number[]; + +class C { +} + +new C[]; +var ba=new boolean[]; +var sa=new string[]; +function f(s:string):number { return 0; +} +if (ba[14]) { + na[2]=f(sa[3]); +} + +new C[1]; // not an error + +//// [createArray.js] +var na = new number[]; +var C = (function () { + function C() { + } + return C; +})(); +new C[]; +var ba = new boolean[]; +var sa = new string[]; +function f(s) { + return 0; +} +if (ba[14]) { + na[2] = f(sa[3]); +} +new C[1]; // not an error diff --git a/tests/baselines/reference/declFileObjectLiteralWithAccessors.js b/tests/baselines/reference/declFileObjectLiteralWithAccessors.js new file mode 100644 index 00000000000..00598cfcf3e --- /dev/null +++ b/tests/baselines/reference/declFileObjectLiteralWithAccessors.js @@ -0,0 +1,29 @@ +//// [declFileObjectLiteralWithAccessors.ts] + +function /*1*/makePoint(x: number) { + return { + b: 10, + get x() { return x; }, + set x(a: number) { this.b = a; } + }; +}; +var /*4*/point = makePoint(2); +var /*2*/x = point.x; +point./*3*/x = 30; + +//// [declFileObjectLiteralWithAccessors.js] +function makePoint(x) { + return { + b: 10, + get x() { + return x; + }, + set x(a) { + this.b = a; + } + }; +} +; +var point = makePoint(2); +var x = point.x; +point.x = 30; diff --git a/tests/baselines/reference/declFileObjectLiteralWithOnlyGetter.js b/tests/baselines/reference/declFileObjectLiteralWithOnlyGetter.js new file mode 100644 index 00000000000..ed457931a69 --- /dev/null +++ b/tests/baselines/reference/declFileObjectLiteralWithOnlyGetter.js @@ -0,0 +1,22 @@ +//// [declFileObjectLiteralWithOnlyGetter.ts] + +function /*1*/makePoint(x: number) { + return { + get x() { return x; }, + }; +}; +var /*4*/point = makePoint(2); +var /*2*/x = point./*3*/x; + + +//// [declFileObjectLiteralWithOnlyGetter.js] +function makePoint(x) { + return { + get x() { + return x; + } + }; +} +; +var point = makePoint(2); +var x = point.x; diff --git a/tests/baselines/reference/declFileObjectLiteralWithOnlySetter.js b/tests/baselines/reference/declFileObjectLiteralWithOnlySetter.js new file mode 100644 index 00000000000..f5716bb06e0 --- /dev/null +++ b/tests/baselines/reference/declFileObjectLiteralWithOnlySetter.js @@ -0,0 +1,23 @@ +//// [declFileObjectLiteralWithOnlySetter.ts] + +function /*1*/makePoint(x: number) { + return { + b: 10, + set x(a: number) { this.b = a; } + }; +}; +var /*3*/point = makePoint(2); +point./*2*/x = 30; + +//// [declFileObjectLiteralWithOnlySetter.js] +function makePoint(x) { + return { + b: 10, + set x(a) { + this.b = a; + } + }; +} +; +var point = makePoint(2); +point.x = 30; diff --git a/tests/baselines/reference/declFilePrivateStatic.js b/tests/baselines/reference/declFilePrivateStatic.js new file mode 100644 index 00000000000..38dbdb126af --- /dev/null +++ b/tests/baselines/reference/declFilePrivateStatic.js @@ -0,0 +1,54 @@ +//// [declFilePrivateStatic.ts] + +class C { + private static x = 1; + static y = 1; + + private static a() { } + static b() { } + + private static get c() { return 1; } + static get d() { return 1; } + + private static set e(v) { } + static set f(v) { } +} + +//// [declFilePrivateStatic.js] +var C = (function () { + function C() { + } + C.a = function () { + }; + C.b = function () { + }; + Object.defineProperty(C, "c", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "d", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "e", { + set: function (v) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "f", { + set: function (v) { + }, + enumerable: true, + configurable: true + }); + C.x = 1; + C.y = 1; + return C; +})(); diff --git a/tests/baselines/reference/declarationInAmbientContext.js b/tests/baselines/reference/declarationInAmbientContext.js new file mode 100644 index 00000000000..eb39bccc818 --- /dev/null +++ b/tests/baselines/reference/declarationInAmbientContext.js @@ -0,0 +1,6 @@ +//// [declarationInAmbientContext.ts] +declare var [a, b]; // Error, destructuring declaration not allowed in ambient context +declare var {c, d}; // Error, destructuring declaration not allowed in ambient context + + +//// [declarationInAmbientContext.js] diff --git a/tests/baselines/reference/declarationWithNoInitializer.js b/tests/baselines/reference/declarationWithNoInitializer.js new file mode 100644 index 00000000000..54d89368fb1 --- /dev/null +++ b/tests/baselines/reference/declarationWithNoInitializer.js @@ -0,0 +1,8 @@ +//// [declarationWithNoInitializer.ts] +var [a, b]; // Error, no initializer +var {c, d}; // Error, no initializer + + +//// [declarationWithNoInitializer.js] +var _a = void 0, a = _a[0], b = _a[1]; // Error, no initializer +var _b = void 0, c = _b.c, d = _b.d; // Error, no initializer diff --git a/tests/baselines/reference/declareAlreadySeen.js b/tests/baselines/reference/declareAlreadySeen.js new file mode 100644 index 00000000000..51421a67cb7 --- /dev/null +++ b/tests/baselines/reference/declareAlreadySeen.js @@ -0,0 +1,14 @@ +//// [declareAlreadySeen.ts] +module M { + declare declare var x; + declare declare function f(); + + declare declare module N { } + + declare declare class C { } +} + +//// [declareAlreadySeen.js] +var M; +(function (M) { +})(M || (M = {})); diff --git a/tests/baselines/reference/declareModifierOnImport1.js b/tests/baselines/reference/declareModifierOnImport1.js new file mode 100644 index 00000000000..510407b4deb --- /dev/null +++ b/tests/baselines/reference/declareModifierOnImport1.js @@ -0,0 +1,4 @@ +//// [declareModifierOnImport1.ts] +declare import a = b; + +//// [declareModifierOnImport1.js] diff --git a/tests/baselines/reference/deleteOperatorInStrictMode.js b/tests/baselines/reference/deleteOperatorInStrictMode.js new file mode 100644 index 00000000000..3fcf8dd836b --- /dev/null +++ b/tests/baselines/reference/deleteOperatorInStrictMode.js @@ -0,0 +1,9 @@ +//// [deleteOperatorInStrictMode.ts] +"use strict" +var a; +delete a; + +//// [deleteOperatorInStrictMode.js] +"use strict"; +var a; +delete a; diff --git a/tests/baselines/reference/derivedClassFunctionOverridesBaseClassAccessor.js b/tests/baselines/reference/derivedClassFunctionOverridesBaseClassAccessor.js new file mode 100644 index 00000000000..615c3e7f7a6 --- /dev/null +++ b/tests/baselines/reference/derivedClassFunctionOverridesBaseClassAccessor.js @@ -0,0 +1,48 @@ +//// [derivedClassFunctionOverridesBaseClassAccessor.ts] +class Base { + get x() { + return 1; + } + set x(v) { + } +} + +// error +class Derived extends Base { + x() { + return 1; + } +} + +//// [derivedClassFunctionOverridesBaseClassAccessor.js] +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 Base = (function () { + function Base() { + } + Object.defineProperty(Base.prototype, "x", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return Base; +})(); +// error +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + _super.apply(this, arguments); + } + Derived.prototype.x = function () { + return 1; + }; + return Derived; +})(Base); diff --git a/tests/baselines/reference/derivedClassIncludesInheritedMembers.js b/tests/baselines/reference/derivedClassIncludesInheritedMembers.js new file mode 100644 index 00000000000..db54affa6d9 --- /dev/null +++ b/tests/baselines/reference/derivedClassIncludesInheritedMembers.js @@ -0,0 +1,107 @@ +//// [derivedClassIncludesInheritedMembers.ts] +class Base { + a: string; + b() { } + get c() { return ''; } + set c(v) { } + + static r: string; + static s() { } + static get t() { return ''; } + static set t(v) { } + + constructor(x) { } +} + +class Derived extends Base { +} + +var d: Derived = new Derived(1); +var r1 = d.a; +var r2 = d.b(); +var r3 = d.c; +d.c = ''; +var r4 = Derived.r; +var r5 = Derived.s(); +var r6 = Derived.t; +Derived.t = ''; + +class Base2 { + [x: string]: Object; + [x: number]: Date; +} + +class Derived2 extends Base2 { +} + +var d2: Derived2; +var r7 = d2['']; +var r8 = d2[1]; + + + +//// [derivedClassIncludesInheritedMembers.js] +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 Base = (function () { + function Base(x) { + } + Base.prototype.b = function () { + }; + Object.defineProperty(Base.prototype, "c", { + get: function () { + return ''; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + Base.s = function () { + }; + Object.defineProperty(Base, "t", { + get: function () { + return ''; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return Base; +})(); +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + _super.apply(this, arguments); + } + return Derived; +})(Base); +var d = new Derived(1); +var r1 = d.a; +var r2 = d.b(); +var r3 = d.c; +d.c = ''; +var r4 = Derived.r; +var r5 = Derived.s(); +var r6 = Derived.t; +Derived.t = ''; +var Base2 = (function () { + function Base2() { + } + return Base2; +})(); +var Derived2 = (function (_super) { + __extends(Derived2, _super); + function Derived2() { + _super.apply(this, arguments); + } + return Derived2; +})(Base2); +var d2; +var r7 = d2['']; +var r8 = d2[1]; diff --git a/tests/baselines/reference/derivedClassOverridesPublicMembers.js b/tests/baselines/reference/derivedClassOverridesPublicMembers.js new file mode 100644 index 00000000000..f673d9ab856 --- /dev/null +++ b/tests/baselines/reference/derivedClassOverridesPublicMembers.js @@ -0,0 +1,155 @@ +//// [derivedClassOverridesPublicMembers.ts] +var x: { foo: string; } +var y: { foo: string; bar: string; } + +class Base { + a: typeof x; + b(a: typeof x) { } + get c() { return x; } + set c(v: typeof x) { } + d: (a: typeof x) => void; + + static r: typeof x; + static s(a: typeof x) { } + static get t() { return x; } + static set t(v: typeof x) { } + static u: (a: typeof x) => void; + + constructor(a: typeof x) { } +} + +class Derived extends Base { + a: typeof y; + b(a: typeof y) { } + get c() { return y; } + set c(v: typeof y) { } + d: (a: typeof y) => void; + + static r: typeof y; + static s(a: typeof y) { } + static get t() { return y; } + static set t(a: typeof y) { } + static u: (a: typeof y) => void; + + constructor(a: typeof y) { super(x) } +} + +var d: Derived = new Derived(y); +var r1 = d.a; +var r2 = d.b(y); +var r3 = d.c; +var r3a = d.d; +d.c = y; +var r4 = Derived.r; +var r5 = Derived.s(y); +var r6 = Derived.t; +var r6a = Derived.u; +Derived.t = y; + +class Base2 { + [i: string]: Object; + [i: number]: typeof x; +} + +class Derived2 extends Base2 { + [i: string]: typeof x; + [i: number]: typeof y; +} + +var d2: Derived2; +var r7 = d2['']; +var r8 = d2[1]; + + + +//// [derivedClassOverridesPublicMembers.js] +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 x; +var y; +var Base = (function () { + function Base(a) { + } + Base.prototype.b = function (a) { + }; + Object.defineProperty(Base.prototype, "c", { + get: function () { + return x; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + Base.s = function (a) { + }; + Object.defineProperty(Base, "t", { + get: function () { + return x; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return Base; +})(); +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived(a) { + _super.call(this, x); + } + Derived.prototype.b = function (a) { + }; + Object.defineProperty(Derived.prototype, "c", { + get: function () { + return y; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + Derived.s = function (a) { + }; + Object.defineProperty(Derived, "t", { + get: function () { + return y; + }, + set: function (a) { + }, + enumerable: true, + configurable: true + }); + return Derived; +})(Base); +var d = new Derived(y); +var r1 = d.a; +var r2 = d.b(y); +var r3 = d.c; +var r3a = d.d; +d.c = y; +var r4 = Derived.r; +var r5 = Derived.s(y); +var r6 = Derived.t; +var r6a = Derived.u; +Derived.t = y; +var Base2 = (function () { + function Base2() { + } + return Base2; +})(); +var Derived2 = (function (_super) { + __extends(Derived2, _super); + function Derived2() { + _super.apply(this, arguments); + } + return Derived2; +})(Base2); +var d2; +var r7 = d2['']; +var r8 = d2[1]; diff --git a/tests/baselines/reference/derivedClassWithAny.js b/tests/baselines/reference/derivedClassWithAny.js new file mode 100644 index 00000000000..0b568eaec9b --- /dev/null +++ b/tests/baselines/reference/derivedClassWithAny.js @@ -0,0 +1,154 @@ +//// [derivedClassWithAny.ts] +class C { + x: number; + get X(): number { return 1; } + foo(): number { + return 1; + } + + static y: number; + static get Y(): number { + return 1; + } + static bar(): number { + return 1; + } +} + +class D extends C { + x: any; + get X(): any { + return null; + } + foo(): any { + return 1; + } + + static y: any; + static get Y(): any { + return null; + } + static bar(): any { + return null; + } +} + +// if D is a valid class definition than E is now not safe tranisitively through C +class E extends D { + x: string; + get X(): string{ return ''; } + foo(): string { + return ''; + } + + static y: string; + static get Y(): string { + return ''; + } + static bar(): string { + return ''; + } +} + +var c: C; +var d: D; +var e: E; + +c = d; +c = e; +var r = c.foo(); // e.foo would return string + + +//// [derivedClassWithAny.js] +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 C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "X", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + C.prototype.foo = function () { + return 1; + }; + Object.defineProperty(C, "Y", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + C.bar = function () { + return 1; + }; + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + Object.defineProperty(D.prototype, "X", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + D.prototype.foo = function () { + return 1; + }; + Object.defineProperty(D, "Y", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + D.bar = function () { + return null; + }; + return D; +})(C); +// if D is a valid class definition than E is now not safe tranisitively through C +var E = (function (_super) { + __extends(E, _super); + function E() { + _super.apply(this, arguments); + } + Object.defineProperty(E.prototype, "X", { + get: function () { + return ''; + }, + enumerable: true, + configurable: true + }); + E.prototype.foo = function () { + return ''; + }; + Object.defineProperty(E, "Y", { + get: function () { + return ''; + }, + enumerable: true, + configurable: true + }); + E.bar = function () { + return ''; + }; + return E; +})(D); +var c; +var d; +var e; +c = d; +c = e; +var r = c.foo(); // e.foo would return string diff --git a/tests/baselines/reference/derivedClassWithPrivateInstanceShadowingPublicInstance.js b/tests/baselines/reference/derivedClassWithPrivateInstanceShadowingPublicInstance.js new file mode 100644 index 00000000000..fb0dee3e57b --- /dev/null +++ b/tests/baselines/reference/derivedClassWithPrivateInstanceShadowingPublicInstance.js @@ -0,0 +1,86 @@ +//// [derivedClassWithPrivateInstanceShadowingPublicInstance.ts] +class Base { + public x: string; + public fn(): string { + return ''; + } + + public get a() { return 1; } + public set a(v) { } +} + +// error, not a subtype +class Derived extends Base { + private x: string; + private fn(): string { + return ''; + } + + private get a() { return 1; } + private set a(v) { } +} + +var r = Base.x; // ok +var r2 = Derived.x; // error + +var r3 = Base.fn(); // ok +var r4 = Derived.fn(); // error + +var r5 = Base.a; // ok +Base.a = 2; // ok + +var r6 = Derived.a; // error +Derived.a = 2; // error + +//// [derivedClassWithPrivateInstanceShadowingPublicInstance.js] +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 Base = (function () { + function Base() { + } + Base.prototype.fn = function () { + return ''; + }; + Object.defineProperty(Base.prototype, "a", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return Base; +})(); +// error, not a subtype +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + _super.apply(this, arguments); + } + Derived.prototype.fn = function () { + return ''; + }; + Object.defineProperty(Derived.prototype, "a", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return Derived; +})(Base); +var r = Base.x; // ok +var r2 = Derived.x; // error +var r3 = Base.fn(); // ok +var r4 = Derived.fn(); // error +var r5 = Base.a; // ok +Base.a = 2; // ok +var r6 = Derived.a; // error +Derived.a = 2; // error diff --git a/tests/baselines/reference/derivedClassWithPrivateStaticShadowingPublicStatic.js b/tests/baselines/reference/derivedClassWithPrivateStaticShadowingPublicStatic.js new file mode 100644 index 00000000000..b2468f62d81 --- /dev/null +++ b/tests/baselines/reference/derivedClassWithPrivateStaticShadowingPublicStatic.js @@ -0,0 +1,88 @@ +//// [derivedClassWithPrivateStaticShadowingPublicStatic.ts] +class Base { + public static x: string; + public static fn(): string { + return ''; + } + + public static get a() { return 1; } + public static set a(v) { } +} + +// BUG 847404 +// should be error +class Derived extends Base { + private static x: string; + private static fn(): string { + return ''; + } + + private static get a() { return 1; } + private static set a(v) { } +} + +var r = Base.x; // ok +var r2 = Derived.x; // error + +var r3 = Base.fn(); // ok +var r4 = Derived.fn(); // error + +var r5 = Base.a; // ok +Base.a = 2; // ok + +var r6 = Derived.a; // error +Derived.a = 2; // error + +//// [derivedClassWithPrivateStaticShadowingPublicStatic.js] +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 Base = (function () { + function Base() { + } + Base.fn = function () { + return ''; + }; + Object.defineProperty(Base, "a", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return Base; +})(); +// BUG 847404 +// should be error +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + _super.apply(this, arguments); + } + Derived.fn = function () { + return ''; + }; + Object.defineProperty(Derived, "a", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return Derived; +})(Base); +var r = Base.x; // ok +var r2 = Derived.x; // error +var r3 = Base.fn(); // ok +var r4 = Derived.fn(); // error +var r5 = Base.a; // ok +Base.a = 2; // ok +var r6 = Derived.a; // error +Derived.a = 2; // error diff --git a/tests/baselines/reference/derivedGenericClassWithAny.js b/tests/baselines/reference/derivedGenericClassWithAny.js new file mode 100644 index 00000000000..677fadf3876 --- /dev/null +++ b/tests/baselines/reference/derivedGenericClassWithAny.js @@ -0,0 +1,118 @@ +//// [derivedGenericClassWithAny.ts] +class C { + x: T; + get X(): T { return null; } + foo(): T { + return null; + } +} + +class D extends C { + x: any; + get X(): any { + return null; + } + foo(): any { + return 1; + } + + static y: any; + static get Y(): any { + return null; + } + static bar(): any { + return null; + } +} + +// if D is a valid class definition than E is now not safe tranisitively through C +class E extends D { + x: T; + get X(): T { return ''; } // error + foo(): T { + return ''; // error + } +} + +var c: C; +var d: D; +var e: E; + +c = d; +c = e; +var r = c.foo(); // e.foo would return string + +//// [derivedGenericClassWithAny.js] +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 C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "X", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + C.prototype.foo = function () { + return null; + }; + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + Object.defineProperty(D.prototype, "X", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + D.prototype.foo = function () { + return 1; + }; + Object.defineProperty(D, "Y", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + D.bar = function () { + return null; + }; + return D; +})(C); +// if D is a valid class definition than E is now not safe tranisitively through C +var E = (function (_super) { + __extends(E, _super); + function E() { + _super.apply(this, arguments); + } + Object.defineProperty(E.prototype, "X", { + get: function () { + return ''; + } // error + , + enumerable: true, + configurable: true + }); + E.prototype.foo = function () { + return ''; // error + }; + return E; +})(D); +var c; +var d; +var e; +c = d; +c = e; +var r = c.foo(); // e.foo would return string diff --git a/tests/baselines/reference/duplicateClassElements.js b/tests/baselines/reference/duplicateClassElements.js new file mode 100644 index 00000000000..da320eb9ac4 --- /dev/null +++ b/tests/baselines/reference/duplicateClassElements.js @@ -0,0 +1,105 @@ +//// [duplicateClassElements.ts] +class a { + public a; + public a; + public b() { + } + public b() { + } + public x; + get x() { + return 10; + } + set x(_x: number) { + } + + get y() { + return "Hello"; + } + set y(_y: string) { + } + + public z() { + } + get z() { + return "Hello"; + } + set z(_y: string) { + } + + get x2() { + return 10; + } + set x2(_x: number) { + } + public x2; + + get z2() { + return "Hello"; + } + set z2(_y: string) { + } + public z2() { + } + +} + +//// [duplicateClassElements.js] +var a = (function () { + function a() { + } + a.prototype.b = function () { + }; + a.prototype.b = function () { + }; + Object.defineProperty(a.prototype, "x", { + get: function () { + return 10; + }, + set: function (_x) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(a.prototype, "y", { + get: function () { + return "Hello"; + }, + set: function (_y) { + }, + enumerable: true, + configurable: true + }); + a.prototype.z = function () { + }; + Object.defineProperty(a.prototype, "z", { + get: function () { + return "Hello"; + }, + set: function (_y) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(a.prototype, "x2", { + get: function () { + return 10; + }, + set: function (_x) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(a.prototype, "z2", { + get: function () { + return "Hello"; + }, + set: function (_y) { + }, + enumerable: true, + configurable: true + }); + a.prototype.z2 = function () { + }; + return a; +})(); diff --git a/tests/baselines/reference/duplicateLabel1.js b/tests/baselines/reference/duplicateLabel1.js new file mode 100644 index 00000000000..e7976895c94 --- /dev/null +++ b/tests/baselines/reference/duplicateLabel1.js @@ -0,0 +1,9 @@ +//// [duplicateLabel1.ts] +target: +target: +while (true) { +} + +//// [duplicateLabel1.js] +target: target: while (true) { +} diff --git a/tests/baselines/reference/duplicateLabel2.js b/tests/baselines/reference/duplicateLabel2.js new file mode 100644 index 00000000000..9ee9671d59d --- /dev/null +++ b/tests/baselines/reference/duplicateLabel2.js @@ -0,0 +1,13 @@ +//// [duplicateLabel2.ts] +target: +while (true) { + target: + while (true) { + } +} + +//// [duplicateLabel2.js] +target: while (true) { + target: while (true) { + } +} diff --git a/tests/baselines/reference/duplicateObjectLiteralProperty.js b/tests/baselines/reference/duplicateObjectLiteralProperty.js new file mode 100644 index 00000000000..5bbeb433a0c --- /dev/null +++ b/tests/baselines/reference/duplicateObjectLiteralProperty.js @@ -0,0 +1,41 @@ +//// [duplicateObjectLiteralProperty.ts] +var x = { + a: 1, + b: true, // OK + a: 56, // Duplicate + \u0061: "ss", // Duplicate + a: { + c: 1, + "c": 56, // Duplicate + } +}; + + +var y = { + get a() { return 0; }, + set a(v: number) { }, + get a() { return 0; } +}; + + +//// [duplicateObjectLiteralProperty.js] +var x = { + a: 1, + b: true, + a: 56, + \u0061: "ss", + a: { + c: 1, + "c": 56, + } +}; +var y = { + get a() { + return 0; + }, + set a(v) { + }, + get a() { + return 0; + } +}; diff --git a/tests/baselines/reference/duplicatePropertiesInStrictMode.js b/tests/baselines/reference/duplicatePropertiesInStrictMode.js new file mode 100644 index 00000000000..37bb3d62b7f --- /dev/null +++ b/tests/baselines/reference/duplicatePropertiesInStrictMode.js @@ -0,0 +1,13 @@ +//// [duplicatePropertiesInStrictMode.ts] +"use strict"; +var x = { + x: 1, + x: 2 +} + +//// [duplicatePropertiesInStrictMode.js] +"use strict"; +var x = { + x: 1, + x: 2 +}; diff --git a/tests/baselines/reference/emptyGenericParamList.js b/tests/baselines/reference/emptyGenericParamList.js new file mode 100644 index 00000000000..c5d01778f2d --- /dev/null +++ b/tests/baselines/reference/emptyGenericParamList.js @@ -0,0 +1,11 @@ +//// [emptyGenericParamList.ts] +class I {} +var x: I<>; + +//// [emptyGenericParamList.js] +var I = (function () { + function I() { + } + return I; +})(); +var x; diff --git a/tests/baselines/reference/emptyTypeArgumentList.js b/tests/baselines/reference/emptyTypeArgumentList.js new file mode 100644 index 00000000000..91fce396289 --- /dev/null +++ b/tests/baselines/reference/emptyTypeArgumentList.js @@ -0,0 +1,8 @@ +//// [emptyTypeArgumentList.ts] +function foo() { } +foo<>(); + +//// [emptyTypeArgumentList.js] +function foo() { +} +foo(); diff --git a/tests/baselines/reference/emptyTypeArgumentListWithNew.js b/tests/baselines/reference/emptyTypeArgumentListWithNew.js new file mode 100644 index 00000000000..d51c4f630a6 --- /dev/null +++ b/tests/baselines/reference/emptyTypeArgumentListWithNew.js @@ -0,0 +1,11 @@ +//// [emptyTypeArgumentListWithNew.ts] +class foo { } +new foo<>(); + +//// [emptyTypeArgumentListWithNew.js] +var foo = (function () { + function foo() { + } + return foo; +})(); +new foo(); diff --git a/tests/baselines/reference/enumConstantMembers.js b/tests/baselines/reference/enumConstantMembers.js new file mode 100644 index 00000000000..f58c7d253af --- /dev/null +++ b/tests/baselines/reference/enumConstantMembers.js @@ -0,0 +1,38 @@ +//// [enumConstantMembers.ts] +// Constant members allow negatives, but not decimals. Also hex literals are allowed +enum E1 { + a = 1, + b +} +enum E2 { + a = - 1, + b +} +enum E3 { + a = 0.1, + b // Error because 0.1 is not a constant +} + +declare enum E4 { + a = 1, + b = -1, + c = 0.1 // Not a constant +} + +//// [enumConstantMembers.js] +// Constant members allow negatives, but not decimals. Also hex literals are allowed +var E1; +(function (E1) { + E1[E1["a"] = 1] = "a"; + E1[E1["b"] = 2] = "b"; +})(E1 || (E1 = {})); +var E2; +(function (E2) { + E2[E2["a"] = -1] = "a"; + E2[E2["b"] = 0] = "b"; +})(E2 || (E2 = {})); +var E3; +(function (E3) { + E3[E3["a"] = 0.1] = "a"; + E3[E3["b"] = 1.1] = "b"; // Error because 0.1 is not a constant +})(E3 || (E3 = {})); diff --git a/tests/baselines/reference/enumInitializersWithExponents.js b/tests/baselines/reference/enumInitializersWithExponents.js new file mode 100644 index 00000000000..b4dd38e32c2 --- /dev/null +++ b/tests/baselines/reference/enumInitializersWithExponents.js @@ -0,0 +1,12 @@ +//// [enumInitializersWithExponents.ts] +// Must be integer literals. +declare enum E { + a = 1e3, // ok + b = 1e25, // ok + c = 1e-3, // error + d = 1e-9, // error + e = 1e0, // ok + f = 1e+25 // ok +} + +//// [enumInitializersWithExponents.js] diff --git a/tests/baselines/reference/enumWithoutInitializerAfterComputedMember.js b/tests/baselines/reference/enumWithoutInitializerAfterComputedMember.js new file mode 100644 index 00000000000..ef9192c1c90 --- /dev/null +++ b/tests/baselines/reference/enumWithoutInitializerAfterComputedMember.js @@ -0,0 +1,14 @@ +//// [enumWithoutInitializerAfterComputedMember.ts] +enum E { + a, + b = a, + c +} + +//// [enumWithoutInitializerAfterComputedMember.js] +var E; +(function (E) { + E[E["a"] = 0] = "a"; + E[E["b"] = E.a] = "b"; + E[E["c"] = undefined] = "c"; +})(E || (E = {})); diff --git a/tests/baselines/reference/errorSuperPropertyAccess.js b/tests/baselines/reference/errorSuperPropertyAccess.js new file mode 100644 index 00000000000..26c66a1222c --- /dev/null +++ b/tests/baselines/reference/errorSuperPropertyAccess.js @@ -0,0 +1,280 @@ +//// [errorSuperPropertyAccess.ts] +//super property access in constructor of class with no base type +//super property access in instance member function of class with no base type +//super property access in instance member accessor(get and set) of class with no base type +class NoBase { + constructor() { + var a = super.prototype; + var b = super.hasOwnProperty(''); + } + + fn() { + var a = super.prototype; + var b = super.hasOwnProperty(''); + } + + m = super.prototype; + n = super.hasOwnProperty(''); + + //super static property access in static member function of class with no base type + //super static property access in static member accessor(get and set) of class with no base type + public static static1() { + super.hasOwnProperty(''); + } + + public static get static2() { + super.hasOwnProperty(''); + return ''; + } + + public static set static2(n) { + super.hasOwnProperty(''); + } +} + +class SomeBase { + private privateFunc() { } + private privateMember = 0; + + public publicFunc() { } + public publicMember = 0; + + private static privateStaticFunc() { } + private static privateStaticMember = 0; + + public static publicStaticFunc() { } + public static publicStaticMember = 0; + +} + + +//super.publicInstanceMemberNotFunction in constructor of derived class +//super.publicInstanceMemberNotFunction in instance member function of derived class +//super.publicInstanceMemberNotFunction in instance member accessor(get and set) of derived class +//super property access only available with typed this +class SomeDerived1 extends SomeBase { + constructor() { + super(); + super.publicMember = 1; + } + + fn() { + var x = super.publicMember; + } + + get a() { + var x = super.publicMember; + return undefined; + } + set a(n) { + n = super.publicMember; + } + fn2() { + function inner() { + super.publicFunc(); + } + var x = { + test: function () { return super.publicFunc(); } + } + } +} + +//super.privateProperty in constructor of derived class +//super.privateProperty in instance member function of derived class +//super.privateProperty in instance member accessor(get and set) of derived class +class SomeDerived2 extends SomeBase { + constructor() { + super(); + super.privateMember = 1; + } + + fn() { + var x = super.privateMember; + } + + get a() { + var x = super.privateMember; + return undefined; + } + set a(n) { + n = super.privateMember; + } +} + +//super.publicStaticMemberNotFunction in static member function of derived class +//super.publicStaticMemberNotFunction in static member accessor(get and set) of derived class +//super.privateStaticProperty in static member function of derived class +//super.privateStaticProperty in static member accessor(get and set) of derived class +class SomeDerived3 extends SomeBase { + static fn() { + super.publicStaticMember = 3; + super.privateStaticMember = 3; + super.privateStaticFunc(); + } + static get a() { + super.publicStaticMember = 3; + super.privateStaticMember = 3; + super.privateStaticFunc(); + return ''; + } + static set a(n) { + super.publicStaticMember = 3; + super.privateStaticMember = 3; + super.privateStaticFunc(); + } +} + +// In object literal +var obj = { n: super.wat, p: super.foo() }; + + +//// [errorSuperPropertyAccess.js] +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 __(); +}; +//super property access in constructor of class with no base type +//super property access in instance member function of class with no base type +//super property access in instance member accessor(get and set) of class with no base type +var NoBase = (function () { + function NoBase() { + this.m = super.prototype; + this.n = super.hasOwnProperty.call(this, ''); + var a = super.prototype; + var b = super.hasOwnProperty.call(this, ''); + } + NoBase.prototype.fn = function () { + var a = super.prototype; + var b = super.hasOwnProperty.call(this, ''); + }; + //super static property access in static member function of class with no base type + //super static property access in static member accessor(get and set) of class with no base type + NoBase.static1 = function () { + super.hasOwnProperty.call(this, ''); + }; + Object.defineProperty(NoBase, "static2", { + get: function () { + super.hasOwnProperty.call(this, ''); + return ''; + }, + set: function (n) { + super.hasOwnProperty.call(this, ''); + }, + enumerable: true, + configurable: true + }); + return NoBase; +})(); +var SomeBase = (function () { + function SomeBase() { + this.privateMember = 0; + this.publicMember = 0; + } + SomeBase.prototype.privateFunc = function () { + }; + SomeBase.prototype.publicFunc = function () { + }; + SomeBase.privateStaticFunc = function () { + }; + SomeBase.publicStaticFunc = function () { + }; + SomeBase.privateStaticMember = 0; + SomeBase.publicStaticMember = 0; + return SomeBase; +})(); +//super.publicInstanceMemberNotFunction in constructor of derived class +//super.publicInstanceMemberNotFunction in instance member function of derived class +//super.publicInstanceMemberNotFunction in instance member accessor(get and set) of derived class +//super property access only available with typed this +var SomeDerived1 = (function (_super) { + __extends(SomeDerived1, _super); + function SomeDerived1() { + _super.call(this); + _super.prototype.publicMember = 1; + } + SomeDerived1.prototype.fn = function () { + var x = _super.prototype.publicMember; + }; + Object.defineProperty(SomeDerived1.prototype, "a", { + get: function () { + var x = _super.prototype.publicMember; + return undefined; + }, + set: function (n) { + n = _super.prototype.publicMember; + }, + enumerable: true, + configurable: true + }); + SomeDerived1.prototype.fn2 = function () { + function inner() { + super.publicFunc.call(this); + } + var x = { + test: function () { + return super.publicFunc.call(this); + } + }; + }; + return SomeDerived1; +})(SomeBase); +//super.privateProperty in constructor of derived class +//super.privateProperty in instance member function of derived class +//super.privateProperty in instance member accessor(get and set) of derived class +var SomeDerived2 = (function (_super) { + __extends(SomeDerived2, _super); + function SomeDerived2() { + _super.call(this); + _super.prototype.privateMember = 1; + } + SomeDerived2.prototype.fn = function () { + var x = _super.prototype.privateMember; + }; + Object.defineProperty(SomeDerived2.prototype, "a", { + get: function () { + var x = _super.prototype.privateMember; + return undefined; + }, + set: function (n) { + n = _super.prototype.privateMember; + }, + enumerable: true, + configurable: true + }); + return SomeDerived2; +})(SomeBase); +//super.publicStaticMemberNotFunction in static member function of derived class +//super.publicStaticMemberNotFunction in static member accessor(get and set) of derived class +//super.privateStaticProperty in static member function of derived class +//super.privateStaticProperty in static member accessor(get and set) of derived class +var SomeDerived3 = (function (_super) { + __extends(SomeDerived3, _super); + function SomeDerived3() { + _super.apply(this, arguments); + } + SomeDerived3.fn = function () { + _super.publicStaticMember = 3; + _super.privateStaticMember = 3; + _super.privateStaticFunc.call(this); + }; + Object.defineProperty(SomeDerived3, "a", { + get: function () { + _super.publicStaticMember = 3; + _super.privateStaticMember = 3; + _super.privateStaticFunc.call(this); + return ''; + }, + set: function (n) { + _super.publicStaticMember = 3; + _super.privateStaticMember = 3; + _super.privateStaticFunc.call(this); + }, + enumerable: true, + configurable: true + }); + return SomeDerived3; +})(SomeBase); +// In object literal +var obj = { n: super.wat, p: super.foo.call(this) }; diff --git a/tests/baselines/reference/errorsInGenericTypeReference.js b/tests/baselines/reference/errorsInGenericTypeReference.js new file mode 100644 index 00000000000..6a9f62c5e49 --- /dev/null +++ b/tests/baselines/reference/errorsInGenericTypeReference.js @@ -0,0 +1,158 @@ +//// [errorsInGenericTypeReference.ts] + +interface IFoo { } + +class Foo { } + + +// in call type arguments +class testClass1 { + method(): void { } +} +var tc1 = new testClass1(); +tc1.method<{ x: V }>(); // error: could not find symbol V + + +// in constructor type arguments +class testClass2 { +} +var tc2 = new testClass2<{ x: V }>(); // error: could not find symbol V + + +// in method return type annotation +class testClass3 { + testMethod1(): Foo<{ x: V }> { return null; } // error: could not find symbol V + static testMethod2(): Foo<{ x: V }> { return null } // error: could not find symbol V + set a(value: Foo<{ x: V }>) { } // error: could not find symbol V + property: Foo<{ x: V }>; // error: could not find symbol V +} + + +// in function return type annotation +function testFunction1(): Foo<{ x: V }> { return null; } // error: could not find symbol V + + +// in paramter types +function testFunction2(p: Foo<{ x: V }>) { }// error: could not find symbol V + + +// in var type annotation +var f: Foo<{ x: V }>; // error: could not find symbol V + + +// in constraints +class testClass4 { } // error: could not find symbol V + +interface testClass5> { } // error: could not find symbol V + +class testClass6 { + method(): void { } // error: could not find symbol V +} + +interface testInterface1 { + new (a: M); // error: could not find symbol V +} + + +// in extends clause +class testClass7 extends Foo<{ x: V }> { } // error: could not find symbol V + + +// in implements clause +class testClass8 implements IFoo<{ x: V }> { } // error: could not find symbol V + + +// in signatures +interface testInterface2 { + new (a: Foo<{ x: V }>): Foo<{ x: V }>; //2x: error: could not find symbol V + [x: string]: Foo<{ x: V }>; // error: could not find symbol V + method(a: Foo<{ x: V }>): Foo<{ x: V }>; //2x: error: could not find symbol V + property: Foo<{ x: V }>; // error: could not find symbol V +} + + + +//// [errorsInGenericTypeReference.js] +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 Foo = (function () { + function Foo() { + } + return Foo; +})(); +// in call type arguments +var testClass1 = (function () { + function testClass1() { + } + testClass1.prototype.method = function () { + }; + return testClass1; +})(); +var tc1 = new testClass1(); +tc1.method(); // error: could not find symbol V +// in constructor type arguments +var testClass2 = (function () { + function testClass2() { + } + return testClass2; +})(); +var tc2 = new testClass2(); // error: could not find symbol V +// in method return type annotation +var testClass3 = (function () { + function testClass3() { + } + testClass3.prototype.testMethod1 = function () { + return null; + }; // error: could not find symbol V + testClass3.testMethod2 = function () { + return null; + }; // error: could not find symbol V + Object.defineProperty(testClass3.prototype, "a", { + set: function (value) { + } // error: could not find symbol V + , + enumerable: true, + configurable: true + }); + return testClass3; +})(); +// in function return type annotation +function testFunction1() { + return null; +} // error: could not find symbol V +// in paramter types +function testFunction2(p) { +} // error: could not find symbol V +// in var type annotation +var f; // error: could not find symbol V +// in constraints +var testClass4 = (function () { + function testClass4() { + } + return testClass4; +})(); // error: could not find symbol V +var testClass6 = (function () { + function testClass6() { + } + testClass6.prototype.method = function () { + }; // error: could not find symbol V + return testClass6; +})(); +// in extends clause +var testClass7 = (function (_super) { + __extends(testClass7, _super); + function testClass7() { + _super.apply(this, arguments); + } + return testClass7; +})(Foo); // error: could not find symbol V +// in implements clause +var testClass8 = (function () { + function testClass8() { + } + return testClass8; +})(); // error: could not find symbol V diff --git a/tests/baselines/reference/es6ClassTest.js b/tests/baselines/reference/es6ClassTest.js new file mode 100644 index 00000000000..5fd9f0e9b7f --- /dev/null +++ b/tests/baselines/reference/es6ClassTest.js @@ -0,0 +1,151 @@ +//// [es6ClassTest.ts] +class Bar { + public goo: number; + public prop1(x) { + return x; + } + + constructor (n) { } +} + +// new-style class +class Foo extends Bar { + foo:number; + gar = 0; + zoo:string = "zoo"; + x: any; + + bar() { return 0; } + + private boo(); + private boo(x?) { return x; } + + static statVal = 0; + + constructor(); + constructor(x?, private y?:string, public z?=0) { + super(x); + this.x = x; + this.gar = 5; + } +} + +var f = new Foo(); + +declare module AmbientMod { + export class Provide { + foo:number; + zoo:string; + + constructor(); + + private boo(); + bar(); + } +} + + +//class GetSetMonster { + + +// // attack(target) { +// // WScript.Echo("Attacks " + target); +// // } +// // The contextual keyword "get" followed by an identifier and +// // a curly body defines a getter in the same way that "get" +// // defines one in an object literal. +// // get isAlive() { +// // return this.health > 0; +// // } + +// // Likewise, "set" can be used to define setters. +// set health(value:number) { +// if (value < 0) { +// throw new Error('Health must be non-negative.') +// } +// this.health = value +// } +// get health() { return 0; } + +// constructor(this.name: string, health: number) { +// this.health = 0; +// } +//} + + +//class bar { + +// static fnOverload( ); + +// static fnOverload(foo: string){ } // no error + +// constructor(){}; + +//} + + +//// [es6ClassTest.js] +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 Bar = (function () { + function Bar(n) { + } + Bar.prototype.prop1 = function (x) { + return x; + }; + return Bar; +})(); +// new-style class +var Foo = (function (_super) { + __extends(Foo, _super); + function Foo(x, y, z) { + if (z === void 0) { z = 0; } + _super.call(this, x); + this.y = y; + this.z = z; + this.gar = 0; + this.zoo = "zoo"; + this.x = x; + this.gar = 5; + } + Foo.prototype.bar = function () { + return 0; + }; + Foo.prototype.boo = function (x) { + return x; + }; + Foo.statVal = 0; + return Foo; +})(Bar); +var f = new Foo(); +//class GetSetMonster { +// // attack(target) { +// // WScript.Echo("Attacks " + target); +// // } +// // The contextual keyword "get" followed by an identifier and +// // a curly body defines a getter in the same way that "get" +// // defines one in an object literal. +// // get isAlive() { +// // return this.health > 0; +// // } +// // Likewise, "set" can be used to define setters. +// set health(value:number) { +// if (value < 0) { +// throw new Error('Health must be non-negative.') +// } +// this.health = value +// } +// get health() { return 0; } +// constructor(this.name: string, health: number) { +// this.health = 0; +// } +//} +//class bar { +// static fnOverload( ); +// static fnOverload(foo: string){ } // no error +// constructor(){}; +//} diff --git a/tests/baselines/reference/es6ClassTest2.js b/tests/baselines/reference/es6ClassTest2.js new file mode 100644 index 00000000000..8ef7a2fa379 --- /dev/null +++ b/tests/baselines/reference/es6ClassTest2.js @@ -0,0 +1,326 @@ +//// [es6ClassTest2.ts] +class BasicMonster { + constructor(public name: string, public health: number) { + + } + + attack(target) { + // WScript.Echo("Attacks " + target); + } + + isAlive = true; +} + +var m1 = new BasicMonster("1", 100); +var m2 = new BasicMonster("2", 100); +m1.attack(m2); +m1.health = 0; +console.log((m5.isAlive).toString()); + +class GetSetMonster { + constructor(public name: string, private _health: number) { + + } + + attack(target) { + // WScript.Echo("Attacks " + target); + } + // The contextual keyword "get" followed by an identifier and + // a curly body defines a getter in the same way that "get" + // defines one in an object literal. + get isAlive() { + return this._health > 0; + } + + // Likewise, "set" can be used to define setters. + set health(value: number) { + if (value < 0) { + throw new Error('Health must be non-negative.') + } + this._health = value + } +} + +var m3 = new BasicMonster("1", 100); +var m4 = new BasicMonster("2", 100); +m3.attack(m4); +m3.health = 0; +var x = (m5.isAlive).toString() + +class OverloadedMonster { + constructor(name: string); + constructor(public name: string, public health?: number) { + + } + + attack(); + attack(a: any); + attack(target?) { + //WScript.Echo("Attacks " + target); + } + + isAlive = true; +} + +var m5 = new OverloadedMonster("1"); +var m6 = new OverloadedMonster("2"); +m5.attack(m6); +m5.health = 0; +var y = (m5.isAlive).toString() + +class SplatMonster { + constructor(...args: string[]) { } + roar(name: string, ...args: number[]) { } +} + + +function foo() { return true; } +class PrototypeMonster { + age: number = 1; + name: string; + b = foo(); +} + +class SuperParent { + constructor(a: number) { + + } + + b(b: string) { + + } + + c() { + + } +} + +class SuperChild extends SuperParent { + constructor() { + super(1); + } + + b() { + super.b('str'); + } + + c() { + super.c(); + } +} + +class Statics { + static foo = 1; + static bar: string; + + static baz() { + return ""; + } +} + +var stat = new Statics(); + +interface IFoo { + x: number; + z: string; +} + +class ImplementsInterface implements IFoo { + public x: number; + public z: string; + constructor() { + this.x = 1; + this.z = "foo"; + } +} + +class Visibility { + public foo() { } + private bar() { } + private x: number; + public y: number; + public z: number; + constructor() { + this.x = 1; + this.y = 2; + } +} + +class BaseClassWithConstructor { + constructor(public x: number, public s: string) { } +} + +// used to test codegen +class ChildClassWithoutConstructor extends BaseClassWithConstructor { } + + +var ccwc = new ChildClassWithoutConstructor(1, "s"); + + + +//// [es6ClassTest2.js] +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 BasicMonster = (function () { + function BasicMonster(name, health) { + this.name = name; + this.health = health; + this.isAlive = true; + } + BasicMonster.prototype.attack = function (target) { + // WScript.Echo("Attacks " + target); + }; + return BasicMonster; +})(); +var m1 = new BasicMonster("1", 100); +var m2 = new BasicMonster("2", 100); +m1.attack(m2); +m1.health = 0; +console.log(m5.isAlive.toString()); +var GetSetMonster = (function () { + function GetSetMonster(name, _health) { + this.name = name; + this._health = _health; + } + GetSetMonster.prototype.attack = function (target) { + // WScript.Echo("Attacks " + target); + }; + Object.defineProperty(GetSetMonster.prototype, "isAlive", { + // The contextual keyword "get" followed by an identifier and + // a curly body defines a getter in the same way that "get" + // defines one in an object literal. + get: function () { + return this._health > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(GetSetMonster.prototype, "health", { + // Likewise, "set" can be used to define setters. + set: function (value) { + if (value < 0) { + throw new Error('Health must be non-negative.'); + } + this._health = value; + }, + enumerable: true, + configurable: true + }); + return GetSetMonster; +})(); +var m3 = new BasicMonster("1", 100); +var m4 = new BasicMonster("2", 100); +m3.attack(m4); +m3.health = 0; +var x = m5.isAlive.toString(); +var OverloadedMonster = (function () { + function OverloadedMonster(name, health) { + this.name = name; + this.health = health; + this.isAlive = true; + } + OverloadedMonster.prototype.attack = function (target) { + //WScript.Echo("Attacks " + target); + }; + return OverloadedMonster; +})(); +var m5 = new OverloadedMonster("1"); +var m6 = new OverloadedMonster("2"); +m5.attack(m6); +m5.health = 0; +var y = m5.isAlive.toString(); +var SplatMonster = (function () { + function SplatMonster() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i - 0] = arguments[_i]; + } + } + SplatMonster.prototype.roar = function (name) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + }; + return SplatMonster; +})(); +function foo() { + return true; +} +var PrototypeMonster = (function () { + function PrototypeMonster() { + this.age = 1; + this.b = foo(); + } + return PrototypeMonster; +})(); +var SuperParent = (function () { + function SuperParent(a) { + } + SuperParent.prototype.b = function (b) { + }; + SuperParent.prototype.c = function () { + }; + return SuperParent; +})(); +var SuperChild = (function (_super) { + __extends(SuperChild, _super); + function SuperChild() { + _super.call(this, 1); + } + SuperChild.prototype.b = function () { + _super.prototype.b.call(this, 'str'); + }; + SuperChild.prototype.c = function () { + _super.prototype.c.call(this); + }; + return SuperChild; +})(SuperParent); +var Statics = (function () { + function Statics() { + } + Statics.baz = function () { + return ""; + }; + Statics.foo = 1; + return Statics; +})(); +var stat = new Statics(); +var ImplementsInterface = (function () { + function ImplementsInterface() { + this.x = 1; + this.z = "foo"; + } + return ImplementsInterface; +})(); +var Visibility = (function () { + function Visibility() { + this.x = 1; + this.y = 2; + } + Visibility.prototype.foo = function () { + }; + Visibility.prototype.bar = function () { + }; + return Visibility; +})(); +var BaseClassWithConstructor = (function () { + function BaseClassWithConstructor(x, s) { + this.x = x; + this.s = s; + } + return BaseClassWithConstructor; +})(); +// used to test codegen +var ChildClassWithoutConstructor = (function (_super) { + __extends(ChildClassWithoutConstructor, _super); + function ChildClassWithoutConstructor() { + _super.apply(this, arguments); + } + return ChildClassWithoutConstructor; +})(BaseClassWithConstructor); +var ccwc = new ChildClassWithoutConstructor(1, "s"); diff --git a/tests/baselines/reference/exportAlreadySeen.js b/tests/baselines/reference/exportAlreadySeen.js new file mode 100644 index 00000000000..e18c0bbf7f6 --- /dev/null +++ b/tests/baselines/reference/exportAlreadySeen.js @@ -0,0 +1,38 @@ +//// [exportAlreadySeen.ts] +module M { + export export var x = 1; + export export function f() { } + + export export module N { + export export class C { } + export export interface I { } + } +} + +declare module A { + export export var x; + export export function f() + + export export module N { + export export class C { } + export export interface I { } + } +} + +//// [exportAlreadySeen.js] +var M; +(function (M) { + M.x = 1; + function f() { + } + M.f = f; + var N; + (function (N) { + var C = (function () { + function C() { + } + return C; + })(); + N.C = C; + })(N = M.N || (M.N = {})); +})(M || (M = {})); diff --git a/tests/baselines/reference/exportAssignmentWithDeclareAndExportModifiers.js b/tests/baselines/reference/exportAssignmentWithDeclareAndExportModifiers.js new file mode 100644 index 00000000000..74396bb951b --- /dev/null +++ b/tests/baselines/reference/exportAssignmentWithDeclareAndExportModifiers.js @@ -0,0 +1,7 @@ +//// [exportAssignmentWithDeclareAndExportModifiers.ts] +var x; +export declare export = x; + +//// [exportAssignmentWithDeclareAndExportModifiers.js] +var x; +module.exports = x; diff --git a/tests/baselines/reference/exportAssignmentWithDeclareModifier.js b/tests/baselines/reference/exportAssignmentWithDeclareModifier.js new file mode 100644 index 00000000000..711538616aa --- /dev/null +++ b/tests/baselines/reference/exportAssignmentWithDeclareModifier.js @@ -0,0 +1,7 @@ +//// [exportAssignmentWithDeclareModifier.ts] +var x; +declare export = x; + +//// [exportAssignmentWithDeclareModifier.js] +var x; +module.exports = x; diff --git a/tests/baselines/reference/exportAssignmentWithExportModifier.js b/tests/baselines/reference/exportAssignmentWithExportModifier.js new file mode 100644 index 00000000000..9d94cc8db75 --- /dev/null +++ b/tests/baselines/reference/exportAssignmentWithExportModifier.js @@ -0,0 +1,7 @@ +//// [exportAssignmentWithExportModifier.ts] +var x; +export export = x; + +//// [exportAssignmentWithExportModifier.js] +var x; +module.exports = x; diff --git a/tests/baselines/reference/exportingContainingVisibleType.js b/tests/baselines/reference/exportingContainingVisibleType.js new file mode 100644 index 00000000000..2246a63bc49 --- /dev/null +++ b/tests/baselines/reference/exportingContainingVisibleType.js @@ -0,0 +1,29 @@ +//// [exportingContainingVisibleType.ts] +class Foo { + public get foo() { + var i: Foo; + return i; // Should be fine (previous bug report visibility error). + + } +} + +export var x = 5; + + +//// [exportingContainingVisibleType.js] +define(["require", "exports"], function (require, exports) { + var Foo = (function () { + function Foo() { + } + Object.defineProperty(Foo.prototype, "foo", { + get: function () { + var i; + return i; // Should be fine (previous bug report visibility error). + }, + enumerable: true, + configurable: true + }); + return Foo; + })(); + exports.x = 5; +}); diff --git a/tests/baselines/reference/extendsClauseAlreadySeen.js b/tests/baselines/reference/extendsClauseAlreadySeen.js new file mode 100644 index 00000000000..5c328e39131 --- /dev/null +++ b/tests/baselines/reference/extendsClauseAlreadySeen.js @@ -0,0 +1,29 @@ +//// [extendsClauseAlreadySeen.ts] +class C { + +} +class D extends C extends C { + baz() { } +} + +//// [extendsClauseAlreadySeen.js] +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 C = (function () { + function C() { + } + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + D.prototype.baz = function () { + }; + return D; +})(C); diff --git a/tests/baselines/reference/extendsClauseAlreadySeen2.js b/tests/baselines/reference/extendsClauseAlreadySeen2.js new file mode 100644 index 00000000000..3f3b7049311 --- /dev/null +++ b/tests/baselines/reference/extendsClauseAlreadySeen2.js @@ -0,0 +1,29 @@ +//// [extendsClauseAlreadySeen2.ts] +class C { + +} +class D extends C extends C { + baz() { } +} + +//// [extendsClauseAlreadySeen2.js] +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 C = (function () { + function C() { + } + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + D.prototype.baz = function () { + }; + return D; +})(C); diff --git a/tests/baselines/reference/externSemantics.js b/tests/baselines/reference/externSemantics.js new file mode 100644 index 00000000000..ed418c66f18 --- /dev/null +++ b/tests/baselines/reference/externSemantics.js @@ -0,0 +1,7 @@ +//// [externSemantics.ts] +declare var x=10; +declare var v; +declare var y:number=3; + + +//// [externSemantics.js] diff --git a/tests/baselines/reference/externSyntax.js b/tests/baselines/reference/externSyntax.js new file mode 100644 index 00000000000..409a9bcecef --- /dev/null +++ b/tests/baselines/reference/externSyntax.js @@ -0,0 +1,17 @@ +//// [externSyntax.ts] +declare var v; +declare module M { + export class D { + public p; + } + export class C { + public f(); + public g() { } // error body + } +} + + + + + +//// [externSyntax.js] diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.js b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.js new file mode 100644 index 00000000000..428a085ca56 --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.js @@ -0,0 +1,38 @@ +//// [fatarrowfunctionsOptionalArgsErrors1.ts] +(arg1?, arg2) => 101; +(...arg?) => 102; +(...arg) => 103; +(...arg:number [] = []) => 104; + +// Non optional parameter following an optional one +(arg1 = 1, arg2) => 1; + +//// [fatarrowfunctionsOptionalArgsErrors1.js] +(function (arg1, arg2) { return 101; }); +(function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 102; +}); +(function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 103; +}); +(function () { + if (arg === void 0) { arg = []; } + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 104; +}); +// Non optional parameter following an optional one +(function (arg1, arg2) { + if (arg1 === void 0) { arg1 = 1; } + return 1; +}); diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.js b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.js new file mode 100644 index 00000000000..dfd7e9f74dc --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.js @@ -0,0 +1,69 @@ +//// [fatarrowfunctionsOptionalArgsErrors4.ts] + false ? (arg?: number = 0) => 47 : null; + false ? ((arg?: number = 0) => 57) : null; + false ? null : (arg?: number = 0) => 67; + ((arg?:number = 1) => 0) + '' + ((arg?:number = 2) => 106); + + foo( + (a) => 110, + ((a) => 111), + (a) => { + return 112; + }, + (a? ) => 113, + (a, b? ) => 114, + (a: number) => 115, + (a: number = 0) => 116, + (a = 0) => 117, + (a?: number = 0) => 118, + (...a: number[]) => 119, + (a, b? = 0, ...c: number[]) => 120, + (a) => (b) => (c) => 121, + false? (a) => 0 : (b) => 122 + ); + +//// [fatarrowfunctionsOptionalArgsErrors4.js] +false ? function (arg) { + if (arg === void 0) { arg = 0; } + return 47; +} : null; +false ? (function (arg) { + if (arg === void 0) { arg = 0; } + return 57; +}) : null; +false ? null : function (arg) { + if (arg === void 0) { arg = 0; } + return 67; +}; +(function (arg) { + if (arg === void 0) { arg = 1; } + return 0; +}) + '' + (function (arg) { + if (arg === void 0) { arg = 2; } + return 106; +}); +foo(function (a) { return 110; }, (function (a) { return 111; }), function (a) { + return 112; +}, function (a) { return 113; }, function (a, b) { return 114; }, function (a) { return 115; }, function (a) { + if (a === void 0) { a = 0; } + return 116; +}, function (a) { + if (a === void 0) { a = 0; } + return 117; +}, function (a) { + if (a === void 0) { a = 0; } + return 118; +}, function () { + var a = []; + for (var _i = 0; _i < arguments.length; _i++) { + a[_i - 0] = arguments[_i]; + } + return 119; +}, function (a, b) { + if (b === void 0) { b = 0; } + var c = []; + for (var _i = 2; _i < arguments.length; _i++) { + c[_i - 2] = arguments[_i]; + } + return 120; +}, function (a) { return function (b) { return function (c) { return 121; }; }; }, false ? function (a) { return 0; } : function (b) { return 122; }); diff --git a/tests/baselines/reference/fieldAndGetterWithSameName.js b/tests/baselines/reference/fieldAndGetterWithSameName.js new file mode 100644 index 00000000000..64129ff9365 --- /dev/null +++ b/tests/baselines/reference/fieldAndGetterWithSameName.js @@ -0,0 +1,22 @@ +//// [fieldAndGetterWithSameName.ts] +export class C { + x: number; + get x(): number { return 1; } +} + +//// [fieldAndGetterWithSameName.js] +define(["require", "exports"], function (require, exports) { + var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; + })(); + exports.C = C; +}); diff --git a/tests/baselines/reference/functionAndPropertyNameConflict.js b/tests/baselines/reference/functionAndPropertyNameConflict.js new file mode 100644 index 00000000000..1368f8241d5 --- /dev/null +++ b/tests/baselines/reference/functionAndPropertyNameConflict.js @@ -0,0 +1,23 @@ +//// [functionAndPropertyNameConflict.ts] +class C65 { + public aaaaa() { } + public get aaaaa() { + return 1; + } +} + +//// [functionAndPropertyNameConflict.js] +var C65 = (function () { + function C65() { + } + C65.prototype.aaaaa = function () { + }; + Object.defineProperty(C65.prototype, "aaaaa", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C65; +})(); diff --git a/tests/baselines/reference/functionOverloadErrorsSyntax.js b/tests/baselines/reference/functionOverloadErrorsSyntax.js new file mode 100644 index 00000000000..3706f4da744 --- /dev/null +++ b/tests/baselines/reference/functionOverloadErrorsSyntax.js @@ -0,0 +1,20 @@ +//// [functionOverloadErrorsSyntax.ts] +//Function overload signature with optional parameter followed by non-optional parameter +function fn4a(x?: number, y: string); +function fn4a() { } + +function fn4b(n: string, x?: number, y: string); +function fn4b() { } + +//Function overload signature with rest param followed by non-optional parameter +function fn5(x: string, ...y: any[], z: string); +function fn5() { } + + +//// [functionOverloadErrorsSyntax.js] +function fn4a() { +} +function fn4b() { +} +function fn5() { +} diff --git a/tests/baselines/reference/functionsWithModifiersInBlocks1.js b/tests/baselines/reference/functionsWithModifiersInBlocks1.js new file mode 100644 index 00000000000..1d381bccfe1 --- /dev/null +++ b/tests/baselines/reference/functionsWithModifiersInBlocks1.js @@ -0,0 +1,13 @@ +//// [functionsWithModifiersInBlocks1.ts] +{ + declare function f() { } + export function f() { } + declare export function f() { } +} + +//// [functionsWithModifiersInBlocks1.js] +{ + function f() { + } + exports.f = f; +} diff --git a/tests/baselines/reference/genericGetter.js b/tests/baselines/reference/genericGetter.js new file mode 100644 index 00000000000..59425d8c13b --- /dev/null +++ b/tests/baselines/reference/genericGetter.js @@ -0,0 +1,26 @@ +//// [genericGetter.ts] +class C { + data: T; + get x(): T { + return this.data; + } +} + +var c = new C(); +var r: string = c.x; + +//// [genericGetter.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return this.data; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var c = new C(); +var r = c.x; diff --git a/tests/baselines/reference/genericGetter2.js b/tests/baselines/reference/genericGetter2.js new file mode 100644 index 00000000000..9d39ce02d5f --- /dev/null +++ b/tests/baselines/reference/genericGetter2.js @@ -0,0 +1,28 @@ +//// [genericGetter2.ts] +class A { } + +class C { + data: A; + get x(): A { + return this.data; + } +} + +//// [genericGetter2.js] +var A = (function () { + function A() { + } + return A; +})(); +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return this.data; + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/genericGetter3.js b/tests/baselines/reference/genericGetter3.js new file mode 100644 index 00000000000..1cb01c6f112 --- /dev/null +++ b/tests/baselines/reference/genericGetter3.js @@ -0,0 +1,33 @@ +//// [genericGetter3.ts] +class A { } + +class C { + data: A; + get x(): A { + return this.data; + } +} + +var c = new C(); +var r: string = c.x; + +//// [genericGetter3.js] +var A = (function () { + function A() { + } + return A; +})(); +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return this.data; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var c = new C(); +var r = c.x; diff --git a/tests/baselines/reference/genericReturnTypeFromGetter1.js b/tests/baselines/reference/genericReturnTypeFromGetter1.js new file mode 100644 index 00000000000..208b12308e1 --- /dev/null +++ b/tests/baselines/reference/genericReturnTypeFromGetter1.js @@ -0,0 +1,27 @@ +//// [genericReturnTypeFromGetter1.ts] +export interface A { + new (dbSet: DbSet): T; +} +export class DbSet { + _entityType: A; + get entityType() { return this._entityType; } // used to ICE without return type annotation +} + + +//// [genericReturnTypeFromGetter1.js] +define(["require", "exports"], function (require, exports) { + var DbSet = (function () { + function DbSet() { + } + Object.defineProperty(DbSet.prototype, "entityType", { + get: function () { + return this._entityType; + } // used to ICE without return type annotation + , + enumerable: true, + configurable: true + }); + return DbSet; + })(); + exports.DbSet = DbSet; +}); diff --git a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument.js b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument.js new file mode 100644 index 00000000000..dbda6074830 --- /dev/null +++ b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument.js @@ -0,0 +1,103 @@ +//// [genericTypeReferenceWithoutTypeArgument.ts] +// it is an error to use a generic type without type arguments +// all of these are errors + +class C { + foo: T; +} + +var c: C; + +var a: { x: C }; +var b: { (x: C): C }; +var d: { [x: C]: C }; + +var e = (x: C) => { var y: C; return y; } + +function f(x: C): C { var y: C; return y; } + +var g = function f(x: C): C { var y: C; return y; } + +class D extends C { +} + +interface I extends C {} + +module M { + export class E { foo: T } +} + +class D2 extends M.E { } +class D3 { } +interface I2 extends M.E { } + +function h(x: T) { } +function i(x: T) { } + +var j = null; +var k = null; + +//// [genericTypeReferenceWithoutTypeArgument.js] +// it is an error to use a generic type without type arguments +// all of 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; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var C = (function () { + function C() { + } + return C; +})(); +var c; +var a; +var b; +var d; +var e = function (x) { + var y; + return y; +}; +function f(x) { + var y; + return y; +} +var g = function f(x) { + var y; + return y; +}; +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; +})(C); +var M; +(function (M) { + var E = (function () { + function E() { + } + return E; + })(); + M.E = E; +})(M || (M = {})); +var D2 = (function (_super) { + __extends(D2, _super); + function D2() { + _super.apply(this, arguments); + } + return D2; +})(M.E); +var D3 = (function () { + function D3() { + } + return D3; +})(); +function h(x) { +} +function i(x) { +} +var j = null; +var k = null; diff --git a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.js b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.js new file mode 100644 index 00000000000..f6a22073702 --- /dev/null +++ b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.js @@ -0,0 +1,84 @@ +//// [genericTypeReferenceWithoutTypeArgument2.ts] +// it is an error to use a generic type without type arguments +// all of these are errors + +interface I { + foo: T; +} + +var c: I; + +var a: { x: I }; +var b: { (x: I): I }; +var d: { [x: I]: I }; + +var e = (x: I) => { var y: I; return y; } + +function f(x: I): I { var y: I; return y; } + +var g = function f(x: I): I { var y: I; return y; } + +class D extends I { +} + +interface U extends I {} + +module M { + export interface E { foo: T } +} + +class D2 extends M.C { } +interface D3 { } +interface I2 extends M.C { } + +function h(x: T) { } +function i(x: T) { } + +var j = null; +var k = null; + +//// [genericTypeReferenceWithoutTypeArgument2.js] +// it is an error to use a generic type without type arguments +// all of 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; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var c; +var a; +var b; +var d; +var e = function (x) { + var y; + return y; +}; +function f(x) { + var y; + return y; +} +var g = function f(x) { + var y; + return y; +}; +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; +})(I); +var D2 = (function (_super) { + __extends(D2, _super); + function D2() { + _super.apply(this, arguments); + } + return D2; +})(M.C); +function h(x) { +} +function i(x) { +} +var j = null; +var k = null; diff --git a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument3.js b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument3.js new file mode 100644 index 00000000000..a56ec43d7c3 --- /dev/null +++ b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument3.js @@ -0,0 +1,31 @@ +//// [genericTypeReferenceWithoutTypeArgument3.ts] +// it is an error to use a generic type without type arguments +// all of these are errors + +declare class C { + foo: T; +} + +declare var c: C; + +declare var a: { x: C }; +declare var b: { (x: C): C }; +declare var d: { [x: C]: C }; + +declare function f(x: C): C; + +declare class D extends C {} + +declare module M { + export class E { foo: T } +} + +declare class D2 extends M.C { } +declare class D3 { } + +declare function h(x: T); +declare function i(x: T); + +//// [genericTypeReferenceWithoutTypeArgument3.js] +// it is an error to use a generic type without type arguments +// all of these are errors diff --git a/tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.js b/tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.js new file mode 100644 index 00000000000..0211ce55119 --- /dev/null +++ b/tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.js @@ -0,0 +1,47 @@ +//// [getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts] +declare function _(value: Array): _; +declare function _(value: T): _; + +declare module _ { + export function each( + //list: List, + //iterator: ListIterator, + context?: any): void; + + interface ListIterator { + (value: T, index: number, list: T[]): TResult; + } +} + +declare class _ { + each(iterator: _.ListIterator, context?: any): void; +} + +module MyModule { + export class MyClass { + public get myGetter() { + var obj:any = {}; + + return obj; + } + } +} + +//// [getAccessorWithImpliedReturnTypeAndFunctionClassMerge.js] +var MyModule; +(function (MyModule) { + var MyClass = (function () { + function MyClass() { + } + Object.defineProperty(MyClass.prototype, "myGetter", { + get: function () { + var obj = {}; + return obj; + }, + enumerable: true, + configurable: true + }); + return MyClass; + })(); + MyModule.MyClass = MyClass; +})(MyModule || (MyModule = {})); diff --git a/tests/baselines/reference/getAndSetAsMemberNames.js b/tests/baselines/reference/getAndSetAsMemberNames.js new file mode 100644 index 00000000000..22f99920fb1 --- /dev/null +++ b/tests/baselines/reference/getAndSetAsMemberNames.js @@ -0,0 +1,66 @@ +//// [getAndSetAsMemberNames.ts] +class C1 { + set: boolean; + get = 1; +} +class C2 { + set; +} +class C3 { + set (x) { + return x + 1; + } +} +class C4 { + get: boolean = true; +} +class C5 { + public set: () => boolean = function () { return true; }; + get (): boolean { return true; } + set t(x) { } +} + + +//// [getAndSetAsMemberNames.js] +var C1 = (function () { + function C1() { + this.get = 1; + } + return C1; +})(); +var C2 = (function () { + function C2() { + } + return C2; +})(); +var C3 = (function () { + function C3() { + } + C3.prototype.set = function (x) { + return x + 1; + }; + return C3; +})(); +var C4 = (function () { + function C4() { + this.get = true; + } + return C4; +})(); +var C5 = (function () { + function C5() { + this.set = function () { + return true; + }; + } + C5.prototype.get = function () { + return true; + }; + Object.defineProperty(C5.prototype, "t", { + set: function (x) { + }, + enumerable: true, + configurable: true + }); + return C5; +})(); diff --git a/tests/baselines/reference/getAndSetNotIdenticalType.js b/tests/baselines/reference/getAndSetNotIdenticalType.js new file mode 100644 index 00000000000..7e77fc25d0b --- /dev/null +++ b/tests/baselines/reference/getAndSetNotIdenticalType.js @@ -0,0 +1,23 @@ +//// [getAndSetNotIdenticalType.ts] +class C { + get x(): number { + return 1; + } + set x(v: string) { } +} + +//// [getAndSetNotIdenticalType.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/getAndSetNotIdenticalType2.js b/tests/baselines/reference/getAndSetNotIdenticalType2.js new file mode 100644 index 00000000000..d73f07ec388 --- /dev/null +++ b/tests/baselines/reference/getAndSetNotIdenticalType2.js @@ -0,0 +1,41 @@ +//// [getAndSetNotIdenticalType2.ts] +class A { foo: T; } + +class C { + data: A; + get x(): A { + return this.data; + } + set x(v: A) { + this.data = v; + } +} + +var x = new C(); +var r = x.x; +x.x = r; + +//// [getAndSetNotIdenticalType2.js] +var A = (function () { + function A() { + } + return A; +})(); +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return this.data; + }, + set: function (v) { + this.data = v; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var x = new C(); +var r = x.x; +x.x = r; diff --git a/tests/baselines/reference/getAndSetNotIdenticalType3.js b/tests/baselines/reference/getAndSetNotIdenticalType3.js new file mode 100644 index 00000000000..2f37a7cbfae --- /dev/null +++ b/tests/baselines/reference/getAndSetNotIdenticalType3.js @@ -0,0 +1,41 @@ +//// [getAndSetNotIdenticalType3.ts] +class A { foo: T; } + +class C { + data: A; + get x(): A { + return this.data; + } + set x(v: A) { + this.data = v; + } +} + +var x = new C(); +var r = x.x; +x.x = r; + +//// [getAndSetNotIdenticalType3.js] +var A = (function () { + function A() { + } + return A; +})(); +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return this.data; + }, + set: function (v) { + this.data = v; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var x = new C(); +var r = x.x; +x.x = r; diff --git a/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline b/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline index a5d5d2eb9d7..889902d98a2 100644 --- a/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline @@ -1,2 +1,5 @@ -EmitOutputStatus : AllOutputGenerationSkipped +EmitOutputStatus : JSGeneratedWithSemanticErrors +Filename : tests/cases/fourslash/inputFile1.js +// File contains early errors. All outputs should be skipped. +const uninitialized_const_error; diff --git a/tests/baselines/reference/getsetReturnTypes.js b/tests/baselines/reference/getsetReturnTypes.js new file mode 100644 index 00000000000..55d7e9285b0 --- /dev/null +++ b/tests/baselines/reference/getsetReturnTypes.js @@ -0,0 +1,20 @@ +//// [getsetReturnTypes.ts] +function makePoint(x: number) { + return { + get x() { return x; } + } +}; +var x = makePoint(2).x; +var y: number = makePoint(2).x; + +//// [getsetReturnTypes.js] +function makePoint(x) { + return { + get x() { + return x; + } + }; +} +; +var x = makePoint(2).x; +var y = makePoint(2).x; diff --git a/tests/baselines/reference/getterMissingReturnError.js b/tests/baselines/reference/getterMissingReturnError.js new file mode 100644 index 00000000000..76566d9346e --- /dev/null +++ b/tests/baselines/reference/getterMissingReturnError.js @@ -0,0 +1,20 @@ +//// [getterMissingReturnError.ts] +class test { + public get p2(){ + + } +} + + +//// [getterMissingReturnError.js] +var test = (function () { + function test() { + } + Object.defineProperty(test.prototype, "p2", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return test; +})(); diff --git a/tests/baselines/reference/getterThatThrowsShouldNotNeedReturn.js b/tests/baselines/reference/getterThatThrowsShouldNotNeedReturn.js new file mode 100644 index 00000000000..c48e5c9c6bc --- /dev/null +++ b/tests/baselines/reference/getterThatThrowsShouldNotNeedReturn.js @@ -0,0 +1,27 @@ +//// [getterThatThrowsShouldNotNeedReturn.ts] +class Greeter { + public get greet(): string { + throw ''; // should not raise an error + } + public greeting(): string { + throw ''; // should not raise an error + } +} + + +//// [getterThatThrowsShouldNotNeedReturn.js] +var Greeter = (function () { + function Greeter() { + } + Object.defineProperty(Greeter.prototype, "greet", { + get: function () { + throw ''; // should not raise an error + }, + enumerable: true, + configurable: true + }); + Greeter.prototype.greeting = function () { + throw ''; // should not raise an error + }; + return Greeter; +})(); diff --git a/tests/baselines/reference/gettersAndSetters.js b/tests/baselines/reference/gettersAndSetters.js new file mode 100644 index 00000000000..4c94cbc43db --- /dev/null +++ b/tests/baselines/reference/gettersAndSetters.js @@ -0,0 +1,98 @@ +//// [gettersAndSetters.ts] +// classes +class C { + public fooBack = ""; + static barBack:string = ""; + public bazBack = ""; + + public get Foo() { return this.fooBack;} // ok + public set Foo(foo:string) {this.fooBack = foo;} // ok + + static get Bar() {return C.barBack;} // ok + static set Bar(bar:string) {C.barBack = bar;} // ok + + public get = function() {} // ok + public set = function() {} // ok +} + +var c = new C(); + +var foo = c.Foo; +c.Foo = "foov"; + +var bar = C.Bar; +C.Bar = "barv"; + +var baz = c.Baz; +c.Baz = "bazv"; + +// The Foo accessors' return and param types should be contextually typed to the Foo field +var o : {Foo:number;} = {get Foo() {return 0;}, set Foo(val:number){val}}; // o + +var ofg = o.Foo; +o.Foo = 0; + + +interface I1 { + (n:number):number; +} + +var i:I1 = function (n) {return n;} + + +//// [gettersAndSetters.js] +// classes +var C = (function () { + function C() { + this.fooBack = ""; + this.bazBack = ""; + this.get = function () { + }; // ok + this.set = function () { + }; // ok + } + Object.defineProperty(C.prototype, "Foo", { + get: function () { + return this.fooBack; + } // ok + , + set: function (foo) { + this.fooBack = foo; + } // ok + , + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "Bar", { + get: function () { + return C.barBack; + } // ok + , + set: function (bar) { + C.barBack = bar; + } // ok + , + enumerable: true, + configurable: true + }); + C.barBack = ""; + return C; +})(); +var c = new C(); +var foo = c.Foo; +c.Foo = "foov"; +var bar = C.Bar; +C.Bar = "barv"; +var baz = c.Baz; +c.Baz = "bazv"; +// The Foo accessors' return and param types should be contextually typed to the Foo field +var o = { get Foo() { + return 0; +}, set Foo(val) { + val; +} }; // o +var ofg = o.Foo; +o.Foo = 0; +var i = function (n) { + return n; +}; diff --git a/tests/baselines/reference/gettersAndSettersAccessibility.js b/tests/baselines/reference/gettersAndSettersAccessibility.js new file mode 100644 index 00000000000..9a7564ec96d --- /dev/null +++ b/tests/baselines/reference/gettersAndSettersAccessibility.js @@ -0,0 +1,23 @@ +//// [gettersAndSettersAccessibility.ts] +class C99 { + private get Baz():number { return 0; } + public set Baz(n:number) {} // error - accessors do not agree in visibility +} + + +//// [gettersAndSettersAccessibility.js] +var C99 = (function () { + function C99() { + } + Object.defineProperty(C99.prototype, "Baz", { + get: function () { + return 0; + }, + set: function (n) { + } // error - accessors do not agree in visibility + , + enumerable: true, + configurable: true + }); + return C99; +})(); diff --git a/tests/baselines/reference/gettersAndSettersErrors.js b/tests/baselines/reference/gettersAndSettersErrors.js new file mode 100644 index 00000000000..514a69b2513 --- /dev/null +++ b/tests/baselines/reference/gettersAndSettersErrors.js @@ -0,0 +1,62 @@ +//// [gettersAndSettersErrors.ts] +class C { + public get Foo() { return "foo";} // ok + public set Foo(foo:string) {} // ok + + public Foo = 0; // error - duplicate identifier Foo - confirmed + public get Goo(v:string):string {return null;} // error - getters must not have a parameter + public set Goo(v:string):string {} // error - setters must not specify a return type +} + +class E { + private get Baz():number { return 0; } + public set Baz(n:number) {} // error - accessors do not agree in visibility +} + + + + +//// [gettersAndSettersErrors.js] +var C = (function () { + function C() { + this.Foo = 0; // error - duplicate identifier Foo - confirmed + } + Object.defineProperty(C.prototype, "Foo", { + get: function () { + return "foo"; + } // ok + , + set: function (foo) { + } // ok + , + enumerable: true, + configurable: true + }); + Object.defineProperty(C.prototype, "Goo", { + get: function (v) { + return null; + } // error - getters must not have a parameter + , + set: function (v) { + } // error - setters must not specify a return type + , + enumerable: true, + configurable: true + }); + return C; +})(); +var E = (function () { + function E() { + } + Object.defineProperty(E.prototype, "Baz", { + get: function () { + return 0; + }, + set: function (n) { + } // error - accessors do not agree in visibility + , + enumerable: true, + configurable: true + }); + return E; +})(); diff --git a/tests/baselines/reference/gettersAndSettersTypesAgree.js b/tests/baselines/reference/gettersAndSettersTypesAgree.js new file mode 100644 index 00000000000..48c0ac1500c --- /dev/null +++ b/tests/baselines/reference/gettersAndSettersTypesAgree.js @@ -0,0 +1,48 @@ +//// [gettersAndSettersTypesAgree.ts] +class C { + public get Foo() { return "foo";} // ok + public set Foo(foo) {} // ok - type inferred from getter return statement + + public get Bar() { return "foo";} // ok + public set Bar(bar:string) {} // ok - type must be declared +} + +var o1 = {get Foo(){return 0;}, set Foo(val){}}; // ok - types agree (inference) +var o2 = {get Foo(){return 0;}, set Foo(val:number){}}; // ok - types agree + +//// [gettersAndSettersTypesAgree.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + get: function () { + return "foo"; + } // ok + , + set: function (foo) { + } // ok - type inferred from getter return statement + , + enumerable: true, + configurable: true + }); + Object.defineProperty(C.prototype, "Bar", { + get: function () { + return "foo"; + } // ok + , + set: function (bar) { + } // ok - type must be declared + , + enumerable: true, + configurable: true + }); + return C; +})(); +var o1 = { get Foo() { + return 0; +}, set Foo(val) { +} }; // ok - types agree (inference) +var o2 = { get Foo() { + return 0; +}, set Foo(val) { +} }; // ok - types agree diff --git a/tests/baselines/reference/giant.js b/tests/baselines/reference/giant.js new file mode 100644 index 00000000000..d5f17c9728f --- /dev/null +++ b/tests/baselines/reference/giant.js @@ -0,0 +1,1220 @@ +//// [giant.ts] + +/* + Prefixes + p -> public + r -> private + i -> import + e -> export + a -> ambient + t -> static + s -> set + g -> get + + MAX DEPTH 3 LEVELS +*/ +var V; +function F() { }; +class C { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() +} +interface I { + //Call Signature + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signature + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + //Index Signature + [p]; + [p1: string]; + [p2: string, p3: number]; + + //Property Signature + p; + p1?; + p2?: string; + + //Function Signature + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; +} +module M { + var V; + function F() { }; + class C { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() + } + interface I { + //Call Signature + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signature + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + //Index Signature + [p]; + [p1: string]; + [p2: string, p3: number]; + + //Property Signature + p; + p1?; + p2?: string; + + //Function Signature + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; + } + module M { + var V; + function F() { }; + class C { }; + interface I { }; + module M { }; + export var eV; + export function eF() { }; + export class eC { }; + export interface eI { }; + export module eM { }; + export declare var eaV; + export declare function eaF() { }; + export declare class eaC { }; + export declare module eaM { }; + } + export var eV; + export function eF() { }; + export class eC { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() + } + export interface eI { + //Call Signature + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signature + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + //Index Signature + [p]; + [p1: string]; + [p2: string, p3: number]; + + //Property Signature + p; + p1?; + p2?: string; + + //Function Signature + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; + } + export module eM { + var V; + function F() { }; + class C { }; + interface I { }; + module M { }; + export var eV; + export function eF() { }; + export class eC { }; + export interface eI { }; + export module eM { }; + export declare var eaV; + export declare function eaF() { }; + export declare class eaC { }; + export declare module eaM { }; + } + export declare var eaV; + export declare function eaF() { }; + export declare class eaC { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() + } + export declare module eaM { + var V; + function F() { }; + class C { } + interface I { } + module M { } + export var eV; + export function eF() { }; + export class eC { } + export interface eI { } + export module eM { } + } +} +export var eV; +export function eF() { }; +export class eC { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() +} +export interface eI { + //Call Signature + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signature + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + //Index Signature + [p]; + [p1: string]; + [p2: string, p3: number]; + + //Property Signature + p; + p1?; + p2?: string; + + //Function Signature + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; +} +export module eM { + var V; + function F() { }; + class C { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() + } + interface I { + //Call Signature + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signature + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + //Index Signature + [p]; + [p1: string]; + [p2: string, p3: number]; + + //Property Signature + p; + p1?; + p2?: string; + + //Function Signature + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; + } + module M { + var V; + function F() { }; + class C { }; + interface I { }; + module M { }; + export var eV; + export function eF() { }; + export class eC { }; + export interface eI { }; + export module eM { }; + export declare var eaV; + export declare function eaF() { }; + export declare class eaC { }; + export declare module eaM { }; + } + export var eV; + export function eF() { }; + export class eC { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() + } + export interface eI { + //Call Signature + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signature + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + //Index Signature + [p]; + [p1: string]; + [p2: string, p3: number]; + + //Property Signature + p; + p1?; + p2?: string; + + //Function Signature + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; + } + export module eM { + var V; + function F() { }; + class C { }; + interface I { }; + module M { }; + export var eV; + export function eF() { }; + export class eC { }; + export interface eI { }; + export module eM { }; + export declare var eaV; + export declare function eaF() { }; + export declare class eaC { }; + export declare module eaM { }; + } + export declare var eaV; + export declare function eaF() { }; + export declare class eaC { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() + } + export declare module eaM { + var V; + function F() { }; + class C { } + interface I { } + module M { } + export var eV; + export function eF() { }; + export class eC { } + export interface eI { } + export module eM { } + } +} +export declare var eaV; +export declare function eaF() { }; +export declare class eaC { + constructor () { } + public pV; + private rV; + public pF() { } + private rF() { } + public pgF() { } + public get pgF() + public psF(param:any) { } + public set psF(param:any) + private rgF() { } + private get rgF() + private rsF(param:any) { } + private set rsF(param:any) + static tV; + static tF() { } + static tsF(param:any) { } + static set tsF(param:any) + static tgF() { } + static get tgF() +} +export declare module eaM { + var V; + function F() { }; + class C { + constructor () { } + public pV; + private rV; + public pF() { } + static tV; + static tF() { } + } + interface I { + //Call Signature + (); + (): number; + (p: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signature + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + //Index Signature + [p]; + [p1: string]; + [p2: string, p3: number]; + + //Property Signature + p; + p1?; + p2?: string; + + //Function Signature + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; + } + module M { + var V; + function F() { }; + class C { } + interface I { } + module M { } + export var eV; + export function eF() { }; + export class eC { } + export interface eI { } + export module eM { } + export declare var eaV + export declare function eaF() { }; + export declare class eaC { } + export declare module eaM { } + } + export var eV; + export function eF() { }; + export class eC { + constructor () { } + public pV; + private rV; + public pF() { } + static tV + static tF() { } + } + export interface eI { + //Call Signature + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signature + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + //Index Signature + [p]; + [p1: string]; + [p2: string, p3: number]; + + //Property Signature + p; + p1?; + p2?: string; + + //Function Signature + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; + } + export module eM { + var V; + function F() { }; + class C { } + module M { } + export var eV; + export function eF() { }; + export class eC { } + export interface eI { } + export module eM { } + } +} + +//// [giant.js] +define(["require", "exports"], function (require, exports) { + /* + Prefixes + p -> public + r -> private + i -> import + e -> export + a -> ambient + t -> static + s -> set + g -> get + + MAX DEPTH 3 LEVELS + */ + var V; + function F() { + } + ; + var C = (function () { + function C() { + } + C.prototype.pF = function () { + }; + C.prototype.rF = function () { + }; + C.prototype.pgF = function () { + }; + Object.defineProperty(C.prototype, "pgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + C.prototype.psF = function (param) { + }; + Object.defineProperty(C.prototype, "psF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.prototype.rgF = function () { + }; + Object.defineProperty(C.prototype, "rgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + C.prototype.rsF = function (param) { + }; + Object.defineProperty(C.prototype, "rsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.tF = function () { + }; + C.tsF = function (param) { + }; + Object.defineProperty(C, "tsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.tgF = function () { + }; + Object.defineProperty(C, "tgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; + })(); + var M; + (function (_M) { + var V; + function F() { + } + ; + var C = (function () { + function C() { + } + C.prototype.pF = function () { + }; + C.prototype.rF = function () { + }; + C.prototype.pgF = function () { + }; + Object.defineProperty(C.prototype, "pgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + C.prototype.psF = function (param) { + }; + Object.defineProperty(C.prototype, "psF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.prototype.rgF = function () { + }; + Object.defineProperty(C.prototype, "rgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + C.prototype.rsF = function (param) { + }; + Object.defineProperty(C.prototype, "rsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.tF = function () { + }; + C.tsF = function (param) { + }; + Object.defineProperty(C, "tsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.tgF = function () { + }; + Object.defineProperty(C, "tgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; + })(); + var M; + (function (M) { + var V; + function F() { + } + ; + var C = (function () { + function C() { + } + return C; + })(); + ; + ; + ; + M.eV; + function eF() { + } + M.eF = eF; + ; + var eC = (function () { + function eC() { + } + return eC; + })(); + M.eC = eC; + ; + ; + ; + ; + ; + ; + })(M || (M = {})); + _M.eV; + function eF() { + } + _M.eF = eF; + ; + var eC = (function () { + function eC() { + } + eC.prototype.pF = function () { + }; + eC.prototype.rF = function () { + }; + eC.prototype.pgF = function () { + }; + Object.defineProperty(eC.prototype, "pgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + eC.prototype.psF = function (param) { + }; + Object.defineProperty(eC.prototype, "psF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.prototype.rgF = function () { + }; + Object.defineProperty(eC.prototype, "rgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + eC.prototype.rsF = function (param) { + }; + Object.defineProperty(eC.prototype, "rsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.tF = function () { + }; + eC.tsF = function (param) { + }; + Object.defineProperty(eC, "tsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.tgF = function () { + }; + Object.defineProperty(eC, "tgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return eC; + })(); + _M.eC = eC; + var eM; + (function (eM) { + var V; + function F() { + } + ; + var C = (function () { + function C() { + } + return C; + })(); + ; + ; + ; + eM.eV; + function eF() { + } + eM.eF = eF; + ; + var eC = (function () { + function eC() { + } + return eC; + })(); + eM.eC = eC; + ; + ; + ; + ; + ; + ; + })(eM = _M.eM || (_M.eM = {})); + ; + })(M || (M = {})); + exports.eV; + function eF() { + } + exports.eF = eF; + ; + var eC = (function () { + function eC() { + } + eC.prototype.pF = function () { + }; + eC.prototype.rF = function () { + }; + eC.prototype.pgF = function () { + }; + Object.defineProperty(eC.prototype, "pgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + eC.prototype.psF = function (param) { + }; + Object.defineProperty(eC.prototype, "psF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.prototype.rgF = function () { + }; + Object.defineProperty(eC.prototype, "rgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + eC.prototype.rsF = function (param) { + }; + Object.defineProperty(eC.prototype, "rsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.tF = function () { + }; + eC.tsF = function (param) { + }; + Object.defineProperty(eC, "tsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.tgF = function () { + }; + Object.defineProperty(eC, "tgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return eC; + })(); + exports.eC = eC; + var eM; + (function (_eM) { + var V; + function F() { + } + ; + var C = (function () { + function C() { + } + C.prototype.pF = function () { + }; + C.prototype.rF = function () { + }; + C.prototype.pgF = function () { + }; + Object.defineProperty(C.prototype, "pgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + C.prototype.psF = function (param) { + }; + Object.defineProperty(C.prototype, "psF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.prototype.rgF = function () { + }; + Object.defineProperty(C.prototype, "rgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + C.prototype.rsF = function (param) { + }; + Object.defineProperty(C.prototype, "rsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.tF = function () { + }; + C.tsF = function (param) { + }; + Object.defineProperty(C, "tsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + C.tgF = function () { + }; + Object.defineProperty(C, "tgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; + })(); + var M; + (function (M) { + var V; + function F() { + } + ; + var C = (function () { + function C() { + } + return C; + })(); + ; + ; + ; + M.eV; + function eF() { + } + M.eF = eF; + ; + var eC = (function () { + function eC() { + } + return eC; + })(); + M.eC = eC; + ; + ; + ; + ; + ; + ; + })(M || (M = {})); + _eM.eV; + function eF() { + } + _eM.eF = eF; + ; + var eC = (function () { + function eC() { + } + eC.prototype.pF = function () { + }; + eC.prototype.rF = function () { + }; + eC.prototype.pgF = function () { + }; + Object.defineProperty(eC.prototype, "pgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + eC.prototype.psF = function (param) { + }; + Object.defineProperty(eC.prototype, "psF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.prototype.rgF = function () { + }; + Object.defineProperty(eC.prototype, "rgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + eC.prototype.rsF = function (param) { + }; + Object.defineProperty(eC.prototype, "rsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.tF = function () { + }; + eC.tsF = function (param) { + }; + Object.defineProperty(eC, "tsF", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + eC.tgF = function () { + }; + Object.defineProperty(eC, "tgF", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return eC; + })(); + _eM.eC = eC; + var eM; + (function (eM) { + var V; + function F() { + } + ; + var C = (function () { + function C() { + } + return C; + })(); + ; + ; + ; + eM.eV; + function eF() { + } + eM.eF = eF; + ; + var eC = (function () { + function eC() { + } + return eC; + })(); + eM.eC = eC; + ; + ; + ; + ; + ; + ; + })(eM = _eM.eM || (_eM.eM = {})); + ; + })(eM = exports.eM || (exports.eM = {})); + ; +}); diff --git a/tests/baselines/reference/illegalModifiersOnClassElements.js b/tests/baselines/reference/illegalModifiersOnClassElements.js new file mode 100644 index 00000000000..b9a40fa6aa0 --- /dev/null +++ b/tests/baselines/reference/illegalModifiersOnClassElements.js @@ -0,0 +1,14 @@ +//// [illegalModifiersOnClassElements.ts] +class C { + declare foo = 1; + export bar = 1; +} + +//// [illegalModifiersOnClassElements.js] +var C = (function () { + function C() { + this.foo = 1; + this.bar = 1; + } + return C; +})(); diff --git a/tests/baselines/reference/illegalSuperCallsInConstructor.js b/tests/baselines/reference/illegalSuperCallsInConstructor.js new file mode 100644 index 00000000000..b978af1a609 --- /dev/null +++ b/tests/baselines/reference/illegalSuperCallsInConstructor.js @@ -0,0 +1,56 @@ +//// [illegalSuperCallsInConstructor.ts] +class Base { + x: string; +} + +class Derived extends Base { + constructor() { + var r2 = () => super(); + var r3 = () => { super(); } + var r4 = function () { super(); } + var r5 = { + get foo() { + super(); + return 1; + }, + set foo(v: number) { + super(); + } + } + } +} + +//// [illegalSuperCallsInConstructor.js] +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 Base = (function () { + function Base() { + } + return Base; +})(); +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + var r2 = function () { return _super.call(this); }; + var r3 = function () { + _super.call(this); + }; + var r4 = function () { + _super.call(this); + }; + var r5 = { + get foo() { + _super.call(this); + return 1; + }, + set foo(v) { + _super.call(this); + } + }; + } + return Derived; +})(Base); diff --git a/tests/baselines/reference/implementClausePrecedingExtends.js b/tests/baselines/reference/implementClausePrecedingExtends.js new file mode 100644 index 00000000000..e8f0b96f485 --- /dev/null +++ b/tests/baselines/reference/implementClausePrecedingExtends.js @@ -0,0 +1,23 @@ +//// [implementClausePrecedingExtends.ts] +class C { foo: number } +class D implements C extends C { } + +//// [implementClausePrecedingExtends.js] +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 C = (function () { + function C() { + } + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; +})(C); diff --git a/tests/baselines/reference/implementsClauseAlreadySeen.js b/tests/baselines/reference/implementsClauseAlreadySeen.js new file mode 100644 index 00000000000..84823c13fa8 --- /dev/null +++ b/tests/baselines/reference/implementsClauseAlreadySeen.js @@ -0,0 +1,21 @@ +//// [implementsClauseAlreadySeen.ts] +class C { + +} +class D implements C implements C { + baz() { } +} + +//// [implementsClauseAlreadySeen.js] +var C = (function () { + function C() { + } + return C; +})(); +var D = (function () { + function D() { + } + D.prototype.baz = function () { + }; + return D; +})(); diff --git a/tests/baselines/reference/implicitAnyCastedValue.js b/tests/baselines/reference/implicitAnyCastedValue.js new file mode 100644 index 00000000000..be6bd1bfef3 --- /dev/null +++ b/tests/baselines/reference/implicitAnyCastedValue.js @@ -0,0 +1,163 @@ +//// [implicitAnyCastedValue.ts] +var x = function () { + return 0; // this should not be an error +} + +function foo() { + return "hello world"; // this should not be an error +} + +class C { + bar = null; // this should be an error + foo = undefined; // this should be an error + public get tempVar() { + return 0; // this should not be an error + } + + public returnBarWithCase() { // this should not be an error + return this.bar; + } + + public returnFooWithCase() { + return this.foo; // this should not be an error + } +} + +class C1 { + getValue = null; // this should be an error + + public get castedGet() { + return this.getValue; // this should not be an error + } + + public get notCastedGet() { + return this.getValue; // this should not be an error + } +} + +function castedNull() { + return null; // this should not be an error +} + +function notCastedNull() { + return null; // this should be an error +} + +function returnTypeBar(): any { + return null; // this should not be an error +} + +function undefinedBar() { + return undefined; // this should not be an error +} + +function multipleRets1(x) { // this should not be an error + if (x) { + return 0; + } + else { + return null; + } +} + +function multipleRets2(x) { // this should not be an error + if (x) { + return null; + } + else if (x == 1) { + return 0; + } + else { + return undefined; + } +} + +// this should not be an error +var bar1 = null; +var bar2 = undefined; +var bar3 = 0; +var array = [null, undefined]; + +//// [implicitAnyCastedValue.js] +var x = function () { + return 0; // this should not be an error +}; +function foo() { + return "hello world"; // this should not be an error +} +var C = (function () { + function C() { + this.bar = null; // this should be an error + this.foo = undefined; // this should be an error + } + Object.defineProperty(C.prototype, "tempVar", { + get: function () { + return 0; // this should not be an error + }, + enumerable: true, + configurable: true + }); + C.prototype.returnBarWithCase = function () { + return this.bar; + }; + C.prototype.returnFooWithCase = function () { + return this.foo; // this should not be an error + }; + return C; +})(); +var C1 = (function () { + function C1() { + this.getValue = null; // this should be an error + } + Object.defineProperty(C1.prototype, "castedGet", { + get: function () { + return this.getValue; // this should not be an error + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C1.prototype, "notCastedGet", { + get: function () { + return this.getValue; // this should not be an error + }, + enumerable: true, + configurable: true + }); + return C1; +})(); +function castedNull() { + return null; // this should not be an error +} +function notCastedNull() { + return null; // this should be an error +} +function returnTypeBar() { + return null; // this should not be an error +} +function undefinedBar() { + return undefined; // this should not be an error +} +function multipleRets1(x) { + if (x) { + return 0; + } + else { + return null; + } +} +function multipleRets2(x) { + if (x) { + return null; + } + else if (x == 1) { + return 0; + } + else { + return undefined; + } +} +// this should not be an error +var bar1 = null; +var bar2 = undefined; +var bar3 = 0; +var array = [null, undefined]; diff --git a/tests/baselines/reference/implicitAnyGetAndSetAccessorWithAnyReturnType.js b/tests/baselines/reference/implicitAnyGetAndSetAccessorWithAnyReturnType.js new file mode 100644 index 00000000000..ac3b5e66493 --- /dev/null +++ b/tests/baselines/reference/implicitAnyGetAndSetAccessorWithAnyReturnType.js @@ -0,0 +1,67 @@ +//// [implicitAnyGetAndSetAccessorWithAnyReturnType.ts] +// these should be errors +class GetAndSet { + getAndSet = null; // error at "getAndSet" + public get haveGetAndSet() { // this should not be an error + return this.getAndSet; + } + + // this shouldn't be an error + public set haveGetAndSet(value) { // error at "value" + this.getAndSet = value; + } +} + +class SetterOnly { + public set haveOnlySet(newXValue) { // error at "haveOnlySet, newXValue" + } +} + +class GetterOnly { + public get haveOnlyGet() { // error at "haveOnlyGet" + return null; + } +} + +//// [implicitAnyGetAndSetAccessorWithAnyReturnType.js] +// these should be errors +var GetAndSet = (function () { + function GetAndSet() { + this.getAndSet = null; // error at "getAndSet" + } + Object.defineProperty(GetAndSet.prototype, "haveGetAndSet", { + get: function () { + return this.getAndSet; + }, + // this shouldn't be an error + set: function (value) { + this.getAndSet = value; + }, + enumerable: true, + configurable: true + }); + return GetAndSet; +})(); +var SetterOnly = (function () { + function SetterOnly() { + } + Object.defineProperty(SetterOnly.prototype, "haveOnlySet", { + set: function (newXValue) { + }, + enumerable: true, + configurable: true + }); + return SetterOnly; +})(); +var GetterOnly = (function () { + function GetterOnly() { + } + Object.defineProperty(GetterOnly.prototype, "haveOnlyGet", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + return GetterOnly; +})(); diff --git a/tests/baselines/reference/implicitAnyInAmbientDeclaration.js b/tests/baselines/reference/implicitAnyInAmbientDeclaration.js new file mode 100644 index 00000000000..7807f8fc1ee --- /dev/null +++ b/tests/baselines/reference/implicitAnyInAmbientDeclaration.js @@ -0,0 +1,16 @@ +//// [implicitAnyInAmbientDeclaration.ts] +module Test { + declare class C { + public publicMember; // this should be an error + private privateMember; // this should not be an error + + public publicFunction(x); // this should be an error + private privateFunction(privateParam); // this should not be an error + private constructor(privateParam); + } +} + +//// [implicitAnyInAmbientDeclaration.js] +var Test; +(function (Test) { +})(Test || (Test = {})); diff --git a/tests/baselines/reference/importDeclWithClassModifiers.js b/tests/baselines/reference/importDeclWithClassModifiers.js new file mode 100644 index 00000000000..c8aefe03bab --- /dev/null +++ b/tests/baselines/reference/importDeclWithClassModifiers.js @@ -0,0 +1,15 @@ +//// [importDeclWithClassModifiers.ts] +module x { + interface c { + } +} +export public import a = x.c; +export private import b = x.c; +export static import c = x.c; +var b: a; + + +//// [importDeclWithClassModifiers.js] +define(["require", "exports"], function (require, exports) { + var b; +}); diff --git a/tests/baselines/reference/importDeclWithDeclareModifierInAmbientContext.js b/tests/baselines/reference/importDeclWithDeclareModifierInAmbientContext.js new file mode 100644 index 00000000000..a268c8a0987 --- /dev/null +++ b/tests/baselines/reference/importDeclWithDeclareModifierInAmbientContext.js @@ -0,0 +1,12 @@ +//// [importDeclWithDeclareModifierInAmbientContext.ts] +declare module "m" { + module x { + interface c { + } + } + declare export import a = x.c; + var b: a; +} + + +//// [importDeclWithDeclareModifierInAmbientContext.js] diff --git a/tests/baselines/reference/importDeclarationInModuleDeclaration1.js b/tests/baselines/reference/importDeclarationInModuleDeclaration1.js new file mode 100644 index 00000000000..46a62fd0584 --- /dev/null +++ b/tests/baselines/reference/importDeclarationInModuleDeclaration1.js @@ -0,0 +1,6 @@ +//// [importDeclarationInModuleDeclaration1.ts] +module m2 { + import m3 = require("use_glo_M1_public"); +} + +//// [importDeclarationInModuleDeclaration1.js] diff --git a/tests/baselines/reference/importInsideModule.js b/tests/baselines/reference/importInsideModule.js new file mode 100644 index 00000000000..b0ba16fa850 --- /dev/null +++ b/tests/baselines/reference/importInsideModule.js @@ -0,0 +1,17 @@ +//// [tests/cases/compiler/importInsideModule.ts] //// + +//// [importInsideModule_file1.ts] +export var x = 1; + +//// [importInsideModule_file2.ts] +export module myModule { + import foo = require("importInsideModule_file1"); + var a = foo.x; +} + +//// [importInsideModule_file2.js] +var myModule; +(function (myModule) { + var foo = require("importInsideModule_file1"); + var a = foo.x; +})(myModule = exports.myModule || (exports.myModule = {})); diff --git a/tests/baselines/reference/importNonStringLiteral.js b/tests/baselines/reference/importNonStringLiteral.js new file mode 100644 index 00000000000..52ef5a10a67 --- /dev/null +++ b/tests/baselines/reference/importNonStringLiteral.js @@ -0,0 +1,7 @@ +//// [importNonStringLiteral.ts] +var x = "filename"; +import foo = require(x); // invalid + + +//// [importNonStringLiteral.js] +var x = "filename"; diff --git a/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.js b/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.js new file mode 100644 index 00000000000..f586a19bf0e --- /dev/null +++ b/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.js @@ -0,0 +1,28 @@ +//// [indexSignatureMustHaveTypeAnnotation.ts] +interface I { + // Used to be indexer, now it is a computed property + [x]: string; + [x: string]; +} + +class C { + // Used to be indexer, now it is a computed property + [x]: string + +} + +class C2 { + [x: string] +} + +//// [indexSignatureMustHaveTypeAnnotation.js] +var C = (function () { + function C() { + } + return C; +})(); +var C2 = (function () { + function C2() { + } + return C2; +})(); diff --git a/tests/baselines/reference/indexSignatureTypeCheck.js b/tests/baselines/reference/indexSignatureTypeCheck.js new file mode 100644 index 00000000000..02676348bec --- /dev/null +++ b/tests/baselines/reference/indexSignatureTypeCheck.js @@ -0,0 +1,24 @@ +//// [indexSignatureTypeCheck.ts] +interface IPropertySet { + + [index: string]: any; + +} + + +var ps: IPropertySet = null; +var index: any = "hello"; +ps[index] = 12; + + +interface indexErrors { + [p2?: string]; + [...p3: any[]]; + [p4: string, p5?: string]; + [p6: string, ...p7: any[]]; +} + +//// [indexSignatureTypeCheck.js] +var ps = null; +var index = "hello"; +ps[index] = 12; diff --git a/tests/baselines/reference/indexSignatureTypeCheck2.js b/tests/baselines/reference/indexSignatureTypeCheck2.js new file mode 100644 index 00000000000..6dcc0f392a5 --- /dev/null +++ b/tests/baselines/reference/indexSignatureTypeCheck2.js @@ -0,0 +1,25 @@ +//// [indexSignatureTypeCheck2.ts] +class IPropertySet { + [index: string]: any +} + +var ps: IPropertySet = null; +var index: any = "hello"; +ps[index] = 12; + +interface indexErrors { + [p2?: string]; + [...p3: any[]]; + [p4: string, p5?: string]; + [p6: string, ...p7: any[]]; +} + +//// [indexSignatureTypeCheck2.js] +var IPropertySet = (function () { + function IPropertySet() { + } + return IPropertySet; +})(); +var ps = null; +var index = "hello"; +ps[index] = 12; diff --git a/tests/baselines/reference/indexSignatureWithAccessibilityModifier.js b/tests/baselines/reference/indexSignatureWithAccessibilityModifier.js new file mode 100644 index 00000000000..798fef924b9 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithAccessibilityModifier.js @@ -0,0 +1,15 @@ +//// [indexSignatureWithAccessibilityModifier.ts] +interface I { + [public x: string]: string; +} + +class C { + [public x: string]: string +} + +//// [indexSignatureWithAccessibilityModifier.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/indexSignatureWithInitializer.js b/tests/baselines/reference/indexSignatureWithInitializer.js new file mode 100644 index 00000000000..490033dde0f --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithInitializer.js @@ -0,0 +1,16 @@ +//// [indexSignatureWithInitializer.ts] +// These used to be indexers, now they are computed properties +interface I { + [x = '']: string; +} + +class C { + [x = 0]: string +} + +//// [indexSignatureWithInitializer.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/indexSignatureWithInitializer1.js b/tests/baselines/reference/indexSignatureWithInitializer1.js new file mode 100644 index 00000000000..16852fd4174 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithInitializer1.js @@ -0,0 +1,11 @@ +//// [indexSignatureWithInitializer1.ts] +class C { + [a: number = 1]: number; +} + +//// [indexSignatureWithInitializer1.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1.js b/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1.js new file mode 100644 index 00000000000..bef6af37931 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1.js @@ -0,0 +1,11 @@ +//// [indexSignatureWithoutTypeAnnotation1.ts] +class C { + [a: number]; +} + +//// [indexSignatureWithoutTypeAnnotation1.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/indexTypeCheck.js b/tests/baselines/reference/indexTypeCheck.js new file mode 100644 index 00000000000..6e74111a357 --- /dev/null +++ b/tests/baselines/reference/indexTypeCheck.js @@ -0,0 +1,87 @@ +//// [indexTypeCheck.ts] +interface Red { + [n:number]; // ok + [s:string]; // ok +} + +interface Blue { + [n:number]: any; // ok + [s:string]: any; // ok +} + +interface Yellow { + [n:number]: Red; // ok + [s:string]: Red; // ok +} + +interface Orange { + [n:number]: number; // ok + [s:string]: string; // error +} + +interface Green { + [n:number]: Orange; // error + [s:string]: Yellow; // ok +} + +interface Cyan { + [n:number]: number; // error + [s:string]: string; // ok +} + +interface Purple { + [n:number, s:string]; // error +} + +interface Magenta { + [p:Purple]; // error +} + +var yellow: Yellow; +var blue: Blue; +var s = "some string"; + +yellow[5]; // ok +yellow["hue"]; // ok +yellow[{}]; // ok + +s[0]; // error +s["s"]; // ok +s[{}]; // ok + +yellow[blue]; // error + +var x:number[]; +x[0]; + +class Benchmark { + + public results: { [x:string]: any; } = <{ [x:string]: any; }>{}; + + public addTimingFor(name: string, timing: number) { + this.results[name] = this.results[name]; + } +} + +//// [indexTypeCheck.js] +var yellow; +var blue; +var s = "some string"; +yellow[5]; // ok +yellow["hue"]; // ok +yellow[{}]; // ok +s[0]; // error +s["s"]; // ok +s[{}]; // ok +yellow[blue]; // error +var x; +x[0]; +var Benchmark = (function () { + function Benchmark() { + this.results = {}; + } + Benchmark.prototype.addTimingFor = function (name, timing) { + this.results[name] = this.results[name]; + }; + return Benchmark; +})(); diff --git a/tests/baselines/reference/indexWithoutParamType.js b/tests/baselines/reference/indexWithoutParamType.js new file mode 100644 index 00000000000..0ea3e8f897f --- /dev/null +++ b/tests/baselines/reference/indexWithoutParamType.js @@ -0,0 +1,5 @@ +//// [indexWithoutParamType.ts] +var y: { []; } // Error + +//// [indexWithoutParamType.js] +var y; // Error diff --git a/tests/baselines/reference/indexWithoutParamType2.js b/tests/baselines/reference/indexWithoutParamType2.js new file mode 100644 index 00000000000..4197b0596ec --- /dev/null +++ b/tests/baselines/reference/indexWithoutParamType2.js @@ -0,0 +1,12 @@ +//// [indexWithoutParamType2.ts] +class C { + // Used to be indexer, now it is a computed property + [x]: string +} + +//// [indexWithoutParamType2.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/indexerAsOptional.js b/tests/baselines/reference/indexerAsOptional.js new file mode 100644 index 00000000000..509e3890ec8 --- /dev/null +++ b/tests/baselines/reference/indexerAsOptional.js @@ -0,0 +1,17 @@ +//// [indexerAsOptional.ts] +interface indexSig { + //Index signatures can't be optional + [idx?: number]: any; //err +} + +class indexSig2 { + //Index signatures can't be optional + [idx?: number]: any //err +} + +//// [indexerAsOptional.js] +var indexSig2 = (function () { + function indexSig2() { + } + return indexSig2; +})(); diff --git a/tests/baselines/reference/indexerSignatureWithRestParam.js b/tests/baselines/reference/indexerSignatureWithRestParam.js new file mode 100644 index 00000000000..8a7defb049c --- /dev/null +++ b/tests/baselines/reference/indexerSignatureWithRestParam.js @@ -0,0 +1,15 @@ +//// [indexerSignatureWithRestParam.ts] +interface I { + [...x]: string; +} + +class C { + [...x]: string +} + +//// [indexerSignatureWithRestParam.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/inferSetterParamType.js b/tests/baselines/reference/inferSetterParamType.js new file mode 100644 index 00000000000..c0be3a5c394 --- /dev/null +++ b/tests/baselines/reference/inferSetterParamType.js @@ -0,0 +1,49 @@ +//// [inferSetterParamType.ts] +class Foo { + + get bar() { + return 0; + } + set bar(n) { // should not be an error - infer number + } +} + +class Foo2 { + + get bar() { + return 0; // should be an error - can't coerce infered return type to match setter annotated type + } + set bar(n:string) { + } +} + + +//// [inferSetterParamType.js] +var Foo = (function () { + function Foo() { + } + Object.defineProperty(Foo.prototype, "bar", { + get: function () { + return 0; + }, + set: function (n) { + }, + enumerable: true, + configurable: true + }); + return Foo; +})(); +var Foo2 = (function () { + function Foo2() { + } + Object.defineProperty(Foo2.prototype, "bar", { + get: function () { + return 0; // should be an error - can't coerce infered return type to match setter annotated type + }, + set: function (n) { + }, + enumerable: true, + configurable: true + }); + return Foo2; +})(); diff --git a/tests/baselines/reference/infinitelyExpandingOverloads.js b/tests/baselines/reference/infinitelyExpandingOverloads.js new file mode 100644 index 00000000000..1e84eba27cf --- /dev/null +++ b/tests/baselines/reference/infinitelyExpandingOverloads.js @@ -0,0 +1,52 @@ +//// [infinitelyExpandingOverloads.ts] +interface KnockoutSubscription2 { + target: KnockoutObservableBase2; +} +interface KnockoutObservableBase2 { + subscribe(callback: (newValue: T) => void, target?: any, topic?: string): KnockoutSubscription2; +} +interface ValidationPlacement2 { + initialize(validatable: Validatable2): void; +} +interface Validatable2 { + validators: KnockoutObservableBase2>; +} +class Validator2 { + private _subscription: KnockoutSubscription2; +} +class ViewModel { + public validationPlacements: Array> = new Array>(); +} +class Widget { + constructor(viewModelType: new () => ViewModel); // Shouldnt error on this overload + constructor(viewModelType: new () => ViewModel) { + } + public get options(): ViewModel { + return null; + } +} + +//// [infinitelyExpandingOverloads.js] +var Validator2 = (function () { + function Validator2() { + } + return Validator2; +})(); +var ViewModel = (function () { + function ViewModel() { + this.validationPlacements = new Array(); + } + return ViewModel; +})(); +var Widget = (function () { + function Widget(viewModelType) { + } + Object.defineProperty(Widget.prototype, "options", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + return Widget; +})(); diff --git a/tests/baselines/reference/inheritanceMemberAccessorOverridingAccessor.js b/tests/baselines/reference/inheritanceMemberAccessorOverridingAccessor.js new file mode 100644 index 00000000000..d1eb53c4ec7 --- /dev/null +++ b/tests/baselines/reference/inheritanceMemberAccessorOverridingAccessor.js @@ -0,0 +1,56 @@ +//// [inheritanceMemberAccessorOverridingAccessor.ts] +class a { + get x() { + return "20"; + } + set x(aValue: string) { + + } +} + +class b extends a { + get x() { + return "20"; + } + set x(aValue: string) { + + } +} + +//// [inheritanceMemberAccessorOverridingAccessor.js] +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 = (function () { + function a() { + } + Object.defineProperty(a.prototype, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + Object.defineProperty(b.prototype, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceMemberAccessorOverridingMethod.js b/tests/baselines/reference/inheritanceMemberAccessorOverridingMethod.js new file mode 100644 index 00000000000..d234eb89582 --- /dev/null +++ b/tests/baselines/reference/inheritanceMemberAccessorOverridingMethod.js @@ -0,0 +1,47 @@ +//// [inheritanceMemberAccessorOverridingMethod.ts] +class a { + x() { + return "20"; + } +} + +class b extends a { + get x() { + return "20"; + } + set x(aValue: string) { + + } +} + +//// [inheritanceMemberAccessorOverridingMethod.js] +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 = (function () { + function a() { + } + a.prototype.x = function () { + return "20"; + }; + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + Object.defineProperty(b.prototype, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceMemberAccessorOverridingProperty.js b/tests/baselines/reference/inheritanceMemberAccessorOverridingProperty.js new file mode 100644 index 00000000000..b307f3bfedb --- /dev/null +++ b/tests/baselines/reference/inheritanceMemberAccessorOverridingProperty.js @@ -0,0 +1,42 @@ +//// [inheritanceMemberAccessorOverridingProperty.ts] +class a { + x: string; +} + +class b extends a { + get x() { + return "20"; + } + set x(aValue: string) { + + } +} + +//// [inheritanceMemberAccessorOverridingProperty.js] +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 = (function () { + function a() { + } + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + Object.defineProperty(b.prototype, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceMemberFuncOverridingAccessor.js b/tests/baselines/reference/inheritanceMemberFuncOverridingAccessor.js new file mode 100644 index 00000000000..e05ed9633cc --- /dev/null +++ b/tests/baselines/reference/inheritanceMemberFuncOverridingAccessor.js @@ -0,0 +1,47 @@ +//// [inheritanceMemberFuncOverridingAccessor.ts] +class a { + get x() { + return "20"; + } + set x(aValue: string) { + + } +} + +class b extends a { + x() { + return "20"; + } +} + +//// [inheritanceMemberFuncOverridingAccessor.js] +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 = (function () { + function a() { + } + Object.defineProperty(a.prototype, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + b.prototype.x = function () { + return "20"; + }; + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceMemberPropertyOverridingAccessor.js b/tests/baselines/reference/inheritanceMemberPropertyOverridingAccessor.js new file mode 100644 index 00000000000..7d92b494416 --- /dev/null +++ b/tests/baselines/reference/inheritanceMemberPropertyOverridingAccessor.js @@ -0,0 +1,44 @@ +//// [inheritanceMemberPropertyOverridingAccessor.ts] +class a { + private __x: () => string; + get x() { + return this.__x; + } + set x(aValue: () => string) { + this.__x = aValue; + } +} + +class b extends a { + x: () => string; +} + +//// [inheritanceMemberPropertyOverridingAccessor.js] +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 = (function () { + function a() { + } + Object.defineProperty(a.prototype, "x", { + get: function () { + return this.__x; + }, + set: function (aValue) { + this.__x = aValue; + }, + enumerable: true, + configurable: true + }); + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceStaticAccessorOverridingAccessor.js b/tests/baselines/reference/inheritanceStaticAccessorOverridingAccessor.js new file mode 100644 index 00000000000..f7ed912d030 --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticAccessorOverridingAccessor.js @@ -0,0 +1,56 @@ +//// [inheritanceStaticAccessorOverridingAccessor.ts] +class a { + static get x() { + return "20"; + } + static set x(aValue: string) { + + } +} + +class b extends a { + static get x() { + return "20"; + } + static set x(aValue: string) { + + } +} + +//// [inheritanceStaticAccessorOverridingAccessor.js] +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 = (function () { + function a() { + } + Object.defineProperty(a, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + Object.defineProperty(b, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceStaticAccessorOverridingMethod.js b/tests/baselines/reference/inheritanceStaticAccessorOverridingMethod.js new file mode 100644 index 00000000000..dbef001740e --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticAccessorOverridingMethod.js @@ -0,0 +1,47 @@ +//// [inheritanceStaticAccessorOverridingMethod.ts] +class a { + static x() { + return "20"; + } +} + +class b extends a { + static get x() { + return "20"; + } + static set x(aValue: string) { + + } +} + +//// [inheritanceStaticAccessorOverridingMethod.js] +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 = (function () { + function a() { + } + a.x = function () { + return "20"; + }; + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + Object.defineProperty(b, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceStaticAccessorOverridingProperty.js b/tests/baselines/reference/inheritanceStaticAccessorOverridingProperty.js new file mode 100644 index 00000000000..3536ca8accb --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticAccessorOverridingProperty.js @@ -0,0 +1,42 @@ +//// [inheritanceStaticAccessorOverridingProperty.ts] +class a { + static x: string; +} + +class b extends a { + static get x() { + return "20"; + } + static set x(aValue: string) { + + } +} + +//// [inheritanceStaticAccessorOverridingProperty.js] +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 = (function () { + function a() { + } + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + Object.defineProperty(b, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceStaticFuncOverridingAccessor.js b/tests/baselines/reference/inheritanceStaticFuncOverridingAccessor.js new file mode 100644 index 00000000000..b3cc7d3461e --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticFuncOverridingAccessor.js @@ -0,0 +1,47 @@ +//// [inheritanceStaticFuncOverridingAccessor.ts] +class a { + static get x() { + return "20"; + } + static set x(aValue: string) { + + } +} + +class b extends a { + static x() { + return "20"; + } +} + +//// [inheritanceStaticFuncOverridingAccessor.js] +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 = (function () { + function a() { + } + Object.defineProperty(a, "x", { + get: function () { + return "20"; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + b.x = function () { + return "20"; + }; + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceStaticFuncOverridingAccessorOfFuncType.js b/tests/baselines/reference/inheritanceStaticFuncOverridingAccessorOfFuncType.js new file mode 100644 index 00000000000..bb77561153e --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticFuncOverridingAccessorOfFuncType.js @@ -0,0 +1,42 @@ +//// [inheritanceStaticFuncOverridingAccessorOfFuncType.ts] +class a { + static get x(): () => string { + return null; + } +} + +class b extends a { + static x() { + return "20"; + } +} + +//// [inheritanceStaticFuncOverridingAccessorOfFuncType.js] +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 = (function () { + function a() { + } + Object.defineProperty(a, "x", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + b.x = function () { + return "20"; + }; + return b; +})(a); diff --git a/tests/baselines/reference/inheritanceStaticPropertyOverridingAccessor.js b/tests/baselines/reference/inheritanceStaticPropertyOverridingAccessor.js new file mode 100644 index 00000000000..da3a42eafe1 --- /dev/null +++ b/tests/baselines/reference/inheritanceStaticPropertyOverridingAccessor.js @@ -0,0 +1,42 @@ +//// [inheritanceStaticPropertyOverridingAccessor.ts] +class a { + static get x(): () => string { + return null;; + } + static set x(aValue: () => string) { + } +} + +class b extends a { + static x: () => string; +} + +//// [inheritanceStaticPropertyOverridingAccessor.js] +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 = (function () { + function a() { + } + Object.defineProperty(a, "x", { + get: function () { + return null; + ; + }, + set: function (aValue) { + }, + enumerable: true, + configurable: true + }); + return a; +})(); +var b = (function (_super) { + __extends(b, _super); + function b() { + _super.apply(this, arguments); + } + return b; +})(a); diff --git a/tests/baselines/reference/initializersInDeclarations.js b/tests/baselines/reference/initializersInDeclarations.js new file mode 100644 index 00000000000..0506c72fc56 --- /dev/null +++ b/tests/baselines/reference/initializersInDeclarations.js @@ -0,0 +1,23 @@ +//// [initializersInDeclarations.ts] + +// Errors: Initializers & statements in declaration file + +declare class Foo { + name = "test"; + "some prop" = 42; + fn(): boolean { + return false; + } +} + +declare var x = []; +declare var y = {}; + +declare module M1 { + while(true); + + export var v1 = () => false; +} + +//// [initializersInDeclarations.js] +// Errors: Initializers & statements in declaration file diff --git a/tests/baselines/reference/instancePropertiesInheritedIntoClassType.js b/tests/baselines/reference/instancePropertiesInheritedIntoClassType.js new file mode 100644 index 00000000000..eca12f7b1ae --- /dev/null +++ b/tests/baselines/reference/instancePropertiesInheritedIntoClassType.js @@ -0,0 +1,121 @@ +//// [instancePropertiesInheritedIntoClassType.ts] +module NonGeneric { + class C { + x: string; + get y() { + return 1; + } + set y(v) { } + fn() { return this; } + constructor(public a: number, private b: number) { } + } + + class D extends C { e: string; } + + var d = new D(1, 2); + var r = d.fn(); + var r2 = r.x; + var r3 = r.y; + r.y = 4; + var r6 = d.y(); // error + +} + +module Generic { + class C { + x: T; + get y() { + return null; + } + set y(v: U) { } + fn() { return this; } + constructor(public a: T, private b: U) { } + } + + class D extends C { e: T; } + + var d = new D(1, ''); + var r = d.fn(); + var r2 = r.x; + var r3 = r.y; + r.y = ''; + var r6 = d.y(); // error +} + +//// [instancePropertiesInheritedIntoClassType.js] +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 NonGeneric; +(function (NonGeneric) { + var C = (function () { + function C(a, b) { + this.a = a; + this.b = b; + } + Object.defineProperty(C.prototype, "y", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + C.prototype.fn = function () { + return this; + }; + return C; + })(); + var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; + })(C); + var d = new D(1, 2); + var r = d.fn(); + var r2 = r.x; + var r3 = r.y; + r.y = 4; + var r6 = d.y(); // error +})(NonGeneric || (NonGeneric = {})); +var Generic; +(function (Generic) { + var C = (function () { + function C(a, b) { + this.a = a; + this.b = b; + } + Object.defineProperty(C.prototype, "y", { + get: function () { + return null; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + C.prototype.fn = function () { + return this; + }; + return C; + })(); + var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; + })(C); + var d = new D(1, ''); + var r = d.fn(); + var r2 = r.x; + var r3 = r.y; + r.y = ''; + var r6 = d.y(); // error +})(Generic || (Generic = {})); diff --git a/tests/baselines/reference/instancePropertyInClassType.js b/tests/baselines/reference/instancePropertyInClassType.js new file mode 100644 index 00000000000..b2df44db6f0 --- /dev/null +++ b/tests/baselines/reference/instancePropertyInClassType.js @@ -0,0 +1,97 @@ +//// [instancePropertyInClassType.ts] +module NonGeneric { + class C { + x: string; + get y() { + return 1; + } + set y(v) { } + fn() { return this; } + constructor(public a: number, private b: number) { } + } + + var c = new C(1, 2); + var r = c.fn(); + var r2 = r.x; + var r3 = r.y; + r.y = 4; + var r6 = c.y(); // error + +} + +module Generic { + class C { + x: T; + get y() { + return null; + } + set y(v: U) { } + fn() { return this; } + constructor(public a: T, private b: U) { } + } + + var c = new C(1, ''); + var r = c.fn(); + var r2 = r.x; + var r3 = r.y; + r.y = ''; + var r6 = c.y(); // error +} + +//// [instancePropertyInClassType.js] +var NonGeneric; +(function (NonGeneric) { + var C = (function () { + function C(a, b) { + this.a = a; + this.b = b; + } + Object.defineProperty(C.prototype, "y", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + C.prototype.fn = function () { + return this; + }; + return C; + })(); + var c = new C(1, 2); + var r = c.fn(); + var r2 = r.x; + var r3 = r.y; + r.y = 4; + var r6 = c.y(); // error +})(NonGeneric || (NonGeneric = {})); +var Generic; +(function (Generic) { + var C = (function () { + function C(a, b) { + this.a = a; + this.b = b; + } + Object.defineProperty(C.prototype, "y", { + get: function () { + return null; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + C.prototype.fn = function () { + return this; + }; + return C; + })(); + var c = new C(1, ''); + var r = c.fn(); + var r2 = r.x; + var r3 = r.y; + r.y = ''; + var r6 = c.y(); // error +})(Generic || (Generic = {})); diff --git a/tests/baselines/reference/interfaceExtendingClass.js b/tests/baselines/reference/interfaceExtendingClass.js new file mode 100644 index 00000000000..39db7460915 --- /dev/null +++ b/tests/baselines/reference/interfaceExtendingClass.js @@ -0,0 +1,42 @@ +//// [interfaceExtendingClass.ts] +class Foo { + x: string; + y() { } + get Z() { + return 1; + } + [x: string]: Object; +} + +interface I extends Foo { +} + +var i: I; +var r1 = i.x; +var r2 = i.y(); +var r3 = i.Z; + +var f: Foo = i; +i = f; + +//// [interfaceExtendingClass.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.y = function () { + }; + Object.defineProperty(Foo.prototype, "Z", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return Foo; +})(); +var i; +var r1 = i.x; +var r2 = i.y(); +var r3 = i.Z; +var f = i; +i = f; diff --git a/tests/baselines/reference/interfaceImplementation5.js b/tests/baselines/reference/interfaceImplementation5.js new file mode 100644 index 00000000000..667c5f045ec --- /dev/null +++ b/tests/baselines/reference/interfaceImplementation5.js @@ -0,0 +1,110 @@ +//// [interfaceImplementation5.ts] +interface I1 { + getset1:number; +} + +class C1 implements I1 { + public get getset1(){return 1;} +} + +class C2 implements I1 { + public set getset1(baz:number){} +} + +class C3 implements I1 { + public get getset1(){return 1;} + public set getset1(baz:number){} +} + +class C4 implements I1 { + public get getset1(){var x:any; return x;} +} + +class C5 implements I1 { + public set getset1(baz:any){} +} + +class C6 implements I1 { + public set getset1(baz:any){} + public get getset1(){var x:any; return x;} +} + + + +//// [interfaceImplementation5.js] +var C1 = (function () { + function C1() { + } + Object.defineProperty(C1.prototype, "getset1", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C1; +})(); +var C2 = (function () { + function C2() { + } + Object.defineProperty(C2.prototype, "getset1", { + set: function (baz) { + }, + enumerable: true, + configurable: true + }); + return C2; +})(); +var C3 = (function () { + function C3() { + } + Object.defineProperty(C3.prototype, "getset1", { + get: function () { + return 1; + }, + set: function (baz) { + }, + enumerable: true, + configurable: true + }); + return C3; +})(); +var C4 = (function () { + function C4() { + } + Object.defineProperty(C4.prototype, "getset1", { + get: function () { + var x; + return x; + }, + enumerable: true, + configurable: true + }); + return C4; +})(); +var C5 = (function () { + function C5() { + } + Object.defineProperty(C5.prototype, "getset1", { + set: function (baz) { + }, + enumerable: true, + configurable: true + }); + return C5; +})(); +var C6 = (function () { + function C6() { + } + Object.defineProperty(C6.prototype, "getset1", { + get: function () { + var x; + return x; + }, + set: function (baz) { + }, + enumerable: true, + configurable: true + }); + return C6; +})(); diff --git a/tests/baselines/reference/interfaceThatInheritsFromItself.js b/tests/baselines/reference/interfaceThatInheritsFromItself.js new file mode 100644 index 00000000000..59794dc40c7 --- /dev/null +++ b/tests/baselines/reference/interfaceThatInheritsFromItself.js @@ -0,0 +1,16 @@ +//// [interfaceThatInheritsFromItself.ts] +interface Foo extends Foo { // error +} + +interface Foo2 extends Foo2 { // error +} + +interface Foo3 extends Foo3 { // error +} + +interface Bar implements Bar { // error +} + + + +//// [interfaceThatInheritsFromItself.js] diff --git a/tests/baselines/reference/interfaceWithImplements1.js b/tests/baselines/reference/interfaceWithImplements1.js new file mode 100644 index 00000000000..bc8ccba8192 --- /dev/null +++ b/tests/baselines/reference/interfaceWithImplements1.js @@ -0,0 +1,7 @@ +//// [interfaceWithImplements1.ts] +interface IFoo { } + +interface IBar implements IFoo { +} + +//// [interfaceWithImplements1.js] diff --git a/tests/baselines/reference/invalidDoWhileBreakStatements.js b/tests/baselines/reference/invalidDoWhileBreakStatements.js new file mode 100644 index 00000000000..e6617ef98cd --- /dev/null +++ b/tests/baselines/reference/invalidDoWhileBreakStatements.js @@ -0,0 +1,70 @@ +//// [invalidDoWhileBreakStatements.ts] +// All errors + +// naked break not allowed +break; + +// non-existent label +ONE: +do break TWO; while (true) + +// break from inside function +TWO: +do { + var x = () => { + break TWO; + } +}while (true) + +THREE: +do { + var fn = function () { + break THREE; + } +}while (true) + +// break forward +do { + break FIVE; + FIVE: + do { } while (true) +}while (true) + +// label on non-loop statement +NINE: +var y = 12; + +do { + break NINE; +}while (true) + +//// [invalidDoWhileBreakStatements.js] +// All errors +// naked break not allowed +break; +// non-existent label +ONE: do + break TWO; +while (true); +// break from inside function +TWO: do { + var x = function () { + break TWO; + }; +} while (true); +THREE: do { + var fn = function () { + break THREE; + }; +} while (true); +// break forward +do { + break FIVE; + FIVE: do { + } while (true); +} while (true); +// label on non-loop statement +NINE: var y = 12; +do { + break NINE; +} while (true); diff --git a/tests/baselines/reference/invalidDoWhileContinueStatements.js b/tests/baselines/reference/invalidDoWhileContinueStatements.js new file mode 100644 index 00000000000..d32ccfe0074 --- /dev/null +++ b/tests/baselines/reference/invalidDoWhileContinueStatements.js @@ -0,0 +1,70 @@ +//// [invalidDoWhileContinueStatements.ts] +// All errors + +// naked continue not allowed +continue; + +// non-existent label +ONE: +do continue TWO; while (true) + +// continue from inside function +TWO: +do { + var x = () => { + continue TWO; + } +}while (true) + +THREE: +do { + var fn = function () { + continue THREE; + } +}while (true) + +// continue forward +do { + continue FIVE; + FIVE: + do { } while (true) +}while (true) + +// label on non-loop statement +NINE: +var y = 12; + +do { + continue NINE; +}while (true) + +//// [invalidDoWhileContinueStatements.js] +// All errors +// naked continue not allowed +continue; +// non-existent label +ONE: do + continue TWO; +while (true); +// continue from inside function +TWO: do { + var x = function () { + continue TWO; + }; +} while (true); +THREE: do { + var fn = function () { + continue THREE; + }; +} while (true); +// continue forward +do { + continue FIVE; + FIVE: do { + } while (true); +} while (true); +// label on non-loop statement +NINE: var y = 12; +do { + continue NINE; +} while (true); diff --git a/tests/baselines/reference/invalidForBreakStatements.js b/tests/baselines/reference/invalidForBreakStatements.js new file mode 100644 index 00000000000..abcd078ff2d --- /dev/null +++ b/tests/baselines/reference/invalidForBreakStatements.js @@ -0,0 +1,68 @@ +//// [invalidForBreakStatements.ts] +// All errors + +// naked break not allowed +break; + +// non-existent label +ONE: +for(;;) break TWO; + +// break from inside function +TWO: +for(;;) { + var x = () => { + break TWO; + } +} + +THREE: +for(;;) { + var fn = function () { + break THREE; + } +} + +// break forward +for(;;) { + break FIVE; + FIVE: + for (; ;) { } +} +// label on non-loop statement +NINE: +var y = 12; + +for(;;) { + break NINE; +} + +//// [invalidForBreakStatements.js] +// All errors +// naked break not allowed +break; +// non-existent label +ONE: for (;;) + break TWO; +// break from inside function +TWO: for (;;) { + var x = function () { + break TWO; + }; +} +THREE: for (;;) { + var fn = function () { + break THREE; + }; +} +// break forward +for (;;) { + break FIVE; + FIVE: for (;;) { + } +} +// label on non-loop statement +NINE: var y = 12; +for (;;) { + break NINE; +} diff --git a/tests/baselines/reference/invalidForContinueStatements.js b/tests/baselines/reference/invalidForContinueStatements.js new file mode 100644 index 00000000000..af0eba2a59a --- /dev/null +++ b/tests/baselines/reference/invalidForContinueStatements.js @@ -0,0 +1,68 @@ +//// [invalidForContinueStatements.ts] +// All errors + +// naked continue not allowed +continue; + +// non-existent label +ONE: +for(;;) continue TWO; + +// continue from inside function +TWO: +for(;;) { + var x = () => { + continue TWO; + } +} + +THREE: +for(;;) { + var fn = function () { + continue THREE; + } +} + +// continue forward +for(;;) { + continue FIVE; + FIVE: + for (; ;) { } +} +// label on non-loop statement +NINE: +var y = 12; + +for(;;) { + continue NINE; +} + +//// [invalidForContinueStatements.js] +// All errors +// naked continue not allowed +continue; +// non-existent label +ONE: for (;;) + continue TWO; +// continue from inside function +TWO: for (;;) { + var x = function () { + continue TWO; + }; +} +THREE: for (;;) { + var fn = function () { + continue THREE; + }; +} +// continue forward +for (;;) { + continue FIVE; + FIVE: for (;;) { + } +} +// label on non-loop statement +NINE: var y = 12; +for (;;) { + continue NINE; +} diff --git a/tests/baselines/reference/invalidForInBreakStatements.js b/tests/baselines/reference/invalidForInBreakStatements.js new file mode 100644 index 00000000000..bf383613c3b --- /dev/null +++ b/tests/baselines/reference/invalidForInBreakStatements.js @@ -0,0 +1,69 @@ +//// [invalidForInBreakStatements.ts] +// All errors + +// naked break not allowed +break; + +// non-existent label +ONE: +for (var x in {}) break TWO; + +// break from inside function +TWO: +for (var x in {}) { + var fn = () => { + break TWO; + } +} + +THREE: +for (var x in {}) { + var fn = function () { + break THREE; + } +} + +// break forward +for (var x in {}) { + break FIVE; + FIVE: + for (var x in {}) { } +} + +// label on non-loop statement +NINE: +var y = 12; + +for (var x in {}) { + break NINE; +} + +//// [invalidForInBreakStatements.js] +// All errors +// naked break not allowed +break; +// non-existent label +ONE: for (var x in {}) + break TWO; +// break from inside function +TWO: for (var x in {}) { + var fn = function () { + break TWO; + }; +} +THREE: for (var x in {}) { + var fn = function () { + break THREE; + }; +} +// break forward +for (var x in {}) { + break FIVE; + FIVE: for (var x in {}) { + } +} +// label on non-loop statement +NINE: var y = 12; +for (var x in {}) { + break NINE; +} diff --git a/tests/baselines/reference/invalidForInContinueStatements.js b/tests/baselines/reference/invalidForInContinueStatements.js new file mode 100644 index 00000000000..d40dbd80ca0 --- /dev/null +++ b/tests/baselines/reference/invalidForInContinueStatements.js @@ -0,0 +1,69 @@ +//// [invalidForInContinueStatements.ts] +// All errors + +// naked continue not allowed +continue; + +// non-existent label +ONE: +for (var x in {}) continue TWO; + +// continue from inside function +TWO: +for (var x in {}) { + var fn = () => { + continue TWO; + } +} + +THREE: +for (var x in {}) { + var fn = function () { + continue THREE; + } +} + +// continue forward +for (var x in {}) { + continue FIVE; + FIVE: + for (var x in {}) { } +} + +// label on non-loop statement +NINE: +var y = 12; + +for (var x in {}) { + continue NINE; +} + +//// [invalidForInContinueStatements.js] +// All errors +// naked continue not allowed +continue; +// non-existent label +ONE: for (var x in {}) + continue TWO; +// continue from inside function +TWO: for (var x in {}) { + var fn = function () { + continue TWO; + }; +} +THREE: for (var x in {}) { + var fn = function () { + continue THREE; + }; +} +// continue forward +for (var x in {}) { + continue FIVE; + FIVE: for (var x in {}) { + } +} +// label on non-loop statement +NINE: var y = 12; +for (var x in {}) { + continue NINE; +} diff --git a/tests/baselines/reference/invalidModuleWithStatementsOfEveryKind.js b/tests/baselines/reference/invalidModuleWithStatementsOfEveryKind.js new file mode 100644 index 00000000000..077d7ddbcdc --- /dev/null +++ b/tests/baselines/reference/invalidModuleWithStatementsOfEveryKind.js @@ -0,0 +1,235 @@ +//// [invalidModuleWithStatementsOfEveryKind.ts] +// All of these should be an error + +module Y { + public class A { s: string } + + public class BB extends A { + id: number; + } +} + +module Y2 { + public class AA { s: T } + public interface I { id: number } + + public class B extends AA implements I { id: number } +} + +module Y3 { + public module Module { + class A { s: string } + } +} + +module Y4 { + public enum Color { Blue, Red } +} + +module YY { + private class A { s: string } + + private class BB extends A { + id: number; + } +} + +module YY2 { + private class AA { s: T } + private interface I { id: number } + + private class B extends AA implements I { id: number } +} + +module YY3 { + private module Module { + class A { s: string } + } +} + +module YY4 { + private enum Color { Blue, Red } +} + + +module YYY { + static class A { s: string } + + static class BB extends A { + id: number; + } +} + +module YYY2 { + static class AA { s: T } + static interface I { id: number } + + static class B extends AA implements I { id: number } +} + +module YYY3 { + static module Module { + class A { s: string } + } +} + +module YYY4 { + static enum Color { Blue, Red } +} + + +//// [invalidModuleWithStatementsOfEveryKind.js] +// All of these should be an 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; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Y; +(function (Y) { + var A = (function () { + function A() { + } + return A; + })(); + var BB = (function (_super) { + __extends(BB, _super); + function BB() { + _super.apply(this, arguments); + } + return BB; + })(A); +})(Y || (Y = {})); +var Y2; +(function (Y2) { + var AA = (function () { + function AA() { + } + return AA; + })(); + var B = (function (_super) { + __extends(B, _super); + function B() { + _super.apply(this, arguments); + } + return B; + })(AA); +})(Y2 || (Y2 = {})); +var Y3; +(function (Y3) { + var Module; + (function (Module) { + var A = (function () { + function A() { + } + return A; + })(); + })(Module || (Module = {})); +})(Y3 || (Y3 = {})); +var Y4; +(function (Y4) { + var Color; + (function (Color) { + Color[Color["Blue"] = 0] = "Blue"; + Color[Color["Red"] = 1] = "Red"; + })(Color || (Color = {})); +})(Y4 || (Y4 = {})); +var YY; +(function (YY) { + var A = (function () { + function A() { + } + return A; + })(); + var BB = (function (_super) { + __extends(BB, _super); + function BB() { + _super.apply(this, arguments); + } + return BB; + })(A); +})(YY || (YY = {})); +var YY2; +(function (YY2) { + var AA = (function () { + function AA() { + } + return AA; + })(); + var B = (function (_super) { + __extends(B, _super); + function B() { + _super.apply(this, arguments); + } + return B; + })(AA); +})(YY2 || (YY2 = {})); +var YY3; +(function (YY3) { + var Module; + (function (Module) { + var A = (function () { + function A() { + } + return A; + })(); + })(Module || (Module = {})); +})(YY3 || (YY3 = {})); +var YY4; +(function (YY4) { + var Color; + (function (Color) { + Color[Color["Blue"] = 0] = "Blue"; + Color[Color["Red"] = 1] = "Red"; + })(Color || (Color = {})); +})(YY4 || (YY4 = {})); +var YYY; +(function (YYY) { + var A = (function () { + function A() { + } + return A; + })(); + var BB = (function (_super) { + __extends(BB, _super); + function BB() { + _super.apply(this, arguments); + } + return BB; + })(A); +})(YYY || (YYY = {})); +var YYY2; +(function (YYY2) { + var AA = (function () { + function AA() { + } + return AA; + })(); + var B = (function (_super) { + __extends(B, _super); + function B() { + _super.apply(this, arguments); + } + return B; + })(AA); +})(YYY2 || (YYY2 = {})); +var YYY3; +(function (YYY3) { + var Module; + (function (Module) { + var A = (function () { + function A() { + } + return A; + })(); + })(Module || (Module = {})); +})(YYY3 || (YYY3 = {})); +var YYY4; +(function (YYY4) { + var Color; + (function (Color) { + Color[Color["Blue"] = 0] = "Blue"; + Color[Color["Red"] = 1] = "Red"; + })(Color || (Color = {})); +})(YYY4 || (YYY4 = {})); diff --git a/tests/baselines/reference/invalidModuleWithVarStatements.js b/tests/baselines/reference/invalidModuleWithVarStatements.js new file mode 100644 index 00000000000..4014709d361 --- /dev/null +++ b/tests/baselines/reference/invalidModuleWithVarStatements.js @@ -0,0 +1,58 @@ +//// [invalidModuleWithVarStatements.ts] +// All of these should be an error + +module Y { + public var x: number = 0; +} + +module Y2 { + public function fn(x: string) { } +} + +module Y4 { + static var x: number = 0; +} + +module YY { + static function fn(x: string) { } +} + +module YY2 { + private var x: number = 0; +} + + +module YY3 { + private function fn(x: string) { } +} + + +//// [invalidModuleWithVarStatements.js] +// All of these should be an error +var Y; +(function (Y) { + var x = 0; +})(Y || (Y = {})); +var Y2; +(function (Y2) { + function fn(x) { + } +})(Y2 || (Y2 = {})); +var Y4; +(function (Y4) { + var x = 0; +})(Y4 || (Y4 = {})); +var YY; +(function (YY) { + function fn(x) { + } +})(YY || (YY = {})); +var YY2; +(function (YY2) { + var x = 0; +})(YY2 || (YY2 = {})); +var YY3; +(function (YY3) { + function fn(x) { + } +})(YY3 || (YY3 = {})); diff --git a/tests/baselines/reference/invalidSwitchContinueStatement.js b/tests/baselines/reference/invalidSwitchContinueStatement.js new file mode 100644 index 00000000000..759056ce3e5 --- /dev/null +++ b/tests/baselines/reference/invalidSwitchContinueStatement.js @@ -0,0 +1,15 @@ +//// [invalidSwitchContinueStatement.ts] +// continue is not allowed in a switch statement + +switch (12) { + case 5: + continue; +} + + +//// [invalidSwitchContinueStatement.js] +// continue is not allowed in a switch statement +switch (12) { + case 5: + continue; +} diff --git a/tests/baselines/reference/invalidTryStatements.js b/tests/baselines/reference/invalidTryStatements.js new file mode 100644 index 00000000000..8afadf41b4d --- /dev/null +++ b/tests/baselines/reference/invalidTryStatements.js @@ -0,0 +1,36 @@ +//// [invalidTryStatements.ts] +function fn() { + try { + } catch (x) { + var x: string; // ensure x is 'Any' + } + + // no type annotation allowed + try { } catch (z: any) { } + try { } catch (a: number) { } + try { } catch (y: string) { } +} + + + +//// [invalidTryStatements.js] +function fn() { + try { + } + catch (x) { + var x; // ensure x is 'Any' + } + // no type annotation allowed + try { + } + catch (z) { + } + try { + } + catch (a) { + } + try { + } + catch (y) { + } +} diff --git a/tests/baselines/reference/invalidWhileBreakStatements.js b/tests/baselines/reference/invalidWhileBreakStatements.js new file mode 100644 index 00000000000..a8e261f036c --- /dev/null +++ b/tests/baselines/reference/invalidWhileBreakStatements.js @@ -0,0 +1,69 @@ +//// [invalidWhileBreakStatements.ts] +// All errors + +// naked break not allowed +break; + +// non-existent label +ONE: +while (true) break TWO; + +// break from inside function +TWO: +while (true){ + var x = () => { + break TWO; + } +} + +THREE: +while (true) { + var fn = function () { + break THREE; + } +} + +// break forward +while (true) { + break FIVE; + FIVE: + while (true) { } +} + +// label on non-loop statement +NINE: +var y = 12; + +while (true) { + break NINE; +} + +//// [invalidWhileBreakStatements.js] +// All errors +// naked break not allowed +break; +// non-existent label +ONE: while (true) + break TWO; +// break from inside function +TWO: while (true) { + var x = function () { + break TWO; + }; +} +THREE: while (true) { + var fn = function () { + break THREE; + }; +} +// break forward +while (true) { + break FIVE; + FIVE: while (true) { + } +} +// label on non-loop statement +NINE: var y = 12; +while (true) { + break NINE; +} diff --git a/tests/baselines/reference/invalidWhileContinueStatements.js b/tests/baselines/reference/invalidWhileContinueStatements.js new file mode 100644 index 00000000000..544314bf68d --- /dev/null +++ b/tests/baselines/reference/invalidWhileContinueStatements.js @@ -0,0 +1,69 @@ +//// [invalidWhileContinueStatements.ts] +// All errors + +// naked continue not allowed +continue; + +// non-existent label +ONE: +while (true) continue TWO; + +// continue from inside function +TWO: +while (true){ + var x = () => { + continue TWO; + } +} + +THREE: +while (true) { + var fn = function () { + continue THREE; + } +} + +// continue forward +while (true) { + continue FIVE; + FIVE: + while (true) { } +} + +// label on non-loop statement +NINE: +var y = 12; + +while (true) { + continue NINE; +} + +//// [invalidWhileContinueStatements.js] +// All errors +// naked continue not allowed +continue; +// non-existent label +ONE: while (true) + continue TWO; +// continue from inside function +TWO: while (true) { + var x = function () { + continue TWO; + }; +} +THREE: while (true) { + var fn = function () { + continue THREE; + }; +} +// continue forward +while (true) { + continue FIVE; + FIVE: while (true) { + } +} +// label on non-loop statement +NINE: var y = 12; +while (true) { + continue NINE; +} diff --git a/tests/baselines/reference/letDeclarations-es5-1.js b/tests/baselines/reference/letDeclarations-es5-1.js new file mode 100644 index 00000000000..24c2c62e58f --- /dev/null +++ b/tests/baselines/reference/letDeclarations-es5-1.js @@ -0,0 +1,15 @@ +//// [letDeclarations-es5-1.ts] + let l1; + let l2: number; + let l3, l4, l5 :string, l6; + let l7 = false; + let l8: number = 23; + let l9 = 0, l10 :string = "", l11 = null; + +//// [letDeclarations-es5-1.js] +let l1; +let l2; +let l3, l4, l5, l6; +let l7 = false; +let l8 = 23; +let l9 = 0, l10 = "", l11 = null; diff --git a/tests/baselines/reference/letDeclarations-es5.js b/tests/baselines/reference/letDeclarations-es5.js new file mode 100644 index 00000000000..d5d1d96d350 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-es5.js @@ -0,0 +1,26 @@ +//// [letDeclarations-es5.ts] + +let l1; +let l2: number; +let l3, l4, l5 :string, l6; + +let l7 = false; +let l8: number = 23; +let l9 = 0, l10 :string = "", l11 = null; + +for(let l11 in {}) { } + +for(let l12 = 0; l12 < 9; l12++) { } + + +//// [letDeclarations-es5.js] +let l1; +let l2; +let l3, l4, l5, l6; +let l7 = false; +let l8 = 23; +let l9 = 0, l10 = "", l11 = null; +for (let l11 in {}) { +} +for (let l12 = 0; l12 < 9; l12++) { +} diff --git a/tests/baselines/reference/letDeclarations-invalidContexts.js b/tests/baselines/reference/letDeclarations-invalidContexts.js new file mode 100644 index 00000000000..f8c3bb04bdb --- /dev/null +++ b/tests/baselines/reference/letDeclarations-invalidContexts.js @@ -0,0 +1,57 @@ +//// [letDeclarations-invalidContexts.ts] + +// Errors, let must be defined inside a block +if (true) + let l1 = 0; +else + let l2 = 0; + +while (true) + let l3 = 0; + +do + let l4 = 0; +while (true); + +var obj; +with (obj) + let l5 = 0; + +for (var i = 0; i < 10; i++) + let l6 = 0; + +for (var i2 in {}) + let l7 = 0; + +if (true) + label: let l8 = 0; + +while (false) + label2: label3: label4: let l9 = 0; + + + + + +//// [letDeclarations-invalidContexts.js] +// Errors, let must be defined inside a block +if (true) + let l1 = 0; +else + let l2 = 0; +while (true) + let l3 = 0; +do + let l4 = 0; +while (true); +var obj; +with (obj) + let l5 = 0; +for (var i = 0; i < 10; i++) + let l6 = 0; +for (var i2 in {}) + let l7 = 0; +if (true) + label: let l8 = 0; +while (false) + label2: label3: label4: let l9 = 0; diff --git a/tests/baselines/reference/letDeclarations-scopes-duplicates.js b/tests/baselines/reference/letDeclarations-scopes-duplicates.js new file mode 100644 index 00000000000..c7d2ef9863a --- /dev/null +++ b/tests/baselines/reference/letDeclarations-scopes-duplicates.js @@ -0,0 +1,140 @@ +//// [letDeclarations-scopes-duplicates.ts] + +// Errors: redeclaration +let var1 = 0; +let var1 = 0; // error + +let var2 = 0; +const var2 = 0; + +const var3 = 0; +let var3 = 0; + +const var4 = 0; +const var4 = 0; + +var var5 = 0; +let var5 = 0; + +let var6 = 0; +var var6 = 0; + +{ + let var7 = 0; + let var7 = 0; + { + let var8 = 0; + const var8 = 0; + } +} + +switch (0) { + default: + let var9 = 0; + let var9 = 0; +} + +try { + const var10 = 0; + const var10 = 0; +} +catch (e) { + let var11 = 0; + let var11 = 0; +} + +function F1() { + let var12; + let var12; +} + +// OK +var var20 = 0; + +var var20 = 0 +{ + let var20 = 0; + { + let var20 = 0; + } +} + +switch (0) { + default: + let var20 = 0; +} + +try { + let var20 = 0; +} +catch (e) { + let var20 = 0; +} + +function F() { + let var20; +} + + + +//// [letDeclarations-scopes-duplicates.js] +// Errors: redeclaration +let var1 = 0; +let var1 = 0; // error +let var2 = 0; +const var2 = 0; +const var3 = 0; +let var3 = 0; +const var4 = 0; +const var4 = 0; +var var5 = 0; +let var5 = 0; +let var6 = 0; +var var6 = 0; +{ + let var7 = 0; + let var7 = 0; + { + let var8 = 0; + const var8 = 0; + } +} +switch (0) { + default: + let var9 = 0; + let var9 = 0; +} +try { + const var10 = 0; + const var10 = 0; +} +catch (e) { + let var11 = 0; + let var11 = 0; +} +function F1() { + let var12; + let var12; +} +// OK +var var20 = 0; +var var20 = 0; +{ + let var20 = 0; + { + let var20 = 0; + } +} +switch (0) { + default: + let var20 = 0; +} +try { + let var20 = 0; +} +catch (e) { + let var20 = 0; +} +function F() { + let var20; +} diff --git a/tests/baselines/reference/letDeclarations-scopes-duplicates2.js b/tests/baselines/reference/letDeclarations-scopes-duplicates2.js new file mode 100644 index 00000000000..9b35bd81c76 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-scopes-duplicates2.js @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/letDeclarations-scopes-duplicates2.ts] //// + +//// [file1.ts] + +let var1 = 0; + +//// [file2.ts] +let var1 = 0; + +//// [file1.js] +let var1 = 0; +//// [file2.js] +let var1 = 0; diff --git a/tests/baselines/reference/letDeclarations-scopes-duplicates3.js b/tests/baselines/reference/letDeclarations-scopes-duplicates3.js new file mode 100644 index 00000000000..e74caf37219 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-scopes-duplicates3.js @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/letDeclarations-scopes-duplicates3.ts] //// + +//// [file1.ts] + +let var1 = 0; + +//// [file2.ts] +const var1 = 0; + +//// [file1.js] +let var1 = 0; +//// [file2.js] +const var1 = 0; diff --git a/tests/baselines/reference/letDeclarations-scopes-duplicates4.js b/tests/baselines/reference/letDeclarations-scopes-duplicates4.js new file mode 100644 index 00000000000..ac338e31c72 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-scopes-duplicates4.js @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/letDeclarations-scopes-duplicates4.ts] //// + +//// [file1.ts] + +const var1 = 0; + +//// [file2.ts] +let var1 = 0; + +//// [file1.js] +const var1 = 0; +//// [file2.js] +let var1 = 0; diff --git a/tests/baselines/reference/letDeclarations-scopes-duplicates5.js b/tests/baselines/reference/letDeclarations-scopes-duplicates5.js new file mode 100644 index 00000000000..2424c91ab90 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-scopes-duplicates5.js @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/letDeclarations-scopes-duplicates5.ts] //// + +//// [file1.ts] + +const var1 = 0; + +//// [file2.ts] +const var1 = 0; + +//// [file1.js] +const var1 = 0; +//// [file2.js] +const var1 = 0; diff --git a/tests/baselines/reference/letDeclarations-scopes-duplicates6.js b/tests/baselines/reference/letDeclarations-scopes-duplicates6.js new file mode 100644 index 00000000000..24edc0b7bde --- /dev/null +++ b/tests/baselines/reference/letDeclarations-scopes-duplicates6.js @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/letDeclarations-scopes-duplicates6.ts] //// + +//// [file1.ts] + +var var1 = 0; + +//// [file2.ts] +let var1 = 0; + +//// [file1.js] +var var1 = 0; +//// [file2.js] +let var1 = 0; diff --git a/tests/baselines/reference/letDeclarations-scopes-duplicates7.js b/tests/baselines/reference/letDeclarations-scopes-duplicates7.js new file mode 100644 index 00000000000..4cbc359e2c2 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-scopes-duplicates7.js @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/letDeclarations-scopes-duplicates7.ts] //// + +//// [file1.ts] + +let var1 = 0; + +//// [file2.ts] +var var1 = 0; + +//// [file1.js] +let var1 = 0; +//// [file2.js] +var var1 = 0; diff --git a/tests/baselines/reference/letDeclarations-useBeforeDefinition.js b/tests/baselines/reference/letDeclarations-useBeforeDefinition.js new file mode 100644 index 00000000000..be1f9a127f4 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-useBeforeDefinition.js @@ -0,0 +1,24 @@ +//// [letDeclarations-useBeforeDefinition.ts] + +{ + l1; + let l1; +} + +var v1; +{ + v1; + let v1 = 0; +} + + +//// [letDeclarations-useBeforeDefinition.js] +{ + l1; + let l1; +} +var v1; +{ + v1; + let v1 = 0; +} diff --git a/tests/baselines/reference/letDeclarations-useBeforeDefinition2.js b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.js new file mode 100644 index 00000000000..35560edd1c8 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.js @@ -0,0 +1,12 @@ +//// [tests/cases/compiler/letDeclarations-useBeforeDefinition2.ts] //// + +//// [file1.ts] + +l; + +//// [file2.ts] +const l = 0; + +//// [out.js] +l; +const l = 0; diff --git a/tests/baselines/reference/libMembers.js b/tests/baselines/reference/libMembers.js new file mode 100644 index 00000000000..38d1356ccc3 --- /dev/null +++ b/tests/baselines/reference/libMembers.js @@ -0,0 +1,36 @@ +//// [libMembers.ts] +var s="hello"; +s.substring(0); +s.substring(3,4); +s.subby(12); // error unresolved +String.fromCharCode(12); +module M { + export class C { + } + var a=new C[]; + a.length; + a.push(new C()); + (new C()).prototype; +} + + + +//// [libMembers.js] +var s = "hello"; +s.substring(0); +s.substring(3, 4); +s.subby(12); // error unresolved +String.fromCharCode(12); +var M; +(function (M) { + var C = (function () { + function C() { + } + return C; + })(); + M.C = C; + var a = new C[]; + a.length; + a.push(new C()); + (new C()).prototype; +})(M || (M = {})); diff --git a/tests/baselines/reference/literals.js b/tests/baselines/reference/literals.js new file mode 100644 index 00000000000..b92e11c13ce --- /dev/null +++ b/tests/baselines/reference/literals.js @@ -0,0 +1,74 @@ +//// [literals.ts] + +//typeof null is Null +//typeof true is Boolean +//typeof false is Boolean +//typeof numeric literal is Number +//typeof string literal is String +//typeof regex literal is Regex + +var nu = null / null; +var u = undefined / undefined; + +var b: boolean; +var b = true; +var b = false; + +var n: number; +var n = 1; +var n = 1.0; +var n = 1e4; +var n = 001; // Error in ES5 +var n = 0x1; +var n = -1; +var n = -1.0; +var n = -1e-4; +var n = -003; // Error in ES5 +var n = -0x1; + +var s: string; +var s = ''; +var s = ""; +var s = 'foo\ + bar'; +var s = "foo\ + bar"; + +var r: RegExp; +var r = /what/; +var r = /\\\\/; + + +//// [literals.js] +//typeof null is Null +//typeof true is Boolean +//typeof false is Boolean +//typeof numeric literal is Number +//typeof string literal is String +//typeof regex literal is Regex +var nu = null / null; +var u = undefined / undefined; +var b; +var b = true; +var b = false; +var n; +var n = 1; +var n = 1.0; +var n = 1e4; +var n = 001; // Error in ES5 +var n = 0x1; +var n = -1; +var n = -1.0; +var n = -1e-4; +var n = -003; // Error in ES5 +var n = -0x1; +var s; +var s = ''; +var s = ""; +var s = 'foo\ + bar'; +var s = "foo\ + bar"; +var r; +var r = /what/; +var r = /\\\\/; diff --git a/tests/baselines/reference/methodInAmbientClass1.js b/tests/baselines/reference/methodInAmbientClass1.js new file mode 100644 index 00000000000..73b79b3464c --- /dev/null +++ b/tests/baselines/reference/methodInAmbientClass1.js @@ -0,0 +1,7 @@ +//// [methodInAmbientClass1.ts] + declare class Foo { + fn(): boolean { + } + } + +//// [methodInAmbientClass1.js] diff --git a/tests/baselines/reference/missingArgument1.js b/tests/baselines/reference/missingArgument1.js new file mode 100644 index 00000000000..eed0d9b11d6 --- /dev/null +++ b/tests/baselines/reference/missingArgument1.js @@ -0,0 +1,5 @@ +//// [missingArgument1.ts] +foo(a,,b); + +//// [missingArgument1.js] +foo(a, , b); diff --git a/tests/baselines/reference/modifierOnParameter1.js b/tests/baselines/reference/modifierOnParameter1.js new file mode 100644 index 00000000000..69b54a09384 --- /dev/null +++ b/tests/baselines/reference/modifierOnParameter1.js @@ -0,0 +1,11 @@ +//// [modifierOnParameter1.ts] +class C { + constructor(declare p) { } +} + +//// [modifierOnParameter1.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/modifiersOnInterfaceIndexSignature1.js b/tests/baselines/reference/modifiersOnInterfaceIndexSignature1.js new file mode 100644 index 00000000000..1e91071e36a --- /dev/null +++ b/tests/baselines/reference/modifiersOnInterfaceIndexSignature1.js @@ -0,0 +1,6 @@ +//// [modifiersOnInterfaceIndexSignature1.ts] +interface I { + public [a: string]: number; +} + +//// [modifiersOnInterfaceIndexSignature1.js] diff --git a/tests/baselines/reference/moduledecl.js b/tests/baselines/reference/moduledecl.js new file mode 100644 index 00000000000..9be1b116a5e --- /dev/null +++ b/tests/baselines/reference/moduledecl.js @@ -0,0 +1,378 @@ +//// [moduledecl.ts] +module a { +} + +module b.a { +} + +module c.a.b { + import ma = a; +} + +module mImport { + import d = a; + import e = b.a; + import d1 = a; + import e1 = b.a; +} + +module m0 { + function f1() { + } + + function f2(s: string); + function f2(n: number); + function f2(ns: any) { + } + + class c1 { + public a : ()=>string; + private b: ()=>number; + private static s1; + public static s2; + } + + interface i1 { + () : Object; + [n: number]: c1; + } + + import m2 = a; + import m3 = b; + import m4 = b.a; + import m5 = c; + import m6 = c.a; + import m7 = c.a.b; +} + +module m1 { + export function f1() { + } + + export function f2(s: string); + export function f2(n: number); + export function f2(ns: any) { + } + + export class c1 { + public a: () =>string; + private b: () =>number; + private static s1; + public static s2; + + public d() { + return "Hello"; + } + + public e: { x: number; y: string; }; + constructor (public n, public n2: number, private n3, private n4: string) { + } + } + + export interface i1 { + () : Object; + [n: number]: c1; + } + + import m2 = a; + import m3 = b; + import m4 = b.a; + import m5 = c; + import m6 = c.a; + import m7 = c.a.b; +} + +module m { + export module m2 { + var a = 10; + export var b: number; + } + + export module m3 { + export var c: number; + } +} + +module m { + + export module m25 { + export module m5 { + export var c: number; + } + } +} + +module m13 { + export module m4 { + export module m2 { + export module m3 { + export var c: number; + } + } + + export function f() { + return 20; + } + } +} + +declare module m4 { + export var b; +} + +declare module m5 { + export var c; +} + +declare module m43 { + export var b; +} + +declare module m55 { + export var c; +} + +declare module "m3" { + export var b: number; +} + +module exportTests { + export class C1_public { + private f2() { + return 30; + } + + public f3() { + return "string"; + } + } + class C2_private { + private f2() { + return 30; + } + + public f3() { + return "string"; + } + } + + export class C3_public { + private getC2_private() { + return new C2_private(); + } + private setC2_private(arg: C2_private) { + } + private get c2() { + return new C2_private(); + } + public getC1_public() { + return new C1_public(); + } + public setC1_public(arg: C1_public) { + } + public get c1() { + return new C1_public(); + } + } +} + +declare module mAmbient { + class C { + public myProp: number; + } + + function foo() : C; + var aVar: C; + interface B { + x: number; + y: C; + } + enum e { + x, + y, + z + } + + module m3 { + class C { + public myProp: number; + } + + function foo(): C; + var aVar: C; + interface B { + x: number; + y: C; + } + enum e { + x, + y, + z + } + } +} + +function foo() { + return mAmbient.foo(); +} + +var cVar = new mAmbient.C(); +var aVar = mAmbient.aVar; +var bB: mAmbient.B; +var eVar: mAmbient.e; + +function m3foo() { + return mAmbient.m3.foo(); +} + +var m3cVar = new mAmbient.m3.C(); +var m3aVar = mAmbient.m3.aVar; +var m3bB: mAmbient.m3.B; +var m3eVar: mAmbient.m3.e; + + + +//// [moduledecl.js] +var m0; +(function (m0) { + function f1() { + } + function f2(ns) { + } + var c1 = (function () { + function c1() { + } + return c1; + })(); +})(m0 || (m0 = {})); +var m1; +(function (m1) { + function f1() { + } + m1.f1 = f1; + function f2(ns) { + } + m1.f2 = f2; + var c1 = (function () { + function c1(n, n2, n3, n4) { + this.n = n; + this.n2 = n2; + this.n3 = n3; + this.n4 = n4; + } + c1.prototype.d = function () { + return "Hello"; + }; + return c1; + })(); + m1.c1 = c1; +})(m1 || (m1 = {})); +var m; +(function (m) { + var m2; + (function (m2) { + var a = 10; + m2.b; + })(m2 = m.m2 || (m.m2 = {})); + var m3; + (function (m3) { + m3.c; + })(m3 = m.m3 || (m.m3 = {})); +})(m || (m = {})); +var m; +(function (m) { + var m25; + (function (m25) { + var m5; + (function (m5) { + m5.c; + })(m5 = m25.m5 || (m25.m5 = {})); + })(m25 = m.m25 || (m.m25 = {})); +})(m || (m = {})); +var m13; +(function (m13) { + var m4; + (function (m4) { + var m2; + (function (m2) { + var m3; + (function (m3) { + m3.c; + })(m3 = m2.m3 || (m2.m3 = {})); + })(m2 = m4.m2 || (m4.m2 = {})); + function f() { + return 20; + } + m4.f = f; + })(m4 = m13.m4 || (m13.m4 = {})); +})(m13 || (m13 = {})); +var exportTests; +(function (exportTests) { + var C1_public = (function () { + function C1_public() { + } + C1_public.prototype.f2 = function () { + return 30; + }; + C1_public.prototype.f3 = function () { + return "string"; + }; + return C1_public; + })(); + exportTests.C1_public = C1_public; + var C2_private = (function () { + function C2_private() { + } + C2_private.prototype.f2 = function () { + return 30; + }; + C2_private.prototype.f3 = function () { + return "string"; + }; + return C2_private; + })(); + var C3_public = (function () { + function C3_public() { + } + C3_public.prototype.getC2_private = function () { + return new C2_private(); + }; + C3_public.prototype.setC2_private = function (arg) { + }; + Object.defineProperty(C3_public.prototype, "c2", { + get: function () { + return new C2_private(); + }, + enumerable: true, + configurable: true + }); + C3_public.prototype.getC1_public = function () { + return new C1_public(); + }; + C3_public.prototype.setC1_public = function (arg) { + }; + Object.defineProperty(C3_public.prototype, "c1", { + get: function () { + return new C1_public(); + }, + enumerable: true, + configurable: true + }); + return C3_public; + })(); + exportTests.C3_public = C3_public; +})(exportTests || (exportTests = {})); +function foo() { + return mAmbient.foo(); +} +var cVar = new mAmbient.C(); +var aVar = mAmbient.aVar; +var bB; +var eVar; +function m3foo() { + return mAmbient.m3.foo(); +} +var m3cVar = new mAmbient.m3.C(); +var m3aVar = mAmbient.m3.aVar; +var m3bB; +var m3eVar; diff --git a/tests/baselines/reference/multipleClassPropertyModifiers.js b/tests/baselines/reference/multipleClassPropertyModifiers.js new file mode 100644 index 00000000000..7dec786c447 --- /dev/null +++ b/tests/baselines/reference/multipleClassPropertyModifiers.js @@ -0,0 +1,14 @@ +//// [multipleClassPropertyModifiers.ts] +class C { + public static p1; + static public p2; + private static p3; + static private p4; +} + +//// [multipleClassPropertyModifiers.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/multipleClassPropertyModifiersErrors.js b/tests/baselines/reference/multipleClassPropertyModifiersErrors.js new file mode 100644 index 00000000000..191476e9a62 --- /dev/null +++ b/tests/baselines/reference/multipleClassPropertyModifiersErrors.js @@ -0,0 +1,17 @@ +//// [multipleClassPropertyModifiersErrors.ts] +class C { + public public p1; + private private p2; + static static p3; + public private p4; + private public p5; + public static p6; + private static p7; +} + +//// [multipleClassPropertyModifiersErrors.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/multipleInheritance.js b/tests/baselines/reference/multipleInheritance.js new file mode 100644 index 00000000000..9cab77f3dba --- /dev/null +++ b/tests/baselines/reference/multipleInheritance.js @@ -0,0 +1,121 @@ +//// [multipleInheritance.ts] +class B1 { + public x; +} + +class B2 { + public x; +} + +class C extends B1, B2 { // duplicate member +} + +class D1 extends B1 { +} + +class D2 extends B2 { +} + +class E extends D1, D2 { // nope, duplicate member +} + +class N { + public y:number; +} + +class ND extends N { // any is assignable to number + public y; +} + +class Good { + public f:() => number = function() { return 0; } + public g() { return 0; } +} + +class Baad extends Good { + public f(): number { return 0; } + public g(n:number) { return 0; } +} + + +//// [multipleInheritance.js] +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 B1 = (function () { + function B1() { + } + return B1; +})(); +var B2 = (function () { + function B2() { + } + return B2; +})(); +var C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(B1); +var D1 = (function (_super) { + __extends(D1, _super); + function D1() { + _super.apply(this, arguments); + } + return D1; +})(B1); +var D2 = (function (_super) { + __extends(D2, _super); + function D2() { + _super.apply(this, arguments); + } + return D2; +})(B2); +var E = (function (_super) { + __extends(E, _super); + function E() { + _super.apply(this, arguments); + } + return E; +})(D1); +var N = (function () { + function N() { + } + return N; +})(); +var ND = (function (_super) { + __extends(ND, _super); + function ND() { + _super.apply(this, arguments); + } + return ND; +})(N); +var Good = (function () { + function Good() { + this.f = function () { + return 0; + }; + } + Good.prototype.g = function () { + return 0; + }; + return Good; +})(); +var Baad = (function (_super) { + __extends(Baad, _super); + function Baad() { + _super.apply(this, arguments); + } + Baad.prototype.f = function () { + return 0; + }; + Baad.prototype.g = function (n) { + return 0; + }; + return Baad; +})(Good); diff --git a/tests/baselines/reference/newOperator.js b/tests/baselines/reference/newOperator.js new file mode 100644 index 00000000000..95dc410142e --- /dev/null +++ b/tests/baselines/reference/newOperator.js @@ -0,0 +1,92 @@ +//// [newOperator.ts] +interface ifc { } +// Attempting to 'new' an interface yields poor error +var i = new ifc(); + +// Parens are optional +var x = new Date; +var y = new Date(); + +// Target is not a class or var, good error +var t1 = new 53(); +var t2 = new ''(); +new string; + +// Use in LHS of expression? +(new Date()).toString(); + +// Various spacing +var t3 = new string[]( ); +var t4 = +new +string +[ + ] + ( + ); + +// Unresolved symbol +var f = new q(); + +// not legal +var t5 = new new Date; + +// Can be an expression +new String; + + +module M { + export class T { + x: number; + } +} + +class S { + public get xs(): M.T[] { + return new M.T[]; + } +} + + +//// [newOperator.js] +// Attempting to 'new' an interface yields poor error +var i = new ifc(); +// Parens are optional +var x = new Date; +var y = new Date(); +// Target is not a class or var, good error +var t1 = new 53(); +var t2 = new ''(); +new string; +// Use in LHS of expression? +(new Date()).toString(); +// Various spacing +var t3 = new string[](); +var t4 = new string[](); +// Unresolved symbol +var f = new q(); +// not legal +var t5 = new new Date; +// Can be an expression +new String; +var M; +(function (M) { + var T = (function () { + function T() { + } + return T; + })(); + M.T = T; +})(M || (M = {})); +var S = (function () { + function S() { + } + Object.defineProperty(S.prototype, "xs", { + get: function () { + return new M.T[]; + }, + enumerable: true, + configurable: true + }); + return S; +})(); diff --git a/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInAccessors.js b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInAccessors.js new file mode 100644 index 00000000000..727b1b6087a --- /dev/null +++ b/tests/baselines/reference/noCollisionThisExpressionAndLocalVarInAccessors.js @@ -0,0 +1,98 @@ +//// [noCollisionThisExpressionAndLocalVarInAccessors.ts] +class class1 { + get a(): number { + var x2 = { + doStuff: (callback) => () => { + var _this = 2; + return callback(_this); + } + } + + return 10; + } + set a(val: number) { + var x2 = { + doStuff: (callback) => () => { + var _this = 2; + return callback(_this); + } + } + + } +} + +class class2 { + get a(): number { + var _this = 2; + var x2 = { + doStuff: (callback) => () => { + return callback(_this); + } + } + + return 10; + } + set a(val: number) { + var _this = 2; + var x2 = { + doStuff: (callback) => () => { + return callback(_this); + } + } + + } +} + +//// [noCollisionThisExpressionAndLocalVarInAccessors.js] +var class1 = (function () { + function class1() { + } + Object.defineProperty(class1.prototype, "a", { + get: function () { + var x2 = { + doStuff: function (callback) { return function () { + var _this = 2; + return callback(_this); + }; } + }; + return 10; + }, + set: function (val) { + var x2 = { + doStuff: function (callback) { return function () { + var _this = 2; + return callback(_this); + }; } + }; + }, + enumerable: true, + configurable: true + }); + return class1; +})(); +var class2 = (function () { + function class2() { + } + Object.defineProperty(class2.prototype, "a", { + get: function () { + var _this = 2; + var x2 = { + doStuff: function (callback) { return function () { + return callback(_this); + }; } + }; + return 10; + }, + set: function (val) { + var _this = 2; + var x2 = { + doStuff: function (callback) { return function () { + return callback(_this); + }; } + }; + }, + enumerable: true, + configurable: true + }); + return class2; +})(); diff --git a/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.js b/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.js new file mode 100644 index 00000000000..339f674b9da --- /dev/null +++ b/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.js @@ -0,0 +1,151 @@ +//// [numericIndexerConstrainsPropertyDeclarations.ts] +// String indexer types constrain the types of named properties in their containing type + +interface MyNumber extends Number { + foo: number; +} + +class C { + [x: number]: string; + + constructor() { } // ok + + a: string; // ok + b: number; // ok + c: () => {} // ok + "d": string; // ok + "e": number; // ok + 1.0: string; // ok + 2.0: number; // error + "3.0": string; // ok + "4.0": number; // error + 3.0: MyNumber // error + + get X() { // ok + return ''; + } + set X(v) { } // ok + + foo() { + return ''; + } + + static sa: number; // ok + static sb: string; // ok + + static foo() { } // ok + static get X() { // ok + return 1; + } +} + +interface I { + [x: number]: string; + + a: string; // ok + b: number; // ok + c: () => {} // ok + "d": string; // ok + "e": number; // ok + 1.0: string; // ok + 2.0: number; // error + (): string; // ok + (x): number // ok + foo(): string; // ok + "3.0": string; // ok + "4.0": number; // error + f: MyNumber; // error +} + +var a: { + [x: number]: string; + + a: string; // ok + b: number; // ok + c: () => {} // ok + "d": string; // ok + "e": number; // ok + 1.0: string; // ok + 2.0: number; // error + (): string; // ok + (x): number // ok + foo(): string; // ok + "3.0": string; // ok + "4.0": number; // error + f: MyNumber; // error +} + +// error +var b: { [x: number]: string; } = { + a: '', + b: 1, + c: () => { }, + "d": '', + "e": 1, + 1.0: '', + 2.0: 1, + "3.0": '', + "4.0": 1, + f: null, + + get X() { + return ''; + }, + set X(v) { }, + foo() { + return ''; + } +} + +//// [numericIndexerConstrainsPropertyDeclarations.js] +// String indexer types constrain the types of named properties in their containing type +var C = (function () { + function C() { + } // ok + Object.defineProperty(C.prototype, "X", { + get: function () { + return ''; + }, + set: function (v) { + } // ok + , + enumerable: true, + configurable: true + }); + C.prototype.foo = function () { + return ''; + }; + C.foo = function () { + }; // ok + Object.defineProperty(C, "X", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var a; +// error +var b = { + a: '', + b: 1, + c: function () { + }, + "d": '', + "e": 1, + 1.0: '', + 2.0: 1, + "3.0": '', + "4.0": 1, + f: null, + get X() { + return ''; + }, + set X(v) { + }, + foo: function () { + return ''; + } +}; diff --git a/tests/baselines/reference/objectLitPropertyScoping.js b/tests/baselines/reference/objectLitPropertyScoping.js new file mode 100644 index 00000000000..b9615081e3f --- /dev/null +++ b/tests/baselines/reference/objectLitPropertyScoping.js @@ -0,0 +1,33 @@ +//// [objectLitPropertyScoping.ts] +// Should compile, x and y should not be picked up from the properties + +function makePoint(x: number, y: number) { + return { + get x() { + return x; + }, + get y() { + return y; + }, + dist: function () { + return Math.sqrt(x * x + y * y); + } + } +}; + +//// [objectLitPropertyScoping.js] +// Should compile, x and y should not be picked up from the properties +function makePoint(x, y) { + return { + get x() { + return x; + }, + get y() { + return y; + }, + dist: function () { + return Math.sqrt(x * x + y * y); + } + }; +} +; diff --git a/tests/baselines/reference/objectLiteralErrors.js b/tests/baselines/reference/objectLiteralErrors.js new file mode 100644 index 00000000000..2a72e8a2a77 --- /dev/null +++ b/tests/baselines/reference/objectLiteralErrors.js @@ -0,0 +1,138 @@ +//// [objectLiteralErrors.ts] + +// Multiple properties with the same name +var e1 = { a: 0, a: 0 }; +var e2 = { a: '', a: '' }; +var e3 = { a: 0, a: '' }; +var e4 = { a: true, a: false }; +var e5 = { a: {}, a: {} }; +var e6 = { a: 0, 'a': 0 }; +var e7 = { 'a': 0, a: 0 }; +var e8 = { 'a': 0, "a": 0 }; +var e9 = { 'a': 0, 'a': 0 }; +var e10 = { "a": 0, 'a': 0 }; +var e11 = { 1.0: 0, '1': 0 }; +var e12 = { 0: 0, 0: 0 }; +var e13 = { 0: 0, 0: 0 }; +var e14 = { 0: 0, 0x0: 0 }; +var e14 = { 0: 0, 000: 0 }; +var e15 = { "100": 0, 1e2: 0 }; +var e16 = { 0x20: 0, 3.2e1: 0 }; +var e17 = { a: 0, b: 1, a: 0 }; + +// Accessor and property with the same name +var f1 = { a: 0, get a() { return 0; } }; +var f2 = { a: '', get a() { return ''; } }; +var f3 = { a: 0, get a() { return ''; } }; +var f4 = { a: true, get a() { return false; } }; +var f5 = { a: {}, get a() { return {}; } }; +var f6 = { a: 0, get 'a'() { return 0; } }; +var f7 = { 'a': 0, get a() { return 0; } }; +var f8 = { 'a': 0, get "a"() { return 0; } }; +var f9 = { 'a': 0, get 'a'() { return 0; } }; +var f10 = { "a": 0, get 'a'() { return 0; } }; +var f11 = { 1.0: 0, get '1'() { return 0; } }; +var f12 = { 0: 0, get 0() { return 0; } }; +var f13 = { 0: 0, get 0() { return 0; } }; +var f14 = { 0: 0, get 0x0() { return 0; } }; +var f14 = { 0: 0, get 000() { return 0; } }; +var f15 = { "100": 0, get 1e2() { return 0; } }; +var f16 = { 0x20: 0, get 3.2e1() { return 0; } }; +var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } }; + +// Get and set accessor with mismatched type annotations +var g1 = { get a(): number { return 4; }, set a(n: string) { } }; +var g2 = { get a() { return 4; }, set a(n: string) { } }; +var g3 = { get a(): number { return undefined; }, set a(n: string) { } }; + + +//// [objectLiteralErrors.js] +// Multiple properties with the same name +var e1 = { a: 0, a: 0 }; +var e2 = { a: '', a: '' }; +var e3 = { a: 0, a: '' }; +var e4 = { a: true, a: false }; +var e5 = { a: {}, a: {} }; +var e6 = { a: 0, 'a': 0 }; +var e7 = { 'a': 0, a: 0 }; +var e8 = { 'a': 0, "a": 0 }; +var e9 = { 'a': 0, 'a': 0 }; +var e10 = { "a": 0, 'a': 0 }; +var e11 = { 1.0: 0, '1': 0 }; +var e12 = { 0: 0, 0: 0 }; +var e13 = { 0: 0, 0: 0 }; +var e14 = { 0: 0, 0x0: 0 }; +var e14 = { 0: 0, 000: 0 }; +var e15 = { "100": 0, 1e2: 0 }; +var e16 = { 0x20: 0, 3.2e1: 0 }; +var e17 = { a: 0, b: 1, a: 0 }; +// Accessor and property with the same name +var f1 = { a: 0, get a() { + return 0; +} }; +var f2 = { a: '', get a() { + return ''; +} }; +var f3 = { a: 0, get a() { + return ''; +} }; +var f4 = { a: true, get a() { + return false; +} }; +var f5 = { a: {}, get a() { + return {}; +} }; +var f6 = { a: 0, get 'a'() { + return 0; +} }; +var f7 = { 'a': 0, get a() { + return 0; +} }; +var f8 = { 'a': 0, get "a"() { + return 0; +} }; +var f9 = { 'a': 0, get 'a'() { + return 0; +} }; +var f10 = { "a": 0, get 'a'() { + return 0; +} }; +var f11 = { 1.0: 0, get '1'() { + return 0; +} }; +var f12 = { 0: 0, get 0() { + return 0; +} }; +var f13 = { 0: 0, get 0() { + return 0; +} }; +var f14 = { 0: 0, get 0x0() { + return 0; +} }; +var f14 = { 0: 0, get 000() { + return 0; +} }; +var f15 = { "100": 0, get 1e2() { + return 0; +} }; +var f16 = { 0x20: 0, get 3.2e1() { + return 0; +} }; +var f17 = { a: 0, get b() { + return 1; +}, get a() { + return 0; +} }; +// Get and set accessor with mismatched type annotations +var g1 = { get a() { + return 4; +}, set a(n) { +} }; +var g2 = { get a() { + return 4; +}, set a(n) { +} }; +var g3 = { get a() { + return undefined; +}, set a(n) { +} }; diff --git a/tests/baselines/reference/objectLiteralErrorsES3.js b/tests/baselines/reference/objectLiteralErrorsES3.js new file mode 100644 index 00000000000..5b98da0039d --- /dev/null +++ b/tests/baselines/reference/objectLiteralErrorsES3.js @@ -0,0 +1,18 @@ +//// [objectLiteralErrorsES3.ts] + +var e1 = { get a() { return 4; } }; +var e2 = { set a(n) { } }; +var e3 = { get a() { return ''; }, set a(n) { } }; + + + +//// [objectLiteralErrorsES3.js] +var e1 = { get a() { + return 4; +} }; +var e2 = { set a(n) { +} }; +var e3 = { get a() { + return ''; +}, set a(n) { +} }; diff --git a/tests/baselines/reference/objectLiteralGettersAndSetters.js b/tests/baselines/reference/objectLiteralGettersAndSetters.js new file mode 100644 index 00000000000..b602650ef8d --- /dev/null +++ b/tests/baselines/reference/objectLiteralGettersAndSetters.js @@ -0,0 +1,220 @@ +//// [objectLiteralGettersAndSetters.ts] +// Get and set accessor with the same name +var sameName1a = { get 'a'() { return ''; }, set a(n) { var p = n; var p: string; } }; +var sameName2a = { get 0.0() { return ''; }, set 0(n) { var p = n; var p: string; } }; +var sameName3a = { get 0x20() { return ''; }, set 3.2e1(n) { var p = n; var p: string; } }; +var sameName4a = { get ''() { return ''; }, set ""(n) { var p = n; var p: string; } }; +var sameName5a = { get '\t'() { return ''; }, set '\t'(n) { var p = n; var p: string; } }; +var sameName6a = { get 'a'() { return ''; }, set a(n) { var p = n; var p: string; } }; + +// PropertyName CallSignature{FunctionBody} is equivalent to PropertyName:function CallSignature{FunctionBody} +var callSig1 = { num(n: number) { return '' } }; +var callSig1: { num: (n: number) => string; }; +var callSig2 = { num: function (n: number) { return '' } }; +var callSig2: { num: (n: number) => string; }; +var callSig3 = { num: (n: number) => '' }; +var callSig3: { num: (n: number) => string; }; + +// Get accessor only, type of the property is the annotated return type of the get accessor +var getter1 = { get x(): string { return undefined; } }; +var getter1: { x: string; } + +// Get accessor only, type of the property is the inferred return type of the get accessor +var getter2 = { get x() { return ''; } }; +var getter2: { x: string; } + +// Set accessor only, type of the property is the param type of the set accessor +var setter1 = { set x(n: number) { } }; +var setter1: { x: number }; + +// Set accessor only, type of the property is Any for an unannotated set accessor +var setter2 = { set x(n) { } }; +var setter2: { x: any }; + +var anyVar: any; +// Get and set accessor with matching type annotations +var sameType1 = { get x(): string { return undefined; }, set x(n: string) { } }; +var sameType2 = { get x(): Array { return undefined; }, set x(n: number[]) { } }; +var sameType3 = { get x(): any { return undefined; }, set x(n: typeof anyVar) { } }; +var sameType4 = { get x(): Date { return undefined; }, set x(n: Date) { } }; + +// Type of unannotated get accessor return type is the type annotation of the set accessor param +var setParamType1 = { + set n(x: (t: string) => void) { }, + get n() { return (t) => { + var p: string; + var p = t; + } + } +}; +var setParamType2 = { + get n() { return (t) => { + var p: string; + var p = t; + } + }, + set n(x: (t: string) => void) { } +}; + +// Type of unannotated set accessor parameter is the return type annotation of the get accessor +var getParamType1 = { + set n(x) { + var y = x; + var y: string; + }, + get n() { return ''; } +}; +var getParamType2 = { + get n() { return ''; }, + set n(x) { + var y = x; + var y: string; + } +}; + +// Type of unannotated accessors is the inferred return type of the get accessor +var getParamType3 = { + get n() { return ''; }, + set n(x) { + var y = x; + var y: string; + } +}; + + + +//// [objectLiteralGettersAndSetters.js] +// Get and set accessor with the same name +var sameName1a = { get 'a'() { + return ''; +}, set a(n) { + var p = n; + var p; +} }; +var sameName2a = { get 0.0() { + return ''; +}, set 0(n) { + var p = n; + var p; +} }; +var sameName3a = { get 0x20() { + return ''; +}, set 3.2e1(n) { + var p = n; + var p; +} }; +var sameName4a = { get ''() { + return ''; +}, set ""(n) { + var p = n; + var p; +} }; +var sameName5a = { get '\t'() { + return ''; +}, set '\t'(n) { + var p = n; + var p; +} }; +var sameName6a = { get 'a'() { + return ''; +}, set a(n) { + var p = n; + var p; +} }; +// PropertyName CallSignature{FunctionBody} is equivalent to PropertyName:function CallSignature{FunctionBody} +var callSig1 = { num: function (n) { + return ''; +} }; +var callSig1; +var callSig2 = { num: function (n) { + return ''; +} }; +var callSig2; +var callSig3 = { num: function (n) { return ''; } }; +var callSig3; +// Get accessor only, type of the property is the annotated return type of the get accessor +var getter1 = { get x() { + return undefined; +} }; +var getter1; +// Get accessor only, type of the property is the inferred return type of the get accessor +var getter2 = { get x() { + return ''; +} }; +var getter2; +// Set accessor only, type of the property is the param type of the set accessor +var setter1 = { set x(n) { +} }; +var setter1; +// Set accessor only, type of the property is Any for an unannotated set accessor +var setter2 = { set x(n) { +} }; +var setter2; +var anyVar; +// Get and set accessor with matching type annotations +var sameType1 = { get x() { + return undefined; +}, set x(n) { +} }; +var sameType2 = { get x() { + return undefined; +}, set x(n) { +} }; +var sameType3 = { get x() { + return undefined; +}, set x(n) { +} }; +var sameType4 = { get x() { + return undefined; +}, set x(n) { +} }; +// Type of unannotated get accessor return type is the type annotation of the set accessor param +var setParamType1 = { + set n(x) { + }, + get n() { + return function (t) { + var p; + var p = t; + }; + } +}; +var setParamType2 = { + get n() { + return function (t) { + var p; + var p = t; + }; + }, + set n(x) { + } +}; +// Type of unannotated set accessor parameter is the return type annotation of the get accessor +var getParamType1 = { + set n(x) { + var y = x; + var y; + }, + get n() { + return ''; + } +}; +var getParamType2 = { + get n() { + return ''; + }, + set n(x) { + var y = x; + var y; + } +}; +// Type of unannotated accessors is the inferred return type of the get accessor +var getParamType3 = { + get n() { + return ''; + }, + set n(x) { + var y = x; + var y; + } +}; diff --git a/tests/baselines/reference/objectLiteralMemberWithModifiers2.js b/tests/baselines/reference/objectLiteralMemberWithModifiers2.js new file mode 100644 index 00000000000..fd8e0a68430 --- /dev/null +++ b/tests/baselines/reference/objectLiteralMemberWithModifiers2.js @@ -0,0 +1,6 @@ +//// [objectLiteralMemberWithModifiers2.ts] +var v = { public get foo() { } } + +//// [objectLiteralMemberWithModifiers2.js] +var v = { get foo() { +} }; diff --git a/tests/baselines/reference/objectLiteralMemberWithQuestionMark1.js b/tests/baselines/reference/objectLiteralMemberWithQuestionMark1.js new file mode 100644 index 00000000000..7d646cfab8e --- /dev/null +++ b/tests/baselines/reference/objectLiteralMemberWithQuestionMark1.js @@ -0,0 +1,6 @@ +//// [objectLiteralMemberWithQuestionMark1.ts] +var v = { foo?() { } } + +//// [objectLiteralMemberWithQuestionMark1.js] +var v = { foo: function () { +} }; diff --git a/tests/baselines/reference/objectLiteralMemberWithoutBlock1.js b/tests/baselines/reference/objectLiteralMemberWithoutBlock1.js new file mode 100644 index 00000000000..2ad13950b14 --- /dev/null +++ b/tests/baselines/reference/objectLiteralMemberWithoutBlock1.js @@ -0,0 +1,6 @@ +//// [objectLiteralMemberWithoutBlock1.ts] +var v = { foo(); } + +//// [objectLiteralMemberWithoutBlock1.js] +var v = { foo: function () { +} }; diff --git a/tests/baselines/reference/objectLiteralWithGetAccessorInsideFunction.js b/tests/baselines/reference/objectLiteralWithGetAccessorInsideFunction.js new file mode 100644 index 00000000000..58216c786ae --- /dev/null +++ b/tests/baselines/reference/objectLiteralWithGetAccessorInsideFunction.js @@ -0,0 +1,19 @@ +//// [objectLiteralWithGetAccessorInsideFunction.ts] +function bar() { + var x = { + get _extraOccluded() { + var occluded = 0; + return occluded; + }, + } +} + +//// [objectLiteralWithGetAccessorInsideFunction.js] +function bar() { + var x = { + get _extraOccluded() { + var occluded = 0; + return occluded; + } + }; +} diff --git a/tests/baselines/reference/objectTypeWithOptionalProperty1.js b/tests/baselines/reference/objectTypeWithOptionalProperty1.js new file mode 100644 index 00000000000..8f949733a49 --- /dev/null +++ b/tests/baselines/reference/objectTypeWithOptionalProperty1.js @@ -0,0 +1,9 @@ +//// [objectTypeWithOptionalProperty1.ts] + var b = { + x?: 1 // error + } + +//// [objectTypeWithOptionalProperty1.js] +var b = { + x: 1 // error +}; diff --git a/tests/baselines/reference/objectTypesWithOptionalProperties.js b/tests/baselines/reference/objectTypesWithOptionalProperties.js new file mode 100644 index 00000000000..c2177e63762 --- /dev/null +++ b/tests/baselines/reference/objectTypesWithOptionalProperties.js @@ -0,0 +1,43 @@ +//// [objectTypesWithOptionalProperties.ts] +// Basic uses of optional properties + +var a: { + x?: number; // ok +} + +interface I { + x?: number; // ok +} + +class C { + x?: number; // error +} + +interface I2 { + x?: T; // ok +} + +class C2 { + x?: T; // error +} + +var b = { + x?: 1 // error +} + +//// [objectTypesWithOptionalProperties.js] +// Basic uses of optional properties +var a; +var C = (function () { + function C() { + } + return C; +})(); +var C2 = (function () { + function C2() { + } + return C2; +})(); +var b = { + x: 1 // error +}; diff --git a/tests/baselines/reference/octalLiteralInStrictModeES3.js b/tests/baselines/reference/octalLiteralInStrictModeES3.js new file mode 100644 index 00000000000..9519503ed36 --- /dev/null +++ b/tests/baselines/reference/octalLiteralInStrictModeES3.js @@ -0,0 +1,7 @@ +//// [octalLiteralInStrictModeES3.ts] +"use strict"; +03; + +//// [octalLiteralInStrictModeES3.js] +"use strict"; +03; diff --git a/tests/baselines/reference/optionalArgsWithDefaultValues.js b/tests/baselines/reference/optionalArgsWithDefaultValues.js new file mode 100644 index 00000000000..12ab7c9f330 --- /dev/null +++ b/tests/baselines/reference/optionalArgsWithDefaultValues.js @@ -0,0 +1,37 @@ +//// [optionalArgsWithDefaultValues.ts] +function foo(x: number, y?:boolean=false, z?=0) {} + +class CCC { + public foo(x: number, y?:boolean=false, z?=0) {} + static foo2(x: number, y?:boolean=false, z?=0) {} +} + +var a = (x?=0) => { return 1; }; +var b = (x, y?:number = 2) => { x; }; + +//// [optionalArgsWithDefaultValues.js] +function foo(x, y, z) { + if (y === void 0) { y = false; } + if (z === void 0) { z = 0; } +} +var CCC = (function () { + function CCC() { + } + CCC.prototype.foo = function (x, y, z) { + if (y === void 0) { y = false; } + if (z === void 0) { z = 0; } + }; + CCC.foo2 = function (x, y, z) { + if (y === void 0) { y = false; } + if (z === void 0) { z = 0; } + }; + return CCC; +})(); +var a = function (x) { + if (x === void 0) { x = 0; } + return 1; +}; +var b = function (x, y) { + if (y === void 0) { y = 2; } + x; +}; diff --git a/tests/baselines/reference/optionalParamArgsTest.js b/tests/baselines/reference/optionalParamArgsTest.js new file mode 100644 index 00000000000..942b95d245e --- /dev/null +++ b/tests/baselines/reference/optionalParamArgsTest.js @@ -0,0 +1,270 @@ +//// [optionalParamArgsTest.ts] +// Optional parameter and default argument tests + +// Key: +// Cx - "Class x" +// My - "Method x" +// Az - "Argument z" +// E.g., C1M1A1 = "Class 1, Method 1, Argument 1" + +interface I1 { + C1M1():number; + C1M2(C1M2A1:number):number; + C1M3(C1M3A1?:number,C1M3A2?:number):number; + C1M4(C1M4A1:number,C1M4A2?:number):number; +} + +// test basic configurations +class C1 { + constructor(v: number = 1, p: number = 0) { } + public n:number = 0; + + public C1M1() { return 0; } // returning C1M1A1 will result in "Unresolved symbol C1M1A1" + + public C1M2(C1M2A1:number) { return C1M2A1; } // will return C1M1A2 without complaint + + // C1M3 contains all optional parameters + public C1M3(C1M3A1:number=0,C1M3A2:number=C1M3A1) {return C1M3A1 + C1M3A2; } + + // C1M4 contains a mix of optional and non-optional parameters + public C1M4(C1M4A1:number,C1M4A2?:number) { return C1M4A1 + C1M4A2; } + + public C1M5(C1M5A1:number,C1M5A2:number=0,C1M5A3?:number) { return C1M5A1 + C1M5A2; } + + // Negative test + // "Optional parameters may only be followed by other optional parameters" + public C1M5(C1M5A1:number,C1M5A2:number=0,C1M5A3:number) { return C1M5A1 + C1M5A2; } +} + +class C2 extends C1 { + constructor(v2: number = 6) { + super(v2); + } +} + + +function F1() { return 0; } +function F2(F2A1:number) { return F2A1; } +function F3(F3A1=0,F3A2=F3A1) {return F3A1 + F3A2; } +function F4(F4A1:number,F4A2?:number) { return F4A1 + F4A2; } + +var L1 = function() {return 0;} +var L2 = function (L2A1:number) { return L2A1; } +var L3 = function (L3A1=0,L3A2=L3A1) {return L3A1 + L3A2; } +var L4 = function (L4A1:number,L4A2?:number) { return L4A1 + L4A2; } + +var c1o1:C1 = new C1(5); +var i1o1:I1 = new C1(5); +// Valid +c1o1.C1M1(); +var f1v1=F1(); +var l1v1=L1(); + +// Valid +c1o1.C1M2(1); +i1o1.C1M2(1); +var f2v1=F2(1); +var l2v1=L2(1); + +// Valid +c1o1.C1M3(1,2); +i1o1.C1M3(1,2); +var f3v1=F3(1,2); +var l3v1=L3(1,2); + +// Valid +c1o1.C1M4(1,2); +i1o1.C1M4(1,2); +var f4v1=F4(1,2); +var l4v1=L4(1,2); + +// Valid +c1o1.C1M3(1); +i1o1.C1M3(1); +var f3v2=F3(1); +var l3v2=L3(1); + +// Valid +c1o1.C1M3(); +i1o1.C1M3(); +var f3v3=F3(); +var l3v3=L3(); + +// Valid +c1o1.C1M4(1); +i1o1.C1M4(1); +var f4v2=F4(1); +var l4v2=L4(1); + +// Negative tests - we expect these cases to fail +c1o1.C1M1(1); +i1o1.C1M1(1); +F1(1); +L1(1); +c1o1.C1M2(); +i1o1.C1M2(); +F2(); +L2(); +c1o1.C1M2(1,2); +i1o1.C1M2(1,2); +F2(1,2); +L2(1,2); +c1o1.C1M3(1,2,3); +i1o1.C1M3(1,2,3); +F3(1,2,3); +L3(1,2,3); +c1o1.C1M4(); +i1o1.C1M4(); +F4(); +L4(); + +function fnOpt1(id: number, children: number[] = [], expectedPath: number[] = [], isRoot?: boolean): void {} +function fnOpt2(id: number, children?: number[], expectedPath?: number[], isRoot?: boolean): void {} +fnOpt1(1, [2, 3], [1], true); +fnOpt2(1, [2, 3], [1], true); + + +//// [optionalParamArgsTest.js] +// Optional parameter and default argument tests +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 __(); +}; +// test basic configurations +var C1 = (function () { + function C1(v, p) { + if (v === void 0) { v = 1; } + if (p === void 0) { p = 0; } + this.n = 0; + } + C1.prototype.C1M1 = function () { + return 0; + }; // returning C1M1A1 will result in "Unresolved symbol C1M1A1" + C1.prototype.C1M2 = function (C1M2A1) { + return C1M2A1; + }; // will return C1M1A2 without complaint + // C1M3 contains all optional parameters + C1.prototype.C1M3 = function (C1M3A1, C1M3A2) { + if (C1M3A1 === void 0) { C1M3A1 = 0; } + if (C1M3A2 === void 0) { C1M3A2 = C1M3A1; } + return C1M3A1 + C1M3A2; + }; + // C1M4 contains a mix of optional and non-optional parameters + C1.prototype.C1M4 = function (C1M4A1, C1M4A2) { + return C1M4A1 + C1M4A2; + }; + C1.prototype.C1M5 = function (C1M5A1, C1M5A2, C1M5A3) { + if (C1M5A2 === void 0) { C1M5A2 = 0; } + return C1M5A1 + C1M5A2; + }; + // Negative test + // "Optional parameters may only be followed by other optional parameters" + C1.prototype.C1M5 = function (C1M5A1, C1M5A2, C1M5A3) { + if (C1M5A2 === void 0) { C1M5A2 = 0; } + return C1M5A1 + C1M5A2; + }; + return C1; +})(); +var C2 = (function (_super) { + __extends(C2, _super); + function C2(v2) { + if (v2 === void 0) { v2 = 6; } + _super.call(this, v2); + } + return C2; +})(C1); +function F1() { + return 0; +} +function F2(F2A1) { + return F2A1; +} +function F3(F3A1, F3A2) { + if (F3A1 === void 0) { F3A1 = 0; } + if (F3A2 === void 0) { F3A2 = F3A1; } + return F3A1 + F3A2; +} +function F4(F4A1, F4A2) { + return F4A1 + F4A2; +} +var L1 = function () { + return 0; +}; +var L2 = function (L2A1) { + return L2A1; +}; +var L3 = function (L3A1, L3A2) { + if (L3A1 === void 0) { L3A1 = 0; } + if (L3A2 === void 0) { L3A2 = L3A1; } + return L3A1 + L3A2; +}; +var L4 = function (L4A1, L4A2) { + return L4A1 + L4A2; +}; +var c1o1 = new C1(5); +var i1o1 = new C1(5); +// Valid +c1o1.C1M1(); +var f1v1 = F1(); +var l1v1 = L1(); +// Valid +c1o1.C1M2(1); +i1o1.C1M2(1); +var f2v1 = F2(1); +var l2v1 = L2(1); +// Valid +c1o1.C1M3(1, 2); +i1o1.C1M3(1, 2); +var f3v1 = F3(1, 2); +var l3v1 = L3(1, 2); +// Valid +c1o1.C1M4(1, 2); +i1o1.C1M4(1, 2); +var f4v1 = F4(1, 2); +var l4v1 = L4(1, 2); +// Valid +c1o1.C1M3(1); +i1o1.C1M3(1); +var f3v2 = F3(1); +var l3v2 = L3(1); +// Valid +c1o1.C1M3(); +i1o1.C1M3(); +var f3v3 = F3(); +var l3v3 = L3(); +// Valid +c1o1.C1M4(1); +i1o1.C1M4(1); +var f4v2 = F4(1); +var l4v2 = L4(1); +// Negative tests - we expect these cases to fail +c1o1.C1M1(1); +i1o1.C1M1(1); +F1(1); +L1(1); +c1o1.C1M2(); +i1o1.C1M2(); +F2(); +L2(); +c1o1.C1M2(1, 2); +i1o1.C1M2(1, 2); +F2(1, 2); +L2(1, 2); +c1o1.C1M3(1, 2, 3); +i1o1.C1M3(1, 2, 3); +F3(1, 2, 3); +L3(1, 2, 3); +c1o1.C1M4(); +i1o1.C1M4(); +F4(); +L4(); +function fnOpt1(id, children, expectedPath, isRoot) { + if (children === void 0) { children = []; } + if (expectedPath === void 0) { expectedPath = []; } +} +function fnOpt2(id, children, expectedPath, isRoot) { +} +fnOpt1(1, [2, 3], [1], true); +fnOpt2(1, [2, 3], [1], true); diff --git a/tests/baselines/reference/optionalSetterParam.js b/tests/baselines/reference/optionalSetterParam.js new file mode 100644 index 00000000000..4b9b7f01360 --- /dev/null +++ b/tests/baselines/reference/optionalSetterParam.js @@ -0,0 +1,19 @@ +//// [optionalSetterParam.ts] +class foo { + + public set bar(param?:any) { } +} + + +//// [optionalSetterParam.js] +var foo = (function () { + function foo() { + } + Object.defineProperty(foo.prototype, "bar", { + set: function (param) { + }, + enumerable: true, + configurable: true + }); + return foo; +})(); diff --git a/tests/baselines/reference/parser509618.js b/tests/baselines/reference/parser509618.js new file mode 100644 index 00000000000..d2e894ac364 --- /dev/null +++ b/tests/baselines/reference/parser509618.js @@ -0,0 +1,7 @@ +//// [parser509618.ts] +declare module ambiModule { + interface i1 { }; +} + + +//// [parser509618.js] diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic1.js b/tests/baselines/reference/parserAccessibilityAfterStatic1.js new file mode 100644 index 00000000000..263efaf5dd2 --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic1.js @@ -0,0 +1,13 @@ +//// [parserAccessibilityAfterStatic1.ts] +class Outer +{ +static public intI: number; +} + + +//// [parserAccessibilityAfterStatic1.js] +var Outer = (function () { + function Outer() { + } + return Outer; +})(); diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic10.js b/tests/baselines/reference/parserAccessibilityAfterStatic10.js new file mode 100644 index 00000000000..feded66fe95 --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic10.js @@ -0,0 +1,15 @@ +//// [parserAccessibilityAfterStatic10.ts] +class Outer +{ +static public intI() {} +} + + +//// [parserAccessibilityAfterStatic10.js] +var Outer = (function () { + function Outer() { + } + Outer.intI = function () { + }; + return Outer; +})(); diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic7.js b/tests/baselines/reference/parserAccessibilityAfterStatic7.js new file mode 100644 index 00000000000..a2bc5c7fba3 --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic7.js @@ -0,0 +1,15 @@ +//// [parserAccessibilityAfterStatic7.ts] +class Outer +{ +static public intI() {} +} + + +//// [parserAccessibilityAfterStatic7.js] +var Outer = (function () { + function Outer() { + } + Outer.intI = function () { + }; + return Outer; +})(); diff --git a/tests/baselines/reference/parserAccessors5.js b/tests/baselines/reference/parserAccessors5.js new file mode 100644 index 00000000000..7e96492a392 --- /dev/null +++ b/tests/baselines/reference/parserAccessors5.js @@ -0,0 +1,6 @@ +//// [parserAccessors5.ts] +declare class C { + get foo() { return 0; } +} + +//// [parserAccessors5.js] diff --git a/tests/baselines/reference/parserAccessors6.js b/tests/baselines/reference/parserAccessors6.js new file mode 100644 index 00000000000..3767441a633 --- /dev/null +++ b/tests/baselines/reference/parserAccessors6.js @@ -0,0 +1,6 @@ +//// [parserAccessors6.ts] +declare class C { + set foo(v) { } +} + +//// [parserAccessors6.js] diff --git a/tests/baselines/reference/parserAccessors7.js b/tests/baselines/reference/parserAccessors7.js new file mode 100644 index 00000000000..2703480ef53 --- /dev/null +++ b/tests/baselines/reference/parserAccessors7.js @@ -0,0 +1,6 @@ +//// [parserAccessors7.ts] +var v = { get foo(v: number) { } }; + +//// [parserAccessors7.js] +var v = { get foo(v) { +} }; diff --git a/tests/baselines/reference/parserAccessors8.js b/tests/baselines/reference/parserAccessors8.js new file mode 100644 index 00000000000..609fde320dc --- /dev/null +++ b/tests/baselines/reference/parserAccessors8.js @@ -0,0 +1,6 @@ +//// [parserAccessors8.ts] +var v = { set foo() { } } + +//// [parserAccessors8.js] +var v = { set foo() { +} }; diff --git a/tests/baselines/reference/parserAccessors9.js b/tests/baselines/reference/parserAccessors9.js new file mode 100644 index 00000000000..07c9d5cbc1e --- /dev/null +++ b/tests/baselines/reference/parserAccessors9.js @@ -0,0 +1,6 @@ +//// [parserAccessors9.ts] +var v = { set foo(a, b) { } } + +//// [parserAccessors9.js] +var v = { set foo(a, b) { +} }; diff --git a/tests/baselines/reference/parserAstSpans1.js b/tests/baselines/reference/parserAstSpans1.js new file mode 100644 index 00000000000..64c8f5c0612 --- /dev/null +++ b/tests/baselines/reference/parserAstSpans1.js @@ -0,0 +1,412 @@ +//// [parserAstSpans1.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; + i1_nc_l1: () => void; + p1: number; + f1(): void; + l1: () => void; + nc_p1: number; + nc_f1(): void; + nc_l1: () => void; +} +class c1 implements i1 { + public i1_p1: number; + public i1_f1() { + } + public i1_l1: () => void; + public i1_nc_p1: number; + public i1_nc_f1() { + } + public i1_nc_l1: () => void; + /** c1_p1*/ + public p1: number; + /** c1_f1*/ + public f1() { + } + /** c1_l1*/ + public l1: () => void; + /** c1_nc_p1*/ + public nc_p1: number; + /** c1_nc_f1*/ + public nc_f1() { + } + /** c1_nc_l1*/ + public nc_l1: () => void; +} +var i1_i: i1; +i1_i.i1_f1(); +i1_i.i1_nc_f1(); +i1_i.f1(); +i1_i.nc_f1(); +i1_i.i1_l1(); +i1_i.i1_nc_l1(); +i1_i.l1(); +i1_i.nc_l1(); +var c1_i = new c1(); +c1_i.i1_f1(); +c1_i.i1_nc_f1(); +c1_i.f1(); +c1_i.nc_f1(); +c1_i.i1_l1(); +c1_i.i1_nc_l1(); +c1_i.l1(); +c1_i.nc_l1(); +// assign to interface +i1_i = c1_i; +i1_i.i1_f1(); +i1_i.i1_nc_f1(); +i1_i.f1(); +i1_i.nc_f1(); +i1_i.i1_l1(); +i1_i.i1_nc_l1(); +i1_i.l1(); +i1_i.nc_l1(); + +class c2 { + /** c2 c2_p1*/ + public c2_p1: number; + /** c2 c2_f1*/ + public c2_f1() { + } + /** c2 c2_prop*/ + public get c2_prop() { + return 10; + } + public c2_nc_p1: number; + public c2_nc_f1() { + } + public get c2_nc_prop() { + return 10; + } + /** c2 p1*/ + public p1: number; + /** c2 f1*/ + public f1() { + } + /** c2 prop*/ + public get prop() { + return 10; + } + public nc_p1: number; + public nc_f1() { + } + public get nc_prop() { + return 10; + } + /** c2 constructor*/ + constructor(a: number) { + this.c2_p1 = a; + } +} +class c3 extends c2 { + constructor() { + super(10); + this.p1 = super.c2_p1; + } + /** c3 p1*/ + public p1: number; + /** c3 f1*/ + public f1() { + } + /** c3 prop*/ + public get prop() { + return 10; + } + public nc_p1: number; + public nc_f1() { + } + public get nc_prop() { + return 10; + } +} +var c2_i = new c2(10); +var c3_i = new c3(); +c2_i.c2_f1(); +c2_i.c2_nc_f1(); +c2_i.f1(); +c2_i.nc_f1(); +c3_i.c2_f1(); +c3_i.c2_nc_f1(); +c3_i.f1(); +c3_i.nc_f1(); +// assign +c2_i = c3_i; +c2_i.c2_f1(); +c2_i.c2_nc_f1(); +c2_i.f1(); +c2_i.nc_f1(); +class c4 extends c2 { +} +var c4_i = new c4(10); + +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; + nc_l1: () => void; +} +var i2_i: i2; +var i3_i: i3; +i2_i.i2_f1(); +i2_i.i2_nc_f1(); +i2_i.f1(); +i2_i.nc_f1(); +i2_i.i2_l1(); +i2_i.i2_nc_l1(); +i2_i.l1(); +i2_i.nc_l1(); +i3_i.i2_f1(); +i3_i.i2_nc_f1(); +i3_i.f1(); +i3_i.nc_f1(); +i3_i.i2_l1(); +i3_i.i2_nc_l1(); +i3_i.l1(); +i3_i.nc_l1(); +// assign to interface +i2_i = i3_i; +i2_i.i2_f1(); +i2_i.i2_nc_f1(); +i2_i.f1(); +i2_i.nc_f1(); +i2_i.i2_l1(); +i2_i.i2_nc_l1(); +i2_i.l1(); +i2_i.nc_l1(); + +/**c5 class*/ +class c5 { + public b: number; +} +class c6 extends c5 { + public d; + constructor() { + super(); + this.d = super.b; + } +} + +//// [parserAstSpans1.js] +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 c1 = (function () { + function c1() { + } + 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; +i1_i.i1_f1(); +i1_i.i1_nc_f1(); +i1_i.f1(); +i1_i.nc_f1(); +i1_i.i1_l1(); +i1_i.i1_nc_l1(); +i1_i.l1(); +i1_i.nc_l1(); +var c1_i = new c1(); +c1_i.i1_f1(); +c1_i.i1_nc_f1(); +c1_i.f1(); +c1_i.nc_f1(); +c1_i.i1_l1(); +c1_i.i1_nc_l1(); +c1_i.l1(); +c1_i.nc_l1(); +// assign to interface +i1_i = c1_i; +i1_i.i1_f1(); +i1_i.i1_nc_f1(); +i1_i.f1(); +i1_i.nc_f1(); +i1_i.i1_l1(); +i1_i.i1_nc_l1(); +i1_i.l1(); +i1_i.nc_l1(); +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; + }, + enumerable: true, + configurable: true + }); + c2.prototype.c2_nc_f1 = function () { + }; + Object.defineProperty(c2.prototype, "c2_nc_prop", { + get: function () { + return 10; + }, + enumerable: true, + configurable: true + }); + /** c2 f1*/ + c2.prototype.f1 = function () { + }; + Object.defineProperty(c2.prototype, "prop", { + /** c2 prop*/ + get: function () { + return 10; + }, + enumerable: true, + configurable: true + }); + c2.prototype.nc_f1 = function () { + }; + Object.defineProperty(c2.prototype, "nc_prop", { + get: function () { + return 10; + }, + enumerable: true, + configurable: true + }); + return c2; +})(); +var c3 = (function (_super) { + __extends(c3, _super); + function c3() { + _super.call(this, 10); + this.p1 = _super.prototype.c2_p1; + } + /** c3 f1*/ + c3.prototype.f1 = function () { + }; + Object.defineProperty(c3.prototype, "prop", { + /** c3 prop*/ + get: function () { + return 10; + }, + enumerable: true, + configurable: true + }); + c3.prototype.nc_f1 = function () { + }; + Object.defineProperty(c3.prototype, "nc_prop", { + get: function () { + return 10; + }, + enumerable: true, + configurable: true + }); + return c3; +})(c2); +var c2_i = new c2(10); +var c3_i = new c3(); +c2_i.c2_f1(); +c2_i.c2_nc_f1(); +c2_i.f1(); +c2_i.nc_f1(); +c3_i.c2_f1(); +c3_i.c2_nc_f1(); +c3_i.f1(); +c3_i.nc_f1(); +// assign +c2_i = c3_i; +c2_i.c2_f1(); +c2_i.c2_nc_f1(); +c2_i.f1(); +c2_i.nc_f1(); +var c4 = (function (_super) { + __extends(c4, _super); + function c4() { + _super.apply(this, arguments); + } + return c4; +})(c2); +var c4_i = new c4(10); +var i2_i; +var i3_i; +i2_i.i2_f1(); +i2_i.i2_nc_f1(); +i2_i.f1(); +i2_i.nc_f1(); +i2_i.i2_l1(); +i2_i.i2_nc_l1(); +i2_i.l1(); +i2_i.nc_l1(); +i3_i.i2_f1(); +i3_i.i2_nc_f1(); +i3_i.f1(); +i3_i.nc_f1(); +i3_i.i2_l1(); +i3_i.i2_nc_l1(); +i3_i.l1(); +i3_i.nc_l1(); +// assign to interface +i2_i = i3_i; +i2_i.i2_f1(); +i2_i.i2_nc_f1(); +i2_i.f1(); +i2_i.nc_f1(); +i2_i.i2_l1(); +i2_i.i2_nc_l1(); +i2_i.l1(); +i2_i.nc_l1(); +/**c5 class*/ +var c5 = (function () { + function c5() { + } + return c5; +})(); +var c6 = (function (_super) { + __extends(c6, _super); + function c6() { + _super.call(this); + this.d = _super.prototype.b; + } + return c6; +})(c5); diff --git a/tests/baselines/reference/parserCatchClauseWithTypeAnnotation1.js b/tests/baselines/reference/parserCatchClauseWithTypeAnnotation1.js new file mode 100644 index 00000000000..e2ca0ae8be6 --- /dev/null +++ b/tests/baselines/reference/parserCatchClauseWithTypeAnnotation1.js @@ -0,0 +1,11 @@ +//// [parserCatchClauseWithTypeAnnotation1.ts] +try { +} catch (e: Error) { +} + + +//// [parserCatchClauseWithTypeAnnotation1.js] +try { +} +catch (e) { +} diff --git a/tests/baselines/reference/parserClassDeclaration1.js b/tests/baselines/reference/parserClassDeclaration1.js new file mode 100644 index 00000000000..1e4fc0d5bcf --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration1.js @@ -0,0 +1,18 @@ +//// [parserClassDeclaration1.ts] +class C extends A extends B { +} + +//// [parserClassDeclaration1.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/parserClassDeclaration18.js b/tests/baselines/reference/parserClassDeclaration18.js new file mode 100644 index 00000000000..d95c730608e --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration18.js @@ -0,0 +1,10 @@ +//// [parserClassDeclaration18.ts] +declare class FooBase { + constructor(s: string); + constructor(n: number); + constructor(x: any) { + } + bar1():void; +} + +//// [parserClassDeclaration18.js] diff --git a/tests/baselines/reference/parserClassDeclaration2.js b/tests/baselines/reference/parserClassDeclaration2.js new file mode 100644 index 00000000000..18bb068b23f --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration2.js @@ -0,0 +1,10 @@ +//// [parserClassDeclaration2.ts] +class C implements A implements B { +} + +//// [parserClassDeclaration2.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserClassDeclaration3.js b/tests/baselines/reference/parserClassDeclaration3.js new file mode 100644 index 00000000000..99d34bedaed --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration3.js @@ -0,0 +1,18 @@ +//// [parserClassDeclaration3.ts] +class C implements A extends B { +} + +//// [parserClassDeclaration3.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(B); diff --git a/tests/baselines/reference/parserClassDeclaration4.js b/tests/baselines/reference/parserClassDeclaration4.js new file mode 100644 index 00000000000..3552c74f184 --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration4.js @@ -0,0 +1,18 @@ +//// [parserClassDeclaration4.ts] +class C extends A implements B extends C { +} + +//// [parserClassDeclaration4.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/parserClassDeclaration5.js b/tests/baselines/reference/parserClassDeclaration5.js new file mode 100644 index 00000000000..6a7846fd036 --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration5.js @@ -0,0 +1,18 @@ +//// [parserClassDeclaration5.ts] +class C extends A implements B implements C { +} + +//// [parserClassDeclaration5.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/parserClassDeclaration6.js b/tests/baselines/reference/parserClassDeclaration6.js new file mode 100644 index 00000000000..24e55a48344 --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration6.js @@ -0,0 +1,18 @@ +//// [parserClassDeclaration6.ts] +class C extends A, B { +} + +//// [parserClassDeclaration6.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/parserClassDeclaration7.js b/tests/baselines/reference/parserClassDeclaration7.js new file mode 100644 index 00000000000..5418dd38a5f --- /dev/null +++ b/tests/baselines/reference/parserClassDeclaration7.js @@ -0,0 +1,7 @@ +//// [parserClassDeclaration7.ts] +declare module M { + declare class C { + } +} + +//// [parserClassDeclaration7.js] diff --git a/tests/baselines/reference/parserComputedPropertyName10.js b/tests/baselines/reference/parserComputedPropertyName10.js new file mode 100644 index 00000000000..c00d3292f7e --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName10.js @@ -0,0 +1,12 @@ +//// [parserComputedPropertyName10.ts] +class C { + [e] = 1 +} + +//// [parserComputedPropertyName10.js] +var C = (function () { + function C() { + this[e] = 1; + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName11.js b/tests/baselines/reference/parserComputedPropertyName11.js new file mode 100644 index 00000000000..1b9575184f2 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName11.js @@ -0,0 +1,11 @@ +//// [parserComputedPropertyName11.ts] +class C { + [e](); +} + +//// [parserComputedPropertyName11.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName13.js b/tests/baselines/reference/parserComputedPropertyName13.js new file mode 100644 index 00000000000..ccf59b67827 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName13.js @@ -0,0 +1,5 @@ +//// [parserComputedPropertyName13.ts] +var v: { [e]: number }; + +//// [parserComputedPropertyName13.js] +var v; diff --git a/tests/baselines/reference/parserComputedPropertyName14.js b/tests/baselines/reference/parserComputedPropertyName14.js new file mode 100644 index 00000000000..486d9b1a53f --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName14.js @@ -0,0 +1,5 @@ +//// [parserComputedPropertyName14.ts] +var v: { [e](): number }; + +//// [parserComputedPropertyName14.js] +var v; diff --git a/tests/baselines/reference/parserComputedPropertyName15.js b/tests/baselines/reference/parserComputedPropertyName15.js new file mode 100644 index 00000000000..ecdb183679e --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName15.js @@ -0,0 +1,5 @@ +//// [parserComputedPropertyName15.ts] +var v: { [e: number]: string; [e]: number }; + +//// [parserComputedPropertyName15.js] +var v; diff --git a/tests/baselines/reference/parserComputedPropertyName16.js b/tests/baselines/reference/parserComputedPropertyName16.js new file mode 100644 index 00000000000..7f0c07e38c2 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName16.js @@ -0,0 +1,10 @@ +//// [parserComputedPropertyName16.ts] +enum E { + [e] = 1 +} + +//// [parserComputedPropertyName16.js] +var E; +(function (E) { + E[E[e] = 1] = e; +})(E || (E = {})); diff --git a/tests/baselines/reference/parserComputedPropertyName18.js b/tests/baselines/reference/parserComputedPropertyName18.js new file mode 100644 index 00000000000..76a88456007 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName18.js @@ -0,0 +1,5 @@ +//// [parserComputedPropertyName18.ts] +var v: { [e]?(): number }; + +//// [parserComputedPropertyName18.js] +var v; diff --git a/tests/baselines/reference/parserComputedPropertyName19.js b/tests/baselines/reference/parserComputedPropertyName19.js new file mode 100644 index 00000000000..caa66d48c52 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName19.js @@ -0,0 +1,5 @@ +//// [parserComputedPropertyName19.ts] +var v: { [e]? }; + +//// [parserComputedPropertyName19.js] +var v; diff --git a/tests/baselines/reference/parserComputedPropertyName20.js b/tests/baselines/reference/parserComputedPropertyName20.js new file mode 100644 index 00000000000..25a912dbcaa --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName20.js @@ -0,0 +1,6 @@ +//// [parserComputedPropertyName20.ts] +interface I { + [e](): number +} + +//// [parserComputedPropertyName20.js] diff --git a/tests/baselines/reference/parserComputedPropertyName21.js b/tests/baselines/reference/parserComputedPropertyName21.js new file mode 100644 index 00000000000..c3ae1d63d66 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName21.js @@ -0,0 +1,6 @@ +//// [parserComputedPropertyName21.ts] +interface I { + [e]: number +} + +//// [parserComputedPropertyName21.js] diff --git a/tests/baselines/reference/parserComputedPropertyName22.js b/tests/baselines/reference/parserComputedPropertyName22.js new file mode 100644 index 00000000000..6e29af5239f --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName22.js @@ -0,0 +1,6 @@ +//// [parserComputedPropertyName22.ts] +declare class C { + [e]: number +} + +//// [parserComputedPropertyName22.js] diff --git a/tests/baselines/reference/parserComputedPropertyName23.js b/tests/baselines/reference/parserComputedPropertyName23.js new file mode 100644 index 00000000000..a29f610290a --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName23.js @@ -0,0 +1,6 @@ +//// [parserComputedPropertyName23.ts] +declare class C { + get [e](): number +} + +//// [parserComputedPropertyName23.js] diff --git a/tests/baselines/reference/parserComputedPropertyName25.js b/tests/baselines/reference/parserComputedPropertyName25.js new file mode 100644 index 00000000000..a00cec2e6dd --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName25.js @@ -0,0 +1,15 @@ +//// [parserComputedPropertyName25.ts] +class C { + // No ASI + [e] = 0 + [e2] = 1 +} + +//// [parserComputedPropertyName25.js] +var C = (function () { + function C() { + // No ASI + this[e] = 0[e2] = 1; + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName26.js b/tests/baselines/reference/parserComputedPropertyName26.js new file mode 100644 index 00000000000..fe47249a22e --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName26.js @@ -0,0 +1,13 @@ +//// [parserComputedPropertyName26.ts] +enum E { + // No ASI + [e] = 0 + [e2] = 1 +} + +//// [parserComputedPropertyName26.js] +var E; +(function (E) { + // No ASI + E[E[e] = 0[e2] = 1] = e; +})(E || (E = {})); diff --git a/tests/baselines/reference/parserComputedPropertyName28.js b/tests/baselines/reference/parserComputedPropertyName28.js new file mode 100644 index 00000000000..60fb25dfa20 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName28.js @@ -0,0 +1,13 @@ +//// [parserComputedPropertyName28.ts] +class C { + [e]: number = 0; + [e2]: number +} + +//// [parserComputedPropertyName28.js] +var C = (function () { + function C() { + this[e] = 0; + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName29.js b/tests/baselines/reference/parserComputedPropertyName29.js new file mode 100644 index 00000000000..05ced020aff --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName29.js @@ -0,0 +1,15 @@ +//// [parserComputedPropertyName29.ts] +class C { + // yes ASI + [e] = id++ + [e2]: number +} + +//// [parserComputedPropertyName29.js] +var C = (function () { + function C() { + // yes ASI + this[e] = id++; + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName31.js b/tests/baselines/reference/parserComputedPropertyName31.js new file mode 100644 index 00000000000..2a07155a2f0 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName31.js @@ -0,0 +1,13 @@ +//// [parserComputedPropertyName31.ts] +class C { + // yes ASI + [e]: number + [e2]: number +} + +//// [parserComputedPropertyName31.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName32.js b/tests/baselines/reference/parserComputedPropertyName32.js new file mode 100644 index 00000000000..685b215c8f4 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName32.js @@ -0,0 +1,6 @@ +//// [parserComputedPropertyName32.ts] +declare class C { + [e](): number +} + +//// [parserComputedPropertyName32.js] diff --git a/tests/baselines/reference/parserComputedPropertyName34.js b/tests/baselines/reference/parserComputedPropertyName34.js new file mode 100644 index 00000000000..f5a6daa56e5 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName34.js @@ -0,0 +1,14 @@ +//// [parserComputedPropertyName34.ts] +enum E { + // no ASI, comma expected + [e] = id++, + [e2] = 1 +} + +//// [parserComputedPropertyName34.js] +var E; +(function (E) { + // no ASI, comma expected + E[E[e] = id++] = e; + E[E[e2] = 1] = e2; +})(E || (E = {})); diff --git a/tests/baselines/reference/parserComputedPropertyName36.js b/tests/baselines/reference/parserComputedPropertyName36.js new file mode 100644 index 00000000000..264a3512075 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName36.js @@ -0,0 +1,11 @@ +//// [parserComputedPropertyName36.ts] +class C { + [public ]: string; +} + +//// [parserComputedPropertyName36.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName7.js b/tests/baselines/reference/parserComputedPropertyName7.js new file mode 100644 index 00000000000..70ed8b7b073 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName7.js @@ -0,0 +1,11 @@ +//// [parserComputedPropertyName7.ts] +class C { + [e] +} + +//// [parserComputedPropertyName7.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName8.js b/tests/baselines/reference/parserComputedPropertyName8.js new file mode 100644 index 00000000000..4b79c459663 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName8.js @@ -0,0 +1,11 @@ +//// [parserComputedPropertyName8.ts] +class C { + public [e] +} + +//// [parserComputedPropertyName8.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName9.js b/tests/baselines/reference/parserComputedPropertyName9.js new file mode 100644 index 00000000000..4b62cc0ecd9 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName9.js @@ -0,0 +1,11 @@ +//// [parserComputedPropertyName9.ts] +class C { + [e]: Type +} + +//// [parserComputedPropertyName9.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration10.js b/tests/baselines/reference/parserConstructorDeclaration10.js new file mode 100644 index 00000000000..9289636e919 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration10.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration10.ts] +class C { + constructor(): number { } +} + +//// [parserConstructorDeclaration10.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration11.js b/tests/baselines/reference/parserConstructorDeclaration11.js new file mode 100644 index 00000000000..a21fa87f694 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration11.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration11.ts] +class C { + constructor<>() { } +} + +//// [parserConstructorDeclaration11.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration12.js b/tests/baselines/reference/parserConstructorDeclaration12.js new file mode 100644 index 00000000000..dc540c3323e --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration12.js @@ -0,0 +1,18 @@ +//// [parserConstructorDeclaration12.ts] +class C { + constructor<>() { } + constructor<> () { } + constructor <>() { } + constructor <> () { } + constructor< >() { } + constructor< > () { } + constructor < >() { } + constructor < > () { } +} + +//// [parserConstructorDeclaration12.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration2.js b/tests/baselines/reference/parserConstructorDeclaration2.js new file mode 100644 index 00000000000..142bf5a5314 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration2.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration2.ts] +class C { + static constructor() { } +} + +//// [parserConstructorDeclaration2.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration3.js b/tests/baselines/reference/parserConstructorDeclaration3.js new file mode 100644 index 00000000000..6e7531f1e66 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration3.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration3.ts] +class C { + export constructor() { } +} + +//// [parserConstructorDeclaration3.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration4.js b/tests/baselines/reference/parserConstructorDeclaration4.js new file mode 100644 index 00000000000..2b1ae1cdb68 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration4.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration4.ts] +class C { + declare constructor() { } +} + +//// [parserConstructorDeclaration4.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration5.js b/tests/baselines/reference/parserConstructorDeclaration5.js new file mode 100644 index 00000000000..c0d8c03458e --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration5.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration5.ts] +class C { + private constructor() { } +} + +//// [parserConstructorDeclaration5.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration6.js b/tests/baselines/reference/parserConstructorDeclaration6.js new file mode 100644 index 00000000000..abee73fe0b8 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration6.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration6.ts] +class C { + public public constructor() { } +} + +//// [parserConstructorDeclaration6.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration7.js b/tests/baselines/reference/parserConstructorDeclaration7.js new file mode 100644 index 00000000000..8c3b4db9d22 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration7.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration7.ts] +class C { + public private constructor() { } +} + +//// [parserConstructorDeclaration7.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserConstructorDeclaration9.js b/tests/baselines/reference/parserConstructorDeclaration9.js new file mode 100644 index 00000000000..8393d35f5e7 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration9.js @@ -0,0 +1,11 @@ +//// [parserConstructorDeclaration9.ts] +class C { + constructor() { } +} + +//// [parserConstructorDeclaration9.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserES3Accessors1.js b/tests/baselines/reference/parserES3Accessors1.js new file mode 100644 index 00000000000..4900c1f32d9 --- /dev/null +++ b/tests/baselines/reference/parserES3Accessors1.js @@ -0,0 +1,17 @@ +//// [parserES3Accessors1.ts] +class C { + get Foo() { } +} + +//// [parserES3Accessors1.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserES3Accessors2.js b/tests/baselines/reference/parserES3Accessors2.js new file mode 100644 index 00000000000..08259f2655e --- /dev/null +++ b/tests/baselines/reference/parserES3Accessors2.js @@ -0,0 +1,17 @@ +//// [parserES3Accessors2.ts] +class C { + set Foo(a) { } +} + +//// [parserES3Accessors2.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserES3Accessors3.js b/tests/baselines/reference/parserES3Accessors3.js new file mode 100644 index 00000000000..57ceb566dcb --- /dev/null +++ b/tests/baselines/reference/parserES3Accessors3.js @@ -0,0 +1,6 @@ +//// [parserES3Accessors3.ts] +var v = { get Foo() { } }; + +//// [parserES3Accessors3.js] +var v = { get Foo() { +} }; diff --git a/tests/baselines/reference/parserES3Accessors4.js b/tests/baselines/reference/parserES3Accessors4.js new file mode 100644 index 00000000000..5c87923ed5e --- /dev/null +++ b/tests/baselines/reference/parserES3Accessors4.js @@ -0,0 +1,6 @@ +//// [parserES3Accessors4.ts] +var v = { set Foo(a) { } }; + +//// [parserES3Accessors4.js] +var v = { set Foo(a) { +} }; diff --git a/tests/baselines/reference/parserES5ComputedPropertyName1.js b/tests/baselines/reference/parserES5ComputedPropertyName1.js new file mode 100644 index 00000000000..6eb66b78cec --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName1.js @@ -0,0 +1,6 @@ +//// [parserES5ComputedPropertyName1.ts] +declare class C { + [e]: number +} + +//// [parserES5ComputedPropertyName1.js] diff --git a/tests/baselines/reference/parserES5ComputedPropertyName10.js b/tests/baselines/reference/parserES5ComputedPropertyName10.js new file mode 100644 index 00000000000..a69165a192a --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName10.js @@ -0,0 +1,12 @@ +//// [parserES5ComputedPropertyName10.ts] +class C { + [e] = 1 +} + +//// [parserES5ComputedPropertyName10.js] +var C = (function () { + function C() { + this[e] = 1; + } + return C; +})(); diff --git a/tests/baselines/reference/parserES5ComputedPropertyName11.js b/tests/baselines/reference/parserES5ComputedPropertyName11.js new file mode 100644 index 00000000000..dfa74b03a5f --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName11.js @@ -0,0 +1,11 @@ +//// [parserES5ComputedPropertyName11.ts] +class C { + [e](); +} + +//// [parserES5ComputedPropertyName11.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserES5ComputedPropertyName2.js b/tests/baselines/reference/parserES5ComputedPropertyName2.js new file mode 100644 index 00000000000..861716a3cde --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName2.js @@ -0,0 +1,5 @@ +//// [parserES5ComputedPropertyName2.ts] +var v = { [e]: 1 }; + +//// [parserES5ComputedPropertyName2.js] +var v = { [e]: 1 }; diff --git a/tests/baselines/reference/parserES5ComputedPropertyName3.js b/tests/baselines/reference/parserES5ComputedPropertyName3.js new file mode 100644 index 00000000000..4e07049b29d --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName3.js @@ -0,0 +1,6 @@ +//// [parserES5ComputedPropertyName3.ts] +var v = { [e]() { } }; + +//// [parserES5ComputedPropertyName3.js] +var v = { [e]: function () { +} }; diff --git a/tests/baselines/reference/parserES5ComputedPropertyName4.js b/tests/baselines/reference/parserES5ComputedPropertyName4.js new file mode 100644 index 00000000000..50e240dcf20 --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName4.js @@ -0,0 +1,6 @@ +//// [parserES5ComputedPropertyName4.ts] +var v = { get [e]() { } }; + +//// [parserES5ComputedPropertyName4.js] +var v = { get [e]() { +} }; diff --git a/tests/baselines/reference/parserES5ComputedPropertyName5.js b/tests/baselines/reference/parserES5ComputedPropertyName5.js new file mode 100644 index 00000000000..c0eeae9b4aa --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName5.js @@ -0,0 +1,6 @@ +//// [parserES5ComputedPropertyName5.ts] +interface I { + [e]: number +} + +//// [parserES5ComputedPropertyName5.js] diff --git a/tests/baselines/reference/parserES5ComputedPropertyName6.js b/tests/baselines/reference/parserES5ComputedPropertyName6.js new file mode 100644 index 00000000000..a2fdae9c32e --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName6.js @@ -0,0 +1,10 @@ +//// [parserES5ComputedPropertyName6.ts] +enum E { + [e] = 1 +} + +//// [parserES5ComputedPropertyName6.js] +var E; +(function (E) { + E[E[e] = 1] = e; +})(E || (E = {})); diff --git a/tests/baselines/reference/parserES5ComputedPropertyName7.js b/tests/baselines/reference/parserES5ComputedPropertyName7.js new file mode 100644 index 00000000000..8634682c660 --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName7.js @@ -0,0 +1,11 @@ +//// [parserES5ComputedPropertyName7.ts] +class C { + [e] +} + +//// [parserES5ComputedPropertyName7.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserES5ComputedPropertyName8.js b/tests/baselines/reference/parserES5ComputedPropertyName8.js new file mode 100644 index 00000000000..3cbf49002f9 --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName8.js @@ -0,0 +1,5 @@ +//// [parserES5ComputedPropertyName8.ts] +var v: { [e]: number }; + +//// [parserES5ComputedPropertyName8.js] +var v; diff --git a/tests/baselines/reference/parserES5ComputedPropertyName9.js b/tests/baselines/reference/parserES5ComputedPropertyName9.js new file mode 100644 index 00000000000..fdefc8649d0 --- /dev/null +++ b/tests/baselines/reference/parserES5ComputedPropertyName9.js @@ -0,0 +1,11 @@ +//// [parserES5ComputedPropertyName9.ts] +class C { + [e]: Type +} + +//// [parserES5ComputedPropertyName9.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserEnumDeclaration2.js b/tests/baselines/reference/parserEnumDeclaration2.js new file mode 100644 index 00000000000..a97b8cf9044 --- /dev/null +++ b/tests/baselines/reference/parserEnumDeclaration2.js @@ -0,0 +1,7 @@ +//// [parserEnumDeclaration2.ts] +declare module M { + declare enum E { + } +} + +//// [parserEnumDeclaration2.js] diff --git a/tests/baselines/reference/parserEnumDeclaration6.js b/tests/baselines/reference/parserEnumDeclaration6.js new file mode 100644 index 00000000000..5810ffc0620 --- /dev/null +++ b/tests/baselines/reference/parserEnumDeclaration6.js @@ -0,0 +1,16 @@ +//// [parserEnumDeclaration6.ts] +enum E { + A = 1, + B, + C = 1 << 1, + D, +} + +//// [parserEnumDeclaration6.js] +var E; +(function (E) { + E[E["A"] = 1] = "A"; + E[E["B"] = 2] = "B"; + E[E["C"] = 1 << 1] = "C"; + E[E["D"] = undefined] = "D"; +})(E || (E = {})); diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList5.js b/tests/baselines/reference/parserErrorRecovery_ArgumentList5.js new file mode 100644 index 00000000000..bbb65a44e07 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList5.js @@ -0,0 +1,11 @@ +//// [parserErrorRecovery_ArgumentList5.ts] +function foo() { + bar(a,) + return; +} + +//// [parserErrorRecovery_ArgumentList5.js] +function foo() { + bar(a); + return; +} diff --git a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause1.js b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause1.js new file mode 100644 index 00000000000..b6557221c65 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause1.js @@ -0,0 +1,10 @@ +//// [parserErrorRecovery_ExtendsOrImplementsClause1.ts] +class C extends { +} + +//// [parserErrorRecovery_ExtendsOrImplementsClause1.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause2.js b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause2.js new file mode 100644 index 00000000000..babceb0f752 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause2.js @@ -0,0 +1,18 @@ +//// [parserErrorRecovery_ExtendsOrImplementsClause2.ts] +class C extends A, { +} + +//// [parserErrorRecovery_ExtendsOrImplementsClause2.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause3.js b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause3.js new file mode 100644 index 00000000000..b420e12cccb --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause3.js @@ -0,0 +1,10 @@ +//// [parserErrorRecovery_ExtendsOrImplementsClause3.ts] +class C extends implements A { +} + +//// [parserErrorRecovery_ExtendsOrImplementsClause3.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause4.js b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause4.js new file mode 100644 index 00000000000..5c0e793173a --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause4.js @@ -0,0 +1,18 @@ +//// [parserErrorRecovery_ExtendsOrImplementsClause4.ts] +class C extends A implements { +} + +//// [parserErrorRecovery_ExtendsOrImplementsClause4.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause5.js b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause5.js new file mode 100644 index 00000000000..40dbcf61820 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause5.js @@ -0,0 +1,18 @@ +//// [parserErrorRecovery_ExtendsOrImplementsClause5.ts] +class C extends A, implements B, { +} + +//// [parserErrorRecovery_ExtendsOrImplementsClause5.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause6.js b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause6.js new file mode 100644 index 00000000000..02c357e5f46 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause6.js @@ -0,0 +1,4 @@ +//// [parserErrorRecovery_ExtendsOrImplementsClause6.ts] +interface I extends { } + +//// [parserErrorRecovery_ExtendsOrImplementsClause6.js] diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList3.js b/tests/baselines/reference/parserErrorRecovery_ParameterList3.js new file mode 100644 index 00000000000..4c20e676f40 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList3.js @@ -0,0 +1,7 @@ +//// [parserErrorRecovery_ParameterList3.ts] +function f(a,) { +} + +//// [parserErrorRecovery_ParameterList3.js] +function f(a) { +} diff --git a/tests/baselines/reference/parserErrorRecovery_VariableList1.js b/tests/baselines/reference/parserErrorRecovery_VariableList1.js new file mode 100644 index 00000000000..acd4451fded --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_VariableList1.js @@ -0,0 +1,7 @@ +//// [parserErrorRecovery_VariableList1.ts] +var a, +return; + +//// [parserErrorRecovery_VariableList1.js] +var a; +return; diff --git a/tests/baselines/reference/parserExportAssignment5.js b/tests/baselines/reference/parserExportAssignment5.js new file mode 100644 index 00000000000..ac2a1202e5e --- /dev/null +++ b/tests/baselines/reference/parserExportAssignment5.js @@ -0,0 +1,9 @@ +//// [parserExportAssignment5.ts] +module M { + export = A; +} + +//// [parserExportAssignment5.js] +var M; +(function (M) { +})(M || (M = {})); diff --git a/tests/baselines/reference/parserForInStatement2.js b/tests/baselines/reference/parserForInStatement2.js new file mode 100644 index 00000000000..9f522eadc5d --- /dev/null +++ b/tests/baselines/reference/parserForInStatement2.js @@ -0,0 +1,7 @@ +//// [parserForInStatement2.ts] +for (var in X) { +} + +//// [parserForInStatement2.js] +for ( in X) { +} diff --git a/tests/baselines/reference/parserForInStatement3.js b/tests/baselines/reference/parserForInStatement3.js new file mode 100644 index 00000000000..4964c108ca0 --- /dev/null +++ b/tests/baselines/reference/parserForInStatement3.js @@ -0,0 +1,7 @@ +//// [parserForInStatement3.ts] +for (var a, b in X) { +} + +//// [parserForInStatement3.js] +for (var a in X) { +} diff --git a/tests/baselines/reference/parserForInStatement6.js b/tests/baselines/reference/parserForInStatement6.js new file mode 100644 index 00000000000..b80d13f3184 --- /dev/null +++ b/tests/baselines/reference/parserForInStatement6.js @@ -0,0 +1,7 @@ +//// [parserForInStatement6.ts] +for (var a = 1, b = 2 in X) { +} + +//// [parserForInStatement6.js] +for (var a = 1 in X) { +} diff --git a/tests/baselines/reference/parserForInStatement7.js b/tests/baselines/reference/parserForInStatement7.js new file mode 100644 index 00000000000..5c056abedb6 --- /dev/null +++ b/tests/baselines/reference/parserForInStatement7.js @@ -0,0 +1,7 @@ +//// [parserForInStatement7.ts] +for (var a: number = 1, b: string = "" in X) { +} + +//// [parserForInStatement7.js] +for (var a = 1 in X) { +} diff --git a/tests/baselines/reference/parserFunctionDeclaration1.js b/tests/baselines/reference/parserFunctionDeclaration1.js new file mode 100644 index 00000000000..39bbfe67ca8 --- /dev/null +++ b/tests/baselines/reference/parserFunctionDeclaration1.js @@ -0,0 +1,6 @@ +//// [parserFunctionDeclaration1.ts] +declare module M { + declare function F(); +} + +//// [parserFunctionDeclaration1.js] diff --git a/tests/baselines/reference/parserFunctionDeclaration2.js b/tests/baselines/reference/parserFunctionDeclaration2.js new file mode 100644 index 00000000000..032489bc61c --- /dev/null +++ b/tests/baselines/reference/parserFunctionDeclaration2.js @@ -0,0 +1,5 @@ +//// [parserFunctionDeclaration2.ts] +declare function Foo() { +} + +//// [parserFunctionDeclaration2.js] diff --git a/tests/baselines/reference/parserGetAccessorWithTypeParameters1.js b/tests/baselines/reference/parserGetAccessorWithTypeParameters1.js new file mode 100644 index 00000000000..16daadea82b --- /dev/null +++ b/tests/baselines/reference/parserGetAccessorWithTypeParameters1.js @@ -0,0 +1,17 @@ +//// [parserGetAccessorWithTypeParameters1.ts] +class C { + get foo() { } +} + +//// [parserGetAccessorWithTypeParameters1.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "foo", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserIndexMemberDeclaration10.js b/tests/baselines/reference/parserIndexMemberDeclaration10.js new file mode 100644 index 00000000000..cba928413a3 --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration10.js @@ -0,0 +1,11 @@ +//// [parserIndexMemberDeclaration10.ts] +class C { + static static [x: string]: string; +} + +//// [parserIndexMemberDeclaration10.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserIndexMemberDeclaration6.js b/tests/baselines/reference/parserIndexMemberDeclaration6.js new file mode 100644 index 00000000000..9dae6a786b4 --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration6.js @@ -0,0 +1,11 @@ +//// [parserIndexMemberDeclaration6.ts] +class C { + static [x: string]: string; +} + +//// [parserIndexMemberDeclaration6.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserIndexMemberDeclaration7.js b/tests/baselines/reference/parserIndexMemberDeclaration7.js new file mode 100644 index 00000000000..550063e6659 --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration7.js @@ -0,0 +1,11 @@ +//// [parserIndexMemberDeclaration7.ts] +class C { + public [x: string]: string; +} + +//// [parserIndexMemberDeclaration7.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserIndexMemberDeclaration8.js b/tests/baselines/reference/parserIndexMemberDeclaration8.js new file mode 100644 index 00000000000..c1f40ad0f15 --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration8.js @@ -0,0 +1,11 @@ +//// [parserIndexMemberDeclaration8.ts] +class C { + private [x: string]: string; +} + +//// [parserIndexMemberDeclaration8.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserIndexMemberDeclaration9.js b/tests/baselines/reference/parserIndexMemberDeclaration9.js new file mode 100644 index 00000000000..bd547be3bd3 --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration9.js @@ -0,0 +1,11 @@ +//// [parserIndexMemberDeclaration9.ts] +class C { + export [x: string]: string; +} + +//// [parserIndexMemberDeclaration9.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserIndexSignature1.js b/tests/baselines/reference/parserIndexSignature1.js new file mode 100644 index 00000000000..65c67444b34 --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature1.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature1.ts] +interface I { + [...a] +} + +//// [parserIndexSignature1.js] diff --git a/tests/baselines/reference/parserIndexSignature10.js b/tests/baselines/reference/parserIndexSignature10.js new file mode 100644 index 00000000000..a8fbccc402b --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature10.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature10.ts] +interface I { + [a, b]: number +} + +//// [parserIndexSignature10.js] diff --git a/tests/baselines/reference/parserIndexSignature11.js b/tests/baselines/reference/parserIndexSignature11.js new file mode 100644 index 00000000000..a78a2179d64 --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature11.js @@ -0,0 +1,8 @@ +//// [parserIndexSignature11.ts] +interface I { + [p]; // Used to be indexer, now it is a computed property + [p1: string]; + [p2: string, p3: number]; +} + +//// [parserIndexSignature11.js] diff --git a/tests/baselines/reference/parserIndexSignature2.js b/tests/baselines/reference/parserIndexSignature2.js new file mode 100644 index 00000000000..606a9c3435c --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature2.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature2.ts] +interface I { + [public a] +} + +//// [parserIndexSignature2.js] diff --git a/tests/baselines/reference/parserIndexSignature3.js b/tests/baselines/reference/parserIndexSignature3.js new file mode 100644 index 00000000000..d513d378fba --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature3.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature3.ts] +interface I { + [a?] +} + +//// [parserIndexSignature3.js] diff --git a/tests/baselines/reference/parserIndexSignature4.js b/tests/baselines/reference/parserIndexSignature4.js new file mode 100644 index 00000000000..fdfcab478b6 --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature4.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature4.ts] +interface I { + [a = 0] // Used to be indexer, now it is a computed property +} + +//// [parserIndexSignature4.js] diff --git a/tests/baselines/reference/parserIndexSignature5.js b/tests/baselines/reference/parserIndexSignature5.js new file mode 100644 index 00000000000..bce7f74f419 --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature5.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature5.ts] +interface I { + [a] // Used to be indexer, now it is a computed property +} + +//// [parserIndexSignature5.js] diff --git a/tests/baselines/reference/parserIndexSignature6.js b/tests/baselines/reference/parserIndexSignature6.js new file mode 100644 index 00000000000..8566faf26c4 --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature6.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature6.ts] +interface I { + [a:boolean] +} + +//// [parserIndexSignature6.js] diff --git a/tests/baselines/reference/parserIndexSignature7.js b/tests/baselines/reference/parserIndexSignature7.js new file mode 100644 index 00000000000..10c784e795a --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature7.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature7.ts] +interface I { + [a:string] +} + +//// [parserIndexSignature7.js] diff --git a/tests/baselines/reference/parserIndexSignature8.js b/tests/baselines/reference/parserIndexSignature8.js new file mode 100644 index 00000000000..40ea03fb245 --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature8.js @@ -0,0 +1,8 @@ +//// [parserIndexSignature8.ts] +var foo: { [index: any]; }; // expect an error here +var foo2: { [index: RegExp]; }; // expect an error here + + +//// [parserIndexSignature8.js] +var foo; // expect an error here +var foo2; // expect an error here diff --git a/tests/baselines/reference/parserIndexSignature9.js b/tests/baselines/reference/parserIndexSignature9.js new file mode 100644 index 00000000000..c2da7906e78 --- /dev/null +++ b/tests/baselines/reference/parserIndexSignature9.js @@ -0,0 +1,6 @@ +//// [parserIndexSignature9.ts] +interface I { + []: number +} + +//// [parserIndexSignature9.js] diff --git a/tests/baselines/reference/parserInterfaceDeclaration1.js b/tests/baselines/reference/parserInterfaceDeclaration1.js new file mode 100644 index 00000000000..61fe3eee877 --- /dev/null +++ b/tests/baselines/reference/parserInterfaceDeclaration1.js @@ -0,0 +1,5 @@ +//// [parserInterfaceDeclaration1.ts] +interface I extends A extends B { +} + +//// [parserInterfaceDeclaration1.js] diff --git a/tests/baselines/reference/parserInterfaceDeclaration2.js b/tests/baselines/reference/parserInterfaceDeclaration2.js new file mode 100644 index 00000000000..a0bbe96bae4 --- /dev/null +++ b/tests/baselines/reference/parserInterfaceDeclaration2.js @@ -0,0 +1,5 @@ +//// [parserInterfaceDeclaration2.ts] +interface I implements A { +} + +//// [parserInterfaceDeclaration2.js] diff --git a/tests/baselines/reference/parserInterfaceDeclaration3.js b/tests/baselines/reference/parserInterfaceDeclaration3.js new file mode 100644 index 00000000000..8281de6db79 --- /dev/null +++ b/tests/baselines/reference/parserInterfaceDeclaration3.js @@ -0,0 +1,5 @@ +//// [parserInterfaceDeclaration3.ts] +public interface I { +} + +//// [parserInterfaceDeclaration3.js] diff --git a/tests/baselines/reference/parserInterfaceDeclaration4.js b/tests/baselines/reference/parserInterfaceDeclaration4.js new file mode 100644 index 00000000000..9385388d81d --- /dev/null +++ b/tests/baselines/reference/parserInterfaceDeclaration4.js @@ -0,0 +1,5 @@ +//// [parserInterfaceDeclaration4.ts] +static interface I { +} + +//// [parserInterfaceDeclaration4.js] diff --git a/tests/baselines/reference/parserInterfaceDeclaration5.js b/tests/baselines/reference/parserInterfaceDeclaration5.js new file mode 100644 index 00000000000..81ad1108f24 --- /dev/null +++ b/tests/baselines/reference/parserInterfaceDeclaration5.js @@ -0,0 +1,5 @@ +//// [parserInterfaceDeclaration5.ts] +declare interface I { +} + +//// [parserInterfaceDeclaration5.js] diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration10.js b/tests/baselines/reference/parserMemberAccessorDeclaration10.js new file mode 100644 index 00000000000..dba06544963 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration10.js @@ -0,0 +1,18 @@ +//// [parserMemberAccessorDeclaration10.ts] +class C { + export get Foo() { } +} + +//// [parserMemberAccessorDeclaration10.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + get: function () { + } + exports.Foo = Foo;, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration11.js b/tests/baselines/reference/parserMemberAccessorDeclaration11.js new file mode 100644 index 00000000000..2a286b8ca6b --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration11.js @@ -0,0 +1,17 @@ +//// [parserMemberAccessorDeclaration11.ts] +class C { + declare get Foo() { } +} + +//// [parserMemberAccessorDeclaration11.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration12.js b/tests/baselines/reference/parserMemberAccessorDeclaration12.js new file mode 100644 index 00000000000..aea6eccfbc2 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration12.js @@ -0,0 +1,17 @@ +//// [parserMemberAccessorDeclaration12.ts] +class C { + get Foo(a: number) { } +} + +//// [parserMemberAccessorDeclaration12.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + get: function (a) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration13.js b/tests/baselines/reference/parserMemberAccessorDeclaration13.js new file mode 100644 index 00000000000..f6ca4ee6a02 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration13.js @@ -0,0 +1,17 @@ +//// [parserMemberAccessorDeclaration13.ts] +class C { + set Foo() { } +} + +//// [parserMemberAccessorDeclaration13.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + set: function () { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration14.js b/tests/baselines/reference/parserMemberAccessorDeclaration14.js new file mode 100644 index 00000000000..62877d402d1 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration14.js @@ -0,0 +1,17 @@ +//// [parserMemberAccessorDeclaration14.ts] +class C { + set Foo(a: number, b: number) { } +} + +//// [parserMemberAccessorDeclaration14.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + set: function (a, b) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration16.js b/tests/baselines/reference/parserMemberAccessorDeclaration16.js new file mode 100644 index 00000000000..a6cd0aaa7e9 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration16.js @@ -0,0 +1,18 @@ +//// [parserMemberAccessorDeclaration16.ts] +class C { + set Foo(a = 1) { } +} + +//// [parserMemberAccessorDeclaration16.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + set: function (a) { + if (a === void 0) { a = 1; } + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration17.js b/tests/baselines/reference/parserMemberAccessorDeclaration17.js new file mode 100644 index 00000000000..6c99c7ddae6 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration17.js @@ -0,0 +1,17 @@ +//// [parserMemberAccessorDeclaration17.ts] +class C { + set Foo(a?: number) { } +} + +//// [parserMemberAccessorDeclaration17.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + set: function (a) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration18.js b/tests/baselines/reference/parserMemberAccessorDeclaration18.js new file mode 100644 index 00000000000..9483a1f2daf --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration18.js @@ -0,0 +1,21 @@ +//// [parserMemberAccessorDeclaration18.ts] +class C { + set Foo(...a) { } +} + +//// [parserMemberAccessorDeclaration18.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + set: function () { + var a = []; + for (var _i = 0; _i < arguments.length; _i++) { + a[_i - 0] = arguments[_i]; + } + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration7.js b/tests/baselines/reference/parserMemberAccessorDeclaration7.js new file mode 100644 index 00000000000..0d2d24092e5 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration7.js @@ -0,0 +1,17 @@ +//// [parserMemberAccessorDeclaration7.ts] +class C { + public public get Foo() { } +} + +//// [parserMemberAccessorDeclaration7.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "Foo", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration8.js b/tests/baselines/reference/parserMemberAccessorDeclaration8.js new file mode 100644 index 00000000000..dd93fa4852e --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration8.js @@ -0,0 +1,17 @@ +//// [parserMemberAccessorDeclaration8.ts] +class C { + static static get Foo() { } +} + +//// [parserMemberAccessorDeclaration8.js] +var C = (function () { + function C() { + } + Object.defineProperty(C, "Foo", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberAccessorDeclaration9.js b/tests/baselines/reference/parserMemberAccessorDeclaration9.js new file mode 100644 index 00000000000..5fca86f689b --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessorDeclaration9.js @@ -0,0 +1,17 @@ +//// [parserMemberAccessorDeclaration9.ts] +class C { + static public get Foo() { } +} + +//// [parserMemberAccessorDeclaration9.js] +var C = (function () { + function C() { + } + Object.defineProperty(C, "Foo", { + get: function () { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserMemberFunctionDeclaration1.js b/tests/baselines/reference/parserMemberFunctionDeclaration1.js new file mode 100644 index 00000000000..564245157b0 --- /dev/null +++ b/tests/baselines/reference/parserMemberFunctionDeclaration1.js @@ -0,0 +1,13 @@ +//// [parserMemberFunctionDeclaration1.ts] +class C { + public public Foo() { } +} + +//// [parserMemberFunctionDeclaration1.js] +var C = (function () { + function C() { + } + C.prototype.Foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/parserMemberFunctionDeclaration2.js b/tests/baselines/reference/parserMemberFunctionDeclaration2.js new file mode 100644 index 00000000000..0f103c90b7d --- /dev/null +++ b/tests/baselines/reference/parserMemberFunctionDeclaration2.js @@ -0,0 +1,13 @@ +//// [parserMemberFunctionDeclaration2.ts] +class C { + static static Foo() { } +} + +//// [parserMemberFunctionDeclaration2.js] +var C = (function () { + function C() { + } + C.Foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/parserMemberFunctionDeclaration3.js b/tests/baselines/reference/parserMemberFunctionDeclaration3.js new file mode 100644 index 00000000000..46243f08dad --- /dev/null +++ b/tests/baselines/reference/parserMemberFunctionDeclaration3.js @@ -0,0 +1,13 @@ +//// [parserMemberFunctionDeclaration3.ts] +class C { + static public Foo() { } +} + +//// [parserMemberFunctionDeclaration3.js] +var C = (function () { + function C() { + } + C.Foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/parserMemberFunctionDeclaration4.js b/tests/baselines/reference/parserMemberFunctionDeclaration4.js new file mode 100644 index 00000000000..bcf00aeb1bc --- /dev/null +++ b/tests/baselines/reference/parserMemberFunctionDeclaration4.js @@ -0,0 +1,14 @@ +//// [parserMemberFunctionDeclaration4.ts] +class C { + export Foo() { } +} + +//// [parserMemberFunctionDeclaration4.js] +var C = (function () { + function C() { + } + C.prototype.Foo = function () { + } + exports.Foo = Foo;; + return C; +})(); diff --git a/tests/baselines/reference/parserMemberFunctionDeclaration5.js b/tests/baselines/reference/parserMemberFunctionDeclaration5.js new file mode 100644 index 00000000000..da2d2281999 --- /dev/null +++ b/tests/baselines/reference/parserMemberFunctionDeclaration5.js @@ -0,0 +1,13 @@ +//// [parserMemberFunctionDeclaration5.ts] +class C { + declare Foo() { } +} + +//// [parserMemberFunctionDeclaration5.js] +var C = (function () { + function C() { + } + C.prototype.Foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/parserMemberVariableDeclaration1.js b/tests/baselines/reference/parserMemberVariableDeclaration1.js new file mode 100644 index 00000000000..7c59fa7db4c --- /dev/null +++ b/tests/baselines/reference/parserMemberVariableDeclaration1.js @@ -0,0 +1,11 @@ +//// [parserMemberVariableDeclaration1.ts] +class C { + public public Foo; +} + +//// [parserMemberVariableDeclaration1.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserMemberVariableDeclaration2.js b/tests/baselines/reference/parserMemberVariableDeclaration2.js new file mode 100644 index 00000000000..7f4ae15a7ee --- /dev/null +++ b/tests/baselines/reference/parserMemberVariableDeclaration2.js @@ -0,0 +1,11 @@ +//// [parserMemberVariableDeclaration2.ts] +class C { + static static Foo; +} + +//// [parserMemberVariableDeclaration2.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserMemberVariableDeclaration3.js b/tests/baselines/reference/parserMemberVariableDeclaration3.js new file mode 100644 index 00000000000..e03279abed9 --- /dev/null +++ b/tests/baselines/reference/parserMemberVariableDeclaration3.js @@ -0,0 +1,11 @@ +//// [parserMemberVariableDeclaration3.ts] +class C { + static public Foo; +} + +//// [parserMemberVariableDeclaration3.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserMemberVariableDeclaration4.js b/tests/baselines/reference/parserMemberVariableDeclaration4.js new file mode 100644 index 00000000000..d52dd0f4a08 --- /dev/null +++ b/tests/baselines/reference/parserMemberVariableDeclaration4.js @@ -0,0 +1,11 @@ +//// [parserMemberVariableDeclaration4.ts] +class C { + export Foo; +} + +//// [parserMemberVariableDeclaration4.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserMemberVariableDeclaration5.js b/tests/baselines/reference/parserMemberVariableDeclaration5.js new file mode 100644 index 00000000000..bc8a49ff3f5 --- /dev/null +++ b/tests/baselines/reference/parserMemberVariableDeclaration5.js @@ -0,0 +1,11 @@ +//// [parserMemberVariableDeclaration5.ts] +class C { + declare Foo; +} + +//// [parserMemberVariableDeclaration5.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserModifierOnStatementInBlock2.js b/tests/baselines/reference/parserModifierOnStatementInBlock2.js new file mode 100644 index 00000000000..7e1c5f8ee50 --- /dev/null +++ b/tests/baselines/reference/parserModifierOnStatementInBlock2.js @@ -0,0 +1,9 @@ +//// [parserModifierOnStatementInBlock2.ts] +{ + declare var x = this; +} + + +//// [parserModifierOnStatementInBlock2.js] +{ +} diff --git a/tests/baselines/reference/parserModuleDeclaration1.js b/tests/baselines/reference/parserModuleDeclaration1.js new file mode 100644 index 00000000000..aef0434f76d --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration1.js @@ -0,0 +1,5 @@ +//// [parserModuleDeclaration1.ts] +module "Foo" { +} + +//// [parserModuleDeclaration1.js] diff --git a/tests/baselines/reference/parserModuleDeclaration3.js b/tests/baselines/reference/parserModuleDeclaration3.js new file mode 100644 index 00000000000..c4c46cd1442 --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration3.js @@ -0,0 +1,7 @@ +//// [parserModuleDeclaration3.ts] +declare module M { + declare module M2 { + } +} + +//// [parserModuleDeclaration3.js] diff --git a/tests/baselines/reference/parserModuleDeclaration5.js b/tests/baselines/reference/parserModuleDeclaration5.js new file mode 100644 index 00000000000..c6017ba813d --- /dev/null +++ b/tests/baselines/reference/parserModuleDeclaration5.js @@ -0,0 +1,9 @@ +//// [parserModuleDeclaration5.ts] +module M1 { + declare module M2 { + declare module M3 { + } + } +} + +//// [parserModuleDeclaration5.js] diff --git a/tests/baselines/reference/parserNotRegex1.js b/tests/baselines/reference/parserNotRegex1.js new file mode 100644 index 00000000000..1169640d850 --- /dev/null +++ b/tests/baselines/reference/parserNotRegex1.js @@ -0,0 +1,10 @@ +//// [parserNotRegex1.ts] + if (a.indexOf(-(4/3))) // We should not get a regex here becuase of the / in the comment. + { + return true; + } + +//// [parserNotRegex1.js] +if (a.indexOf(-(4 / 3))) { + return true; +} diff --git a/tests/baselines/reference/parserObjectCreationArrayLiteral1.js b/tests/baselines/reference/parserObjectCreationArrayLiteral1.js new file mode 100644 index 00000000000..562f1ada637 --- /dev/null +++ b/tests/baselines/reference/parserObjectCreationArrayLiteral1.js @@ -0,0 +1,5 @@ +//// [parserObjectCreationArrayLiteral1.ts] +new Foo[]; + +//// [parserObjectCreationArrayLiteral1.js] +new Foo[]; diff --git a/tests/baselines/reference/parserObjectCreationArrayLiteral3.js b/tests/baselines/reference/parserObjectCreationArrayLiteral3.js new file mode 100644 index 00000000000..8bb892de41a --- /dev/null +++ b/tests/baselines/reference/parserObjectCreationArrayLiteral3.js @@ -0,0 +1,5 @@ +//// [parserObjectCreationArrayLiteral3.ts] +new Foo[](); + +//// [parserObjectCreationArrayLiteral3.js] +new Foo[](); diff --git a/tests/baselines/reference/parserObjectType6.js b/tests/baselines/reference/parserObjectType6.js new file mode 100644 index 00000000000..96b3c1a8f99 --- /dev/null +++ b/tests/baselines/reference/parserObjectType6.js @@ -0,0 +1,8 @@ +//// [parserObjectType6.ts] +var v: { + a: B + []; +}; + +//// [parserObjectType6.js] +var v; diff --git a/tests/baselines/reference/parserParameterList1.js b/tests/baselines/reference/parserParameterList1.js new file mode 100644 index 00000000000..49af7780b1f --- /dev/null +++ b/tests/baselines/reference/parserParameterList1.js @@ -0,0 +1,13 @@ +//// [parserParameterList1.ts] +class C { + F(...A, B) { } +} + +//// [parserParameterList1.js] +var C = (function () { + function C() { + } + C.prototype.F = function (A, B) { + }; + return C; +})(); diff --git a/tests/baselines/reference/parserParameterList10.js b/tests/baselines/reference/parserParameterList10.js new file mode 100644 index 00000000000..4f85dec801c --- /dev/null +++ b/tests/baselines/reference/parserParameterList10.js @@ -0,0 +1,18 @@ +//// [parserParameterList10.ts] +class C { + foo(...bar = 0) { } +} + +//// [parserParameterList10.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + if (bar === void 0) { bar = 0; } + var bar = []; + for (var _i = 0; _i < arguments.length; _i++) { + bar[_i - 0] = arguments[_i]; + } + }; + return C; +})(); diff --git a/tests/baselines/reference/parserParameterList11.js b/tests/baselines/reference/parserParameterList11.js new file mode 100644 index 00000000000..a56e8b58c20 --- /dev/null +++ b/tests/baselines/reference/parserParameterList11.js @@ -0,0 +1,11 @@ +//// [parserParameterList11.ts] +(...arg?) => 102; + +//// [parserParameterList11.js] +(function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 102; +}); diff --git a/tests/baselines/reference/parserParameterList12.js b/tests/baselines/reference/parserParameterList12.js new file mode 100644 index 00000000000..ce912f0cdfd --- /dev/null +++ b/tests/baselines/reference/parserParameterList12.js @@ -0,0 +1,7 @@ +//// [parserParameterList12.ts] +function F(a,) { +} + +//// [parserParameterList12.js] +function F(a) { +} diff --git a/tests/baselines/reference/parserParameterList2.js b/tests/baselines/reference/parserParameterList2.js new file mode 100644 index 00000000000..c6a7f48c43e --- /dev/null +++ b/tests/baselines/reference/parserParameterList2.js @@ -0,0 +1,14 @@ +//// [parserParameterList2.ts] +class C { + F(A?= 0) { } +} + +//// [parserParameterList2.js] +var C = (function () { + function C() { + } + C.prototype.F = function (A) { + if (A === void 0) { A = 0; } + }; + return C; +})(); diff --git a/tests/baselines/reference/parserParameterList3.js b/tests/baselines/reference/parserParameterList3.js new file mode 100644 index 00000000000..01135f0ceff --- /dev/null +++ b/tests/baselines/reference/parserParameterList3.js @@ -0,0 +1,13 @@ +//// [parserParameterList3.ts] +class C { + F(A?, B) { } +} + +//// [parserParameterList3.js] +var C = (function () { + function C() { + } + C.prototype.F = function (A, B) { + }; + return C; +})(); diff --git a/tests/baselines/reference/parserParameterList9.js b/tests/baselines/reference/parserParameterList9.js new file mode 100644 index 00000000000..965b92a7ef6 --- /dev/null +++ b/tests/baselines/reference/parserParameterList9.js @@ -0,0 +1,17 @@ +//// [parserParameterList9.ts] +class C { + foo(...bar?) { } +} + +//// [parserParameterList9.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + var bar = []; + for (var _i = 0; _i < arguments.length; _i++) { + bar[_i - 0] = arguments[_i]; + } + }; + return C; +})(); diff --git a/tests/baselines/reference/parserRegularExpression1.js b/tests/baselines/reference/parserRegularExpression1.js new file mode 100644 index 00000000000..eb6fe1b7c8a --- /dev/null +++ b/tests/baselines/reference/parserRegularExpression1.js @@ -0,0 +1,5 @@ +//// [parserRegularExpression1.ts] +return /(#?-?\d*\.\d\w*%?)|(@?#?[\w-?]+%?)/g; + +//// [parserRegularExpression1.js] +return /(#?-?\d*\.\d\w*%?)|(@?#?[\w-?]+%?)/g; diff --git a/tests/baselines/reference/parserReturnStatement1.js b/tests/baselines/reference/parserReturnStatement1.js new file mode 100644 index 00000000000..10ee6d83935 --- /dev/null +++ b/tests/baselines/reference/parserReturnStatement1.js @@ -0,0 +1,5 @@ +//// [parserReturnStatement1.ts] +return; + +//// [parserReturnStatement1.js] +return; diff --git a/tests/baselines/reference/parserReturnStatement2.js b/tests/baselines/reference/parserReturnStatement2.js new file mode 100644 index 00000000000..b54cf2b5acd --- /dev/null +++ b/tests/baselines/reference/parserReturnStatement2.js @@ -0,0 +1,9 @@ +//// [parserReturnStatement2.ts] +{ + return; +} + +//// [parserReturnStatement2.js] +{ + return; +} diff --git a/tests/baselines/reference/parserReturnStatement4.js b/tests/baselines/reference/parserReturnStatement4.js new file mode 100644 index 00000000000..3a993697cc6 --- /dev/null +++ b/tests/baselines/reference/parserReturnStatement4.js @@ -0,0 +1,7 @@ +//// [parserReturnStatement4.ts] +var v = { get foo() { return } }; + +//// [parserReturnStatement4.js] +var v = { get foo() { + return; +} }; diff --git a/tests/baselines/reference/parserSetAccessorWithTypeAnnotation1.js b/tests/baselines/reference/parserSetAccessorWithTypeAnnotation1.js new file mode 100644 index 00000000000..0cbae53aac3 --- /dev/null +++ b/tests/baselines/reference/parserSetAccessorWithTypeAnnotation1.js @@ -0,0 +1,18 @@ +//// [parserSetAccessorWithTypeAnnotation1.ts] +class C { + set foo(v): number { + } +} + +//// [parserSetAccessorWithTypeAnnotation1.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "foo", { + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserSetAccessorWithTypeParameters1.js b/tests/baselines/reference/parserSetAccessorWithTypeParameters1.js new file mode 100644 index 00000000000..a19675167c8 --- /dev/null +++ b/tests/baselines/reference/parserSetAccessorWithTypeParameters1.js @@ -0,0 +1,17 @@ +//// [parserSetAccessorWithTypeParameters1.ts] +class C { + set foo(v) { } +} + +//// [parserSetAccessorWithTypeParameters1.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "foo", { + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/parserShorthandPropertyAssignment1.js b/tests/baselines/reference/parserShorthandPropertyAssignment1.js new file mode 100644 index 00000000000..20907eacef2 --- /dev/null +++ b/tests/baselines/reference/parserShorthandPropertyAssignment1.js @@ -0,0 +1,10 @@ +//// [parserShorthandPropertyAssignment1.ts] +function foo(obj: { name?: string; id: number }) { } +var name:any, id: any; +foo({ name?, id? }); + +//// [parserShorthandPropertyAssignment1.js] +function foo(obj) { +} +var name, id; +foo({ name: name, id: id }); diff --git a/tests/baselines/reference/parserShorthandPropertyAssignment5.js b/tests/baselines/reference/parserShorthandPropertyAssignment5.js new file mode 100644 index 00000000000..90d74722a99 --- /dev/null +++ b/tests/baselines/reference/parserShorthandPropertyAssignment5.js @@ -0,0 +1,7 @@ +//// [parserShorthandPropertyAssignment5.ts] +var greet = "hello"; +var obj = { greet? }; + +//// [parserShorthandPropertyAssignment5.js] +var greet = "hello"; +var obj = { greet: greet }; diff --git a/tests/baselines/reference/parserStatementIsNotAMemberVariableDeclaration1.js b/tests/baselines/reference/parserStatementIsNotAMemberVariableDeclaration1.js new file mode 100644 index 00000000000..08c8223bfc4 --- /dev/null +++ b/tests/baselines/reference/parserStatementIsNotAMemberVariableDeclaration1.js @@ -0,0 +1,19 @@ +//// [parserStatementIsNotAMemberVariableDeclaration1.ts] +return { + + "set": function (key, value) { + + // 'private' should not be considered a member variable here. + private[key] = value; + + } + +}; + +//// [parserStatementIsNotAMemberVariableDeclaration1.js] +return { + "set": function (key, value) { + // 'private' should not be considered a member variable here. + private[key] = value; + } +}; diff --git a/tests/baselines/reference/parserStrictMode10.js b/tests/baselines/reference/parserStrictMode10.js new file mode 100644 index 00000000000..53ec7686d0e --- /dev/null +++ b/tests/baselines/reference/parserStrictMode10.js @@ -0,0 +1,9 @@ +//// [parserStrictMode10.ts] +"use strict"; +function f(eval) { +} + +//// [parserStrictMode10.js] +"use strict"; +function f(eval) { +} diff --git a/tests/baselines/reference/parserStrictMode11.js b/tests/baselines/reference/parserStrictMode11.js new file mode 100644 index 00000000000..b34af107f83 --- /dev/null +++ b/tests/baselines/reference/parserStrictMode11.js @@ -0,0 +1,9 @@ +//// [parserStrictMode11.ts] +"use strict"; +var v = function f(eval) { +}; + +//// [parserStrictMode11.js] +"use strict"; +var v = function f(eval) { +}; diff --git a/tests/baselines/reference/parserStrictMode12.js b/tests/baselines/reference/parserStrictMode12.js new file mode 100644 index 00000000000..e0daed9e565 --- /dev/null +++ b/tests/baselines/reference/parserStrictMode12.js @@ -0,0 +1,8 @@ +//// [parserStrictMode12.ts] +"use strict"; +var v = { set foo(eval) { } } + +//// [parserStrictMode12.js] +"use strict"; +var v = { set foo(eval) { +} }; diff --git a/tests/baselines/reference/parserStrictMode13.js b/tests/baselines/reference/parserStrictMode13.js new file mode 100644 index 00000000000..c3ace6981f4 --- /dev/null +++ b/tests/baselines/reference/parserStrictMode13.js @@ -0,0 +1,13 @@ +//// [parserStrictMode13.ts] +"use strict"; +try { +} +catch(eval) { +} + +//// [parserStrictMode13.js] +"use strict"; +try { +} +catch (eval) { +} diff --git a/tests/baselines/reference/parserStrictMode14.js b/tests/baselines/reference/parserStrictMode14.js new file mode 100644 index 00000000000..eda7f285f71 --- /dev/null +++ b/tests/baselines/reference/parserStrictMode14.js @@ -0,0 +1,9 @@ +//// [parserStrictMode14.ts] +"use strict"; +with (a) { +} + +//// [parserStrictMode14.js] +"use strict"; +with (a) { +} diff --git a/tests/baselines/reference/parserStrictMode15.js b/tests/baselines/reference/parserStrictMode15.js new file mode 100644 index 00000000000..5fcf91bbddf --- /dev/null +++ b/tests/baselines/reference/parserStrictMode15.js @@ -0,0 +1,7 @@ +//// [parserStrictMode15.ts] +"use strict"; +delete a; + +//// [parserStrictMode15.js] +"use strict"; +delete a; diff --git a/tests/baselines/reference/parserStrictMode3.js b/tests/baselines/reference/parserStrictMode3.js new file mode 100644 index 00000000000..166d8905a7a --- /dev/null +++ b/tests/baselines/reference/parserStrictMode3.js @@ -0,0 +1,7 @@ +//// [parserStrictMode3.ts] +"use strict"; +eval = 1; + +//// [parserStrictMode3.js] +"use strict"; +eval = 1; diff --git a/tests/baselines/reference/parserStrictMode4.js b/tests/baselines/reference/parserStrictMode4.js new file mode 100644 index 00000000000..ff1ed9b3a8f --- /dev/null +++ b/tests/baselines/reference/parserStrictMode4.js @@ -0,0 +1,7 @@ +//// [parserStrictMode4.ts] +"use strict"; +arguments = 1; + +//// [parserStrictMode4.js] +"use strict"; +arguments = 1; diff --git a/tests/baselines/reference/parserStrictMode5.js b/tests/baselines/reference/parserStrictMode5.js new file mode 100644 index 00000000000..7e01b0f5d72 --- /dev/null +++ b/tests/baselines/reference/parserStrictMode5.js @@ -0,0 +1,7 @@ +//// [parserStrictMode5.ts] +"use strict"; +eval += 1; + +//// [parserStrictMode5.js] +"use strict"; +eval += 1; diff --git a/tests/baselines/reference/parserStrictMode6.js b/tests/baselines/reference/parserStrictMode6.js new file mode 100644 index 00000000000..6a4161c3dab --- /dev/null +++ b/tests/baselines/reference/parserStrictMode6.js @@ -0,0 +1,7 @@ +//// [parserStrictMode6.ts] +"use strict"; +eval++; + +//// [parserStrictMode6.js] +"use strict"; +eval++; diff --git a/tests/baselines/reference/parserStrictMode7.js b/tests/baselines/reference/parserStrictMode7.js new file mode 100644 index 00000000000..fafd603da65 --- /dev/null +++ b/tests/baselines/reference/parserStrictMode7.js @@ -0,0 +1,7 @@ +//// [parserStrictMode7.ts] +"use strict"; +++eval; + +//// [parserStrictMode7.js] +"use strict"; +++eval; diff --git a/tests/baselines/reference/parserStrictMode8.js b/tests/baselines/reference/parserStrictMode8.js new file mode 100644 index 00000000000..3db5349c459 --- /dev/null +++ b/tests/baselines/reference/parserStrictMode8.js @@ -0,0 +1,9 @@ +//// [parserStrictMode8.ts] +"use strict"; +function eval() { +} + +//// [parserStrictMode8.js] +"use strict"; +function eval() { +} diff --git a/tests/baselines/reference/parserStrictMode9.js b/tests/baselines/reference/parserStrictMode9.js new file mode 100644 index 00000000000..a30008634c5 --- /dev/null +++ b/tests/baselines/reference/parserStrictMode9.js @@ -0,0 +1,9 @@ +//// [parserStrictMode9.ts] +"use strict"; +var v = function eval() { +}; + +//// [parserStrictMode9.js] +"use strict"; +var v = function eval() { +}; diff --git a/tests/baselines/reference/parserVariableDeclaration10.js b/tests/baselines/reference/parserVariableDeclaration10.js new file mode 100644 index 00000000000..3cab783a946 --- /dev/null +++ b/tests/baselines/reference/parserVariableDeclaration10.js @@ -0,0 +1,5 @@ +//// [parserVariableDeclaration10.ts] +var a,; + +//// [parserVariableDeclaration10.js] +var a; diff --git a/tests/baselines/reference/parserVariableDeclaration4.js b/tests/baselines/reference/parserVariableDeclaration4.js new file mode 100644 index 00000000000..0fcbb51d02e --- /dev/null +++ b/tests/baselines/reference/parserVariableDeclaration4.js @@ -0,0 +1,6 @@ +//// [parserVariableDeclaration4.ts] +declare module M { + declare var v; +} + +//// [parserVariableDeclaration4.js] diff --git a/tests/baselines/reference/parserVariableDeclaration5.js b/tests/baselines/reference/parserVariableDeclaration5.js new file mode 100644 index 00000000000..a865d18651c --- /dev/null +++ b/tests/baselines/reference/parserVariableDeclaration5.js @@ -0,0 +1,5 @@ +//// [parserVariableDeclaration5.ts] +var a, + +//// [parserVariableDeclaration5.js] +var a; diff --git a/tests/baselines/reference/parserVariableDeclaration6.js b/tests/baselines/reference/parserVariableDeclaration6.js new file mode 100644 index 00000000000..64126d69b92 --- /dev/null +++ b/tests/baselines/reference/parserVariableDeclaration6.js @@ -0,0 +1,5 @@ +//// [parserVariableDeclaration6.ts] +var + +//// [parserVariableDeclaration6.js] +var ; diff --git a/tests/baselines/reference/parserVariableDeclaration8.js b/tests/baselines/reference/parserVariableDeclaration8.js new file mode 100644 index 00000000000..7d77a80dad4 --- /dev/null +++ b/tests/baselines/reference/parserVariableDeclaration8.js @@ -0,0 +1,5 @@ +//// [parserVariableDeclaration8.ts] +var ; + +//// [parserVariableDeclaration8.js] +var ; diff --git a/tests/baselines/reference/parserX_ArrowFunction2.js b/tests/baselines/reference/parserX_ArrowFunction2.js new file mode 100644 index 00000000000..a30294b658b --- /dev/null +++ b/tests/baselines/reference/parserX_ArrowFunction2.js @@ -0,0 +1,8 @@ +//// [parserX_ArrowFunction2.ts] +var v = (a: b,) => { + +}; + +//// [parserX_ArrowFunction2.js] +var v = function (a) { +}; diff --git a/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement1.js b/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement1.js new file mode 100644 index 00000000000..9ed3e677f9f --- /dev/null +++ b/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement1.js @@ -0,0 +1,5 @@ +//// [parser_breakNotInIterationOrSwitchStatement1.ts] +break; + +//// [parser_breakNotInIterationOrSwitchStatement1.js] +break; diff --git a/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement2.js b/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement2.js new file mode 100644 index 00000000000..b95bfca8404 --- /dev/null +++ b/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement2.js @@ -0,0 +1,13 @@ +//// [parser_breakNotInIterationOrSwitchStatement2.ts] +while (true) { + function f() { + break; + } +} + +//// [parser_breakNotInIterationOrSwitchStatement2.js] +while (true) { + function f() { + break; + } +} diff --git a/tests/baselines/reference/parser_breakTarget5.js b/tests/baselines/reference/parser_breakTarget5.js new file mode 100644 index 00000000000..743ad6c2631 --- /dev/null +++ b/tests/baselines/reference/parser_breakTarget5.js @@ -0,0 +1,18 @@ +//// [parser_breakTarget5.ts] +target: +while (true) { + function f() { + while (true) { + break target; + } + } +} + +//// [parser_breakTarget5.js] +target: while (true) { + function f() { + while (true) { + break target; + } + } +} diff --git a/tests/baselines/reference/parser_breakTarget6.js b/tests/baselines/reference/parser_breakTarget6.js new file mode 100644 index 00000000000..93b15ac0362 --- /dev/null +++ b/tests/baselines/reference/parser_breakTarget6.js @@ -0,0 +1,9 @@ +//// [parser_breakTarget6.ts] +while (true) { + break target; +} + +//// [parser_breakTarget6.js] +while (true) { + break target; +} diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement1.js b/tests/baselines/reference/parser_continueNotInIterationStatement1.js new file mode 100644 index 00000000000..824a99d9e37 --- /dev/null +++ b/tests/baselines/reference/parser_continueNotInIterationStatement1.js @@ -0,0 +1,5 @@ +//// [parser_continueNotInIterationStatement1.ts] +continue; + +//// [parser_continueNotInIterationStatement1.js] +continue; diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement2.js b/tests/baselines/reference/parser_continueNotInIterationStatement2.js new file mode 100644 index 00000000000..690c3fd910d --- /dev/null +++ b/tests/baselines/reference/parser_continueNotInIterationStatement2.js @@ -0,0 +1,13 @@ +//// [parser_continueNotInIterationStatement2.ts] +while (true) { + function f() { + continue; + } +} + +//// [parser_continueNotInIterationStatement2.js] +while (true) { + function f() { + continue; + } +} diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement3.js b/tests/baselines/reference/parser_continueNotInIterationStatement3.js new file mode 100644 index 00000000000..d5cf6feb221 --- /dev/null +++ b/tests/baselines/reference/parser_continueNotInIterationStatement3.js @@ -0,0 +1,11 @@ +//// [parser_continueNotInIterationStatement3.ts] +switch (0) { + default: + continue; +} + +//// [parser_continueNotInIterationStatement3.js] +switch (0) { + default: + continue; +} diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement4.js b/tests/baselines/reference/parser_continueNotInIterationStatement4.js new file mode 100644 index 00000000000..af2a4ee61b3 --- /dev/null +++ b/tests/baselines/reference/parser_continueNotInIterationStatement4.js @@ -0,0 +1,15 @@ +//// [parser_continueNotInIterationStatement4.ts] +TWO: +while (true){ + var x = () => { + continue TWO; + } +} + + +//// [parser_continueNotInIterationStatement4.js] +TWO: while (true) { + var x = function () { + continue TWO; + }; +} diff --git a/tests/baselines/reference/parser_continueTarget1.js b/tests/baselines/reference/parser_continueTarget1.js new file mode 100644 index 00000000000..fd6ea5750c6 --- /dev/null +++ b/tests/baselines/reference/parser_continueTarget1.js @@ -0,0 +1,6 @@ +//// [parser_continueTarget1.ts] +target: + continue target; + +//// [parser_continueTarget1.js] +target: continue target; diff --git a/tests/baselines/reference/parser_continueTarget5.js b/tests/baselines/reference/parser_continueTarget5.js new file mode 100644 index 00000000000..7be6997c070 --- /dev/null +++ b/tests/baselines/reference/parser_continueTarget5.js @@ -0,0 +1,18 @@ +//// [parser_continueTarget5.ts] +target: +while (true) { + function f() { + while (true) { + continue target; + } + } +} + +//// [parser_continueTarget5.js] +target: while (true) { + function f() { + while (true) { + continue target; + } + } +} diff --git a/tests/baselines/reference/parser_continueTarget6.js b/tests/baselines/reference/parser_continueTarget6.js new file mode 100644 index 00000000000..56f1b6a485c --- /dev/null +++ b/tests/baselines/reference/parser_continueTarget6.js @@ -0,0 +1,9 @@ +//// [parser_continueTarget6.ts] +while (true) { + continue target; +} + +//// [parser_continueTarget6.js] +while (true) { + continue target; +} diff --git a/tests/baselines/reference/parser_duplicateLabel1.js b/tests/baselines/reference/parser_duplicateLabel1.js new file mode 100644 index 00000000000..0fe1801a099 --- /dev/null +++ b/tests/baselines/reference/parser_duplicateLabel1.js @@ -0,0 +1,9 @@ +//// [parser_duplicateLabel1.ts] +target: +target: +while (true) { +} + +//// [parser_duplicateLabel1.js] +target: target: while (true) { +} diff --git a/tests/baselines/reference/parser_duplicateLabel2.js b/tests/baselines/reference/parser_duplicateLabel2.js new file mode 100644 index 00000000000..00c0e5532e5 --- /dev/null +++ b/tests/baselines/reference/parser_duplicateLabel2.js @@ -0,0 +1,13 @@ +//// [parser_duplicateLabel2.ts] +target: +while (true) { + target: + while (true) { + } +} + +//// [parser_duplicateLabel2.js] +target: while (true) { + target: while (true) { + } +} diff --git a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt index fa3b1bb522d..360259adf7c 100644 --- a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt @@ -5,7 +5,9 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(59,37): error TS2307: Cannot tests/cases/compiler/privacyGloImportParseErrors.ts(69,37): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(69,37): error TS2307: Cannot find external module 'm1_M4_private'. tests/cases/compiler/privacyGloImportParseErrors.ts(81,43): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyGloImportParseErrors.ts(81,43): error TS2307: Cannot find external module 'm1_M3_public'. tests/cases/compiler/privacyGloImportParseErrors.ts(82,43): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyGloImportParseErrors.ts(82,43): error TS2307: Cannot find external module 'm1_M4_private'. tests/cases/compiler/privacyGloImportParseErrors.ts(121,38): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(125,45): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(133,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. @@ -16,7 +18,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(146,25): error TS1147: Impor tests/cases/compiler/privacyGloImportParseErrors.ts(149,29): error TS1147: Import declarations in an internal module cannot reference an external module. -==== tests/cases/compiler/privacyGloImportParseErrors.ts (16 errors) ==== +==== tests/cases/compiler/privacyGloImportParseErrors.ts (18 errors) ==== module m1 { export module m1_M1_public { export class c1 { @@ -112,9 +114,13 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(149,29): error TS1147: Impor export import m1_im3_public = require("m1_M3_public"); ~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. + ~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find external module 'm1_M3_public'. export import m1_im4_public = require("m1_M4_private"); ~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find external module 'm1_M4_private'. } module glo_M1_public { diff --git a/tests/baselines/reference/privacyGloImportParseErrors.js b/tests/baselines/reference/privacyGloImportParseErrors.js new file mode 100644 index 00000000000..6812b468882 --- /dev/null +++ b/tests/baselines/reference/privacyGloImportParseErrors.js @@ -0,0 +1,248 @@ +//// [privacyGloImportParseErrors.ts] +module m1 { + export module m1_M1_public { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; + } + + module m1_M2_private { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; + } + + export declare module "m1_M3_public" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } + + declare module "m1_M4_private" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } + + import m1_im1_private = m1_M1_public; + export var m1_im1_private_v1_public = m1_im1_private.c1; + export var m1_im1_private_v2_public = new m1_im1_private.c1(); + export var m1_im1_private_v3_public = m1_im1_private.f1; + export var m1_im1_private_v4_public = m1_im1_private.f1(); + var m1_im1_private_v1_private = m1_im1_private.c1; + var m1_im1_private_v2_private = new m1_im1_private.c1(); + var m1_im1_private_v3_private = m1_im1_private.f1; + var m1_im1_private_v4_private = m1_im1_private.f1(); + + + import m1_im2_private = m1_M2_private; + export var m1_im2_private_v1_public = m1_im2_private.c1; + export var m1_im2_private_v2_public = new m1_im2_private.c1(); + export var m1_im2_private_v3_public = m1_im2_private.f1; + export var m1_im2_private_v4_public = m1_im2_private.f1(); + var m1_im2_private_v1_private = m1_im2_private.c1; + var m1_im2_private_v2_private = new m1_im2_private.c1(); + var m1_im2_private_v3_private = m1_im2_private.f1; + var m1_im2_private_v4_private = m1_im2_private.f1(); + + import m1_im3_private = require("m1_M3_public"); + export var m1_im3_private_v1_public = m1_im3_private.c1; + export var m1_im3_private_v2_public = new m1_im3_private.c1(); + export var m1_im3_private_v3_public = m1_im3_private.f1; + export var m1_im3_private_v4_public = m1_im3_private.f1(); + var m1_im3_private_v1_private = m1_im3_private.c1; + var m1_im3_private_v2_private = new m1_im3_private.c1(); + var m1_im3_private_v3_private = m1_im3_private.f1; + var m1_im3_private_v4_private = m1_im3_private.f1(); + + import m1_im4_private = require("m1_M4_private"); + export var m1_im4_private_v1_public = m1_im4_private.c1; + export var m1_im4_private_v2_public = new m1_im4_private.c1(); + export var m1_im4_private_v3_public = m1_im4_private.f1; + export var m1_im4_private_v4_public = m1_im4_private.f1(); + var m1_im4_private_v1_private = m1_im4_private.c1; + var m1_im4_private_v2_private = new m1_im4_private.c1(); + var m1_im4_private_v3_private = m1_im4_private.f1; + var m1_im4_private_v4_private = m1_im4_private.f1(); + + export import m1_im1_public = m1_M1_public; + export import m1_im2_public = m1_M2_private; + export import m1_im3_public = require("m1_M3_public"); + export import m1_im4_public = require("m1_M4_private"); +} + +module glo_M1_public { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; +} + +declare module "glo_M2_public" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; +} + +declare module "use_glo_M1_public" { + import use_glo_M1_public = glo_M1_public; + export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; }; + export var use_glo_M1_public_v2_public: typeof use_glo_M1_public; + export var use_glo_M1_public_v3_public: ()=> use_glo_M1_public.c1; + var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; }; + var use_glo_M1_public_v2_private: typeof use_glo_M1_public; + var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1; + + import use_glo_M2_public = require("glo_M2_public"); + export var use_glo_M2_public_v1_public: { new (): use_glo_M2_public.c1; }; + export var use_glo_M2_public_v2_public: typeof use_glo_M2_public; + export var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1; + var use_glo_M2_public_v1_private: { new (): use_glo_M2_public.c1; }; + var use_glo_M2_public_v2_private: typeof use_glo_M2_public; + var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1; + + module m2 { + import errorImport = require("glo_M2_public"); + import nonerrorImport = glo_M1_public; + + module m5 { + import m5_errorImport = require("glo_M2_public"); + import m5_nonerrorImport = glo_M1_public; + } + } +} + +declare module "anotherParseError" { + module m2 { + declare module "abc" { + } + } + + module m2 { + module "abc2" { + } + } + module "abc3" { + } +} + +module m2 { + import m3 = require("use_glo_M1_public"); + module m4 { + var a = 10; + import m2 = require("use_glo_M1_public"); + } + +} + +//// [privacyGloImportParseErrors.js] +var m1; +(function (m1) { + var m1_M1_public; + (function (m1_M1_public) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + m1_M1_public.c1 = c1; + function f1() { + return new c1; + } + m1_M1_public.f1 = f1; + m1_M1_public.v1 = c1; + m1_M1_public.v2; + })(m1_M1_public = m1.m1_M1_public || (m1.m1_M1_public = {})); + var m1_M2_private; + (function (m1_M2_private) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + m1_M2_private.c1 = c1; + function f1() { + return new c1; + } + m1_M2_private.f1 = f1; + m1_M2_private.v1 = c1; + m1_M2_private.v2; + })(m1_M2_private || (m1_M2_private = {})); + var m1_im1_private = m1_M1_public; + m1.m1_im1_private_v1_public = m1_im1_private.c1; + m1.m1_im1_private_v2_public = new m1_im1_private.c1(); + m1.m1_im1_private_v3_public = m1_im1_private.f1; + m1.m1_im1_private_v4_public = m1_im1_private.f1(); + var m1_im1_private_v1_private = m1_im1_private.c1; + var m1_im1_private_v2_private = new m1_im1_private.c1(); + var m1_im1_private_v3_private = m1_im1_private.f1; + var m1_im1_private_v4_private = m1_im1_private.f1(); + var m1_im2_private = m1_M2_private; + m1.m1_im2_private_v1_public = m1_im2_private.c1; + m1.m1_im2_private_v2_public = new m1_im2_private.c1(); + m1.m1_im2_private_v3_public = m1_im2_private.f1; + m1.m1_im2_private_v4_public = m1_im2_private.f1(); + var m1_im2_private_v1_private = m1_im2_private.c1; + var m1_im2_private_v2_private = new m1_im2_private.c1(); + var m1_im2_private_v3_private = m1_im2_private.f1; + var m1_im2_private_v4_private = m1_im2_private.f1(); + var m1_im3_private = require("m1_M3_public"); + m1.m1_im3_private_v1_public = m1_im3_private.c1; + m1.m1_im3_private_v2_public = new m1_im3_private.c1(); + m1.m1_im3_private_v3_public = m1_im3_private.f1; + m1.m1_im3_private_v4_public = m1_im3_private.f1(); + var m1_im3_private_v1_private = m1_im3_private.c1; + var m1_im3_private_v2_private = new m1_im3_private.c1(); + var m1_im3_private_v3_private = m1_im3_private.f1; + var m1_im3_private_v4_private = m1_im3_private.f1(); + var m1_im4_private = require("m1_M4_private"); + m1.m1_im4_private_v1_public = m1_im4_private.c1; + m1.m1_im4_private_v2_public = new m1_im4_private.c1(); + m1.m1_im4_private_v3_public = m1_im4_private.f1; + m1.m1_im4_private_v4_public = m1_im4_private.f1(); + var m1_im4_private_v1_private = m1_im4_private.c1; + var m1_im4_private_v2_private = new m1_im4_private.c1(); + var m1_im4_private_v3_private = m1_im4_private.f1; + var m1_im4_private_v4_private = m1_im4_private.f1(); + m1.m1_im1_public = m1_M1_public; + m1.m1_im2_public = m1_M2_private; +})(m1 || (m1 = {})); +var glo_M1_public; +(function (glo_M1_public) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + glo_M1_public.c1 = c1; + function f1() { + return new c1; + } + glo_M1_public.f1 = f1; + glo_M1_public.v1 = c1; + glo_M1_public.v2; +})(glo_M1_public || (glo_M1_public = {})); +var m2; +(function (m2) { + var m4; + (function (m4) { + var a = 10; + })(m4 || (m4 = {})); +})(m2 || (m2 = {})); diff --git a/tests/baselines/reference/privacyImportParseErrors.errors.txt b/tests/baselines/reference/privacyImportParseErrors.errors.txt index a81bfbe738b..ca2734fe126 100644 --- a/tests/baselines/reference/privacyImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyImportParseErrors.errors.txt @@ -5,7 +5,9 @@ tests/cases/compiler/privacyImportParseErrors.ts(59,37): error TS2307: Cannot fi tests/cases/compiler/privacyImportParseErrors.ts(69,37): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(69,37): error TS2307: Cannot find external module 'm1_M4_private'. tests/cases/compiler/privacyImportParseErrors.ts(81,43): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(81,43): error TS2307: Cannot find external module 'm1_M3_public'. tests/cases/compiler/privacyImportParseErrors.ts(82,43): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(82,43): error TS2307: Cannot find external module 'm1_M4_private'. tests/cases/compiler/privacyImportParseErrors.ts(106,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(114,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(143,37): error TS1147: Import declarations in an internal module cannot reference an external module. @@ -13,7 +15,9 @@ tests/cases/compiler/privacyImportParseErrors.ts(143,37): error TS2307: Cannot f tests/cases/compiler/privacyImportParseErrors.ts(153,37): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(153,37): error TS2307: Cannot find external module 'm2_M4_private'. tests/cases/compiler/privacyImportParseErrors.ts(166,43): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(166,43): error TS2307: Cannot find external module 'm2_M3_public'. tests/cases/compiler/privacyImportParseErrors.ts(167,43): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(167,43): error TS2307: Cannot find external module 'm2_M4_private'. tests/cases/compiler/privacyImportParseErrors.ts(180,23): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(198,23): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(218,34): error TS2307: Cannot find external module 'glo_M2_public'. @@ -49,7 +53,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(350,25): error TS1147: Import d tests/cases/compiler/privacyImportParseErrors.ts(353,29): error TS1147: Import declarations in an internal module cannot reference an external module. -==== tests/cases/compiler/privacyImportParseErrors.ts (49 errors) ==== +==== tests/cases/compiler/privacyImportParseErrors.ts (53 errors) ==== export module m1 { export module m1_M1_public { export class c1 { @@ -145,9 +149,13 @@ tests/cases/compiler/privacyImportParseErrors.ts(353,29): error TS1147: Import d export import m1_im3_public = require("m1_M3_public"); ~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. + ~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find external module 'm1_M3_public'. export import m1_im4_public = require("m1_M4_private"); ~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find external module 'm1_M4_private'. } module m2 { @@ -246,9 +254,13 @@ tests/cases/compiler/privacyImportParseErrors.ts(353,29): error TS1147: Import d export import m1_im3_public = require("m2_M3_public"); ~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. + ~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find external module 'm2_M3_public'. export import m1_im4_public = require("m2_M4_private"); ~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find external module 'm2_M4_private'. } export module glo_M1_public { diff --git a/tests/baselines/reference/privacyImportParseErrors.js b/tests/baselines/reference/privacyImportParseErrors.js new file mode 100644 index 00000000000..d32c0255f78 --- /dev/null +++ b/tests/baselines/reference/privacyImportParseErrors.js @@ -0,0 +1,585 @@ +//// [privacyImportParseErrors.ts] +export module m1 { + export module m1_M1_public { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; + } + + module m1_M2_private { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; + } + + export declare module "m1_M3_public" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } + + declare module "m1_M4_private" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } + + import m1_im1_private = m1_M1_public; + export var m1_im1_private_v1_public = m1_im1_private.c1; + export var m1_im1_private_v2_public = new m1_im1_private.c1(); + export var m1_im1_private_v3_public = m1_im1_private.f1; + export var m1_im1_private_v4_public = m1_im1_private.f1(); + var m1_im1_private_v1_private = m1_im1_private.c1; + var m1_im1_private_v2_private = new m1_im1_private.c1(); + var m1_im1_private_v3_private = m1_im1_private.f1; + var m1_im1_private_v4_private = m1_im1_private.f1(); + + + import m1_im2_private = m1_M2_private; + export var m1_im2_private_v1_public = m1_im2_private.c1; + export var m1_im2_private_v2_public = new m1_im2_private.c1(); + export var m1_im2_private_v3_public = m1_im2_private.f1; + export var m1_im2_private_v4_public = m1_im2_private.f1(); + var m1_im2_private_v1_private = m1_im2_private.c1; + var m1_im2_private_v2_private = new m1_im2_private.c1(); + var m1_im2_private_v3_private = m1_im2_private.f1; + var m1_im2_private_v4_private = m1_im2_private.f1(); + + import m1_im3_private = require("m1_M3_public"); + export var m1_im3_private_v1_public = m1_im3_private.c1; + export var m1_im3_private_v2_public = new m1_im3_private.c1(); + export var m1_im3_private_v3_public = m1_im3_private.f1; + export var m1_im3_private_v4_public = m1_im3_private.f1(); + var m1_im3_private_v1_private = m1_im3_private.c1; + var m1_im3_private_v2_private = new m1_im3_private.c1(); + var m1_im3_private_v3_private = m1_im3_private.f1; + var m1_im3_private_v4_private = m1_im3_private.f1(); + + import m1_im4_private = require("m1_M4_private"); + export var m1_im4_private_v1_public = m1_im4_private.c1; + export var m1_im4_private_v2_public = new m1_im4_private.c1(); + export var m1_im4_private_v3_public = m1_im4_private.f1; + export var m1_im4_private_v4_public = m1_im4_private.f1(); + var m1_im4_private_v1_private = m1_im4_private.c1; + var m1_im4_private_v2_private = new m1_im4_private.c1(); + var m1_im4_private_v3_private = m1_im4_private.f1; + var m1_im4_private_v4_private = m1_im4_private.f1(); + + export import m1_im1_public = m1_M1_public; + export import m1_im2_public = m1_M2_private; + export import m1_im3_public = require("m1_M3_public"); + export import m1_im4_public = require("m1_M4_private"); +} + +module m2 { + export module m2_M1_public { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; + } + + module m2_M2_private { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; + } + + export declare module "m2_M3_public" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } + + declare module "m2_M4_private" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; + } + + import m1_im1_private = m2_M1_public; + export var m1_im1_private_v1_public = m1_im1_private.c1; + export var m1_im1_private_v2_public = new m1_im1_private.c1(); + export var m1_im1_private_v3_public = m1_im1_private.f1; + export var m1_im1_private_v4_public = m1_im1_private.f1(); + var m1_im1_private_v1_private = m1_im1_private.c1; + var m1_im1_private_v2_private = new m1_im1_private.c1(); + var m1_im1_private_v3_private = m1_im1_private.f1; + var m1_im1_private_v4_private = m1_im1_private.f1(); + + + import m1_im2_private = m2_M2_private; + export var m1_im2_private_v1_public = m1_im2_private.c1; + export var m1_im2_private_v2_public = new m1_im2_private.c1(); + export var m1_im2_private_v3_public = m1_im2_private.f1; + export var m1_im2_private_v4_public = m1_im2_private.f1(); + var m1_im2_private_v1_private = m1_im2_private.c1; + var m1_im2_private_v2_private = new m1_im2_private.c1(); + var m1_im2_private_v3_private = m1_im2_private.f1; + var m1_im2_private_v4_private = m1_im2_private.f1(); + + import m1_im3_private = require("m2_M3_public"); + export var m1_im3_private_v1_public = m1_im3_private.c1; + export var m1_im3_private_v2_public = new m1_im3_private.c1(); + export var m1_im3_private_v3_public = m1_im3_private.f1; + export var m1_im3_private_v4_public = m1_im3_private.f1(); + var m1_im3_private_v1_private = m1_im3_private.c1; + var m1_im3_private_v2_private = new m1_im3_private.c1(); + var m1_im3_private_v3_private = m1_im3_private.f1; + var m1_im3_private_v4_private = m1_im3_private.f1(); + + import m1_im4_private = require("m2_M4_private"); + export var m1_im4_private_v1_public = m1_im4_private.c1; + export var m1_im4_private_v2_public = new m1_im4_private.c1(); + export var m1_im4_private_v3_public = m1_im4_private.f1; + export var m1_im4_private_v4_public = m1_im4_private.f1(); + var m1_im4_private_v1_private = m1_im4_private.c1; + var m1_im4_private_v2_private = new m1_im4_private.c1(); + var m1_im4_private_v3_private = m1_im4_private.f1; + var m1_im4_private_v4_private = m1_im4_private.f1(); + + // Parse error to export module + export import m1_im1_public = m2_M1_public; + export import m1_im2_public = m2_M2_private; + export import m1_im3_public = require("m2_M3_public"); + export import m1_im4_public = require("m2_M4_private"); +} + +export module glo_M1_public { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; +} + +export declare module "glo_M2_public" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; +} + +export module glo_M3_private { + export class c1 { + } + export function f1() { + return new c1; + } + export var v1 = c1; + export var v2: c1; +} + +export declare module "glo_M4_private" { + export function f1(); + export class c1 { + } + export var v1: { new (): c1; }; + export var v2: c1; +} + + +import glo_im1_private = glo_M1_public; +export var glo_im1_private_v1_public = glo_im1_private.c1; +export var glo_im1_private_v2_public = new glo_im1_private.c1(); +export var glo_im1_private_v3_public = glo_im1_private.f1; +export var glo_im1_private_v4_public = glo_im1_private.f1(); +var glo_im1_private_v1_private = glo_im1_private.c1; +var glo_im1_private_v2_private = new glo_im1_private.c1(); +var glo_im1_private_v3_private = glo_im1_private.f1; +var glo_im1_private_v4_private = glo_im1_private.f1(); + + +import glo_im2_private = require("glo_M2_public"); +export var glo_im2_private_v1_public = glo_im2_private.c1; +export var glo_im2_private_v2_public = new glo_im2_private.c1(); +export var glo_im2_private_v3_public = glo_im2_private.f1; +export var glo_im2_private_v4_public = glo_im2_private.f1(); +var glo_im2_private_v1_private = glo_im2_private.c1; +var glo_im2_private_v2_private = new glo_im2_private.c1(); +var glo_im2_private_v3_private = glo_im2_private.f1; +var glo_im2_private_v4_private = glo_im2_private.f1(); + +import glo_im3_private = glo_M3_private; +export var glo_im3_private_v1_public = glo_im3_private.c1; +export var glo_im3_private_v2_public = new glo_im3_private.c1(); +export var glo_im3_private_v3_public = glo_im3_private.f1; +export var glo_im3_private_v4_public = glo_im3_private.f1(); +var glo_im3_private_v1_private = glo_im3_private.c1; +var glo_im3_private_v2_private = new glo_im3_private.c1(); +var glo_im3_private_v3_private = glo_im3_private.f1; +var glo_im3_private_v4_private = glo_im3_private.f1(); + +import glo_im4_private = require("glo_M4_private"); +export var glo_im4_private_v1_public = glo_im4_private.c1; +export var glo_im4_private_v2_public = new glo_im4_private.c1(); +export var glo_im4_private_v3_public = glo_im4_private.f1; +export var glo_im4_private_v4_public = glo_im4_private.f1(); +var glo_im4_private_v1_private = glo_im4_private.c1; +var glo_im4_private_v2_private = new glo_im4_private.c1(); +var glo_im4_private_v3_private = glo_im4_private.f1; +var glo_im4_private_v4_private = glo_im4_private.f1(); + +// Parse error to export module +export import glo_im1_public = glo_M1_public; +export import glo_im2_public = glo_M3_private; +export import glo_im3_public = require("glo_M2_public"); +export import glo_im4_public = require("glo_M4_private"); + + +export declare module "use_glo_M1_public" { + import use_glo_M1_public = glo_M1_public; + export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; }; + export var use_glo_M1_public_v2_public: use_glo_M1_public; + export var use_glo_M1_public_v3_public: () => use_glo_M1_public.c1; + var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; }; + var use_glo_M1_public_v2_private: use_glo_M1_public; + var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1; + + import use_glo_M2_public = require("glo_M2_public"); + export var use_glo_M2_public_v1_public: { new (): use_glo_M2_public.c1; }; + export var use_glo_M2_public_v2_public: use_glo_M2_public; + export var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1; + var use_glo_M2_public_v1_private: { new (): use_glo_M2_public.c1; }; + var use_glo_M2_public_v2_private: use_glo_M2_public; + var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1; + + module m2 { + import errorImport = require("glo_M2_public"); + import nonerrorImport = glo_M1_public; + + module m5 { + import m5_errorImport = require("glo_M2_public"); + import m5_nonerrorImport = glo_M1_public; + } + } +} + + +declare module "use_glo_M3_private" { + import use_glo_M3_private = glo_M3_private; + export var use_glo_M3_private_v1_public: { new (): use_glo_M3_private.c1; }; + export var use_glo_M3_private_v2_public: use_glo_M3_private; + export var use_glo_M3_private_v3_public: () => use_glo_M3_private.c1; + var use_glo_M3_private_v1_private: { new (): use_glo_M3_private.c1; }; + var use_glo_M3_private_v2_private: use_glo_M3_private; + var use_glo_M3_private_v3_private: () => use_glo_M3_private.c1; + + import use_glo_M4_private = require("glo_M4_private"); + export var use_glo_M4_private_v1_public: { new (): use_glo_M4_private.c1; }; + export var use_glo_M4_private_v2_public: use_glo_M4_private; + export var use_glo_M4_private_v3_public: () => use_glo_M4_private.c1; + var use_glo_M4_private_v1_private: { new (): use_glo_M4_private.c1; }; + var use_glo_M4_private_v2_private: use_glo_M4_private; + var use_glo_M4_private_v3_private: () => use_glo_M4_private.c1; + + module m2 { + import errorImport = require("glo_M4_private"); + import nonerrorImport = glo_M3_private; + + module m5 { + import m5_errorImport = require("glo_M4_private"); + import m5_nonerrorImport = glo_M3_private; + } + } +} + +declare module "anotherParseError" { + module m2 { + declare module "abc" { + } + } + + module m2 { + module "abc2" { + } + } + module "abc3" { + } +} + +declare export module "anotherParseError2" { + module m2 { + declare module "abc" { + } + } + + module m2 { + module "abc2" { + } + } + module "abc3" { + } +} + +module m2 { + import m3 = require("use_glo_M1_public"); + module m4 { + var a = 10; + import m2 = require("use_glo_M1_public"); + } + +} + +export module m3 { + import m3 = require("use_glo_M1_public"); + module m4 { + var a = 10; + import m2 = require("use_glo_M1_public"); + } + +} + +//// [privacyImportParseErrors.js] +var m1; +(function (m1) { + var m1_M1_public; + (function (m1_M1_public) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + m1_M1_public.c1 = c1; + function f1() { + return new c1; + } + m1_M1_public.f1 = f1; + m1_M1_public.v1 = c1; + m1_M1_public.v2; + })(m1_M1_public = m1.m1_M1_public || (m1.m1_M1_public = {})); + var m1_M2_private; + (function (m1_M2_private) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + m1_M2_private.c1 = c1; + function f1() { + return new c1; + } + m1_M2_private.f1 = f1; + m1_M2_private.v1 = c1; + m1_M2_private.v2; + })(m1_M2_private || (m1_M2_private = {})); + var m1_im1_private = m1_M1_public; + m1.m1_im1_private_v1_public = m1_im1_private.c1; + m1.m1_im1_private_v2_public = new m1_im1_private.c1(); + m1.m1_im1_private_v3_public = m1_im1_private.f1; + m1.m1_im1_private_v4_public = m1_im1_private.f1(); + var m1_im1_private_v1_private = m1_im1_private.c1; + var m1_im1_private_v2_private = new m1_im1_private.c1(); + var m1_im1_private_v3_private = m1_im1_private.f1; + var m1_im1_private_v4_private = m1_im1_private.f1(); + var m1_im2_private = m1_M2_private; + m1.m1_im2_private_v1_public = m1_im2_private.c1; + m1.m1_im2_private_v2_public = new m1_im2_private.c1(); + m1.m1_im2_private_v3_public = m1_im2_private.f1; + m1.m1_im2_private_v4_public = m1_im2_private.f1(); + var m1_im2_private_v1_private = m1_im2_private.c1; + var m1_im2_private_v2_private = new m1_im2_private.c1(); + var m1_im2_private_v3_private = m1_im2_private.f1; + var m1_im2_private_v4_private = m1_im2_private.f1(); + var m1_im3_private = require("m1_M3_public"); + m1.m1_im3_private_v1_public = m1_im3_private.c1; + m1.m1_im3_private_v2_public = new m1_im3_private.c1(); + m1.m1_im3_private_v3_public = m1_im3_private.f1; + m1.m1_im3_private_v4_public = m1_im3_private.f1(); + var m1_im3_private_v1_private = m1_im3_private.c1; + var m1_im3_private_v2_private = new m1_im3_private.c1(); + var m1_im3_private_v3_private = m1_im3_private.f1; + var m1_im3_private_v4_private = m1_im3_private.f1(); + var m1_im4_private = require("m1_M4_private"); + m1.m1_im4_private_v1_public = m1_im4_private.c1; + m1.m1_im4_private_v2_public = new m1_im4_private.c1(); + m1.m1_im4_private_v3_public = m1_im4_private.f1; + m1.m1_im4_private_v4_public = m1_im4_private.f1(); + var m1_im4_private_v1_private = m1_im4_private.c1; + var m1_im4_private_v2_private = new m1_im4_private.c1(); + var m1_im4_private_v3_private = m1_im4_private.f1; + var m1_im4_private_v4_private = m1_im4_private.f1(); + m1.m1_im1_public = m1_M1_public; + m1.m1_im2_public = m1_M2_private; +})(m1 = exports.m1 || (exports.m1 = {})); +var m2; +(function (m2) { + var m2_M1_public; + (function (m2_M1_public) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + m2_M1_public.c1 = c1; + function f1() { + return new c1; + } + m2_M1_public.f1 = f1; + m2_M1_public.v1 = c1; + m2_M1_public.v2; + })(m2_M1_public = m2.m2_M1_public || (m2.m2_M1_public = {})); + var m2_M2_private; + (function (m2_M2_private) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + m2_M2_private.c1 = c1; + function f1() { + return new c1; + } + m2_M2_private.f1 = f1; + m2_M2_private.v1 = c1; + m2_M2_private.v2; + })(m2_M2_private || (m2_M2_private = {})); + var m1_im1_private = m2_M1_public; + m2.m1_im1_private_v1_public = m1_im1_private.c1; + m2.m1_im1_private_v2_public = new m1_im1_private.c1(); + m2.m1_im1_private_v3_public = m1_im1_private.f1; + m2.m1_im1_private_v4_public = m1_im1_private.f1(); + var m1_im1_private_v1_private = m1_im1_private.c1; + var m1_im1_private_v2_private = new m1_im1_private.c1(); + var m1_im1_private_v3_private = m1_im1_private.f1; + var m1_im1_private_v4_private = m1_im1_private.f1(); + var m1_im2_private = m2_M2_private; + m2.m1_im2_private_v1_public = m1_im2_private.c1; + m2.m1_im2_private_v2_public = new m1_im2_private.c1(); + m2.m1_im2_private_v3_public = m1_im2_private.f1; + m2.m1_im2_private_v4_public = m1_im2_private.f1(); + var m1_im2_private_v1_private = m1_im2_private.c1; + var m1_im2_private_v2_private = new m1_im2_private.c1(); + var m1_im2_private_v3_private = m1_im2_private.f1; + var m1_im2_private_v4_private = m1_im2_private.f1(); + var m1_im3_private = require("m2_M3_public"); + m2.m1_im3_private_v1_public = m1_im3_private.c1; + m2.m1_im3_private_v2_public = new m1_im3_private.c1(); + m2.m1_im3_private_v3_public = m1_im3_private.f1; + m2.m1_im3_private_v4_public = m1_im3_private.f1(); + var m1_im3_private_v1_private = m1_im3_private.c1; + var m1_im3_private_v2_private = new m1_im3_private.c1(); + var m1_im3_private_v3_private = m1_im3_private.f1; + var m1_im3_private_v4_private = m1_im3_private.f1(); + var m1_im4_private = require("m2_M4_private"); + m2.m1_im4_private_v1_public = m1_im4_private.c1; + m2.m1_im4_private_v2_public = new m1_im4_private.c1(); + m2.m1_im4_private_v3_public = m1_im4_private.f1; + m2.m1_im4_private_v4_public = m1_im4_private.f1(); + var m1_im4_private_v1_private = m1_im4_private.c1; + var m1_im4_private_v2_private = new m1_im4_private.c1(); + var m1_im4_private_v3_private = m1_im4_private.f1; + var m1_im4_private_v4_private = m1_im4_private.f1(); + // Parse error to export module + m2.m1_im1_public = m2_M1_public; + m2.m1_im2_public = m2_M2_private; +})(m2 || (m2 = {})); +var glo_M1_public; +(function (glo_M1_public) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + glo_M1_public.c1 = c1; + function f1() { + return new c1; + } + glo_M1_public.f1 = f1; + glo_M1_public.v1 = c1; + glo_M1_public.v2; +})(glo_M1_public = exports.glo_M1_public || (exports.glo_M1_public = {})); +var glo_M3_private; +(function (glo_M3_private) { + var c1 = (function () { + function c1() { + } + return c1; + })(); + glo_M3_private.c1 = c1; + function f1() { + return new c1; + } + glo_M3_private.f1 = f1; + glo_M3_private.v1 = c1; + glo_M3_private.v2; +})(glo_M3_private = exports.glo_M3_private || (exports.glo_M3_private = {})); +var glo_im1_private = glo_M1_public; +exports.glo_im1_private_v1_public = glo_im1_private.c1; +exports.glo_im1_private_v2_public = new glo_im1_private.c1(); +exports.glo_im1_private_v3_public = glo_im1_private.f1; +exports.glo_im1_private_v4_public = glo_im1_private.f1(); +var glo_im1_private_v1_private = glo_im1_private.c1; +var glo_im1_private_v2_private = new glo_im1_private.c1(); +var glo_im1_private_v3_private = glo_im1_private.f1; +var glo_im1_private_v4_private = glo_im1_private.f1(); +var glo_im2_private = require("glo_M2_public"); +exports.glo_im2_private_v1_public = glo_im2_private.c1; +exports.glo_im2_private_v2_public = new glo_im2_private.c1(); +exports.glo_im2_private_v3_public = glo_im2_private.f1; +exports.glo_im2_private_v4_public = glo_im2_private.f1(); +var glo_im2_private_v1_private = glo_im2_private.c1; +var glo_im2_private_v2_private = new glo_im2_private.c1(); +var glo_im2_private_v3_private = glo_im2_private.f1; +var glo_im2_private_v4_private = glo_im2_private.f1(); +var glo_im3_private = glo_M3_private; +exports.glo_im3_private_v1_public = glo_im3_private.c1; +exports.glo_im3_private_v2_public = new glo_im3_private.c1(); +exports.glo_im3_private_v3_public = glo_im3_private.f1; +exports.glo_im3_private_v4_public = glo_im3_private.f1(); +var glo_im3_private_v1_private = glo_im3_private.c1; +var glo_im3_private_v2_private = new glo_im3_private.c1(); +var glo_im3_private_v3_private = glo_im3_private.f1; +var glo_im3_private_v4_private = glo_im3_private.f1(); +var glo_im4_private = require("glo_M4_private"); +exports.glo_im4_private_v1_public = glo_im4_private.c1; +exports.glo_im4_private_v2_public = new glo_im4_private.c1(); +exports.glo_im4_private_v3_public = glo_im4_private.f1; +exports.glo_im4_private_v4_public = glo_im4_private.f1(); +var glo_im4_private_v1_private = glo_im4_private.c1; +var glo_im4_private_v2_private = new glo_im4_private.c1(); +var glo_im4_private_v3_private = glo_im4_private.f1; +var glo_im4_private_v4_private = glo_im4_private.f1(); +// Parse error to export module +exports.glo_im1_public = glo_M1_public; +exports.glo_im2_public = glo_M3_private; +var m2; +(function (m2) { + var m4; + (function (m4) { + var a = 10; + })(m4 || (m4 = {})); +})(m2 || (m2 = {})); +var m3; +(function (m3) { + var m4; + (function (m4) { + var a = 10; + })(m4 || (m4 = {})); +})(m3 = exports.m3 || (exports.m3 = {})); diff --git a/tests/baselines/reference/privateClassPropertyAccessibleWithinClass.js b/tests/baselines/reference/privateClassPropertyAccessibleWithinClass.js new file mode 100644 index 00000000000..61d1a44b121 --- /dev/null +++ b/tests/baselines/reference/privateClassPropertyAccessibleWithinClass.js @@ -0,0 +1,117 @@ +//// [privateClassPropertyAccessibleWithinClass.ts] +// no errors + +class C { + private x: string; + private get y() { return this.x; } + private set y(x) { this.y = this.x; } + private foo() { return this.foo; } + + private static x: string; + private static get y() { return this.x; } + private static set y(x) { this.y = this.x; } + private static foo() { return this.foo; } + private static bar() { this.foo(); } +} + +// added level of function nesting +class C2 { + private x: string; + private get y() { () => this.x; return null; } + private set y(x) { () => { this.y = this.x; } } + private foo() { () => this.foo; } + + private static x: string; + private static get y() { () => this.x; return null; } + private static set y(x) { + () => { this.y = this.x; } + } + private static foo() { () => this.foo; } + private static bar() { () => this.foo(); } +} + + +//// [privateClassPropertyAccessibleWithinClass.js] +// no errors +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "y", { + get: function () { + return this.x; + }, + set: function (x) { + this.y = this.x; + }, + enumerable: true, + configurable: true + }); + C.prototype.foo = function () { + return this.foo; + }; + Object.defineProperty(C, "y", { + get: function () { + return this.x; + }, + set: function (x) { + this.y = this.x; + }, + enumerable: true, + configurable: true + }); + C.foo = function () { + return this.foo; + }; + C.bar = function () { + this.foo(); + }; + return C; +})(); +// added level of function nesting +var C2 = (function () { + function C2() { + } + Object.defineProperty(C2.prototype, "y", { + get: function () { + var _this = this; + (function () { return _this.x; }); + return null; + }, + set: function (x) { + var _this = this; + (function () { + _this.y = _this.x; + }); + }, + enumerable: true, + configurable: true + }); + C2.prototype.foo = function () { + var _this = this; + (function () { return _this.foo; }); + }; + Object.defineProperty(C2, "y", { + get: function () { + var _this = this; + (function () { return _this.x; }); + return null; + }, + set: function (x) { + var _this = this; + (function () { + _this.y = _this.x; + }); + }, + enumerable: true, + configurable: true + }); + C2.foo = function () { + var _this = this; + (function () { return _this.foo; }); + }; + C2.bar = function () { + var _this = this; + (function () { return _this.foo(); }); + }; + return C2; +})(); diff --git a/tests/baselines/reference/privateIndexer.js b/tests/baselines/reference/privateIndexer.js new file mode 100644 index 00000000000..09f0c85ea5b --- /dev/null +++ b/tests/baselines/reference/privateIndexer.js @@ -0,0 +1,32 @@ +//// [privateIndexer.ts] +// private indexers not allowed + +class C { + private [x: string]: string; +} + +class D { + private [x: number]: string; +} + +class E { + private [x: string]: T; +} + +//// [privateIndexer.js] +// private indexers not allowed +var C = (function () { + function C() { + } + return C; +})(); +var D = (function () { + function D() { + } + return D; +})(); +var E = (function () { + function E() { + } + return E; +})(); diff --git a/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.json b/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.json index 0f1a27234f6..8febea7a2eb 100644 --- a/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.json +++ b/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.json @@ -8,5 +8,7 @@ "lib.d.ts", "internal2.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "internal2.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.json b/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.json index 0f1a27234f6..8febea7a2eb 100644 --- a/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.json +++ b/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.json @@ -8,5 +8,7 @@ "lib.d.ts", "internal2.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "internal2.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.json b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.json index 7dfcd59ac7b..70843a6a43b 100644 --- a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.json +++ b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.json @@ -8,5 +8,7 @@ "lib.d.ts", "test1.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "test1.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.json b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.json index 7dfcd59ac7b..70843a6a43b 100644 --- a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.json +++ b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.json @@ -8,5 +8,7 @@ "lib.d.ts", "test1.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "test1.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.json b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.json index f871a22eae3..e31d3ce8a33 100644 --- a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.json +++ b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.json @@ -8,5 +8,7 @@ "lib.d.ts", "test1.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "test1.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.json b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.json index f871a22eae3..e31d3ce8a33 100644 --- a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.json +++ b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.json @@ -8,5 +8,7 @@ "lib.d.ts", "test1.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "test1.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.json b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.json index b706c856acf..7c2ab06498a 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.json +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.json @@ -9,5 +9,7 @@ "lib.d.ts", "testGlo.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "testGlo.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/testGlo.js b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/testGlo.js new file mode 100644 index 00000000000..ecbd4af1f59 --- /dev/null +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/testGlo.js @@ -0,0 +1,63 @@ +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 m2; +(function (m2) { + m2.mExported = require("mExported"); + m2.c1 = new m2.mExported.me.class1; + function f1() { + return new m2.mExported.me.class1(); + } + m2.f1 = f1; + m2.x1 = m2.mExported.me.x; + var class1 = (function (_super) { + __extends(class1, _super); + function class1() { + _super.apply(this, arguments); + } + return class1; + })(mExported.me.class1); + m2.class1 = class1; + var c2 = new m2.mExported.me.class1; + function f2() { + return new m2.mExported.me.class1(); + } + var x2 = m2.mExported.me.x; + var class2 = (function (_super) { + __extends(class2, _super); + function class2() { + _super.apply(this, arguments); + } + return class2; + })(mExported.me.class1); + var mNonExported = require("mNonExported"); + m2.c3 = new mNonExported.mne.class1; + function f3() { + return new mNonExported.mne.class1(); + } + m2.f3 = f3; + m2.x3 = mNonExported.mne.x; + var class3 = (function (_super) { + __extends(class3, _super); + function class3() { + _super.apply(this, arguments); + } + return class3; + })(mNonExported.mne.class1); + m2.class3 = class3; + var c4 = new mNonExported.mne.class1; + function f4() { + return new mNonExported.mne.class1(); + } + var x4 = mNonExported.mne.x; + var class4 = (function (_super) { + __extends(class4, _super); + function class4() { + _super.apply(this, arguments); + } + return class4; + })(mNonExported.mne.class1); +})(m2 || (m2 = {})); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.json b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.json index b706c856acf..7c2ab06498a 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.json +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.json @@ -9,5 +9,7 @@ "lib.d.ts", "testGlo.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "testGlo.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/testGlo.js b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/testGlo.js new file mode 100644 index 00000000000..ecbd4af1f59 --- /dev/null +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/testGlo.js @@ -0,0 +1,63 @@ +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 m2; +(function (m2) { + m2.mExported = require("mExported"); + m2.c1 = new m2.mExported.me.class1; + function f1() { + return new m2.mExported.me.class1(); + } + m2.f1 = f1; + m2.x1 = m2.mExported.me.x; + var class1 = (function (_super) { + __extends(class1, _super); + function class1() { + _super.apply(this, arguments); + } + return class1; + })(mExported.me.class1); + m2.class1 = class1; + var c2 = new m2.mExported.me.class1; + function f2() { + return new m2.mExported.me.class1(); + } + var x2 = m2.mExported.me.x; + var class2 = (function (_super) { + __extends(class2, _super); + function class2() { + _super.apply(this, arguments); + } + return class2; + })(mExported.me.class1); + var mNonExported = require("mNonExported"); + m2.c3 = new mNonExported.mne.class1; + function f3() { + return new mNonExported.mne.class1(); + } + m2.f3 = f3; + m2.x3 = mNonExported.mne.x; + var class3 = (function (_super) { + __extends(class3, _super); + function class3() { + _super.apply(this, arguments); + } + return class3; + })(mNonExported.mne.class1); + m2.class3 = class3; + var c4 = new mNonExported.mne.class1; + function f4() { + return new mNonExported.mne.class1(); + } + var x4 = mNonExported.mne.x; + var class4 = (function (_super) { + __extends(class4, _super); + function class4() { + _super.apply(this, arguments); + } + return class4; + })(mNonExported.mne.class1); +})(m2 || (m2 = {})); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.json b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.json index a82fe1088ef..3d6f6839114 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.json +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.json @@ -8,5 +8,7 @@ "lib.d.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.json b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.json index a82fe1088ef..3d6f6839114 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.json +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.json @@ -8,5 +8,7 @@ "lib.d.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.json b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.json index 7da6f764326..6b6e79d9c0d 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.json +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.json @@ -8,5 +8,7 @@ "lib.d.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.json b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.json index 7da6f764326..6b6e79d9c0d 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.json +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.json @@ -8,5 +8,7 @@ "lib.d.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/propertyAndAccessorWithSameName.js b/tests/baselines/reference/propertyAndAccessorWithSameName.js new file mode 100644 index 00000000000..f466483cede --- /dev/null +++ b/tests/baselines/reference/propertyAndAccessorWithSameName.js @@ -0,0 +1,60 @@ +//// [propertyAndAccessorWithSameName.ts] +class C { + x: number; + get x() { // error + return 1; + } +} + +class D { + x: number; + set x(v) { } // error +} + +class E { + private x: number; + get x() { // error + return 1; + } + set x(v) { } +} + +//// [propertyAndAccessorWithSameName.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var D = (function () { + function D() { + } + Object.defineProperty(D.prototype, "x", { + set: function (v) { + } // error + , + enumerable: true, + configurable: true + }); + return D; +})(); +var E = (function () { + function E() { + } + Object.defineProperty(E.prototype, "x", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return E; +})(); diff --git a/tests/baselines/reference/propertyAssignment.js b/tests/baselines/reference/propertyAssignment.js new file mode 100644 index 00000000000..9aa99c8b561 --- /dev/null +++ b/tests/baselines/reference/propertyAssignment.js @@ -0,0 +1,28 @@ +//// [propertyAssignment.ts] + + +var foo1: { new ():any; } +var bar1: { x : number; } + +var foo2: { [index]; } // should be an error, used to be indexer, now it is a computed property +var bar2: { x : number; } + +var foo3: { ():void; } +var bar3: { x : number; } + + + +foo1 = bar1; // should be an error +foo2 = bar2; +foo3 = bar3; // should be an error + +//// [propertyAssignment.js] +var foo1; +var bar1; +var foo2; // should be an error, used to be indexer, now it is a computed property +var bar2; +var foo3; +var bar3; +foo1 = bar1; // should be an error +foo2 = bar2; +foo3 = bar3; // should be an error diff --git a/tests/baselines/reference/protectedMembers.js b/tests/baselines/reference/protectedMembers.js new file mode 100644 index 00000000000..dd2e113d665 --- /dev/null +++ b/tests/baselines/reference/protectedMembers.js @@ -0,0 +1,261 @@ +//// [protectedMembers.ts] +// Class with protected members +class C1 { + protected x: number; + protected static sx: number; + protected f() { + return this.x; + } + protected static sf() { + return this.sx; + } +} + +// Derived class accessing protected members +class C2 extends C1 { + protected f() { + return super.f() + this.x; + } + protected static sf() { + return super.sf() + this.sx; + } +} + +// Derived class making protected members public +class C3 extends C2 { + x: number; + static sx: number; + f() { + return super.f(); + } + static sf() { + return super.sf(); + } +} + +var c1: C1; +var c2: C2; +var c3: C3; + +// All of these should be errors +c1.x; +c1.f(); +C1.sx; +C1.sf(); + +// All of these should be errors +c2.x; +c2.f(); +C2.sx; +C2.sf(); + +// All of these should be ok +c3.x; +c3.f(); +C3.sx; +C3.sf(); + +class A { + protected x; +} + +class B extends A { + y; +} + +class C extends A { + z; + static foo(a: A, b: B, c: C, d: D, e: E) { + a.x = 1; // Error, access must be through C or type derived from C + b.x = 1; // Error, access must be through C or type derived from C + c.x = 1; + d.x = 1; + e.x = 1; + } +} + +class D extends C { + d; +} + +interface E extends C { + e; +} + +class CC { + // Error, constructor cannot be protected + protected constructor() { + } +} + +class A1 { + protected x; +} +class B1 { + x; +} +var a1: A1; +var b1: B1; +a1 = b1; // Error, B1 doesn't derive from A1 +b1 = a1; // Error, x is protected in A1 but public in B1 + +class A2 { + protected x; +} +class B2 extends A2 { + x; +} + +class A3 { + x; +} +// Error x is protected in B3 but public in A3 +class B3 extends A3 { + protected x; +} + + + +//// [protectedMembers.js] +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 __(); +}; +// Class with protected members +var C1 = (function () { + function C1() { + } + C1.prototype.f = function () { + return this.x; + }; + C1.sf = function () { + return this.sx; + }; + return C1; +})(); +// Derived class accessing protected members +var C2 = (function (_super) { + __extends(C2, _super); + function C2() { + _super.apply(this, arguments); + } + C2.prototype.f = function () { + return _super.prototype.f.call(this) + this.x; + }; + C2.sf = function () { + return _super.sf.call(this) + this.sx; + }; + return C2; +})(C1); +// Derived class making protected members public +var C3 = (function (_super) { + __extends(C3, _super); + function C3() { + _super.apply(this, arguments); + } + C3.prototype.f = function () { + return _super.prototype.f.call(this); + }; + C3.sf = function () { + return _super.sf.call(this); + }; + return C3; +})(C2); +var c1; +var c2; +var c3; +// All of these should be errors +c1.x; +c1.f(); +C1.sx; +C1.sf(); +// All of these should be errors +c2.x; +c2.f(); +C2.sx; +C2.sf(); +// All of these should be ok +c3.x; +c3.f(); +C3.sx; +C3.sf(); +var A = (function () { + function A() { + } + return A; +})(); +var B = (function (_super) { + __extends(B, _super); + function B() { + _super.apply(this, arguments); + } + return B; +})(A); +var C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + C.foo = function (a, b, c, d, e) { + a.x = 1; // Error, access must be through C or type derived from C + b.x = 1; // Error, access must be through C or type derived from C + c.x = 1; + d.x = 1; + e.x = 1; + }; + return C; +})(A); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; +})(C); +var CC = (function () { + // Error, constructor cannot be protected + function CC() { + } + return CC; +})(); +var A1 = (function () { + function A1() { + } + return A1; +})(); +var B1 = (function () { + function B1() { + } + return B1; +})(); +var a1; +var b1; +a1 = b1; // Error, B1 doesn't derive from A1 +b1 = a1; // Error, x is protected in A1 but public in B1 +var A2 = (function () { + function A2() { + } + return A2; +})(); +var B2 = (function (_super) { + __extends(B2, _super); + function B2() { + _super.apply(this, arguments); + } + return B2; +})(A2); +var A3 = (function () { + function A3() { + } + return A3; +})(); +// Error x is protected in B3 but public in A3 +var B3 = (function (_super) { + __extends(B3, _super); + function B3() { + _super.apply(this, arguments); + } + return B3; +})(A3); diff --git a/tests/baselines/reference/publicIndexer.js b/tests/baselines/reference/publicIndexer.js new file mode 100644 index 00000000000..6fc5d81b62f --- /dev/null +++ b/tests/baselines/reference/publicIndexer.js @@ -0,0 +1,32 @@ +//// [publicIndexer.ts] +// public indexers not allowed + +class C { + public [x: string]: string; +} + +class D { + public [x: number]: string; +} + +class E { + public [x: string]: T; +} + +//// [publicIndexer.js] +// public indexers not allowed +var C = (function () { + function C() { + } + return C; +})(); +var D = (function () { + function D() { + } + return D; +})(); +var E = (function () { + function E() { + } + return E; +})(); diff --git a/tests/baselines/reference/quotedAccessorName1.js b/tests/baselines/reference/quotedAccessorName1.js new file mode 100644 index 00000000000..93fd5b8dd6b --- /dev/null +++ b/tests/baselines/reference/quotedAccessorName1.js @@ -0,0 +1,18 @@ +//// [quotedAccessorName1.ts] +class C { + get "foo"() { return 0; } +} + +//// [quotedAccessorName1.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "foo", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/quotedAccessorName2.js b/tests/baselines/reference/quotedAccessorName2.js new file mode 100644 index 00000000000..43041a29bf4 --- /dev/null +++ b/tests/baselines/reference/quotedAccessorName2.js @@ -0,0 +1,18 @@ +//// [quotedAccessorName2.ts] +class C { + static get "foo"() { return 0; } +} + +//// [quotedAccessorName2.js] +var C = (function () { + function C() { + } + Object.defineProperty(C, "foo", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/quotedModuleNameMustBeAmbient.js b/tests/baselines/reference/quotedModuleNameMustBeAmbient.js new file mode 100644 index 00000000000..03973bb64a2 --- /dev/null +++ b/tests/baselines/reference/quotedModuleNameMustBeAmbient.js @@ -0,0 +1,6 @@ +//// [quotedModuleNameMustBeAmbient.ts] +module 'M' {} + +declare module 'M2' {} + +//// [quotedModuleNameMustBeAmbient.js] diff --git a/tests/baselines/reference/recursiveGetterAccess.js b/tests/baselines/reference/recursiveGetterAccess.js new file mode 100644 index 00000000000..cf042c2c1a0 --- /dev/null +++ b/tests/baselines/reference/recursiveGetterAccess.js @@ -0,0 +1,20 @@ +//// [recursiveGetterAccess.ts] +class MyClass { +get testProp() { return this.testProp; } +} + + + +//// [recursiveGetterAccess.js] +var MyClass = (function () { + function MyClass() { + } + Object.defineProperty(MyClass.prototype, "testProp", { + get: function () { + return this.testProp; + }, + enumerable: true, + configurable: true + }); + return MyClass; +})(); diff --git a/tests/baselines/reference/recursiveInferenceBug.js b/tests/baselines/reference/recursiveInferenceBug.js new file mode 100644 index 00000000000..cffa96415dc --- /dev/null +++ b/tests/baselines/reference/recursiveInferenceBug.js @@ -0,0 +1,25 @@ +//// [recursiveInferenceBug.ts] +function f(x: number) { + var z = f(x); + return x; +} + + +var zz = { + g: () =>{ }, + get f() { return "abc"; }, +}; + + +//// [recursiveInferenceBug.js] +function f(x) { + var z = f(x); + return x; +} +var zz = { + g: function () { + }, + get f() { + return "abc"; + } +}; diff --git a/tests/baselines/reference/recursiveSpecializationOfSignatures.js b/tests/baselines/reference/recursiveSpecializationOfSignatures.js new file mode 100644 index 00000000000..7542e85616a --- /dev/null +++ b/tests/baselines/reference/recursiveSpecializationOfSignatures.js @@ -0,0 +1,21 @@ +//// [recursiveSpecializationOfSignatures.ts] +class S0 { +set S1(S2: S0) { +} +constructor(public S17: S0 A>) { } +} + + +//// [recursiveSpecializationOfSignatures.js] +var S0 = (function () { + function S0(S17) { + this.S17 = S17; + } + Object.defineProperty(S0.prototype, "S1", { + set: function (S2) { + }, + enumerable: true, + configurable: true + }); + return S0; +})(); diff --git a/tests/baselines/reference/restParamAsOptional.js b/tests/baselines/reference/restParamAsOptional.js new file mode 100644 index 00000000000..59aea1cc9c4 --- /dev/null +++ b/tests/baselines/reference/restParamAsOptional.js @@ -0,0 +1,18 @@ +//// [restParamAsOptional.ts] +function f(...x?) { } +function f2(...x = []) { } + +//// [restParamAsOptional.js] +function f() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +} +function f2() { + if (x === void 0) { x = []; } + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +} diff --git a/tests/baselines/reference/restParameterNotLast.js b/tests/baselines/reference/restParameterNotLast.js new file mode 100644 index 00000000000..791d83849a1 --- /dev/null +++ b/tests/baselines/reference/restParameterNotLast.js @@ -0,0 +1,6 @@ +//// [restParameterNotLast.ts] +function f(...x, y) { } + +//// [restParameterNotLast.js] +function f(x, y) { +} diff --git a/tests/baselines/reference/restParameterWithoutAnnotationIsAnyArray.js b/tests/baselines/reference/restParameterWithoutAnnotationIsAnyArray.js new file mode 100644 index 00000000000..c800c628c9c --- /dev/null +++ b/tests/baselines/reference/restParameterWithoutAnnotationIsAnyArray.js @@ -0,0 +1,80 @@ +//// [restParameterWithoutAnnotationIsAnyArray.ts] +// Rest parameters without type annotations are 'any', errors only for the functions with 2 rest params + +function foo(...x) { } +var f = function foo(...x) { } +var f2 = (...x, ...y) => { } + +class C { + foo(...x) { } +} + +interface I { + (...x); + foo(...x, ...y); +} + +var a: { + (...x); + foo(...x); +} + +var b = { + foo(...x) { }, + a: function foo(...x, ...y) { }, + b: (...x) => { } +} + + +//// [restParameterWithoutAnnotationIsAnyArray.js] +// Rest parameters without type annotations are 'any', errors only for the functions with 2 rest params +function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +} +var f = function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +}; +var f2 = function (x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } +}; +var C = (function () { + function C() { + } + C.prototype.foo = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }; + return C; +})(); +var a; +var b = { + foo: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }, + a: function foo(x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } + }, + b: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + } +}; diff --git a/tests/baselines/reference/restParametersOfNonArrayTypes.js b/tests/baselines/reference/restParametersOfNonArrayTypes.js new file mode 100644 index 00000000000..f6f6a8af44d --- /dev/null +++ b/tests/baselines/reference/restParametersOfNonArrayTypes.js @@ -0,0 +1,79 @@ +//// [restParametersOfNonArrayTypes.ts] +// Rest parameters must be an array type if they have a type annotation, so all these are errors + +function foo(...x: string) { } +var f = function foo(...x: number) { } +var f2 = (...x: Date, ...y: boolean) => { } + +class C { + foo(...x: C) { } +} + +interface I { + (...x: string); + foo(...x: number, ...y: number); +} + +var a: { + (...x: string); + foo(...x: string); +} + +var b = { + foo(...x: string) { }, + a: function foo(...x: number, ...y: Date) { }, + b: (...x: string) => { } +} + +//// [restParametersOfNonArrayTypes.js] +// Rest parameters must be an array type if they have a type annotation, so all these are errors +function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +} +var f = function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +}; +var f2 = function (x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } +}; +var C = (function () { + function C() { + } + C.prototype.foo = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }; + return C; +})(); +var a; +var b = { + foo: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }, + a: function foo(x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } + }, + b: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + } +}; diff --git a/tests/baselines/reference/restParametersOfNonArrayTypes2.js b/tests/baselines/reference/restParametersOfNonArrayTypes2.js new file mode 100644 index 00000000000..73d0ddaeef2 --- /dev/null +++ b/tests/baselines/reference/restParametersOfNonArrayTypes2.js @@ -0,0 +1,161 @@ +//// [restParametersOfNonArrayTypes2.ts] +// Rest parameters must be an array type if they have a type annotation, +// user defined subtypes of array do not count, all of these are errors + +interface MyThing extends Array { } +interface MyThing2 extends Array { } + +function foo(...x: MyThing) { } +var f = function foo(...x: MyThing) { } +var f2 = (...x: MyThing, ...y: MyThing) => { } + +class C { + foo(...x: MyThing) { } +} + +interface I { + (...x: MyThing); + foo(...x: MyThing, ...y: MyThing); +} + +var a: { + (...x: MyThing); + foo(...x: MyThing); +} + +var b = { + foo(...x: MyThing) { }, + a: function foo(...x: MyThing, ...y: MyThing) { }, + b: (...x: MyThing) => { } +} + + + + +function foo2(...x: MyThing2) { } +var f3 = function foo(...x: MyThing2) { } +var f4 = (...x: MyThing2, ...y: MyThing2) => { } + +class C2 { + foo(...x: MyThing2) { } +} + +interface I2 { + (...x: MyThing2); + foo(...x: MyThing2, ...y: MyThing2); +} + +var a2: { + (...x: MyThing2); + foo(...x: MyThing2); +} + +var b2 = { + foo(...x: MyThing2) { }, + a: function foo(...x: MyThing2, ...y: MyThing2) { }, + b: (...x: MyThing2) => { } +} + +//// [restParametersOfNonArrayTypes2.js] +// Rest parameters must be an array type if they have a type annotation, +// user defined subtypes of array do not count, all of these are errors +function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +} +var f = function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +}; +var f2 = function (x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } +}; +var C = (function () { + function C() { + } + C.prototype.foo = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }; + return C; +})(); +var a; +var b = { + foo: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }, + a: function foo(x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } + }, + b: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + } +}; +function foo2() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +} +var f3 = function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +}; +var f4 = function (x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } +}; +var C2 = (function () { + function C2() { + } + C2.prototype.foo = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }; + return C2; +})(); +var a2; +var b2 = { + foo: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }, + a: function foo(x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } + }, + b: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + } +}; diff --git a/tests/baselines/reference/restParametersWithArrayTypeAnnotations.js b/tests/baselines/reference/restParametersWithArrayTypeAnnotations.js new file mode 100644 index 00000000000..c7d1dee9295 --- /dev/null +++ b/tests/baselines/reference/restParametersWithArrayTypeAnnotations.js @@ -0,0 +1,156 @@ +//// [restParametersWithArrayTypeAnnotations.ts] +// Rest parameters must be an array type if they have a type annotation, errors only for the functions with 2 rest params + +function foo(...x: number[]) { } +var f = function foo(...x: number[]) { } +var f2 = (...x: number[], ...y: number[]) => { } + +class C { + foo(...x: number[]) { } +} + +interface I { + (...x: number[]); + foo(...x: number[], ...y: number[]); +} + +var a: { + (...x: number[]); + foo(...x: number[]); +} + +var b = { + foo(...x: number[]) { }, + a: function foo(...x: number[], ...y: number[]) { }, + b: (...x: number[]) => { } +} + + + + +function foo2(...x: Array) { } +var f3 = function foo(...x: Array) { } +var f4 = (...x: Array, ...y: Array) => { } + +class C2 { + foo(...x: Array) { } +} + +interface I2 { + (...x: Array); + foo(...x: Array, ...y: Array); +} + +var a2: { + (...x: Array); + foo(...x: Array); +} + +var b2 = { + foo(...x: Array) { }, + a: function foo(...x: Array, ...y: Array) { }, + b: (...x: Array) => { } +} + +//// [restParametersWithArrayTypeAnnotations.js] +// Rest parameters must be an array type if they have a type annotation, errors only for the functions with 2 rest params +function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +} +var f = function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +}; +var f2 = function (x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } +}; +var C = (function () { + function C() { + } + C.prototype.foo = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }; + return C; +})(); +var a; +var b = { + foo: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }, + a: function foo(x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } + }, + b: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + } +}; +function foo2() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +} +var f3 = function foo() { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } +}; +var f4 = function (x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } +}; +var C2 = (function () { + function C2() { + } + C2.prototype.foo = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }; + return C2; +})(); +var a2; +var b2 = { + foo: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + }, + a: function foo(x) { + var y = []; + for (var _i = 1; _i < arguments.length; _i++) { + y[_i - 1] = arguments[_i]; + } + }, + b: function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i - 0] = arguments[_i]; + } + } +}; diff --git a/tests/baselines/reference/returnValueInSetter.js b/tests/baselines/reference/returnValueInSetter.js new file mode 100644 index 00000000000..6774bab6c4e --- /dev/null +++ b/tests/baselines/reference/returnValueInSetter.js @@ -0,0 +1,22 @@ +//// [returnValueInSetter.ts] +class f { + set x(value) { + return null; // Should be an error + } +} + + + +//// [returnValueInSetter.js] +var f = (function () { + function f() { + } + Object.defineProperty(f.prototype, "x", { + set: function (value) { + return null; // Should be an error + }, + enumerable: true, + configurable: true + }); + return f; +})(); diff --git a/tests/baselines/reference/scannerNumericLiteral2.js b/tests/baselines/reference/scannerNumericLiteral2.js new file mode 100644 index 00000000000..382f1e6e4df --- /dev/null +++ b/tests/baselines/reference/scannerNumericLiteral2.js @@ -0,0 +1,5 @@ +//// [scannerNumericLiteral2.ts] +01 + +//// [scannerNumericLiteral2.js] +01; diff --git a/tests/baselines/reference/scannerNumericLiteral8.js b/tests/baselines/reference/scannerNumericLiteral8.js new file mode 100644 index 00000000000..6d5cf860d6c --- /dev/null +++ b/tests/baselines/reference/scannerNumericLiteral8.js @@ -0,0 +1,5 @@ +//// [scannerNumericLiteral8.ts] +-03 + +//// [scannerNumericLiteral8.js] +-03; diff --git a/tests/baselines/reference/semicolonsInModuleDeclarations.js b/tests/baselines/reference/semicolonsInModuleDeclarations.js new file mode 100644 index 00000000000..327fcbcde2f --- /dev/null +++ b/tests/baselines/reference/semicolonsInModuleDeclarations.js @@ -0,0 +1,13 @@ +//// [semicolonsInModuleDeclarations.ts] +declare module ambiModule { + export interface i1 { }; + export interface i2 { } +} + +var n1: ambiModule.i1; +var n2: ambiModule.i2; + + +//// [semicolonsInModuleDeclarations.js] +var n1; +var n2; diff --git a/tests/baselines/reference/setterBeforeGetter.js b/tests/baselines/reference/setterBeforeGetter.js new file mode 100644 index 00000000000..c897198c2dd --- /dev/null +++ b/tests/baselines/reference/setterBeforeGetter.js @@ -0,0 +1,31 @@ +//// [setterBeforeGetter.ts] +class Foo { + + private _bar: { a: string; }; + // should not be an error to order them this way + set bar(thing: { a: string; }) { + this._bar = thing; + } + get bar(): { a: string; } { + return this._bar; + } +} + + +//// [setterBeforeGetter.js] +var Foo = (function () { + function Foo() { + } + Object.defineProperty(Foo.prototype, "bar", { + get: function () { + return this._bar; + }, + // should not be an error to order them this way + set: function (thing) { + this._bar = thing; + }, + enumerable: true, + configurable: true + }); + return Foo; +})(); diff --git a/tests/baselines/reference/setterWithReturn.js b/tests/baselines/reference/setterWithReturn.js new file mode 100644 index 00000000000..995cde87509 --- /dev/null +++ b/tests/baselines/reference/setterWithReturn.js @@ -0,0 +1,30 @@ +//// [setterWithReturn.ts] +class C234 { + public set p1(arg1) { + if (true) { + return arg1; + } + else { + return 0; + } + } +} + +//// [setterWithReturn.js] +var C234 = (function () { + function C234() { + } + Object.defineProperty(C234.prototype, "p1", { + set: function (arg1) { + if (true) { + return arg1; + } + else { + return 0; + } + }, + enumerable: true, + configurable: true + }); + return C234; +})(); diff --git a/tests/baselines/reference/spaceBeforeQuestionMarkInPropertyAssignment.js b/tests/baselines/reference/spaceBeforeQuestionMarkInPropertyAssignment.js new file mode 100644 index 00000000000..d439cc3b020 --- /dev/null +++ b/tests/baselines/reference/spaceBeforeQuestionMarkInPropertyAssignment.js @@ -0,0 +1,5 @@ +//// [spaceBeforeQuestionMarkInPropertyAssignment.ts] +var x = {x ?: 1} // should not crash + +//// [spaceBeforeQuestionMarkInPropertyAssignment.js] +var x = { x: 1 }; // should not crash diff --git a/tests/baselines/reference/standaloneBreak.js b/tests/baselines/reference/standaloneBreak.js new file mode 100644 index 00000000000..aed2f7d666f --- /dev/null +++ b/tests/baselines/reference/standaloneBreak.js @@ -0,0 +1,5 @@ +//// [standaloneBreak.ts] +break; + +//// [standaloneBreak.js] +break; diff --git a/tests/baselines/reference/staticAsIdentifier.js b/tests/baselines/reference/staticAsIdentifier.js new file mode 100644 index 00000000000..36e317b2875 --- /dev/null +++ b/tests/baselines/reference/staticAsIdentifier.js @@ -0,0 +1,12 @@ +//// [staticAsIdentifier.ts] +class C { + static static + [x: string]: string; +} + +//// [staticAsIdentifier.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/staticGetter1.js b/tests/baselines/reference/staticGetter1.js new file mode 100644 index 00000000000..3772364804a --- /dev/null +++ b/tests/baselines/reference/staticGetter1.js @@ -0,0 +1,23 @@ +//// [staticGetter1.ts] +// once caused stack overflow +class C { + static get x() { + return this; + } +} + + +//// [staticGetter1.js] +// once caused stack overflow +var C = (function () { + function C() { + } + Object.defineProperty(C, "x", { + get: function () { + return this; + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/staticGetterAndSetter.js b/tests/baselines/reference/staticGetterAndSetter.js new file mode 100644 index 00000000000..7c6ef26e739 --- /dev/null +++ b/tests/baselines/reference/staticGetterAndSetter.js @@ -0,0 +1,22 @@ +//// [staticGetterAndSetter.ts] +class Foo { + static get Foo():number { return 0; } + static set Foo(n: number) {} +} + + +//// [staticGetterAndSetter.js] +var Foo = (function () { + function Foo() { + } + Object.defineProperty(Foo, "Foo", { + get: function () { + return 0; + }, + set: function (n) { + }, + enumerable: true, + configurable: true + }); + return Foo; +})(); diff --git a/tests/baselines/reference/staticIndexer.js b/tests/baselines/reference/staticIndexer.js new file mode 100644 index 00000000000..f945cf686b0 --- /dev/null +++ b/tests/baselines/reference/staticIndexer.js @@ -0,0 +1,11 @@ +//// [staticIndexer.ts] +class C { + static [s: string]: number; +} + +//// [staticIndexer.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/staticIndexers.js b/tests/baselines/reference/staticIndexers.js new file mode 100644 index 00000000000..4c8a0bc1ec8 --- /dev/null +++ b/tests/baselines/reference/staticIndexers.js @@ -0,0 +1,32 @@ +//// [staticIndexers.ts] +// static indexers not allowed + +class C { + static [x: string]: string; +} + +class D { + static [x: number]: string; +} + +class E { + static [x: string]: T; +} + +//// [staticIndexers.js] +// static indexers not allowed +var C = (function () { + function C() { + } + return C; +})(); +var D = (function () { + function D() { + } + return D; +})(); +var E = (function () { + function E() { + } + return E; +})(); diff --git a/tests/baselines/reference/staticModifierAlreadySeen.js b/tests/baselines/reference/staticModifierAlreadySeen.js new file mode 100644 index 00000000000..b097f3924e4 --- /dev/null +++ b/tests/baselines/reference/staticModifierAlreadySeen.js @@ -0,0 +1,15 @@ +//// [staticModifierAlreadySeen.ts] +class C { + static static foo = 1; + public static static bar() { } +} + +//// [staticModifierAlreadySeen.js] +var C = (function () { + function C() { + } + C.bar = function () { + }; + C.foo = 1; + return C; +})(); diff --git a/tests/baselines/reference/staticMustPrecedePublic.js b/tests/baselines/reference/staticMustPrecedePublic.js new file mode 100644 index 00000000000..45882488e72 --- /dev/null +++ b/tests/baselines/reference/staticMustPrecedePublic.js @@ -0,0 +1,13 @@ +//// [staticMustPrecedePublic.ts] +class Outer { + static public intI: number; + static private stringF: string; +} + + +//// [staticMustPrecedePublic.js] +var Outer = (function () { + function Outer() { + } + return Outer; +})(); diff --git a/tests/baselines/reference/staticPropertyNotInClassType.js b/tests/baselines/reference/staticPropertyNotInClassType.js new file mode 100644 index 00000000000..22ff4276deb --- /dev/null +++ b/tests/baselines/reference/staticPropertyNotInClassType.js @@ -0,0 +1,104 @@ +//// [staticPropertyNotInClassType.ts] +module NonGeneric { + class C { + fn() { return this; } + static get x() { return 1; } + static set x(v) { } + constructor(public a: number, private b: number) { } + static foo: string; // not reflected in class type + } + + module C { + export var bar = ''; // not reflected in class type + } + + var c = new C(1, 2); + var r = c.fn(); + var r4 = c.foo; // error + var r5 = c.bar; // error + var r6 = c.x; // error +} + +module Generic { + class C { + fn() { return this; } + static get x() { return 1; } + static set x(v) { } + constructor(public a: T, private b: U) { } + static foo: T; // not reflected in class type + } + + module C { + export var bar = ''; // not reflected in class type + } + + var c = new C(1, ''); + var r = c.fn(); + var r4 = c.foo; // error + var r5 = c.bar; // error + var r6 = c.x; // error +} + +//// [staticPropertyNotInClassType.js] +var NonGeneric; +(function (NonGeneric) { + var C = (function () { + function C(a, b) { + this.a = a; + this.b = b; + } + C.prototype.fn = function () { + return this; + }; + Object.defineProperty(C, "x", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; + })(); + var C; + (function (C) { + C.bar = ''; // not reflected in class type + })(C || (C = {})); + var c = new C(1, 2); + var r = c.fn(); + var r4 = c.foo; // error + var r5 = c.bar; // error + var r6 = c.x; // error +})(NonGeneric || (NonGeneric = {})); +var Generic; +(function (Generic) { + var C = (function () { + function C(a, b) { + this.a = a; + this.b = b; + } + C.prototype.fn = function () { + return this; + }; + Object.defineProperty(C, "x", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; + })(); + var C; + (function (C) { + C.bar = ''; // not reflected in class type + })(C || (C = {})); + var c = new C(1, ''); + var r = c.fn(); + var r4 = c.foo; // error + var r5 = c.bar; // error + var r6 = c.x; // error +})(Generic || (Generic = {})); diff --git a/tests/baselines/reference/staticVisibility.js b/tests/baselines/reference/staticVisibility.js new file mode 100644 index 00000000000..0da2e3dbe2c --- /dev/null +++ b/tests/baselines/reference/staticVisibility.js @@ -0,0 +1,73 @@ +//// [staticVisibility.ts] + +class C1 { + + p: any; + static s: any; + + constructor() { + var v = 0; + + s = 1; // should be error + C1.s = 1; // should be ok + + b(); // should be error + C1.b(); // should be ok + } + + static b() { + v = 1; // should be error + this.p = 0; // should be error + C1.s = 1; // should be ok + } +} + +class C2 { + +barback:string = ""; + + + + +static get Bar() {return "bar";} // ok + +static set Bar(bar:string) {barback = bar;} // not ok + +} + + + +//// [staticVisibility.js] +var C1 = (function () { + function C1() { + var v = 0; + s = 1; // should be error + C1.s = 1; // should be ok + b(); // should be error + C1.b(); // should be ok + } + C1.b = function () { + v = 1; // should be error + this.p = 0; // should be error + C1.s = 1; // should be ok + }; + return C1; +})(); +var C2 = (function () { + function C2() { + this.barback = ""; + } + Object.defineProperty(C2, "Bar", { + get: function () { + return "bar"; + } // ok + , + set: function (bar) { + barback = bar; + } // not ok + , + enumerable: true, + configurable: true + }); + return C2; +})(); diff --git a/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.js b/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.js new file mode 100644 index 00000000000..ed96311f526 --- /dev/null +++ b/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.js @@ -0,0 +1,151 @@ +//// [stringIndexerConstrainsPropertyDeclarations.ts] +// String indexer types constrain the types of named properties in their containing type + +interface MyString extends String { + foo: number; +} + +class C { + [x: string]: string; + + constructor() { } // ok + + a: string; // ok + b: number; // error + c: () => {} // error + "d": string; // ok + "e": number; // error + 1.0: string; // ok + 2.0: number; // error + "3.0": string; // ok + "4.0": number; // error + f: MyString; // error + + get X() { // ok + return ''; + } + set X(v) { } // ok + + foo() { // error + return ''; + } + + static sa: number; // ok + static sb: string; // ok + + static foo() { } // ok + static get X() { // ok + return 1; + } +} + +interface I { + [x: string]: string; + + a: string; // ok + b: number; // error + c: () => {} // error + "d": string; // ok + "e": number; // error + 1.0: string; // ok + 2.0: number; // error + (): string; // ok + (x): number // ok + foo(): string; // error + "3.0": string; // ok + "4.0": number; // error + f: MyString; // error +} + +var a: { + [x: string]: string; + + a: string; // ok + b: number; // error + c: () => {} // error + "d": string; // ok + "e": number; // error + 1.0: string; // ok + 2.0: number; // error + (): string; // ok + (x): number // ok + foo(): string; // error + "3.0": string; // ok + "4.0": number; // error + f: MyString; // error +} + +// error +var b: { [x: string]: string; } = { + a: '', + b: 1, + c: () => { }, + "d": '', + "e": 1, + 1.0: '', + 2.0: 1, + "3.0": '', + "4.0": 1, + f: null, + + get X() { + return ''; + }, + set X(v) { }, + foo() { + return ''; + } +} + +//// [stringIndexerConstrainsPropertyDeclarations.js] +// String indexer types constrain the types of named properties in their containing type +var C = (function () { + function C() { + } // ok + Object.defineProperty(C.prototype, "X", { + get: function () { + return ''; + }, + set: function (v) { + } // ok + , + enumerable: true, + configurable: true + }); + C.prototype.foo = function () { + return ''; + }; + C.foo = function () { + }; // ok + Object.defineProperty(C, "X", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var a; +// error +var b = { + a: '', + b: 1, + c: function () { + }, + "d": '', + "e": 1, + 1.0: '', + 2.0: 1, + "3.0": '', + "4.0": 1, + f: null, + get X() { + return ''; + }, + set X(v) { + }, + foo: function () { + return ''; + } +}; diff --git a/tests/baselines/reference/superCallInNonStaticMethod.js b/tests/baselines/reference/superCallInNonStaticMethod.js new file mode 100644 index 00000000000..cf29ac3b1a4 --- /dev/null +++ b/tests/baselines/reference/superCallInNonStaticMethod.js @@ -0,0 +1,113 @@ +//// [superCallInNonStaticMethod.ts] +class Doing { + public instanceMethod() { + } +} + +class Other extends Doing { + // in instance method + public instanceMethod() { + super.instanceMethod(); + } + + // in a lambda inside a instance method + public lambdaInsideAnInstanceMethod() { + () => { + super.instanceMethod(); + } + } + + // in an object literal inside a instance method + public objectLiteralInsideAnInstanceMethod() { + return { + a: () => { + super.instanceMethod(); + }, + b: super.instanceMethod() + }; + } + + // in a getter + public get accessor() { + super.instanceMethod(); + + return 0; + } + + // in a setter + public set accessor(value: number) { + super.instanceMethod(); + } + + constructor() { + super(); + super.instanceMethod(); + } + + public propertyInitializer = super.instanceMethod(); + + public functionProperty = () => {super.instanceMethod(); }; +} + + +//// [superCallInNonStaticMethod.js] +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 Doing = (function () { + function Doing() { + } + Doing.prototype.instanceMethod = function () { + }; + return Doing; +})(); +var Other = (function (_super) { + __extends(Other, _super); + function Other() { + var _this = this; + _super.call(this); + this.propertyInitializer = _super.prototype.instanceMethod.call(this); + this.functionProperty = function () { + _super.prototype.instanceMethod.call(_this); + }; + _super.prototype.instanceMethod.call(this); + } + // in instance method + Other.prototype.instanceMethod = function () { + _super.prototype.instanceMethod.call(this); + }; + // in a lambda inside a instance method + Other.prototype.lambdaInsideAnInstanceMethod = function () { + var _this = this; + (function () { + _super.prototype.instanceMethod.call(_this); + }); + }; + // in an object literal inside a instance method + Other.prototype.objectLiteralInsideAnInstanceMethod = function () { + var _this = this; + return { + a: function () { + _super.prototype.instanceMethod.call(_this); + }, + b: _super.prototype.instanceMethod.call(this) + }; + }; + Object.defineProperty(Other.prototype, "accessor", { + // in a getter + get: function () { + _super.prototype.instanceMethod.call(this); + return 0; + }, + // in a setter + set: function (value) { + _super.prototype.instanceMethod.call(this); + }, + enumerable: true, + configurable: true + }); + return Other; +})(Doing); diff --git a/tests/baselines/reference/superCallInStaticMethod.js b/tests/baselines/reference/superCallInStaticMethod.js new file mode 100644 index 00000000000..820551724ac --- /dev/null +++ b/tests/baselines/reference/superCallInStaticMethod.js @@ -0,0 +1,108 @@ +//// [superCallInStaticMethod.ts] +class Doing { + public static staticMethod() { + } +} + +class Other extends Doing { + // in static method + public static staticMethod() { + super.staticMethod(); + } + + // in a lambda inside a static method + public static lambdaInsideAStaticMethod() { + () => { + super.staticMethod(); + } + } + + // in an object literal inside a static method + public static objectLiteralInsideAStaticMethod() { + return { + a: () => { + super.staticMethod(); + }, + b: super.staticMethod() + }; + } + + // in a getter + public static get staticGetter() { + super.staticMethod(); + + return 0; + } + + // in a setter + public static set staticGetter(value: number) { + super.staticMethod(); + } + + // in static method + public static initializerInAStaticMethod(a = super.staticMethod()) { + super.staticMethod(); + } +} + + +//// [superCallInStaticMethod.js] +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 Doing = (function () { + function Doing() { + } + Doing.staticMethod = function () { + }; + return Doing; +})(); +var Other = (function (_super) { + __extends(Other, _super); + function Other() { + _super.apply(this, arguments); + } + // in static method + Other.staticMethod = function () { + _super.staticMethod.call(this); + }; + // in a lambda inside a static method + Other.lambdaInsideAStaticMethod = function () { + var _this = this; + (function () { + _super.staticMethod.call(_this); + }); + }; + // in an object literal inside a static method + Other.objectLiteralInsideAStaticMethod = function () { + var _this = this; + return { + a: function () { + _super.staticMethod.call(_this); + }, + b: _super.staticMethod.call(this) + }; + }; + Object.defineProperty(Other, "staticGetter", { + // in a getter + get: function () { + _super.staticMethod.call(this); + return 0; + }, + // in a setter + set: function (value) { + _super.staticMethod.call(this); + }, + enumerable: true, + configurable: true + }); + // in static method + Other.initializerInAStaticMethod = function (a) { + if (a === void 0) { a = _super.staticMethod.call(this); } + _super.staticMethod.call(this); + }; + return Other; +})(Doing); diff --git a/tests/baselines/reference/superPropertyAccess.js b/tests/baselines/reference/superPropertyAccess.js new file mode 100644 index 00000000000..a9ee2352c76 --- /dev/null +++ b/tests/baselines/reference/superPropertyAccess.js @@ -0,0 +1,89 @@ +//// [superPropertyAccess.ts] + +class MyBase { + m1(a: string) { return a; } + private p1() { } + m2: () => void = function () { } + d1: number = 42; + private d2: number = 42; + get value() {return 0 } + set value(v: number) { } +} + + +class MyDerived extends MyBase { + + foo() { + super.m1("hi"); // Should be allowed, method on base prototype + + var l2 = super.m1.bind(this); // Should be allowed, can access properties as well as invoke + + var x: (a: string) => string = super.m1; // Should be allowed, can assign to var with compatible signature + + super.m2.bind(this); // Should error, instance property, not a public instance member function + + super.p1(); // Should error, private not public instance member function + + var l1 = super.d1; // Should error, instance data property not a public instance member function + + var l1 = super.d2; // Should error, instance data property not a public instance member function + + super.m1 = function (a: string) { return ""; }; // Should be allowed, we will not restrict assignment + + super.value = 0; // Should error, instance data property not a public instance member function + + var z = super.value; // Should error, instance data property not a public instance member function + } +} + +//// [superPropertyAccess.js] +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 MyBase = (function () { + function MyBase() { + this.m2 = function () { + }; + this.d1 = 42; + this.d2 = 42; + } + MyBase.prototype.m1 = function (a) { + return a; + }; + MyBase.prototype.p1 = function () { + }; + Object.defineProperty(MyBase.prototype, "value", { + get: function () { + return 0; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return MyBase; +})(); +var MyDerived = (function (_super) { + __extends(MyDerived, _super); + function MyDerived() { + _super.apply(this, arguments); + } + MyDerived.prototype.foo = function () { + _super.prototype.m1.call(this, "hi"); // Should be allowed, method on base prototype + var l2 = _super.prototype.m1.bind(this); // Should be allowed, can access properties as well as invoke + var x = _super.prototype.m1; // Should be allowed, can assign to var with compatible signature + _super.prototype.m2.bind(this); // Should error, instance property, not a public instance member function + _super.prototype.p1.call(this); // Should error, private not public instance member function + var l1 = _super.prototype.d1; // Should error, instance data property not a public instance member function + var l1 = _super.prototype.d2; // Should error, instance data property not a public instance member function + _super.prototype.m1 = function (a) { + return ""; + }; // Should be allowed, we will not restrict assignment + _super.prototype.value = 0; // Should error, instance data property not a public instance member function + var z = _super.prototype.value; // Should error, instance data property not a public instance member function + }; + return MyDerived; +})(MyBase); diff --git a/tests/baselines/reference/superPropertyAccess1.js b/tests/baselines/reference/superPropertyAccess1.js new file mode 100644 index 00000000000..8b1e855e0a3 --- /dev/null +++ b/tests/baselines/reference/superPropertyAccess1.js @@ -0,0 +1,74 @@ +//// [superPropertyAccess1.ts] +class C { + public foo() { } + public get x() { + return 1; + } + + public bar() { } +} + +class D extends C { + public foo() { + super.bar(); + super.x; // error + } + + constructor() { + super(); + super.bar(); + super.x; // error + } + + public get y() { + super.bar(); + super.x; // error + return 1; + } +} + +//// [superPropertyAccess1.js] +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 C = (function () { + function C() { + } + C.prototype.foo = function () { + }; + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + C.prototype.bar = function () { + }; + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.call(this); + _super.prototype.bar.call(this); + _super.prototype.x; // error + } + D.prototype.foo = function () { + _super.prototype.bar.call(this); + _super.prototype.x; // error + }; + Object.defineProperty(D.prototype, "y", { + get: function () { + _super.prototype.bar.call(this); + _super.prototype.x; // error + return 1; + }, + enumerable: true, + configurable: true + }); + return D; +})(C); diff --git a/tests/baselines/reference/superPropertyAccess2.js b/tests/baselines/reference/superPropertyAccess2.js new file mode 100644 index 00000000000..98beb078e2f --- /dev/null +++ b/tests/baselines/reference/superPropertyAccess2.js @@ -0,0 +1,74 @@ +//// [superPropertyAccess2.ts] +class C { + public static foo() { } + public get x() { + return 1; + } + + public static bar() { } +} + +class D extends C { + public static foo() { + super.bar(); // OK + super.x; // error + } + + constructor() { + super(); + super.bar(); // error + super.x; // error + } + + public static get y() { + super.bar(); // OK + super.x; // error + return 1; + } +} + +//// [superPropertyAccess2.js] +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 C = (function () { + function C() { + } + C.foo = function () { + }; + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + C.bar = function () { + }; + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.call(this); + _super.prototype.bar.call(this); // error + _super.prototype.x; // error + } + D.foo = function () { + _super.bar.call(this); // OK + _super.x; // error + }; + Object.defineProperty(D, "y", { + get: function () { + _super.bar.call(this); // OK + _super.x; // error + return 1; + }, + enumerable: true, + configurable: true + }); + return D; +})(C); diff --git a/tests/baselines/reference/superPropertyAccessNoError.js b/tests/baselines/reference/superPropertyAccessNoError.js new file mode 100644 index 00000000000..e49a2c6b719 --- /dev/null +++ b/tests/baselines/reference/superPropertyAccessNoError.js @@ -0,0 +1,131 @@ +//// [superPropertyAccessNoError.ts] +//super.publicInstanceMemberFunction in constructor of derived class +//super.publicInstanceMemberFunction in instance member function of derived class +//super.publicInstanceMemberFunction in instance member accessor(get and set) of derived class +//super.publicInstanceMemberFunction in lambda in member function +//super.publicStaticMemberFunction in static member function of derived class +//super.publicStaticMemberFunction in static member accessor(get and set) of derived class + + +class SomeBaseClass { + public func() { + return ''; + } + + static func() { + return 3; + } + +} + +class SomeDerivedClass extends SomeBaseClass { + constructor() { + super(); + var x = super.func(); + var x: string; + } + + fn() { + var x = super.func(); + var x: string; + var y = () => super.func(); + } + + get a() { + var x = super.func(); + var x: string; + return null; + } + + set a(n) { + var x = super.func(); + var x: string; + } + + static fn() { + var x = super.func(); + var x: number; + } + + static get a() { + var x = super.func(); + var x: number; + return null; + } + + static set a(n) { + var x = super.func(); + var x: number; + } + +} + +//// [superPropertyAccessNoError.js] +//super.publicInstanceMemberFunction in constructor of derived class +//super.publicInstanceMemberFunction in instance member function of derived class +//super.publicInstanceMemberFunction in instance member accessor(get and set) of derived class +//super.publicInstanceMemberFunction in lambda in member function +//super.publicStaticMemberFunction in static member function of derived class +//super.publicStaticMemberFunction in static member accessor(get and set) of derived class +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 SomeBaseClass = (function () { + function SomeBaseClass() { + } + SomeBaseClass.prototype.func = function () { + return ''; + }; + SomeBaseClass.func = function () { + return 3; + }; + return SomeBaseClass; +})(); +var SomeDerivedClass = (function (_super) { + __extends(SomeDerivedClass, _super); + function SomeDerivedClass() { + _super.call(this); + var x = _super.prototype.func.call(this); + var x; + } + SomeDerivedClass.prototype.fn = function () { + var _this = this; + var x = _super.prototype.func.call(this); + var x; + var y = function () { return _super.prototype.func.call(_this); }; + }; + Object.defineProperty(SomeDerivedClass.prototype, "a", { + get: function () { + var x = _super.prototype.func.call(this); + var x; + return null; + }, + set: function (n) { + var x = _super.prototype.func.call(this); + var x; + }, + enumerable: true, + configurable: true + }); + SomeDerivedClass.fn = function () { + var x = _super.func.call(this); + var x; + }; + Object.defineProperty(SomeDerivedClass, "a", { + get: function () { + var x = _super.func.call(this); + var x; + return null; + }, + set: function (n) { + var x = _super.func.call(this); + var x; + }, + enumerable: true, + configurable: true + }); + return SomeDerivedClass; +})(SomeBaseClass); diff --git a/tests/baselines/reference/super_inside-object-literal-getters-and-setters.js b/tests/baselines/reference/super_inside-object-literal-getters-and-setters.js new file mode 100644 index 00000000000..48ae609cdc6 --- /dev/null +++ b/tests/baselines/reference/super_inside-object-literal-getters-and-setters.js @@ -0,0 +1,73 @@ +//// [super_inside-object-literal-getters-and-setters.ts] +module ObjectLiteral { + var ThisInObjectLiteral = { + _foo: '1', + get foo(): string { + return super._foo; + }, + set foo(value: string) { + super._foo = value; + }, + test: function () { + return super._foo; + } + } +} + +class F { public test(): string { return ""; } } +class SuperObjectTest extends F { + public testing() { + var test = { + get F() { + return super.test(); + } + }; + } +} + + + +//// [super_inside-object-literal-getters-and-setters.js] +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 ObjectLiteral; +(function (ObjectLiteral) { + var ThisInObjectLiteral = { + _foo: '1', + get foo() { + return super._foo; + }, + set foo(value) { + super._foo = value; + }, + test: function () { + return super._foo; + } + }; +})(ObjectLiteral || (ObjectLiteral = {})); +var F = (function () { + function F() { + } + F.prototype.test = function () { + return ""; + }; + return F; +})(); +var SuperObjectTest = (function (_super) { + __extends(SuperObjectTest, _super); + function SuperObjectTest() { + _super.apply(this, arguments); + } + SuperObjectTest.prototype.testing = function () { + var test = { + get F() { + return super.test.call(this); + } + }; + }; + return SuperObjectTest; +})(F); diff --git a/tests/baselines/reference/switchStatementsWithMultipleDefaults.js b/tests/baselines/reference/switchStatementsWithMultipleDefaults.js new file mode 100644 index 00000000000..a17abe5711d --- /dev/null +++ b/tests/baselines/reference/switchStatementsWithMultipleDefaults.js @@ -0,0 +1,63 @@ +//// [switchStatementsWithMultipleDefaults.ts] + +var x = 10; + +switch (x) { + case 1: + case 2: + default: // No issues. + break; + default: // Error; second 'default' clause. + default: // Error; third 'default' clause. + case 3: + x *= x; +} + +switch (x) { + default: // No issues. + break; + case 100: + switch (x * x) { + default: // No issues. + default: // Error; second 'default' clause. + break; + case 10000: + x /= x; + default: // Error, third 'default' clause + def\u0061ult: // Error, fourth 'default' clause. + // Errors on fifth-seventh + default: return; + default: default: + } +} + +//// [switchStatementsWithMultipleDefaults.js] +var x = 10; +switch (x) { + case 1: + case 2: + default: + break; + default: // Error; second 'default' clause. + default: // Error; third 'default' clause. + case 3: + x *= x; +} +switch (x) { + default: + break; + case 100: + switch (x * x) { + default: // No issues. + default: + break; + case 10000: + x /= x; + default: // Error, third 'default' clause + default: // Error, fourth 'default' clause. + // Errors on fifth-seventh + default: return; + default: + default: + } +} diff --git a/tests/baselines/reference/switchStatementsWithMultipleDefaults1.js b/tests/baselines/reference/switchStatementsWithMultipleDefaults1.js new file mode 100644 index 00000000000..2d52dd761cc --- /dev/null +++ b/tests/baselines/reference/switchStatementsWithMultipleDefaults1.js @@ -0,0 +1,26 @@ +//// [switchStatementsWithMultipleDefaults1.ts] + var x = 10; + + switch (x) { + case 1: + case 2: + default: // No issues. + break; + default: // Error; second 'default' clause. + default: // Error; third 'default' clause. + case 3: + x *= x; + } + +//// [switchStatementsWithMultipleDefaults1.js] +var x = 10; +switch (x) { + case 1: + case 2: + default: + break; + default: // Error; second 'default' clause. + default: // Error; third 'default' clause. + case 3: + x *= x; +} diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.js b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.js new file mode 100644 index 00000000000..6f3d4ed803a --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.js @@ -0,0 +1,172 @@ +//// [taggedTemplateStringsTypeArgumentInference.ts] + + +// Generic tag with one parameter +function noParams(n: T) { } +noParams ``; + +// Generic tag with parameter which does not use type parameter +function noGenericParams(n: string[]) { } +noGenericParams ``; + +// Generic tag with multiple type parameters and only one used in parameter type annotation +function someGenerics1a(n: T, m: number) { } +someGenerics1a `${3}`; + +function someGenerics1b(n: string[], m: U) { } +someGenerics1b `${3}`; + +// Generic tag with argument of function type whose parameter is of type parameter type +function someGenerics2a(strs: string[], n: (x: T) => void) { } +someGenerics2a `${(n: string) => n}`; + +function someGenerics2b(strs: string[], n: (x: T, y: U) => void) { } +someGenerics2b `${ (n: string, x: number) => n }`; + +// Generic tag with argument of function type whose parameter is not of type parameter type but body/return type uses type parameter +function someGenerics3(strs: string[], producer: () => T) { } +someGenerics3 `${() => ''}`; +someGenerics3 `${() => undefined}`; +someGenerics3 `${() => 3}`; + +// 2 parameter generic tag with argument 1 of type parameter type and argument 2 of function type whose parameter is of type parameter type +function someGenerics4(strs: string[], n: T, f: (x: U) => void) { } +someGenerics4 `${4}${ () => null }`; +someGenerics4 `${''}${ () => 3 }`; +someGenerics4 `${ null }${ null }`; + +// 2 parameter generic tag with argument 2 of type parameter type and argument 1 of function type whose parameter is of type parameter type +function someGenerics5(strs: string[], n: T, f: (x: U) => void) { } +someGenerics5 `${ 4 } ${ () => null }`; +someGenerics5 `${ '' }${ () => 3 }`; +someGenerics5 `${null}${null}`; + +// Generic tag with multiple arguments of function types that each have parameters of the same generic type +function someGenerics6(strs: string[], a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) { } +someGenerics6 `${ n => n }${ n => n}${ n => n}`; +someGenerics6 `${ n => n }${ n => n}${ n => n}`; +someGenerics6 `${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }`; + +// Generic tag with multiple arguments of function types that each have parameters of different generic type +function someGenerics7(strs: string[], a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) { } +someGenerics7 `${ n => n }${ n => n }${ n => n }`; +someGenerics7 `${ n => n }${ n => n }${ n => n }`; +someGenerics7 `${(n: number) => n}${ (n: string) => n}${ (n: number) => n}`; + +// Generic tag with argument of generic function type +function someGenerics8(strs: string[], n: T): T { return n; } +var x = someGenerics8 `${ someGenerics7 }`; +x `${null}${null}${null}`; + +// Generic tag with multiple parameters of generic type passed arguments with no best common type +function someGenerics9(strs: string[], a: T, b: T, c: T): T { + return null; +} +var a9a = someGenerics9 `${ '' }${ 0 }${ [] }`; +var a9a: {}; + +// Generic tag with multiple parameters of generic type passed arguments with multiple best common types +interface A91 { + x: number; + y?: string; +} +interface A92 { + x: number; + z?: Date; +} + +var a9e = someGenerics9 `${ undefined }${ { x: 6, z: new Date() } }${ { x: 6, y: '' } }`; +var a9e: {}; + +// Generic tag with multiple parameters of generic type passed arguments with a single best common type +var a9d = someGenerics9 `${ { x: 3 }}${ { x: 6 }}${ { x: 6 } }`; +var a9d: { x: number; }; + +// Generic tag with multiple parameters of generic type where one argument is of type 'any' +var anyVar: any; +var a = someGenerics9 `${ 7 }${ anyVar }${ 4 }`; +var a: any; + +// Generic tag with multiple parameters of generic type where one argument is [] and the other is not 'any' +var arr = someGenerics9 `${ [] }${ null }${ undefined }`; +var arr: any[]; + + + +//// [taggedTemplateStringsTypeArgumentInference.js] +// Generic tag with one parameter +function noParams(n) { +} +noParams ""; +// Generic tag with parameter which does not use type parameter +function noGenericParams(n) { +} +noGenericParams ""; +// Generic tag with multiple type parameters and only one used in parameter type annotation +function someGenerics1a(n, m) { +} +someGenerics1a "" + 3; +function someGenerics1b(n, m) { +} +someGenerics1b "" + 3; +// Generic tag with argument of function type whose parameter is of type parameter type +function someGenerics2a(strs, n) { +} +someGenerics2a "" + function (n) { return n; }; +function someGenerics2b(strs, n) { +} +someGenerics2b "" + function (n, x) { return n; }; +// Generic tag with argument of function type whose parameter is not of type parameter type but body/return type uses type parameter +function someGenerics3(strs, producer) { +} +someGenerics3 "" + function () { return ''; }; +someGenerics3 "" + function () { return undefined; }; +someGenerics3 "" + function () { return 3; }; +// 2 parameter generic tag with argument 1 of type parameter type and argument 2 of function type whose parameter is of type parameter type +function someGenerics4(strs, n, f) { +} +someGenerics4 "" + 4 + function () { return null; }; +someGenerics4 "" + '' + function () { return 3; }; +someGenerics4 "" + null + null; +// 2 parameter generic tag with argument 2 of type parameter type and argument 1 of function type whose parameter is of type parameter type +function someGenerics5(strs, n, f) { +} +someGenerics5 4 + " " + function () { return null; }; +someGenerics5 "" + '' + function () { return 3; }; +someGenerics5 "" + null + null; +// Generic tag with multiple arguments of function types that each have parameters of the same generic type +function someGenerics6(strs, a, b, c) { +} +someGenerics6 "" + function (n) { return n; } + function (n) { return n; } + function (n) { return n; }; +someGenerics6 "" + function (n) { return n; } + function (n) { return n; } + function (n) { return n; }; +someGenerics6 "" + function (n) { return n; } + function (n) { return n; } + function (n) { return n; }; +// Generic tag with multiple arguments of function types that each have parameters of different generic type +function someGenerics7(strs, a, b, c) { +} +someGenerics7 "" + function (n) { return n; } + function (n) { return n; } + function (n) { return n; }; +someGenerics7 "" + function (n) { return n; } + function (n) { return n; } + function (n) { return n; }; +someGenerics7 "" + function (n) { return n; } + function (n) { return n; } + function (n) { return n; }; +// Generic tag with argument of generic function type +function someGenerics8(strs, n) { + return n; +} +var x = someGenerics8 "" + someGenerics7; +x "" + null + null + null; +// Generic tag with multiple parameters of generic type passed arguments with no best common type +function someGenerics9(strs, a, b, c) { + return null; +} +var a9a = someGenerics9 "" + '' + 0 + []; +var a9a; +var a9e = someGenerics9 "" + undefined + { x: 6, z: new Date() } + { x: 6, y: '' }; +var a9e; +// Generic tag with multiple parameters of generic type passed arguments with a single best common type +var a9d = someGenerics9 "" + { x: 3 } + { x: 6 } + { x: 6 }; +var a9d; +// Generic tag with multiple parameters of generic type where one argument is of type 'any' +var anyVar; +var a = someGenerics9 "" + 7 + anyVar + 4; +var a; +// Generic tag with multiple parameters of generic type where one argument is [] and the other is not 'any' +var arr = someGenerics9 "" + [] + null + undefined; +var arr; diff --git a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.js b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.js new file mode 100644 index 00000000000..c3e145afb2b --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.js @@ -0,0 +1,48 @@ +//// [taggedTemplateStringsWithIncompatibleTypedTags.ts] +interface I { + (stringParts: string[], ...rest: boolean[]): I; + g: I; + h: I; + member: I; + thisIsNotATag(x: string): void + [x: number]: I; +} + +var f: I; + +f `abc` + +f `abc${1}def${2}ghi`; + +f `abc`.member + +f `abc${1}def${2}ghi`.member; + +f `abc`["member"]; + +f `abc${1}def${2}ghi`["member"]; + +f `abc`[0].member `abc${1}def${2}ghi`; + +f `abc${1}def${2}ghi`["member"].member `abc${1}def${2}ghi`; + +f `abc${ true }def${ true }ghi`["member"].member `abc${ 1 }def${ 2 }ghi`; + +f.thisIsNotATag(`abc`); + +f.thisIsNotATag(`abc${1}def${2}ghi`); + + +//// [taggedTemplateStringsWithIncompatibleTypedTags.js] +var f; +f "abc"; +f "abc" + 1 + "def" + 2 + "ghi"; +f "abc".member; +f "abc" + 1 + "def" + 2 + "ghi".member; +f "abc"["member"]; +f "abc" + 1 + "def" + 2 + "ghi"["member"]; +f "abc"[0].member "abc" + 1 + "def" + 2 + "ghi"; +f "abc" + 1 + "def" + 2 + "ghi"["member"].member "abc" + 1 + "def" + 2 + "ghi"; +f "abc" + true + "def" + true + "ghi"["member"].member "abc" + 1 + "def" + 2 + "ghi"; +f.thisIsNotATag("abc"); +f.thisIsNotATag("abc" + 1 + "def" + 2 + "ghi"); diff --git a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.js b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.js new file mode 100644 index 00000000000..d507e951721 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.js @@ -0,0 +1,20 @@ +//// [taggedTemplateStringsWithManyCallAndMemberExpressions.ts] +interface I { + (strs: string[], ...subs: number[]): I; + member: { + new (s: string): { + new (n: number): { + new (): boolean; + } + } + }; +} +var f: I; + +var x = new new new f `abc${ 0 }def`.member("hello")(42) === true; + + + +//// [taggedTemplateStringsWithManyCallAndMemberExpressions.js] +var f; +var x = new new new f "abc" + 0 + "def".member("hello")(42) === true; diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.js b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.js new file mode 100644 index 00000000000..23298e1df13 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.js @@ -0,0 +1,44 @@ +//// [taggedTemplateStringsWithOverloadResolution1.ts] +function foo(strs: string[]): number; +function foo(strs: string[], x: number): string; +function foo(strs: string[], x: number, y: number): boolean; +function foo(strs: string[], x: number, y: string): {}; +function foo(...stuff: any[]): any { + return undefined; +} + +var a = foo([]); // number +var b = foo([], 1); // string +var c = foo([], 1, 2); // boolean +var d = foo([], 1, true); // boolean (with error) +var e = foo([], 1, "2"); // {} +var f = foo([], 1, 2, 3); // any (with error) + +var u = foo ``; // number +var v = foo `${1}`; // string +var w = foo `${1}${2}`; // boolean +var x = foo `${1}${true}`; // boolean (with error) +var y = foo `${1}${"2"}`; // {} +var z = foo `${1}${2}${3}`; // any (with error) + + +//// [taggedTemplateStringsWithOverloadResolution1.js] +function foo() { + var stuff = []; + for (var _i = 0; _i < arguments.length; _i++) { + stuff[_i - 0] = arguments[_i]; + } + return undefined; +} +var a = foo([]); // number +var b = foo([], 1); // string +var c = foo([], 1, 2); // boolean +var d = foo([], 1, true); // boolean (with error) +var e = foo([], 1, "2"); // {} +var f = foo([], 1, 2, 3); // any (with error) +var u = foo ""; // number +var v = foo "" + 1; // string +var w = foo "" + 1 + 2; // boolean +var x = foo "" + 1 + true; // boolean (with error) +var y = foo "" + 1 + "2"; // {} +var z = foo "" + 1 + 2 + 3; // any (with error) diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.js b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.js new file mode 100644 index 00000000000..0b1447a3d3f --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.js @@ -0,0 +1,39 @@ +//// [taggedTemplateStringsWithOverloadResolution2.ts] + +function foo1(strs: TemplateStringsArray, x: number): string; +function foo1(strs: string[], x: number): number; +function foo1(...stuff: any[]): any { + return undefined; +} + +var a = foo1 `${1}`; // string +var b = foo1([], 1); // number + +function foo2(strs: string[], x: number): number; +function foo2(strs: TemplateStringsArray, x: number): string; +function foo2(...stuff: any[]): any { + return undefined; +} + +var c = foo2 `${1}`; // number +var d = foo2([], 1); // number + +//// [taggedTemplateStringsWithOverloadResolution2.js] +function foo1() { + var stuff = []; + for (var _i = 0; _i < arguments.length; _i++) { + stuff[_i - 0] = arguments[_i]; + } + return undefined; +} +var a = foo1 "" + 1; // string +var b = foo1([], 1); // number +function foo2() { + var stuff = []; + for (var _i = 0; _i < arguments.length; _i++) { + stuff[_i - 0] = arguments[_i]; + } + return undefined; +} +var c = foo2 "" + 1; // number +var d = foo2([], 1); // number diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.js b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.js new file mode 100644 index 00000000000..dc8a08b4fc4 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.js @@ -0,0 +1,123 @@ +//// [taggedTemplateStringsWithOverloadResolution3.ts] + +// Ambiguous call picks the first overload in declaration order +function fn1(strs: TemplateStringsArray, s: string): string; +function fn1(strs: TemplateStringsArray, n: number): number; +function fn1() { return null; } + +var s: string = fn1 `${ undefined }`; + +// No candidate overloads found +fn1 `${ {} }`; // Error + +function fn2(strs: TemplateStringsArray, s: string, n: number): number; +function fn2(strs: TemplateStringsArray, n: number, t: T): T; +function fn2() { return undefined; } + +var d1: Date = fn2 `${ 0 }${ undefined }`; // contextually typed +var d2 = fn2 `${ 0 }${ undefined }`; // any + +d1.foo(); // error +d2(); // no error (typed as any) + +// Generic and non-generic overload where generic overload is the only candidate +fn2 `${ 0 }${ '' }`; // OK + +// Generic and non-generic overload where non-generic overload is the only candidate +fn2 `${ '' }${ 0 }`; // OK + +// Generic overloads with differing arity +function fn3(strs: TemplateStringsArray, n: T): string; +function fn3(strs: TemplateStringsArray, s: string, t: T, u: U): U; +function fn3(strs: TemplateStringsArray, v: V, u: U, t: T): number; +function fn3() { return null; } + +var s = fn3 `${ 3 }`; +var s = fn3 `${'' }${ 3 }${ '' }`; +var n = fn3 `${ 5 }${ 5 }${ 5 }`; +var n: number; + +// Generic overloads with differing arity tagging with arguments matching each overload type parameter count +var s = fn3 `${ 4 }` +var s = fn3 `${ '' }${ '' }${ '' }`; +var n = fn3 `${ '' }${ '' }${ 3 }`; + +// Generic overloads with differing arity tagging with argument count that doesn't match any overload +fn3 ``; // Error + +// Generic overloads with constraints +function fn4(strs: TemplateStringsArray, n: T, m: U); +function fn4(strs: TemplateStringsArray, n: T, m: U); +function fn4(strs: TemplateStringsArray) +function fn4() { } + +// Generic overloads with constraints tagged with types that satisfy the constraints +fn4 `${ '' }${ 3 }`; +fn4 `${ 3 }${ '' }`; +fn4 `${ 3 }${ undefined }`; +fn4 `${ '' }${ null }`; + +// 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 }`; +fn4 `${ null }${ true }`; + +// Non - generic overloads where contextual typing of function arguments has errors +function fn5(strs: TemplateStringsArray, f: (n: string) => void): string; +function fn5(strs: TemplateStringsArray, f: (n: number) => void): number; +function fn5() { return undefined; } +fn5 `${ (n) => n.toFixed() }`; // will error; 'n' should have type 'string'. +fn5 `${ (n) => n.substr(0) }`; + + + +//// [taggedTemplateStringsWithOverloadResolution3.js] +function fn1() { + return null; +} +var s = fn1 "" + undefined; +// No candidate overloads found +fn1 "" + {}; // Error +function fn2() { + return undefined; +} +var d1 = fn2 "" + 0 + undefined; // contextually typed +var d2 = fn2 "" + 0 + undefined; // any +d1.foo(); // error +d2(); // no error (typed as any) +// Generic and non-generic overload where generic overload is the only candidate +fn2 "" + 0 + ''; // OK +// Generic and non-generic overload where non-generic overload is the only candidate +fn2 "" + '' + 0; // OK +function fn3() { + return null; +} +var s = fn3 "" + 3; +var s = fn3 "" + '' + 3 + ''; +var n = fn3 "" + 5 + 5 + 5; +var n; +// Generic overloads with differing arity tagging with arguments matching each overload type parameter count +var s = fn3 "" + 4; +var s = fn3 "" + '' + '' + ''; +var n = fn3 "" + '' + '' + 3; +// Generic overloads with differing arity tagging with argument count that doesn't match any overload +fn3 ""; // Error +function fn4() { +} +// Generic overloads with constraints tagged with types that satisfy the constraints +fn4 "" + '' + 3; +fn4 "" + 3 + ''; +fn4 "" + 3 + undefined; +fn4 "" + '' + null; +// 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; +fn4 "" + null + true; +function fn5() { + return undefined; +} +fn5 "" + function (n) { return n.toFixed(); }; // will error; 'n' should have type 'string'. +fn5 "" + function (n) { return n.substr(0); }; diff --git a/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.js b/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.js new file mode 100644 index 00000000000..d5c6b8b31f6 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.js @@ -0,0 +1,41 @@ +//// [taggedTemplateStringsWithTagsTypedAsAny.ts] +var f: any; + +f `abc` + +f `abc${1}def${2}ghi`; + +f.g.h `abc` + +f.g.h `abc${1}def${2}ghi`; + +f `abc`.member + +f `abc${1}def${2}ghi`.member; + +f `abc`["member"]; + +f `abc${1}def${2}ghi`["member"]; + +f `abc`["member"].someOtherTag `abc${1}def${2}ghi`; + +f `abc${1}def${2}ghi`["member"].someOtherTag `abc${1}def${2}ghi`; + +f.thisIsNotATag(`abc`); + +f.thisIsNotATag(`abc${1}def${2}ghi`); + +//// [taggedTemplateStringsWithTagsTypedAsAny.js] +var f; +f "abc"; +f "abc" + 1 + "def" + 2 + "ghi"; +f.g.h "abc"; +f.g.h "abc" + 1 + "def" + 2 + "ghi"; +f "abc".member; +f "abc" + 1 + "def" + 2 + "ghi".member; +f "abc"["member"]; +f "abc" + 1 + "def" + 2 + "ghi"["member"]; +f "abc"["member"].someOtherTag "abc" + 1 + "def" + 2 + "ghi"; +f "abc" + 1 + "def" + 2 + "ghi"["member"].someOtherTag "abc" + 1 + "def" + 2 + "ghi"; +f.thisIsNotATag("abc"); +f.thisIsNotATag("abc" + 1 + "def" + 2 + "ghi"); diff --git a/tests/baselines/reference/taggedTemplateStringsWithTypeErrorInFunctionExpressionsInSubstitutionExpression.js b/tests/baselines/reference/taggedTemplateStringsWithTypeErrorInFunctionExpressionsInSubstitutionExpression.js new file mode 100644 index 00000000000..eb46f4b603f --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithTypeErrorInFunctionExpressionsInSubstitutionExpression.js @@ -0,0 +1,18 @@ +//// [taggedTemplateStringsWithTypeErrorInFunctionExpressionsInSubstitutionExpression.ts] + + +function foo(...rest: any[]) { +} + +foo `${function (x: number) { x = "bad"; } }`; + +//// [taggedTemplateStringsWithTypeErrorInFunctionExpressionsInSubstitutionExpression.js] +function foo() { + var rest = []; + for (var _i = 0; _i < arguments.length; _i++) { + rest[_i - 0] = arguments[_i]; + } +} +foo "" + function (x) { + x = "bad"; +}; diff --git a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.js b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.js new file mode 100644 index 00000000000..c2424a07a47 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.js @@ -0,0 +1,45 @@ +//// [taggedTemplateStringsWithTypedTags.ts] +interface I { + (stringParts: string[], ...rest: number[]): I; + g: I; + h: I; + member: I; + thisIsNotATag(x: string): void + [x: number]: I; +} + +var f: I; + +f `abc` + +f `abc${1}def${2}ghi`; + +f `abc`.member + +f `abc${1}def${2}ghi`.member; + +f `abc`["member"]; + +f `abc${1}def${2}ghi`["member"]; + +f `abc`[0].member `abc${1}def${2}ghi`; + +f `abc${1}def${2}ghi`["member"].member `abc${1}def${2}ghi`; + +f.thisIsNotATag(`abc`); + +f.thisIsNotATag(`abc${1}def${2}ghi`); + + +//// [taggedTemplateStringsWithTypedTags.js] +var f; +f "abc"; +f "abc" + 1 + "def" + 2 + "ghi"; +f "abc".member; +f "abc" + 1 + "def" + 2 + "ghi".member; +f "abc"["member"]; +f "abc" + 1 + "def" + 2 + "ghi"["member"]; +f "abc"[0].member "abc" + 1 + "def" + 2 + "ghi"; +f "abc" + 1 + "def" + 2 + "ghi"["member"].member "abc" + 1 + "def" + 2 + "ghi"; +f.thisIsNotATag("abc"); +f.thisIsNotATag("abc" + 1 + "def" + 2 + "ghi"); diff --git a/tests/baselines/reference/templateStringInTaggedTemplate.js b/tests/baselines/reference/templateStringInTaggedTemplate.js new file mode 100644 index 00000000000..c6d98b0f826 --- /dev/null +++ b/tests/baselines/reference/templateStringInTaggedTemplate.js @@ -0,0 +1,5 @@ +//// [templateStringInTaggedTemplate.ts] +`I AM THE ${ `${ `TAG` } ` } PORTION` `I ${ "AM" } THE TEMPLATE PORTION` + +//// [templateStringInTaggedTemplate.js] +"I AM THE " + "TAG" + " " + " PORTION" "I " + "AM" + " THE TEMPLATE PORTION"; diff --git a/tests/baselines/reference/templateStringInYieldKeyword.js b/tests/baselines/reference/templateStringInYieldKeyword.js new file mode 100644 index 00000000000..8e98b269cd0 --- /dev/null +++ b/tests/baselines/reference/templateStringInYieldKeyword.js @@ -0,0 +1,12 @@ +//// [templateStringInYieldKeyword.ts] +function* gen() { + // Once this is supported, the inner expression does not need to be parenthesized. + var x = yield `abc${ x }def`; +} + + +//// [templateStringInYieldKeyword.js] +function gen() { + // Once this is supported, the inner expression does not need to be parenthesized. + var x = ; +} diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.js b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.js new file mode 100644 index 00000000000..80021ecae2e --- /dev/null +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.js @@ -0,0 +1,12 @@ +//// [templateStringWithEmbeddedYieldKeywordES6.ts] +function* gen() { + // Once this is supported, yield *must* be parenthesized. + var x = `abc${ yield 10 }def`; +} + + +//// [templateStringWithEmbeddedYieldKeywordES6.js] +function gen() { + // Once this is supported, yield *must* be parenthesized. + var x = `abc${}def`; +} diff --git a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.js b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.js new file mode 100644 index 00000000000..a724943c0f3 --- /dev/null +++ b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.js @@ -0,0 +1,22 @@ +//// [templateStringsArrayTypeDefinedInES5Mode.ts] + +class TemplateStringsArray { +} + +function f(x: TemplateStringsArray, y: number, z: number) { +} + +f({}, 10, 10); + +f `abcdef${ 1234 }${ 5678 }ghijkl`; + +//// [templateStringsArrayTypeDefinedInES5Mode.js] +var TemplateStringsArray = (function () { + function TemplateStringsArray() { + } + return TemplateStringsArray; +})(); +function f(x, y, z) { +} +f({}, 10, 10); +f "abcdef" + 1234 + 5678 + "ghijkl"; diff --git a/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.js b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.js new file mode 100644 index 00000000000..c6cc4ee8408 --- /dev/null +++ b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.js @@ -0,0 +1,14 @@ +//// [templateStringsArrayTypeNotDefinedES5Mode.ts] + +function f(x: TemplateStringsArray, y: number, z: number) { +} + +f({}, 10, 10); + +f `abcdef${ 1234 }${ 5678 }ghijkl`; + +//// [templateStringsArrayTypeNotDefinedES5Mode.js] +function f(x, y, z) { +} +f({}, 10, 10); +f "abcdef" + 1234 + 5678 + "ghijkl"; diff --git a/tests/baselines/reference/thisInAccessors.js b/tests/baselines/reference/thisInAccessors.js new file mode 100644 index 00000000000..ab521649292 --- /dev/null +++ b/tests/baselines/reference/thisInAccessors.js @@ -0,0 +1,86 @@ +//// [thisInAccessors.ts] +// this capture only in getter +class GetterOnly { + get Value() { + var fn = () => this; + return ''; + } + set Value(val) { + } +} + +// this capture only in setter +class SetterOnly { + get Value() { + return ''; + } + set Value(val) { + var fn = () => this; + } +} + +// this capture only in both setter and getter +class GetterAndSetter { + get Value() { + var fn = () => this; + return ''; + } + set Value(val) { + var fn = () => this; + } +} + +//// [thisInAccessors.js] +// this capture only in getter +var GetterOnly = (function () { + function GetterOnly() { + } + Object.defineProperty(GetterOnly.prototype, "Value", { + get: function () { + var _this = this; + var fn = function () { return _this; }; + return ''; + }, + set: function (val) { + }, + enumerable: true, + configurable: true + }); + return GetterOnly; +})(); +// this capture only in setter +var SetterOnly = (function () { + function SetterOnly() { + } + Object.defineProperty(SetterOnly.prototype, "Value", { + get: function () { + return ''; + }, + set: function (val) { + var _this = this; + var fn = function () { return _this; }; + }, + enumerable: true, + configurable: true + }); + return SetterOnly; +})(); +// this capture only in both setter and getter +var GetterAndSetter = (function () { + function GetterAndSetter() { + } + Object.defineProperty(GetterAndSetter.prototype, "Value", { + get: function () { + var _this = this; + var fn = function () { return _this; }; + return ''; + }, + set: function (val) { + var _this = this; + var fn = function () { return _this; }; + }, + enumerable: true, + configurable: true + }); + return GetterAndSetter; +})(); diff --git a/tests/baselines/reference/thisInStatics.js b/tests/baselines/reference/thisInStatics.js new file mode 100644 index 00000000000..a7d6a5890cc --- /dev/null +++ b/tests/baselines/reference/thisInStatics.js @@ -0,0 +1,29 @@ +//// [thisInStatics.ts] +class C { + static f() { + var y/*1*/ = this; + } + + static get x() { + var y/*2*/ = this; + return y; + } +} + +//// [thisInStatics.js] +var C = (function () { + function C() { + } + C.f = function () { + var y /*1*/ = this; + }; + Object.defineProperty(C, "x", { + get: function () { + var y /*2*/ = this; + return y; + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/this_inside-object-literal-getters-and-setters.js b/tests/baselines/reference/this_inside-object-literal-getters-and-setters.js new file mode 100644 index 00000000000..7b175935f39 --- /dev/null +++ b/tests/baselines/reference/this_inside-object-literal-getters-and-setters.js @@ -0,0 +1,34 @@ +//// [this_inside-object-literal-getters-and-setters.ts] +module ObjectLiteral { + var ThisInObjectLiteral = { + _foo: '1', + get foo(): string { + return this._foo; + }, + set foo(value: string) { + this._foo = value; + }, + test: function () { + return this._foo; + } + } +} + + + +//// [this_inside-object-literal-getters-and-setters.js] +var ObjectLiteral; +(function (ObjectLiteral) { + var ThisInObjectLiteral = { + _foo: '1', + get foo() { + return this._foo; + }, + set foo(value) { + this._foo = value; + }, + test: function () { + return this._foo; + } + }; +})(ObjectLiteral || (ObjectLiteral = {})); diff --git a/tests/baselines/reference/throwWithoutNewLine2.js b/tests/baselines/reference/throwWithoutNewLine2.js new file mode 100644 index 00000000000..868e4e3d844 --- /dev/null +++ b/tests/baselines/reference/throwWithoutNewLine2.js @@ -0,0 +1,7 @@ +//// [throwWithoutNewLine2.ts] +throw +a; + +//// [throwWithoutNewLine2.js] +throw ; +a; diff --git a/tests/baselines/reference/trailingSeparatorInFunctionCall.js b/tests/baselines/reference/trailingSeparatorInFunctionCall.js new file mode 100644 index 00000000000..4b531479837 --- /dev/null +++ b/tests/baselines/reference/trailingSeparatorInFunctionCall.js @@ -0,0 +1,18 @@ +//// [trailingSeparatorInFunctionCall.ts] +function f(x, y) { +} + +f(1, 2, ); + +function f2(x: T, y: T) { +} + +f2(1, 2, ); + +//// [trailingSeparatorInFunctionCall.js] +function f(x, y) { +} +f(1, 2); +function f2(x, y) { +} +f2(1, 2); diff --git a/tests/baselines/reference/tupleTypes.js b/tests/baselines/reference/tupleTypes.js new file mode 100644 index 00000000000..451aeb5eb09 --- /dev/null +++ b/tests/baselines/reference/tupleTypes.js @@ -0,0 +1,101 @@ +//// [tupleTypes.ts] +var v1: []; // Error +var v2: [number]; +var v3: [number, string]; +var v4: [number, [string, string]]; + +var t: [number, string]; +var t0 = t[0]; // number +var t0: number; +var t1 = t[1]; // string +var t1: string; +var t2 = t[2]; // number|string +var t2: number|string; + +t = []; // Error +t = [1]; // Error +t = [1, "hello"]; // Ok +t = ["hello", 1]; // Error +t = [1, "hello", 2]; // Ok + +var tf: [string, (x: string) => number] = ["hello", x => x.length]; + +declare function ff(a: T, b: [T, (x: T) => U]): U; +var ff1 = ff("hello", ["foo", x => x.length]); +var ff1: number; + +function tuple2(item0: T0, item1: T1): [T0, T1]{ + return [item0, item1]; +} + +var tt = tuple2(1, "string"); +var tt0 = tt[0]; +var tt0: number; +var tt1 = tt[1]; +var tt1: string; +var tt2 = tt[2]; +var tt2: number | string; + +tt = tuple2(1, undefined); +tt = [1, undefined]; +tt = [undefined, undefined]; +tt = []; // Error + +var a: number[]; +var a1: [number, string]; +var a2: [number, number]; +var a3: [number, {}]; +a = a1; // Error +a = a2; +a = a3; // Error +a1 = a2; // Error +a1 = a3; // Error +a3 = a1; +a3 = a2; + + +//// [tupleTypes.js] +var v1; // Error +var v2; +var v3; +var v4; +var t; +var t0 = t[0]; // number +var t0; +var t1 = t[1]; // string +var t1; +var t2 = t[2]; // number|string +var t2; +t = []; // Error +t = [1]; // Error +t = [1, "hello"]; // Ok +t = ["hello", 1]; // Error +t = [1, "hello", 2]; // Ok +var tf = ["hello", function (x) { return x.length; }]; +var ff1 = ff("hello", ["foo", function (x) { return x.length; }]); +var ff1; +function tuple2(item0, item1) { + return [item0, item1]; +} +var tt = tuple2(1, "string"); +var tt0 = tt[0]; +var tt0; +var tt1 = tt[1]; +var tt1; +var tt2 = tt[2]; +var tt2; +tt = tuple2(1, undefined); +tt = [1, undefined]; +tt = [undefined, undefined]; +tt = []; // Error +var a; +var a1; +var a2; +var a3; +a = a1; // Error +a = a2; +a = a3; // Error +a1 = a2; // Error +a1 = a3; // Error +a3 = a1; +a3 = a2; diff --git a/tests/baselines/reference/twoAccessorsWithSameName.js b/tests/baselines/reference/twoAccessorsWithSameName.js new file mode 100644 index 00000000000..7ae4d3bd1f9 --- /dev/null +++ b/tests/baselines/reference/twoAccessorsWithSameName.js @@ -0,0 +1,90 @@ +//// [twoAccessorsWithSameName.ts] +class C { + get x() { return 1; } + get x() { return 1; } // error +} + +class D { + set x(v) { } + set x(v) { } // error +} + +class E { + get x() { + return 1; + } + set x(v) { } +} + +var x = { + get x() { + return 1; + }, + + // error + get x() { + return 1; + } +} + +var y = { + get x() { + return 1; + }, + set x(v) { } +} + +//// [twoAccessorsWithSameName.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var D = (function () { + function D() { + } + Object.defineProperty(D.prototype, "x", { + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return D; +})(); +var E = (function () { + function E() { + } + Object.defineProperty(E.prototype, "x", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return E; +})(); +var x = { + get x() { + return 1; + }, + // error + get x() { + return 1; + } +}; +var y = { + get x() { + return 1; + }, + set x(v) { + } +}; diff --git a/tests/baselines/reference/twoAccessorsWithSameName2.js b/tests/baselines/reference/twoAccessorsWithSameName2.js new file mode 100644 index 00000000000..437fe16cea5 --- /dev/null +++ b/tests/baselines/reference/twoAccessorsWithSameName2.js @@ -0,0 +1,56 @@ +//// [twoAccessorsWithSameName2.ts] +class C { + static get x() { return 1; } + static get x() { return 1; } // error +} + +class D { + static set x(v) { } + static set x(v) { } // error +} + +class E { + static get x() { + return 1; + } + static set x(v) { } +} + +//// [twoAccessorsWithSameName2.js] +var C = (function () { + function C() { + } + Object.defineProperty(C, "x", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var D = (function () { + function D() { + } + Object.defineProperty(D, "x", { + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return D; +})(); +var E = (function () { + function E() { + } + Object.defineProperty(E, "x", { + get: function () { + return 1; + }, + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return E; +})(); diff --git a/tests/baselines/reference/typeOfThis.js b/tests/baselines/reference/typeOfThis.js new file mode 100644 index 00000000000..7de34712e15 --- /dev/null +++ b/tests/baselines/reference/typeOfThis.js @@ -0,0 +1,355 @@ +//// [typeOfThis.ts] +class MyTestClass { + private canary: number; + static staticCanary: number; + + constructor() { + //type of 'this' in constructor body is the class instance type + var p = this.canary; + var p: number; + this.canary = 3; + } + + //type of 'this' in member function param list is the class instance type + memberFunc(t = this) { + var t: MyTestClass; + + //type of 'this' in member function body is the class instance type + var p = this; + var p: MyTestClass; + } + + //type of 'this' in member accessor(get and set) body is the class instance type + get prop() { + var p = this; + var p: MyTestClass; + return this; + } + set prop(v) { + var p = this; + var p: MyTestClass; + p = v; + v = p; + } + + someFunc = () => { + //type of 'this' in member variable initializer is the class instance type + var t = this; + var t: MyTestClass; + }; + + //type of 'this' in static function param list is constructor function type + static staticFn(t = this) { + var t: typeof MyTestClass; + var t = MyTestClass; + t.staticCanary; + + //type of 'this' in static function body is constructor function type + var p = this; + var p: typeof MyTestClass; + var p = MyTestClass; + p.staticCanary; + } + + static get staticProp() { + //type of 'this' in static accessor body is constructor function type + var p = this; + var p: typeof MyTestClass; + var p = MyTestClass; + p.staticCanary; + return this; + } + static set staticProp(v: typeof MyTestClass) { + //type of 'this' in static accessor body is constructor function type + var p = this; + var p: typeof MyTestClass; + var p = MyTestClass; + p.staticCanary; + } +} + +class MyGenericTestClass { + private canary: number; + static staticCanary: number; + + constructor() { + //type of 'this' in constructor body is the class instance type + var p = this.canary; + var p: number; + this.canary = 3; + } + + //type of 'this' in member function param list is the class instance type + memberFunc(t = this) { + var t: MyGenericTestClass; + + //type of 'this' in member function body is the class instance type + var p = this; + var p: MyGenericTestClass; + } + + //type of 'this' in member accessor(get and set) body is the class instance type + get prop() { + var p = this; + var p: MyGenericTestClass; + return this; + } + set prop(v) { + var p = this; + var p: MyGenericTestClass; + p = v; + v = p; + } + + someFunc = () => { + //type of 'this' in member variable initializer is the class instance type + var t = this; + var t: MyGenericTestClass; + }; + + //type of 'this' in static function param list is constructor function type + static staticFn(t = this) { + var t: typeof MyGenericTestClass; + var t = MyGenericTestClass; + t.staticCanary; + + //type of 'this' in static function body is constructor function type + var p = this; + var p: typeof MyGenericTestClass; + var p = MyGenericTestClass; + p.staticCanary; + } + + static get staticProp() { + //type of 'this' in static accessor body is constructor function type + var p = this; + var p: typeof MyGenericTestClass; + var p = MyGenericTestClass; + p.staticCanary; + return this; + } + static set staticProp(v: typeof MyGenericTestClass) { + //type of 'this' in static accessor body is constructor function type + var p = this; + var p: typeof MyGenericTestClass; + var p = MyGenericTestClass; + p.staticCanary; + } +} + +//type of 'this' in a function declaration param list is Any +function fn(s = this) { + var s: any; + s.spaaaaaaace = 4; + + //type of 'this' in a function declaration body is Any + var t: any; + var t = this; + this.spaaaaace = 4; +} + +//type of 'this' in a function expression param list list is Any +var q1 = function (s = this) { + var s: any; + s.spaaaaaaace = 4; + + //type of 'this' in a function expression body is Any + var t: any; + var t = this; + this.spaaaaace = 4; +} + +//type of 'this' in a fat arrow expression param list is Any +var q2 = (s = this) => { + var s: any; + s.spaaaaaaace = 4; + + //type of 'this' in a fat arrow expression body is Any + var t: any; + var t = this; + this.spaaaaace = 4; +} + +//type of 'this' in global module is Any +var t: any; +var t = this; +this.spaaaaace = 4; + + + +//// [typeOfThis.js] +var _this = this; +var MyTestClass = (function () { + function MyTestClass() { + var _this = this; + this.someFunc = function () { + //type of 'this' in member variable initializer is the class instance type + var t = _this; + var t; + }; + //type of 'this' in constructor body is the class instance type + var p = this.canary; + var p; + this.canary = 3; + } + //type of 'this' in member function param list is the class instance type + MyTestClass.prototype.memberFunc = function (t) { + if (t === void 0) { t = this; } + var t; + //type of 'this' in member function body is the class instance type + var p = this; + var p; + }; + Object.defineProperty(MyTestClass.prototype, "prop", { + //type of 'this' in member accessor(get and set) body is the class instance type + get: function () { + var p = this; + var p; + return this; + }, + set: function (v) { + var p = this; + var p; + p = v; + v = p; + }, + enumerable: true, + configurable: true + }); + //type of 'this' in static function param list is constructor function type + MyTestClass.staticFn = function (t) { + if (t === void 0) { t = this; } + var t; + var t = MyTestClass; + t.staticCanary; + //type of 'this' in static function body is constructor function type + var p = this; + var p; + var p = MyTestClass; + p.staticCanary; + }; + Object.defineProperty(MyTestClass, "staticProp", { + get: function () { + //type of 'this' in static accessor body is constructor function type + var p = this; + var p; + var p = MyTestClass; + p.staticCanary; + return this; + }, + set: function (v) { + //type of 'this' in static accessor body is constructor function type + var p = this; + var p; + var p = MyTestClass; + p.staticCanary; + }, + enumerable: true, + configurable: true + }); + return MyTestClass; +})(); +var MyGenericTestClass = (function () { + function MyGenericTestClass() { + var _this = this; + this.someFunc = function () { + //type of 'this' in member variable initializer is the class instance type + var t = _this; + var t; + }; + //type of 'this' in constructor body is the class instance type + var p = this.canary; + var p; + this.canary = 3; + } + //type of 'this' in member function param list is the class instance type + MyGenericTestClass.prototype.memberFunc = function (t) { + if (t === void 0) { t = this; } + var t; + //type of 'this' in member function body is the class instance type + var p = this; + var p; + }; + Object.defineProperty(MyGenericTestClass.prototype, "prop", { + //type of 'this' in member accessor(get and set) body is the class instance type + get: function () { + var p = this; + var p; + return this; + }, + set: function (v) { + var p = this; + var p; + p = v; + v = p; + }, + enumerable: true, + configurable: true + }); + //type of 'this' in static function param list is constructor function type + MyGenericTestClass.staticFn = function (t) { + if (t === void 0) { t = this; } + var t; + var t = MyGenericTestClass; + t.staticCanary; + //type of 'this' in static function body is constructor function type + var p = this; + var p; + var p = MyGenericTestClass; + p.staticCanary; + }; + Object.defineProperty(MyGenericTestClass, "staticProp", { + get: function () { + //type of 'this' in static accessor body is constructor function type + var p = this; + var p; + var p = MyGenericTestClass; + p.staticCanary; + return this; + }, + set: function (v) { + //type of 'this' in static accessor body is constructor function type + var p = this; + var p; + var p = MyGenericTestClass; + p.staticCanary; + }, + enumerable: true, + configurable: true + }); + return MyGenericTestClass; +})(); +//type of 'this' in a function declaration param list is Any +function fn(s) { + if (s === void 0) { s = this; } + var s; + s.spaaaaaaace = 4; + //type of 'this' in a function declaration body is Any + var t; + var t = this; + this.spaaaaace = 4; +} +//type of 'this' in a function expression param list list is Any +var q1 = function (s) { + if (s === void 0) { s = this; } + var s; + s.spaaaaaaace = 4; + //type of 'this' in a function expression body is Any + var t; + var t = this; + this.spaaaaace = 4; +}; +//type of 'this' in a fat arrow expression param list is Any +var q2 = function (s) { + if (s === void 0) { s = _this; } + var s; + s.spaaaaaaace = 4; + //type of 'this' in a fat arrow expression body is Any + var t; + var t = _this; + _this.spaaaaace = 4; +}; +//type of 'this' in global module is Any +var t; +var t = this; +this.spaaaaace = 4; diff --git a/tests/baselines/reference/typeOfThisInAccessor.js b/tests/baselines/reference/typeOfThisInAccessor.js new file mode 100644 index 00000000000..34d1bfaf2d0 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInAccessor.js @@ -0,0 +1,82 @@ +//// [typeOfThisInAccessor.ts] +class C { + get x() { + var r = this; // C + return 1; + } + + static get y() { + var r2 = this; // typeof C + return 1; + } +} + +class D { + a: T; + get x() { + var r = this; // D + return 1; + } + + static get y() { + var r2 = this; // typeof D + return 1; + } +} + +var x = { + get a() { + var r3 = this; // any + return 1; + } +} + +//// [typeOfThisInAccessor.js] +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "x", { + get: function () { + var r = this; // C + return 1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "y", { + get: function () { + var r2 = this; // typeof C + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var D = (function () { + function D() { + } + Object.defineProperty(D.prototype, "x", { + get: function () { + var r = this; // D + return 1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(D, "y", { + get: function () { + var r2 = this; // typeof D + return 1; + }, + enumerable: true, + configurable: true + }); + return D; +})(); +var x = { + get a() { + var r3 = this; // any + return 1; + } +}; diff --git a/tests/baselines/reference/typeOfThisInInstanceMember.js b/tests/baselines/reference/typeOfThisInInstanceMember.js new file mode 100644 index 00000000000..5e4b4f2970d --- /dev/null +++ b/tests/baselines/reference/typeOfThisInInstanceMember.js @@ -0,0 +1,67 @@ +//// [typeOfThisInInstanceMember.ts] +class C { + x = this; + foo() { + return this; + } + constructor(x: number) { + var t = this; + t.x; + t.y; + t.z; + var r = t.foo(); + } + + get y() { + return this; + } +} + +var c: C; +// all ok +var r = c.x; +var ra = c.x.x.x; +var r2 = c.y; +var r3 = c.foo(); +var rs = [r, r2, r3]; + +rs.forEach(x => { + x.foo; + x.x; + x.y; +}); + +//// [typeOfThisInInstanceMember.js] +var C = (function () { + function C(x) { + this.x = this; + var t = this; + t.x; + t.y; + t.z; + var r = t.foo(); + } + C.prototype.foo = function () { + return this; + }; + Object.defineProperty(C.prototype, "y", { + get: function () { + return this; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var c; +// all ok +var r = c.x; +var ra = c.x.x.x; +var r2 = c.y; +var r3 = c.foo(); +var rs = [r, r2, r3]; +rs.forEach(function (x) { + x.foo; + x.x; + x.y; +}); diff --git a/tests/baselines/reference/typeOfThisInInstanceMember2.js b/tests/baselines/reference/typeOfThisInInstanceMember2.js new file mode 100644 index 00000000000..b2b81ce3a23 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInInstanceMember2.js @@ -0,0 +1,73 @@ +//// [typeOfThisInInstanceMember2.ts] +class C { + x = this; + foo() { + return this; + } + constructor(x: T) { + var t = this; + t.x; + t.y; + t.z; + var r = t.foo(); + } + + get y() { + return this; + } + + z: T; +} + +var c: C; +// all ok +var r = c.x; +var ra = c.x.x.x; +var r2 = c.y; +var r3 = c.foo(); +var r4 = c.z; +var rs = [r, r2, r3]; + +rs.forEach(x => { + x.foo; + x.x; + x.y; + x.z; +}); + +//// [typeOfThisInInstanceMember2.js] +var C = (function () { + function C(x) { + this.x = this; + var t = this; + t.x; + t.y; + t.z; + var r = t.foo(); + } + C.prototype.foo = function () { + return this; + }; + Object.defineProperty(C.prototype, "y", { + get: function () { + return this; + }, + enumerable: true, + configurable: true + }); + return C; +})(); +var c; +// all ok +var r = c.x; +var ra = c.x.x.x; +var r2 = c.y; +var r3 = c.foo(); +var r4 = c.z; +var rs = [r, r2, r3]; +rs.forEach(function (x) { + x.foo; + x.x; + x.y; + x.z; +}); diff --git a/tests/baselines/reference/typeOfThisInStatics.js b/tests/baselines/reference/typeOfThisInStatics.js new file mode 100644 index 00000000000..5d59f6d7eb9 --- /dev/null +++ b/tests/baselines/reference/typeOfThisInStatics.js @@ -0,0 +1,29 @@ +//// [typeOfThisInStatics.ts] +class C { + static foo() { + var r = this; + } + static get x() { + var r = this; + return 1; + } +} + + +//// [typeOfThisInStatics.js] +var C = (function () { + function C() { + } + C.foo = function () { + var r = this; + }; + Object.defineProperty(C, "x", { + get: function () { + var r = this; + return 1; + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/typeParameterConstraints1.js b/tests/baselines/reference/typeParameterConstraints1.js new file mode 100644 index 00000000000..49d347f576b --- /dev/null +++ b/tests/baselines/reference/typeParameterConstraints1.js @@ -0,0 +1,42 @@ +//// [typeParameterConstraints1.ts] +function foo1(test: T) { } +function foo2(test: T) { } +function foo3(test: T) { } +function foo4(test: T) { } // valid +function foo5(test: T) { } // valid +function foo6(test: T) { } +function foo7(test: T) { } // valid +function foo8(test: T) { } +function foo9 (test: T) { } +function foo10 (test: T) { } +function foo11 (test: T) { } +function foo12(test: T) { } +function foo13(test: T) { } + +//// [typeParameterConstraints1.js] +function foo1(test) { +} +function foo2(test) { +} +function foo3(test) { +} +function foo4(test) { +} // valid +function foo5(test) { +} // valid +function foo6(test) { +} +function foo7(test) { +} // valid +function foo8(test) { +} +function foo9(test) { +} +function foo10(test) { +} +function foo11(test) { +} +function foo12(test) { +} +function foo13(test) { +} diff --git a/tests/baselines/reference/typeParametersInStaticAccessors.js b/tests/baselines/reference/typeParametersInStaticAccessors.js new file mode 100644 index 00000000000..411a4eac69d --- /dev/null +++ b/tests/baselines/reference/typeParametersInStaticAccessors.js @@ -0,0 +1,25 @@ +//// [typeParametersInStaticAccessors.ts] +class foo { + static get Foo(): () => T { return null; } + static set Bar(v: { v: T }) { } +} + +//// [typeParametersInStaticAccessors.js] +var foo = (function () { + function foo() { + } + Object.defineProperty(foo, "Foo", { + get: function () { + return null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(foo, "Bar", { + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return foo; +})(); diff --git a/tests/baselines/reference/typeQueryOnClass.js b/tests/baselines/reference/typeQueryOnClass.js new file mode 100644 index 00000000000..08fea6567fc --- /dev/null +++ b/tests/baselines/reference/typeQueryOnClass.js @@ -0,0 +1,124 @@ +//// [typeQueryOnClass.ts] +class C { + constructor(x: number); + constructor(x: string); + constructor(public x) { } + + static foo(x: number); + static foo(x: {}); + static foo(x) { } + + static bar(x) { } + + static sa = 1; + static sb = () => 1; + + static get sc() { + return 1; + } + static set sc(x) { + } + + static get sd() { + return 1; + } + + baz(x): string { return ''; } + + ia = 1; + ib = () => this.ia; + + get ic() { + return 1; + } + set ic(x) { + } + + get id() { + return 1; + } + +} + +var c: C; + +// BUG 820454 +var r1: typeof C; +var r2: typeof c; + +class D { + constructor(public y?) { } + x: T; + foo() { } +} + +var d: D; +var r3: typeof D; +var r4: typeof d; + +//// [typeQueryOnClass.js] +var C = (function () { + function C(x) { + var _this = this; + this.x = x; + this.ia = 1; + this.ib = function () { return _this.ia; }; + } + C.foo = function (x) { + }; + C.bar = function (x) { + }; + Object.defineProperty(C, "sc", { + get: function () { + return 1; + }, + set: function (x) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C, "sd", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + C.prototype.baz = function (x) { + return ''; + }; + Object.defineProperty(C.prototype, "ic", { + get: function () { + return 1; + }, + set: function (x) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C.prototype, "id", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + C.sa = 1; + C.sb = function () { return 1; }; + return C; +})(); +var c; +// BUG 820454 +var r1; +var r2; +var D = (function () { + function D(y) { + this.y = y; + } + D.prototype.foo = function () { + }; + return D; +})(); +var d; +var r3; +var r4; diff --git a/tests/baselines/reference/typesWithPrivateConstructor.js b/tests/baselines/reference/typesWithPrivateConstructor.js new file mode 100644 index 00000000000..0faaa4428b5 --- /dev/null +++ b/tests/baselines/reference/typesWithPrivateConstructor.js @@ -0,0 +1,34 @@ +//// [typesWithPrivateConstructor.ts] +// private constructors are not allowed + +class C { + private constructor() { } +} + +var c = new C(); +var r: () => void = c.constructor; + +class C2 { + private constructor(x: number); + private constructor(x: any) { } +} + +var c2 = new C2(); +var r2: (x: number) => void = c2.constructor; + +//// [typesWithPrivateConstructor.js] +// private constructors are not allowed +var C = (function () { + function C() { + } + return C; +})(); +var c = new C(); +var r = c.constructor; +var C2 = (function () { + function C2(x) { + } + return C2; +})(); +var c2 = new C2(); +var r2 = c2.constructor; diff --git a/tests/baselines/reference/unaryOperatorsInStrictMode.js b/tests/baselines/reference/unaryOperatorsInStrictMode.js new file mode 100644 index 00000000000..b766bd3afef --- /dev/null +++ b/tests/baselines/reference/unaryOperatorsInStrictMode.js @@ -0,0 +1,23 @@ +//// [unaryOperatorsInStrictMode.ts] +"use strict" + +++eval; +--eval; +++arguments; +--arguments; +eval++; +eval--; +arguments++; +arguments--; + + +//// [unaryOperatorsInStrictMode.js] +"use strict"; +++eval; +--eval; +++arguments; +--arguments; +eval++; +eval--; +arguments++; +arguments--; diff --git a/tests/baselines/reference/varBlock.js b/tests/baselines/reference/varBlock.js new file mode 100644 index 00000000000..25ee5001d70 --- /dev/null +++ b/tests/baselines/reference/varBlock.js @@ -0,0 +1,49 @@ +//// [varBlock.ts] +module m2 { + + export var a, b2: number = 10, b; +} + +declare module m3 { + var a, b, c; + var a1, b1 = 10; + + class C { + constructor (public c = 10); + } +} + +declare var b = 10; + +declare var a2, b2, c2; + + + +declare var da = 10; +declare var d3, d4 = 10; + +module m3 { + declare var d = 10; + declare var d2, d3 = 10, d4 = 10; + export declare var dE = 10; + export declare var d2E, d3E = 10, d4E = 10; +} + +declare module m4 { + var d = 10; + var d2, d3 = 10, d4 =10; + export var dE = 10; + export var d2E, d3E = 10, d4E = 10; +} + +declare var c; +declare var c = 10; + +//// [varBlock.js] +var m2; +(function (m2) { + m2.a, m2.b2 = 10, m2.b; +})(m2 || (m2 = {})); +var m3; +(function (m3) { +})(m3 || (m3 = {})); diff --git a/tests/baselines/reference/variableDeclarationInStrictMode1.js b/tests/baselines/reference/variableDeclarationInStrictMode1.js new file mode 100644 index 00000000000..3eba8fa3d17 --- /dev/null +++ b/tests/baselines/reference/variableDeclarationInStrictMode1.js @@ -0,0 +1,7 @@ +//// [variableDeclarationInStrictMode1.ts] +"use strict"; +var eval; + +//// [variableDeclarationInStrictMode1.js] +"use strict"; +var eval; diff --git a/tests/baselines/reference/withExportDecl.js b/tests/baselines/reference/withExportDecl.js new file mode 100644 index 00000000000..7fbaa603c31 --- /dev/null +++ b/tests/baselines/reference/withExportDecl.js @@ -0,0 +1,103 @@ +//// [withExportDecl.ts] +var simpleVar; +export var exportedSimpleVar; + +var anotherVar: any; +var varWithSimpleType: number; +var varWithArrayType: number[]; + +var varWithInitialValue = 30; +export var exportedVarWithInitialValue = 70; + +var withComplicatedValue = { x: 30, y: 70, desc: "position" }; +export var exportedWithComplicatedValue = { x: 30, y: 70, desc: "position" }; + +declare var declaredVar; +declare var declareVar2 + +declare var declaredVar; +declare var deckareVarWithType: number; +export declare var exportedDeclaredVar: number; + +var arrayVar: string[] = ['a', 'b']; + +export var exportedArrayVar: { x: number; y: string; }[] ; +exportedArrayVar.push({ x: 30, y : 'hello world' }); + +function simpleFunction() { + return { + x: "Hello", + y: "word", + n: 2 + }; +} + +export function exportedFunction() { + return simpleFunction(); +} + +module m1 { + export function foo() { + return "Hello"; + } +} +declare export module m2 { + + export var a: number; +} + + +export module m3 { + + export function foo() { + return m1.foo(); + } +} + +export var eVar1, eVar2 = 10; +var eVar22; +export var eVar3 = 10, eVar4, eVar5; + +//// [withExportDecl.js] +define(["require", "exports"], function (require, exports) { + var simpleVar; + exports.exportedSimpleVar; + var anotherVar; + var varWithSimpleType; + var varWithArrayType; + var varWithInitialValue = 30; + exports.exportedVarWithInitialValue = 70; + var withComplicatedValue = { x: 30, y: 70, desc: "position" }; + exports.exportedWithComplicatedValue = { x: 30, y: 70, desc: "position" }; + var arrayVar = ['a', 'b']; + exports.exportedArrayVar; + exports.exportedArrayVar.push({ x: 30, y: 'hello world' }); + function simpleFunction() { + return { + x: "Hello", + y: "word", + n: 2 + }; + } + function exportedFunction() { + return simpleFunction(); + } + exports.exportedFunction = exportedFunction; + var m1; + (function (m1) { + function foo() { + return "Hello"; + } + m1.foo = foo; + })(m1 || (m1 = {})); + var m3; + (function (m3) { + function foo() { + return m1.foo(); + } + m3.foo = foo; + })(m3 = exports.m3 || (exports.m3 = {})); + exports.eVar1, exports.eVar2 = 10; + var eVar22; + exports.eVar3 = 10, exports.eVar4, exports.eVar5; +}); diff --git a/tests/baselines/reference/yieldExpression1.js b/tests/baselines/reference/yieldExpression1.js new file mode 100644 index 00000000000..70ed3cc455a --- /dev/null +++ b/tests/baselines/reference/yieldExpression1.js @@ -0,0 +1,9 @@ +//// [yieldExpression1.ts] +function* foo() { + yield +} + +//// [yieldExpression1.js] +function foo() { + ; +} diff --git a/tests/cases/unittests/incrementalParser.ts b/tests/cases/unittests/incrementalParser.ts index a3875cf8e8c..b639fb29e04 100644 --- a/tests/cases/unittests/incrementalParser.ts +++ b/tests/cases/unittests/incrementalParser.ts @@ -39,7 +39,6 @@ module ts { assert.equal(d1.messageText, d2.messageText, "d1.messageText !== d2.messageText"); assert.equal(d1.category, d2.category, "d1.category !== d2.category"); assert.equal(d1.code, d2.code, "d1.code !== d2.code"); - assert.equal(d1.isEarly, d2.isEarly, "d1.isEarly !== d2.isEarly"); } } From d66e70a96056f9b5c88e51012b6ade6b310c554e Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 2 Feb 2015 15:28:23 -0800 Subject: [PATCH 3/6] Emit even in the presence of parse errors. --- src/compiler/program.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index cf65d3c053e..a2a735bc1d8 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -114,8 +114,11 @@ module ts { } function isEmitBlocked(sourceFile?: SourceFile): boolean { - return getDiagnostics(sourceFile).length !== 0 || - (options.noEmitOnError && getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile).length !== 0); + if (options.noEmitOnError) { + return getDiagnostics(sourceFile).length !== 0 || getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile).length !== 0; + } + + return false; } function getDiagnosticsProducingTypeChecker() { From aed3b4c186fab3b2f24a474e7acbd0cae06f2340 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 2 Feb 2015 15:30:33 -0800 Subject: [PATCH 4/6] Baseline updates now that we emit in the presence of parse errors. --- tests/baselines/reference/ArrowFunction1.js | 8 + tests/baselines/reference/ArrowFunction3.js | 8 + .../baselines/reference/ExportAssignment7.js | 13 + .../baselines/reference/ExportAssignment8.js | 13 + ...sibleTypesInNestedMemberTypeAnnotations.js | 25 + .../reference/FunctionDeclaration12_es6.js | 6 + .../reference/FunctionDeclaration5_es6.js | 8 + .../FunctionPropertyAssignments2_es6.js | 6 + .../FunctionPropertyAssignments3_es6.js | 6 + .../FunctionPropertyAssignments4_es6.js | 6 + .../FunctionPropertyAssignments6_es6.js | 6 + .../MemberFunctionDeclaration4_es6.js | 13 + .../MemberFunctionDeclaration5_es6.js | 11 + .../MemberFunctionDeclaration6_es6.js | 11 + .../MemberFunctionDeclaration8_es6.js | 22 + .../reference/TemplateExpression1.js | 5 + tests/baselines/reference/TupleType4.js | 5 + ...eEachWithExportedLocalVarsOfTheSameName.js | 60 + .../baselines/reference/TypeArgumentList1.js | 5 + .../reference/YieldExpression5_es6.js | 9 + tests/baselines/reference/aliasErrors.js | 68 + .../reference/ambientDeclarationsExternal.js | 33 + .../reference/ambiguousGenericAssertion1.js | 15 + tests/baselines/reference/amdModuleName2.js | 24 + tests/baselines/reference/anonymousModules.js | 29 + .../baselines/reference/arrayTypeOfTypeOf.js | 16 + .../arrowFunctionMissingCurlyWithSemicolon.js | 11 + .../reference/arrowFunctionsMissingTokens.js | 140 + .../assertInWrapSomeTypeParameter.js | 16 + .../reference/assignmentLHSIsValue.js | 164 + tests/baselines/reference/autoLift2.js | 52 + tests/baselines/reference/bases.js | 46 + .../reference/binaryIntegerLiteralError.js | 23 + .../bitwiseNotOperatorInvalidOperations.js | 24 + .../callExpressionWithMissingTypeArgument1.js | 5 + ...allSignaturesWithParameterInitializers2.js | 56 + .../baselines/reference/circularReference.js | 66 + tests/baselines/reference/class2.js | 10 + .../reference/classBodyWithStatements.js | 37 + tests/baselines/reference/classExpression.js | 34 + .../reference/classExtendingPrimitive.js | 98 + .../reference/classExtendingPrimitive2.js | 22 + .../reference/classExtendsEveryObjectType.js | 75 + .../reference/classExtendsEveryObjectType2.js | 21 + ...classMemberInitializerWithLamdaScoping3.js | 34 + ...classMemberInitializerWithLamdaScoping4.js | 30 + tests/baselines/reference/classUpdateTests.js | 264 + .../classWithPredefinedTypesAsNames2.js | 13 + .../reference/commaOperatorWithoutOperand.js | 46 + .../baselines/reference/complicatedPrivacy.js | 204 + .../reference/compoundAssignmentLHSIsValue.js | 261 + .../reference/conflictMarkerTrivia1.js | 16 + .../reference/conflictMarkerTrivia2.js | 26 + .../constructorStaticParamNameErrors.js | 15 + ...constructorWithIncompleteTypeAnnotation.js | 569 ++ .../declarationEmit_invalidReference2.js | 11 + .../deleteOperatorInvalidOperations.js | 33 + ...dClassSuperCallsInNonConstructorMembers.js | 83 + .../dontShowCompilerGeneratedMembers.js | 9 + tests/baselines/reference/dottedModuleName.js | 55 + .../reference/duplicateExportAssignments.js | 80 + .../baselines/reference/emptyMemberAccess.js | 12 + .../enumConflictsWithGlobalIdentifier.js | 15 + .../reference/enumMemberResolution.js | 17 + .../enumWithParenthesizedInitializer1.js | 10 + tests/baselines/reference/errorSuperCalls.js | 170 + tests/baselines/reference/es6ClassTest3.js | 31 + tests/baselines/reference/es6ClassTest9.js | 9 + .../reference/exportAssignDottedName.js | 21 + .../exportAssignImportedIdentifier.js | 28 + .../reference/exportAssignNonIdentifier.js | 52 + .../baselines/reference/exportAssignTypes.js | 93 + .../exportAssignmentWithoutIdentifier1.js | 18 + .../reference/exportDeclareClass1.js | 16 + .../reference/exportDeclaredModule.js | 19 + .../reference/exportNonVisibleType.js | 54 + tests/baselines/reference/extension.js | 37 + tests/baselines/reference/externModule.js | 58 + .../externalModuleWithoutCompilerFlag1.js | 7 + .../reference/fatarrowfunctionsErrors.js | 47 + .../fatarrowfunctionsOptionalArgs.js | 394 ++ .../fatarrowfunctionsOptionalArgsErrors2.js | 13 + .../fatarrowfunctionsOptionalArgsErrors3.js | 12 + tests/baselines/reference/for.js | 56 + .../functionTypesLackingReturnTypes.js | 25 + ...nsMissingReturnStatementsAndExpressions.js | 237 + .../reference/genericArrayExtenstions.js | 8 + .../reference/genericCallWithoutArgs.js | 10 + .../reference/genericCallsWithoutParens.js | 21 + .../genericConstructExpressionWithoutArgs.js | 26 + .../genericObjectCreationWithoutTypeArgs.js | 21 + ...hSyntacticErrorsForMultipleFiles2.baseline | 8 +- .../getEmitOutputWithSyntaxErrors.baseline | 4 +- ...sAnExternalModuleInsideAnInternalModule.js | 31 + ...eclRefereingExternalModuleWithNoResolve.js | 8 + .../importDeclWithDeclareModifier.js | 11 + .../incompleteDottedExpressionAtEOF.js | 7 + .../reference/incompleteObjectLiteral1.js | 7 + .../reference/incrementAndDecrement.js | 123 + ...initializerReferencingConstructorLocals.js | 43 + ...ializerReferencingConstructorParameters.js | 58 + tests/baselines/reference/innerModExport1.js | 45 + tests/baselines/reference/innerModExport2.js | 47 + .../reference/instantiateTypeParameter.js | 7 + tests/baselines/reference/intTypeCheck.js | 348 ++ .../reference/interfaceDeclaration4.js | 73 + .../reference/interfaceExtendingClass2.js | 34 + .../interfaceMayNotBeExtendedWitACall.js | 11 + tests/baselines/reference/interfaceNaming1.js | 11 + .../interfaceWithAccessibilityModifiers.js | 9 + .../reference/interfaceWithPrivateMember.js | 19 + .../interfacesWithPredefinedTypesAsNames.js | 9 + ...aryIntegerLiteralAndOctalIntegerLiteral.js | 17 + .../reference/invalidReferenceSyntax1.js | 13 + .../reference/invalidThrowStatement.js | 9 + .../reference/invalidTripleSlashReference.js | 12 + .../reference/invalidTryStatements2.js | 68 + .../reference/invalidTypeOfTarget.js | 20 + .../reference/invalidUnicodeEscapeSequance.js | 5 + .../invalidUnicodeEscapeSequance2.js | 5 + .../invalidUnicodeEscapeSequance3.js | 6 + .../invalidUnicodeEscapeSequance4.js | 7 + .../reference/letAsIdentifierInStrictMode.js | 17 + .../logicalNotOperatorInvalidOperations.js | 23 + .../mergedModuleDeclarationCodeGen.js | 42 + .../reference/moduleKeywordRepeatError.js | 10 + tests/baselines/reference/moduleProperty1.js | 26 + tests/baselines/reference/moduleScoping.js | 40 + .../negateOperatorInvalidOperations.js | 25 + .../reference/nestedClassDeclaration.js | 42 + .../reference/newExpressionWithCast.js | 29 + .../reference/newMissingIdentifier.js | 6 + .../reference/newOperatorErrorCases.js | 71 + tests/baselines/reference/numLit.js | 12 + .../numericNamedPropertyDuplicates.js | 34 + ...ctCreationExpressionInFunctionParameter.js | 18 + .../reference/objectLitArrayDeclNoNew.js | 49 + ...teralShorthandPropertiesAssignmentError.js | 24 + ...iesAssignmentErrorFromMissingIdentifier.js | 23 + ...ndPropertiesErrorFromNotUsingIdentifier.js | 43 + ...teralShorthandPropertiesErrorWithModule.js | 32 + .../reference/objectTypeLiteralSyntax2.js | 19 + .../objectTypesWithOptionalProperties2.js | 48 + .../objectTypesWithPredefinedTypesAsName2.js | 13 + .../reference/octalIntegerLiteralError.js | 23 + .../reference/optionalPropertiesSyntax.js | 38 + .../overloadOnConstAsTypeAnnotation.js | 9 + .../overloadingStaticFunctionsInFunctions.js | 15 + tests/baselines/reference/parse1.js | 12 + tests/baselines/reference/parse2.js | 9 + .../reference/parseErrorInHeritageClause1.js | 18 + .../parseIncompleteBinaryExpression1.js | 5 + tests/baselines/reference/parser0_004152.js | 14 + tests/baselines/reference/parser10.1.1-8gs.js | 37 + tests/baselines/reference/parser509546.js | 13 + tests/baselines/reference/parser509546_1.js | 13 + tests/baselines/reference/parser509546_2.js | 16 + tests/baselines/reference/parser509630.js | 28 + tests/baselines/reference/parser509667.js | 27 + tests/baselines/reference/parser509668.js | 17 + tests/baselines/reference/parser509669.js | 10 + tests/baselines/reference/parser512084.js | 10 + tests/baselines/reference/parser512097.js | 10 + tests/baselines/reference/parser512325.js | 6 + tests/baselines/reference/parser519458.js | 8 + tests/baselines/reference/parser521128.js | 7 + tests/baselines/reference/parser566700.js | 5 + tests/baselines/reference/parser585151.js | 13 + tests/baselines/reference/parser618973.js | 15 + tests/baselines/reference/parser642331_1.js | 15 + tests/baselines/reference/parser645086_1.js | 6 + tests/baselines/reference/parser645086_2.js | 6 + .../parserAccessibilityAfterStatic6.js | 11 + .../reference/parserArgumentList1.js | 14 + .../parserArrowFunctionExpression2.js | 7 + .../parserArrowFunctionExpression3.js | 6 + tests/baselines/reference/parserClass1.js | 35 + tests/baselines/reference/parserClass2.js | 18 + .../reference/parserCommaInTypeMemberList1.js | 5 + .../reference/parserCommaInTypeMemberList2.js | 6 + .../reference/parserComputedPropertyName1.js | 5 + .../reference/parserComputedPropertyName27.js | 15 + .../reference/parserComputedPropertyName30.js | 14 + .../reference/parserComputedPropertyName33.js | 17 + .../reference/parserComputedPropertyName39.js | 15 + .../reference/parserConstructorAmbiguity3.js | 5 + .../parserConstructorDeclaration8.js | 12 + .../parserEmptyParenthesizedExpression1.js | 9 + tests/baselines/reference/parserEnum1.js | 18 + tests/baselines/reference/parserEnum2.js | 18 + tests/baselines/reference/parserEnum3.js | 10 + tests/baselines/reference/parserEnum4.js | 11 + tests/baselines/reference/parserEnum5.js | 24 + .../reference/parserEnumDeclaration4.js | 9 + .../parserEqualsGreaterThanAfterFunction1.js | 4 + .../parserEqualsGreaterThanAfterFunction2.js | 4 + ...serErrantAccessibilityModifierInModule1.js | 14 + ...erErrantEqualsGreaterThanAfterFunction1.js | 5 + ...erErrantEqualsGreaterThanAfterFunction2.js | 5 + .../parserErrantSemicolonInClass1.js | 73 + ...serErrorRecoveryArrayLiteralExpression1.js | 6 + ...serErrorRecoveryArrayLiteralExpression2.js | 8 + ...serErrorRecoveryArrayLiteralExpression3.js | 9 + .../parserErrorRecoveryIfStatement1.js | 25 + .../parserErrorRecoveryIfStatement2.js | 25 + .../parserErrorRecoveryIfStatement3.js | 25 + .../parserErrorRecoveryIfStatement4.js | 25 + .../parserErrorRecoveryIfStatement5.js | 27 + .../parserErrorRecoveryIfStatement6.js | 26 + .../parserErrorRecovery_ArgumentList1.js | 11 + .../parserErrorRecovery_ArgumentList2.js | 9 + .../parserErrorRecovery_ArgumentList3.js | 11 + .../parserErrorRecovery_ArgumentList4.js | 11 + .../parserErrorRecovery_ArgumentList6.js | 5 + .../parserErrorRecovery_ArgumentList7.js | 5 + .../reference/parserErrorRecovery_Block1.js | 11 + .../reference/parserErrorRecovery_Block2.js | 10 + .../reference/parserErrorRecovery_Block3.js | 18 + .../parserErrorRecovery_ClassElement1.js | 21 + .../parserErrorRecovery_ClassElement2.js | 20 + .../parserErrorRecovery_ClassElement3.js | 21 + .../parserErrorRecovery_Expression1.js | 5 + ...ErrorRecovery_IncompleteMemberVariable1.js | 55 + ...ErrorRecovery_IncompleteMemberVariable2.js | 55 + .../parserErrorRecovery_LeftShift1.js | 6 + .../parserErrorRecovery_ModuleElement1.js | 9 + .../parserErrorRecovery_ModuleElement2.js | 15 + .../parserErrorRecovery_ObjectLiteral1.js | 5 + .../parserErrorRecovery_ObjectLiteral2.js | 6 + .../parserErrorRecovery_ObjectLiteral3.js | 6 + .../parserErrorRecovery_ObjectLiteral4.js | 6 + .../parserErrorRecovery_ObjectLiteral5.js | 6 + .../parserErrorRecovery_ParameterList1.js | 5 + .../parserErrorRecovery_ParameterList2.js | 5 + .../parserErrorRecovery_ParameterList4.js | 7 + .../parserErrorRecovery_ParameterList5.js | 5 + .../parserErrorRecovery_ParameterList6.js | 15 + .../parserErrorRecovery_SourceUnit1.js | 18 + .../parserErrorRecovery_SwitchStatement1.js | 17 + .../parserErrorRecovery_SwitchStatement2.js | 21 + .../reference/parserExportAssignment1.js | 4 + .../reference/parserExportAssignment2.js | 4 + .../reference/parserExportAssignment3.js | 4 + .../reference/parserExportAssignment4.js | 4 + .../reference/parserExportAssignment7.js | 13 + .../reference/parserExportAssignment8.js | 13 + tests/baselines/reference/parserFuzz1.js | 13 + .../parserGreaterThanTokenAmbiguity12.js | 6 + .../parserGreaterThanTokenAmbiguity13.js | 6 + .../parserGreaterThanTokenAmbiguity14.js | 7 + .../parserGreaterThanTokenAmbiguity17.js | 6 + .../parserGreaterThanTokenAmbiguity18.js | 6 + .../parserGreaterThanTokenAmbiguity19.js | 7 + .../parserGreaterThanTokenAmbiguity2.js | 5 + .../parserGreaterThanTokenAmbiguity3.js | 5 + .../parserGreaterThanTokenAmbiguity4.js | 6 + .../parserGreaterThanTokenAmbiguity7.js | 5 + .../parserGreaterThanTokenAmbiguity8.js | 5 + .../parserGreaterThanTokenAmbiguity9.js | 6 + .../parserIndexMemberDeclaration5.js | 11 + .../reference/parserInterfaceDeclaration6.js | 5 + .../reference/parserInterfaceDeclaration7.js | 5 + ...InvalidIdentifiersInVariableStatements1.js | 12 + .../parserKeywordsAsIdentifierName2.js | 7 + ...rserMemberAccessAfterPostfixExpression1.js | 6 + .../parserMemberAccessExpression1.js | 12 + .../parserMemberAccessOffOfGenericType1.js | 5 + .../parserMissingLambdaOpenBrace1.js | 23 + .../reference/parserMissingToken1.js | 9 + .../reference/parserMissingToken2.js | 5 + .../parserModifierOnPropertySignature1.js | 7 + .../parserModifierOnStatementInBlock1.js | 11 + .../parserModifierOnStatementInBlock3.js | 14 + tests/baselines/reference/parserModule1.js | 60 + .../baselines/reference/parserObjectType5.js | 8 + .../parserPostfixPostfixExpression1.js | 6 + .../parserPostfixUnaryExpression1.js | 6 + .../baselines/reference/parserPublicBreak1.js | 6 + .../baselines/reference/parserRealSource1.js | 325 ++ .../baselines/reference/parserRealSource10.js | 930 ++++ .../baselines/reference/parserRealSource11.js | 4717 +++++++++++++++++ .../baselines/reference/parserRealSource12.js | 1032 ++++ .../baselines/reference/parserRealSource13.js | 183 + .../baselines/reference/parserRealSource14.js | 956 ++++ .../baselines/reference/parserRealSource2.js | 534 ++ .../baselines/reference/parserRealSource3.js | 241 + .../baselines/reference/parserRealSource4.js | 568 ++ .../baselines/reference/parserRealSource5.js | 129 + .../baselines/reference/parserRealSource6.js | 422 ++ .../baselines/reference/parserRealSource7.js | 1496 ++++++ .../baselines/reference/parserRealSource8.js | 862 +++ .../baselines/reference/parserRealSource9.js | 401 ++ ...parserRegularExpressionDivideAmbiguity4.js | 5 + .../baselines/reference/parserS12.11_A3_T4.js | 52 + .../parserShorthandPropertyAssignment2.js | 5 + .../parserShorthandPropertyAssignment3.js | 5 + .../parserShorthandPropertyAssignment4.js | 5 + .../reference/parserSkippedTokens1.js | 4 + .../reference/parserSkippedTokens10.js | 8 + .../reference/parserSkippedTokens11.js | 5 + .../reference/parserSkippedTokens12.js | 4 + .../reference/parserSkippedTokens13.js | 6 + .../reference/parserSkippedTokens14.js | 9 + .../reference/parserSkippedTokens15.js | 8 + .../reference/parserSkippedTokens16.js | 25 + .../reference/parserSkippedTokens17.js | 5 + .../reference/parserSkippedTokens18.js | 5 + .../reference/parserSkippedTokens19.js | 4 + .../reference/parserSkippedTokens2.js | 4 + .../reference/parserSkippedTokens20.js | 5 + .../reference/parserSkippedTokens3.js | 5 + .../reference/parserSkippedTokens4.js | 5 + .../reference/parserSkippedTokens5.js | 5 + .../reference/parserSkippedTokens6.js | 4 + .../reference/parserSkippedTokens7.js | 4 + .../reference/parserSkippedTokens8.js | 6 + .../reference/parserSkippedTokens9.js | 6 + .../baselines/reference/parserStrictMode2.js | 13 + .../reference/parserSuperExpression2.js | 16 + ...ypeAssertionInObjectCreationExpression1.js | 5 + tests/baselines/reference/parserTypeQuery3.js | 5 + tests/baselines/reference/parserTypeQuery4.js | 5 + tests/baselines/reference/parserTypeQuery8.js | 5 + .../parserUnfinishedTypeNameBeforeKeyword1.js | 8 + .../reference/parserUnterminatedGeneric1.js | 5 + .../reference/parserUnterminatedGeneric2.js | 11 + .../reference/parserX_ArrowFunction1.js | 8 + .../reference/parserX_ArrowFunction3.js | 8 + .../reference/parserX_TypeArgumentList1.js | 5 + tests/baselines/reference/parserharness.js | 3898 ++++++++++++++ tests/baselines/reference/parserindenter.js | 1339 +++++ .../reference/parservoidInQualifiedName1.js | 5 + .../reference/parservoidInQualifiedName2.js | 5 + ...sRecoversWhenHittingUnexpectedSemicolon.js | 15 + .../plusOperatorInvalidOperations.js | 17 + tests/baselines/reference/primitiveMembers.js | 73 + tests/baselines/reference/privateIndexer2.js | 18 + .../privateInstanceMemberAccessibility.js | 40 + .../reference/propertyWrappedInTry.js | 36 + .../relativePathToDeclarationFile.js | 35 + .../reference/reservedNamesInAliases.js | 10 + .../baselines/reference/restArgMissingName.js | 11 + .../baselines/reference/scanner10.1.1-8gs.js | 37 + tests/baselines/reference/scannerClass2.js | 18 + .../reference/scannerES3NumericLiteral3.js | 6 + .../reference/scannerES3NumericLiteral4.js | 5 + .../reference/scannerES3NumericLiteral6.js | 5 + tests/baselines/reference/scannerEnum1.js | 12 + .../reference/scannerNumericLiteral3.js | 6 + .../reference/scannerNumericLiteral4.js | 5 + .../reference/scannerNumericLiteral6.js | 5 + .../reference/scannerNumericLiteral9.js | 6 + .../baselines/reference/scannerS7.4_A2_T2.js | 29 + .../reference/scannerS7.8.3_A6.1_T1.js | 29 + .../reference/scannerS7.8.4_A7.1_T4.js | 29 + .../reference/scannerStringLiterals.js | 25 + .../scannerUnexpectedNullCharacter1.js | Bin 0 -> 116 bytes tests/baselines/reference/scannertest1.js | 43 + .../reference/selfReferencingFile.js | 14 + .../reference/selfReferencingFile2.js | 14 + .../reference/selfReferencingFile3.js | 14 + .../slashBeforeVariableDeclaration1.js | 4 + tests/baselines/reference/staticClassProps.js | 19 + .../baselines/reference/staticsInAFunction.js | 16 + .../reference/staticsInConstructorBodies.js | 17 + .../baselines/reference/stringLiteralType.js | 12 + .../reference/stringLiteralsErrors.js | 54 + .../stringNamedPropertyDuplicates.js | 34 + tests/baselines/reference/superAccess2.js | 67 + tests/baselines/reference/superErrors.js | 114 + tests/baselines/reference/superInLambdas.js | 153 + .../reference/superWithTypeArgument.js | 30 + .../reference/superWithTypeArgument2.js | 30 + .../reference/superWithTypeArgument3.js | 39 + ...esWithIncompleteNoSubstitutionTemplate1.js | 13 + ...esWithIncompleteNoSubstitutionTemplate2.js | 13 + ...latesWithIncompleteTemplateExpressions1.js | 13 + ...latesWithIncompleteTemplateExpressions2.js | 13 + ...latesWithIncompleteTemplateExpressions3.js | 13 + ...latesWithIncompleteTemplateExpressions4.js | 13 + ...latesWithIncompleteTemplateExpressions5.js | 13 + ...latesWithIncompleteTemplateExpressions6.js | 13 + .../templateStringInFunctionParameterType.js | 13 + ...emplateStringInFunctionParameterTypeES6.js | 13 + .../reference/templateStringInModuleName.js | 16 + .../templateStringInModuleNameES6.js | 16 + .../templateStringInObjectLiteral.js | 11 + .../templateStringInObjectLiteralES6.js | 11 + .../templateStringInPropertyName1.js | 8 + .../templateStringInPropertyName2.js | 8 + .../templateStringInPropertyNameES6_1.js | 8 + .../templateStringInPropertyNameES6_2.js | 8 + .../reference/templateStringUnterminated1.js | 6 + .../templateStringUnterminated1_ES6.js | 5 + .../reference/templateStringUnterminated2.js | 6 + .../templateStringUnterminated2_ES6.js | 5 + .../reference/templateStringUnterminated3.js | 6 + .../templateStringUnterminated3_ES6.js | 5 + .../reference/templateStringUnterminated4.js | 6 + .../templateStringUnterminated4_ES6.js | 5 + .../reference/templateStringUnterminated5.js | 6 + .../templateStringUnterminated5_ES6.js | 5 + .../templateStringWithEmbeddedYieldKeyword.js | 12 + .../reference/thisInInvalidContexts.js | 111 + .../thisInInvalidContextsExternalModule.js | 112 + .../reference/throwWithoutNewLine1.js | 5 + .../reference/typeAliasesForObjectTypes.js | 26 + .../reference/typeofANonExportedType.js | 106 + .../reference/typeofAnExportedType.js | 109 + .../typeofOperatorInvalidOperations.js | 16 + .../reference/uncaughtCompilerError2.js | 10 + .../unexpectedStatementBlockTerminator.js | 23 + .../reference/unicodeIdentifierName2.js | 7 + .../unterminatedRegexAtEndOfSource1.js | 5 + ...unterminatedStringLiteralWithBackslash1.js | 5 + tests/baselines/reference/validRegexp.js | 9 + .../varArgConstructorMemberParameter.js | 39 + .../reference/varArgWithNoParamName.js | 10 + .../voidOperatorInvalidOperations.js | 16 + .../reference/withStatementErrors.js | 33 + 420 files changed, 28476 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/ArrowFunction1.js create mode 100644 tests/baselines/reference/ArrowFunction3.js create mode 100644 tests/baselines/reference/ExportAssignment7.js create mode 100644 tests/baselines/reference/ExportAssignment8.js create mode 100644 tests/baselines/reference/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInNestedMemberTypeAnnotations.js create mode 100644 tests/baselines/reference/FunctionDeclaration12_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration5_es6.js create mode 100644 tests/baselines/reference/FunctionPropertyAssignments2_es6.js create mode 100644 tests/baselines/reference/FunctionPropertyAssignments3_es6.js create mode 100644 tests/baselines/reference/FunctionPropertyAssignments4_es6.js create mode 100644 tests/baselines/reference/FunctionPropertyAssignments6_es6.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration4_es6.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration5_es6.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration6_es6.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration8_es6.js create mode 100644 tests/baselines/reference/TemplateExpression1.js create mode 100644 tests/baselines/reference/TupleType4.js create mode 100644 tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedLocalVarsOfTheSameName.js create mode 100644 tests/baselines/reference/TypeArgumentList1.js create mode 100644 tests/baselines/reference/YieldExpression5_es6.js create mode 100644 tests/baselines/reference/aliasErrors.js create mode 100644 tests/baselines/reference/ambientDeclarationsExternal.js create mode 100644 tests/baselines/reference/ambiguousGenericAssertion1.js create mode 100644 tests/baselines/reference/amdModuleName2.js create mode 100644 tests/baselines/reference/anonymousModules.js create mode 100644 tests/baselines/reference/arrayTypeOfTypeOf.js create mode 100644 tests/baselines/reference/arrowFunctionMissingCurlyWithSemicolon.js create mode 100644 tests/baselines/reference/arrowFunctionsMissingTokens.js create mode 100644 tests/baselines/reference/assertInWrapSomeTypeParameter.js create mode 100644 tests/baselines/reference/assignmentLHSIsValue.js create mode 100644 tests/baselines/reference/autoLift2.js create mode 100644 tests/baselines/reference/bases.js create mode 100644 tests/baselines/reference/binaryIntegerLiteralError.js create mode 100644 tests/baselines/reference/bitwiseNotOperatorInvalidOperations.js create mode 100644 tests/baselines/reference/callExpressionWithMissingTypeArgument1.js create mode 100644 tests/baselines/reference/callSignaturesWithParameterInitializers2.js create mode 100644 tests/baselines/reference/circularReference.js create mode 100644 tests/baselines/reference/class2.js create mode 100644 tests/baselines/reference/classBodyWithStatements.js create mode 100644 tests/baselines/reference/classExpression.js create mode 100644 tests/baselines/reference/classExtendingPrimitive.js create mode 100644 tests/baselines/reference/classExtendingPrimitive2.js create mode 100644 tests/baselines/reference/classExtendsEveryObjectType.js create mode 100644 tests/baselines/reference/classExtendsEveryObjectType2.js create mode 100644 tests/baselines/reference/classMemberInitializerWithLamdaScoping3.js create mode 100644 tests/baselines/reference/classMemberInitializerWithLamdaScoping4.js create mode 100644 tests/baselines/reference/classUpdateTests.js create mode 100644 tests/baselines/reference/classWithPredefinedTypesAsNames2.js create mode 100644 tests/baselines/reference/commaOperatorWithoutOperand.js create mode 100644 tests/baselines/reference/complicatedPrivacy.js create mode 100644 tests/baselines/reference/compoundAssignmentLHSIsValue.js create mode 100644 tests/baselines/reference/conflictMarkerTrivia1.js create mode 100644 tests/baselines/reference/conflictMarkerTrivia2.js create mode 100644 tests/baselines/reference/constructorStaticParamNameErrors.js create mode 100644 tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js create mode 100644 tests/baselines/reference/declarationEmit_invalidReference2.js create mode 100644 tests/baselines/reference/deleteOperatorInvalidOperations.js create mode 100644 tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.js create mode 100644 tests/baselines/reference/dontShowCompilerGeneratedMembers.js create mode 100644 tests/baselines/reference/dottedModuleName.js create mode 100644 tests/baselines/reference/duplicateExportAssignments.js create mode 100644 tests/baselines/reference/emptyMemberAccess.js create mode 100644 tests/baselines/reference/enumConflictsWithGlobalIdentifier.js create mode 100644 tests/baselines/reference/enumMemberResolution.js create mode 100644 tests/baselines/reference/enumWithParenthesizedInitializer1.js create mode 100644 tests/baselines/reference/errorSuperCalls.js create mode 100644 tests/baselines/reference/es6ClassTest3.js create mode 100644 tests/baselines/reference/es6ClassTest9.js create mode 100644 tests/baselines/reference/exportAssignDottedName.js create mode 100644 tests/baselines/reference/exportAssignImportedIdentifier.js create mode 100644 tests/baselines/reference/exportAssignNonIdentifier.js create mode 100644 tests/baselines/reference/exportAssignTypes.js create mode 100644 tests/baselines/reference/exportAssignmentWithoutIdentifier1.js create mode 100644 tests/baselines/reference/exportDeclareClass1.js create mode 100644 tests/baselines/reference/exportDeclaredModule.js create mode 100644 tests/baselines/reference/exportNonVisibleType.js create mode 100644 tests/baselines/reference/extension.js create mode 100644 tests/baselines/reference/externModule.js create mode 100644 tests/baselines/reference/externalModuleWithoutCompilerFlag1.js create mode 100644 tests/baselines/reference/fatarrowfunctionsErrors.js create mode 100644 tests/baselines/reference/fatarrowfunctionsOptionalArgs.js create mode 100644 tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors2.js create mode 100644 tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors3.js create mode 100644 tests/baselines/reference/for.js create mode 100644 tests/baselines/reference/functionTypesLackingReturnTypes.js create mode 100644 tests/baselines/reference/functionsMissingReturnStatementsAndExpressions.js create mode 100644 tests/baselines/reference/genericArrayExtenstions.js create mode 100644 tests/baselines/reference/genericCallWithoutArgs.js create mode 100644 tests/baselines/reference/genericCallsWithoutParens.js create mode 100644 tests/baselines/reference/genericConstructExpressionWithoutArgs.js create mode 100644 tests/baselines/reference/genericObjectCreationWithoutTypeArgs.js create mode 100644 tests/baselines/reference/importAliasAnExternalModuleInsideAnInternalModule.js create mode 100644 tests/baselines/reference/importDeclRefereingExternalModuleWithNoResolve.js create mode 100644 tests/baselines/reference/importDeclWithDeclareModifier.js create mode 100644 tests/baselines/reference/incompleteDottedExpressionAtEOF.js create mode 100644 tests/baselines/reference/incompleteObjectLiteral1.js create mode 100644 tests/baselines/reference/incrementAndDecrement.js create mode 100644 tests/baselines/reference/initializerReferencingConstructorLocals.js create mode 100644 tests/baselines/reference/initializerReferencingConstructorParameters.js create mode 100644 tests/baselines/reference/innerModExport1.js create mode 100644 tests/baselines/reference/innerModExport2.js create mode 100644 tests/baselines/reference/instantiateTypeParameter.js create mode 100644 tests/baselines/reference/intTypeCheck.js create mode 100644 tests/baselines/reference/interfaceDeclaration4.js create mode 100644 tests/baselines/reference/interfaceExtendingClass2.js create mode 100644 tests/baselines/reference/interfaceMayNotBeExtendedWitACall.js create mode 100644 tests/baselines/reference/interfaceNaming1.js create mode 100644 tests/baselines/reference/interfaceWithAccessibilityModifiers.js create mode 100644 tests/baselines/reference/interfaceWithPrivateMember.js create mode 100644 tests/baselines/reference/interfacesWithPredefinedTypesAsNames.js create mode 100644 tests/baselines/reference/invalidBinaryIntegerLiteralAndOctalIntegerLiteral.js create mode 100644 tests/baselines/reference/invalidReferenceSyntax1.js create mode 100644 tests/baselines/reference/invalidThrowStatement.js create mode 100644 tests/baselines/reference/invalidTripleSlashReference.js create mode 100644 tests/baselines/reference/invalidTryStatements2.js create mode 100644 tests/baselines/reference/invalidTypeOfTarget.js create mode 100644 tests/baselines/reference/invalidUnicodeEscapeSequance.js create mode 100644 tests/baselines/reference/invalidUnicodeEscapeSequance2.js create mode 100644 tests/baselines/reference/invalidUnicodeEscapeSequance3.js create mode 100644 tests/baselines/reference/invalidUnicodeEscapeSequance4.js create mode 100644 tests/baselines/reference/letAsIdentifierInStrictMode.js create mode 100644 tests/baselines/reference/logicalNotOperatorInvalidOperations.js create mode 100644 tests/baselines/reference/mergedModuleDeclarationCodeGen.js create mode 100644 tests/baselines/reference/moduleKeywordRepeatError.js create mode 100644 tests/baselines/reference/moduleProperty1.js create mode 100644 tests/baselines/reference/moduleScoping.js create mode 100644 tests/baselines/reference/negateOperatorInvalidOperations.js create mode 100644 tests/baselines/reference/nestedClassDeclaration.js create mode 100644 tests/baselines/reference/newExpressionWithCast.js create mode 100644 tests/baselines/reference/newMissingIdentifier.js create mode 100644 tests/baselines/reference/newOperatorErrorCases.js create mode 100644 tests/baselines/reference/numLit.js create mode 100644 tests/baselines/reference/numericNamedPropertyDuplicates.js create mode 100644 tests/baselines/reference/objectCreationExpressionInFunctionParameter.js create mode 100644 tests/baselines/reference/objectLitArrayDeclNoNew.js create mode 100644 tests/baselines/reference/objectLiteralShorthandPropertiesAssignmentError.js create mode 100644 tests/baselines/reference/objectLiteralShorthandPropertiesAssignmentErrorFromMissingIdentifier.js create mode 100644 tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js create mode 100644 tests/baselines/reference/objectLiteralShorthandPropertiesErrorWithModule.js create mode 100644 tests/baselines/reference/objectTypeLiteralSyntax2.js create mode 100644 tests/baselines/reference/objectTypesWithOptionalProperties2.js create mode 100644 tests/baselines/reference/objectTypesWithPredefinedTypesAsName2.js create mode 100644 tests/baselines/reference/octalIntegerLiteralError.js create mode 100644 tests/baselines/reference/optionalPropertiesSyntax.js create mode 100644 tests/baselines/reference/overloadOnConstAsTypeAnnotation.js create mode 100644 tests/baselines/reference/overloadingStaticFunctionsInFunctions.js create mode 100644 tests/baselines/reference/parse1.js create mode 100644 tests/baselines/reference/parse2.js create mode 100644 tests/baselines/reference/parseErrorInHeritageClause1.js create mode 100644 tests/baselines/reference/parseIncompleteBinaryExpression1.js create mode 100644 tests/baselines/reference/parser0_004152.js create mode 100644 tests/baselines/reference/parser10.1.1-8gs.js create mode 100644 tests/baselines/reference/parser509546.js create mode 100644 tests/baselines/reference/parser509546_1.js create mode 100644 tests/baselines/reference/parser509546_2.js create mode 100644 tests/baselines/reference/parser509630.js create mode 100644 tests/baselines/reference/parser509667.js create mode 100644 tests/baselines/reference/parser509668.js create mode 100644 tests/baselines/reference/parser509669.js create mode 100644 tests/baselines/reference/parser512084.js create mode 100644 tests/baselines/reference/parser512097.js create mode 100644 tests/baselines/reference/parser512325.js create mode 100644 tests/baselines/reference/parser519458.js create mode 100644 tests/baselines/reference/parser521128.js create mode 100644 tests/baselines/reference/parser566700.js create mode 100644 tests/baselines/reference/parser585151.js create mode 100644 tests/baselines/reference/parser618973.js create mode 100644 tests/baselines/reference/parser642331_1.js create mode 100644 tests/baselines/reference/parser645086_1.js create mode 100644 tests/baselines/reference/parser645086_2.js create mode 100644 tests/baselines/reference/parserAccessibilityAfterStatic6.js create mode 100644 tests/baselines/reference/parserArgumentList1.js create mode 100644 tests/baselines/reference/parserArrowFunctionExpression2.js create mode 100644 tests/baselines/reference/parserArrowFunctionExpression3.js create mode 100644 tests/baselines/reference/parserClass1.js create mode 100644 tests/baselines/reference/parserClass2.js create mode 100644 tests/baselines/reference/parserCommaInTypeMemberList1.js create mode 100644 tests/baselines/reference/parserCommaInTypeMemberList2.js create mode 100644 tests/baselines/reference/parserComputedPropertyName1.js create mode 100644 tests/baselines/reference/parserComputedPropertyName27.js create mode 100644 tests/baselines/reference/parserComputedPropertyName30.js create mode 100644 tests/baselines/reference/parserComputedPropertyName33.js create mode 100644 tests/baselines/reference/parserComputedPropertyName39.js create mode 100644 tests/baselines/reference/parserConstructorAmbiguity3.js create mode 100644 tests/baselines/reference/parserConstructorDeclaration8.js create mode 100644 tests/baselines/reference/parserEmptyParenthesizedExpression1.js create mode 100644 tests/baselines/reference/parserEnum1.js create mode 100644 tests/baselines/reference/parserEnum2.js create mode 100644 tests/baselines/reference/parserEnum3.js create mode 100644 tests/baselines/reference/parserEnum4.js create mode 100644 tests/baselines/reference/parserEnum5.js create mode 100644 tests/baselines/reference/parserEnumDeclaration4.js create mode 100644 tests/baselines/reference/parserEqualsGreaterThanAfterFunction1.js create mode 100644 tests/baselines/reference/parserEqualsGreaterThanAfterFunction2.js create mode 100644 tests/baselines/reference/parserErrantAccessibilityModifierInModule1.js create mode 100644 tests/baselines/reference/parserErrantEqualsGreaterThanAfterFunction1.js create mode 100644 tests/baselines/reference/parserErrantEqualsGreaterThanAfterFunction2.js create mode 100644 tests/baselines/reference/parserErrantSemicolonInClass1.js create mode 100644 tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression1.js create mode 100644 tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression2.js create mode 100644 tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression3.js create mode 100644 tests/baselines/reference/parserErrorRecoveryIfStatement1.js create mode 100644 tests/baselines/reference/parserErrorRecoveryIfStatement2.js create mode 100644 tests/baselines/reference/parserErrorRecoveryIfStatement3.js create mode 100644 tests/baselines/reference/parserErrorRecoveryIfStatement4.js create mode 100644 tests/baselines/reference/parserErrorRecoveryIfStatement5.js create mode 100644 tests/baselines/reference/parserErrorRecoveryIfStatement6.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ArgumentList1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ArgumentList2.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ArgumentList3.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ArgumentList4.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ArgumentList6.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ArgumentList7.js create mode 100644 tests/baselines/reference/parserErrorRecovery_Block1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_Block2.js create mode 100644 tests/baselines/reference/parserErrorRecovery_Block3.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ClassElement1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ClassElement2.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ClassElement3.js create mode 100644 tests/baselines/reference/parserErrorRecovery_Expression1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js create mode 100644 tests/baselines/reference/parserErrorRecovery_LeftShift1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ModuleElement1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ModuleElement2.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ObjectLiteral1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ObjectLiteral2.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ObjectLiteral3.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ObjectLiteral4.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ObjectLiteral5.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ParameterList1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ParameterList2.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ParameterList4.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ParameterList5.js create mode 100644 tests/baselines/reference/parserErrorRecovery_ParameterList6.js create mode 100644 tests/baselines/reference/parserErrorRecovery_SourceUnit1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_SwitchStatement1.js create mode 100644 tests/baselines/reference/parserErrorRecovery_SwitchStatement2.js create mode 100644 tests/baselines/reference/parserExportAssignment1.js create mode 100644 tests/baselines/reference/parserExportAssignment2.js create mode 100644 tests/baselines/reference/parserExportAssignment3.js create mode 100644 tests/baselines/reference/parserExportAssignment4.js create mode 100644 tests/baselines/reference/parserExportAssignment7.js create mode 100644 tests/baselines/reference/parserExportAssignment8.js create mode 100644 tests/baselines/reference/parserFuzz1.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity12.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity13.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity14.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity17.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity18.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity19.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity2.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity3.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity4.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity7.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity8.js create mode 100644 tests/baselines/reference/parserGreaterThanTokenAmbiguity9.js create mode 100644 tests/baselines/reference/parserIndexMemberDeclaration5.js create mode 100644 tests/baselines/reference/parserInterfaceDeclaration6.js create mode 100644 tests/baselines/reference/parserInterfaceDeclaration7.js create mode 100644 tests/baselines/reference/parserInvalidIdentifiersInVariableStatements1.js create mode 100644 tests/baselines/reference/parserKeywordsAsIdentifierName2.js create mode 100644 tests/baselines/reference/parserMemberAccessAfterPostfixExpression1.js create mode 100644 tests/baselines/reference/parserMemberAccessExpression1.js create mode 100644 tests/baselines/reference/parserMemberAccessOffOfGenericType1.js create mode 100644 tests/baselines/reference/parserMissingLambdaOpenBrace1.js create mode 100644 tests/baselines/reference/parserMissingToken1.js create mode 100644 tests/baselines/reference/parserMissingToken2.js create mode 100644 tests/baselines/reference/parserModifierOnPropertySignature1.js create mode 100644 tests/baselines/reference/parserModifierOnStatementInBlock1.js create mode 100644 tests/baselines/reference/parserModifierOnStatementInBlock3.js create mode 100644 tests/baselines/reference/parserModule1.js create mode 100644 tests/baselines/reference/parserObjectType5.js create mode 100644 tests/baselines/reference/parserPostfixPostfixExpression1.js create mode 100644 tests/baselines/reference/parserPostfixUnaryExpression1.js create mode 100644 tests/baselines/reference/parserPublicBreak1.js create mode 100644 tests/baselines/reference/parserRealSource1.js create mode 100644 tests/baselines/reference/parserRealSource10.js create mode 100644 tests/baselines/reference/parserRealSource11.js create mode 100644 tests/baselines/reference/parserRealSource12.js create mode 100644 tests/baselines/reference/parserRealSource13.js create mode 100644 tests/baselines/reference/parserRealSource14.js create mode 100644 tests/baselines/reference/parserRealSource2.js create mode 100644 tests/baselines/reference/parserRealSource3.js create mode 100644 tests/baselines/reference/parserRealSource4.js create mode 100644 tests/baselines/reference/parserRealSource5.js create mode 100644 tests/baselines/reference/parserRealSource6.js create mode 100644 tests/baselines/reference/parserRealSource7.js create mode 100644 tests/baselines/reference/parserRealSource8.js create mode 100644 tests/baselines/reference/parserRealSource9.js create mode 100644 tests/baselines/reference/parserRegularExpressionDivideAmbiguity4.js create mode 100644 tests/baselines/reference/parserS12.11_A3_T4.js create mode 100644 tests/baselines/reference/parserShorthandPropertyAssignment2.js create mode 100644 tests/baselines/reference/parserShorthandPropertyAssignment3.js create mode 100644 tests/baselines/reference/parserShorthandPropertyAssignment4.js create mode 100644 tests/baselines/reference/parserSkippedTokens1.js create mode 100644 tests/baselines/reference/parserSkippedTokens10.js create mode 100644 tests/baselines/reference/parserSkippedTokens11.js create mode 100644 tests/baselines/reference/parserSkippedTokens12.js create mode 100644 tests/baselines/reference/parserSkippedTokens13.js create mode 100644 tests/baselines/reference/parserSkippedTokens14.js create mode 100644 tests/baselines/reference/parserSkippedTokens15.js create mode 100644 tests/baselines/reference/parserSkippedTokens16.js create mode 100644 tests/baselines/reference/parserSkippedTokens17.js create mode 100644 tests/baselines/reference/parserSkippedTokens18.js create mode 100644 tests/baselines/reference/parserSkippedTokens19.js create mode 100644 tests/baselines/reference/parserSkippedTokens2.js create mode 100644 tests/baselines/reference/parserSkippedTokens20.js create mode 100644 tests/baselines/reference/parserSkippedTokens3.js create mode 100644 tests/baselines/reference/parserSkippedTokens4.js create mode 100644 tests/baselines/reference/parserSkippedTokens5.js create mode 100644 tests/baselines/reference/parserSkippedTokens6.js create mode 100644 tests/baselines/reference/parserSkippedTokens7.js create mode 100644 tests/baselines/reference/parserSkippedTokens8.js create mode 100644 tests/baselines/reference/parserSkippedTokens9.js create mode 100644 tests/baselines/reference/parserStrictMode2.js create mode 100644 tests/baselines/reference/parserSuperExpression2.js create mode 100644 tests/baselines/reference/parserTypeAssertionInObjectCreationExpression1.js create mode 100644 tests/baselines/reference/parserTypeQuery3.js create mode 100644 tests/baselines/reference/parserTypeQuery4.js create mode 100644 tests/baselines/reference/parserTypeQuery8.js create mode 100644 tests/baselines/reference/parserUnfinishedTypeNameBeforeKeyword1.js create mode 100644 tests/baselines/reference/parserUnterminatedGeneric1.js create mode 100644 tests/baselines/reference/parserUnterminatedGeneric2.js create mode 100644 tests/baselines/reference/parserX_ArrowFunction1.js create mode 100644 tests/baselines/reference/parserX_ArrowFunction3.js create mode 100644 tests/baselines/reference/parserX_TypeArgumentList1.js create mode 100644 tests/baselines/reference/parserharness.js create mode 100644 tests/baselines/reference/parserindenter.js create mode 100644 tests/baselines/reference/parservoidInQualifiedName1.js create mode 100644 tests/baselines/reference/parservoidInQualifiedName2.js create mode 100644 tests/baselines/reference/parsingClassRecoversWhenHittingUnexpectedSemicolon.js create mode 100644 tests/baselines/reference/plusOperatorInvalidOperations.js create mode 100644 tests/baselines/reference/primitiveMembers.js create mode 100644 tests/baselines/reference/privateIndexer2.js create mode 100644 tests/baselines/reference/privateInstanceMemberAccessibility.js create mode 100644 tests/baselines/reference/propertyWrappedInTry.js create mode 100644 tests/baselines/reference/relativePathToDeclarationFile.js create mode 100644 tests/baselines/reference/reservedNamesInAliases.js create mode 100644 tests/baselines/reference/restArgMissingName.js create mode 100644 tests/baselines/reference/scanner10.1.1-8gs.js create mode 100644 tests/baselines/reference/scannerClass2.js create mode 100644 tests/baselines/reference/scannerES3NumericLiteral3.js create mode 100644 tests/baselines/reference/scannerES3NumericLiteral4.js create mode 100644 tests/baselines/reference/scannerES3NumericLiteral6.js create mode 100644 tests/baselines/reference/scannerEnum1.js create mode 100644 tests/baselines/reference/scannerNumericLiteral3.js create mode 100644 tests/baselines/reference/scannerNumericLiteral4.js create mode 100644 tests/baselines/reference/scannerNumericLiteral6.js create mode 100644 tests/baselines/reference/scannerNumericLiteral9.js create mode 100644 tests/baselines/reference/scannerS7.4_A2_T2.js create mode 100644 tests/baselines/reference/scannerS7.8.3_A6.1_T1.js create mode 100644 tests/baselines/reference/scannerS7.8.4_A7.1_T4.js create mode 100644 tests/baselines/reference/scannerStringLiterals.js create mode 100644 tests/baselines/reference/scannerUnexpectedNullCharacter1.js create mode 100644 tests/baselines/reference/scannertest1.js create mode 100644 tests/baselines/reference/selfReferencingFile.js create mode 100644 tests/baselines/reference/selfReferencingFile2.js create mode 100644 tests/baselines/reference/selfReferencingFile3.js create mode 100644 tests/baselines/reference/slashBeforeVariableDeclaration1.js create mode 100644 tests/baselines/reference/staticClassProps.js create mode 100644 tests/baselines/reference/staticsInAFunction.js create mode 100644 tests/baselines/reference/staticsInConstructorBodies.js create mode 100644 tests/baselines/reference/stringLiteralType.js create mode 100644 tests/baselines/reference/stringLiteralsErrors.js create mode 100644 tests/baselines/reference/stringNamedPropertyDuplicates.js create mode 100644 tests/baselines/reference/superAccess2.js create mode 100644 tests/baselines/reference/superErrors.js create mode 100644 tests/baselines/reference/superInLambdas.js create mode 100644 tests/baselines/reference/superWithTypeArgument.js create mode 100644 tests/baselines/reference/superWithTypeArgument2.js create mode 100644 tests/baselines/reference/superWithTypeArgument3.js create mode 100644 tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.js create mode 100644 tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.js create mode 100644 tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions1.js create mode 100644 tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions2.js create mode 100644 tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions3.js create mode 100644 tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions4.js create mode 100644 tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions5.js create mode 100644 tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions6.js create mode 100644 tests/baselines/reference/templateStringInFunctionParameterType.js create mode 100644 tests/baselines/reference/templateStringInFunctionParameterTypeES6.js create mode 100644 tests/baselines/reference/templateStringInModuleName.js create mode 100644 tests/baselines/reference/templateStringInModuleNameES6.js create mode 100644 tests/baselines/reference/templateStringInObjectLiteral.js create mode 100644 tests/baselines/reference/templateStringInObjectLiteralES6.js create mode 100644 tests/baselines/reference/templateStringInPropertyName1.js create mode 100644 tests/baselines/reference/templateStringInPropertyName2.js create mode 100644 tests/baselines/reference/templateStringInPropertyNameES6_1.js create mode 100644 tests/baselines/reference/templateStringInPropertyNameES6_2.js create mode 100644 tests/baselines/reference/templateStringUnterminated1.js create mode 100644 tests/baselines/reference/templateStringUnterminated1_ES6.js create mode 100644 tests/baselines/reference/templateStringUnterminated2.js create mode 100644 tests/baselines/reference/templateStringUnterminated2_ES6.js create mode 100644 tests/baselines/reference/templateStringUnterminated3.js create mode 100644 tests/baselines/reference/templateStringUnterminated3_ES6.js create mode 100644 tests/baselines/reference/templateStringUnterminated4.js create mode 100644 tests/baselines/reference/templateStringUnterminated4_ES6.js create mode 100644 tests/baselines/reference/templateStringUnterminated5.js create mode 100644 tests/baselines/reference/templateStringUnterminated5_ES6.js create mode 100644 tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.js create mode 100644 tests/baselines/reference/thisInInvalidContexts.js create mode 100644 tests/baselines/reference/thisInInvalidContextsExternalModule.js create mode 100644 tests/baselines/reference/throwWithoutNewLine1.js create mode 100644 tests/baselines/reference/typeAliasesForObjectTypes.js create mode 100644 tests/baselines/reference/typeofANonExportedType.js create mode 100644 tests/baselines/reference/typeofAnExportedType.js create mode 100644 tests/baselines/reference/typeofOperatorInvalidOperations.js create mode 100644 tests/baselines/reference/uncaughtCompilerError2.js create mode 100644 tests/baselines/reference/unexpectedStatementBlockTerminator.js create mode 100644 tests/baselines/reference/unicodeIdentifierName2.js create mode 100644 tests/baselines/reference/unterminatedRegexAtEndOfSource1.js create mode 100644 tests/baselines/reference/unterminatedStringLiteralWithBackslash1.js create mode 100644 tests/baselines/reference/validRegexp.js create mode 100644 tests/baselines/reference/varArgConstructorMemberParameter.js create mode 100644 tests/baselines/reference/varArgWithNoParamName.js create mode 100644 tests/baselines/reference/voidOperatorInvalidOperations.js create mode 100644 tests/baselines/reference/withStatementErrors.js diff --git a/tests/baselines/reference/ArrowFunction1.js b/tests/baselines/reference/ArrowFunction1.js new file mode 100644 index 00000000000..1923c3a1d8e --- /dev/null +++ b/tests/baselines/reference/ArrowFunction1.js @@ -0,0 +1,8 @@ +//// [ArrowFunction1.ts] +var v = (a: ) => { + +}; + +//// [ArrowFunction1.js] +var v = function (a) { +}; diff --git a/tests/baselines/reference/ArrowFunction3.js b/tests/baselines/reference/ArrowFunction3.js new file mode 100644 index 00000000000..8ce76f7da3b --- /dev/null +++ b/tests/baselines/reference/ArrowFunction3.js @@ -0,0 +1,8 @@ +//// [ArrowFunction3.ts] +var v = (a): => { + +}; + +//// [ArrowFunction3.js] +var v = function (a) { +}; diff --git a/tests/baselines/reference/ExportAssignment7.js b/tests/baselines/reference/ExportAssignment7.js new file mode 100644 index 00000000000..ce4f5d7bf09 --- /dev/null +++ b/tests/baselines/reference/ExportAssignment7.js @@ -0,0 +1,13 @@ +//// [ExportAssignment7.ts] +export class C { +} + +export = B; + +//// [ExportAssignment7.js] +var C = (function () { + function C() { + } + return C; +})(); +exports.C = C; diff --git a/tests/baselines/reference/ExportAssignment8.js b/tests/baselines/reference/ExportAssignment8.js new file mode 100644 index 00000000000..2f7ac9ee69f --- /dev/null +++ b/tests/baselines/reference/ExportAssignment8.js @@ -0,0 +1,13 @@ +//// [ExportAssignment8.ts] +export = B; + +export class C { +} + +//// [ExportAssignment8.js] +var C = (function () { + function C() { + } + return C; +})(); +exports.C = C; diff --git a/tests/baselines/reference/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInNestedMemberTypeAnnotations.js b/tests/baselines/reference/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInNestedMemberTypeAnnotations.js new file mode 100644 index 00000000000..44c19685743 --- /dev/null +++ b/tests/baselines/reference/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInNestedMemberTypeAnnotations.js @@ -0,0 +1,25 @@ +//// [ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInNestedMemberTypeAnnotations.ts] +module A { + + class Point { + constructor(public x: number, public y: number) { } + } + + export var UnitSquare : { + top: { left: Point, right: Point }, + bottom: { left: Point, right: Point } + } = null; +} + +//// [ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInNestedMemberTypeAnnotations.js] +var A; +(function (A) { + var Point = (function () { + function Point(x, y) { + this.x = x; + this.y = y; + } + return Point; + })(); + A.UnitSquare = null; +})(A || (A = {})); diff --git a/tests/baselines/reference/FunctionDeclaration12_es6.js b/tests/baselines/reference/FunctionDeclaration12_es6.js new file mode 100644 index 00000000000..da9cea3f9c6 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration12_es6.js @@ -0,0 +1,6 @@ +//// [FunctionDeclaration12_es6.ts] +var v = function * yield() { } + +//// [FunctionDeclaration12_es6.js] +var v = , yield = function () { +}; diff --git a/tests/baselines/reference/FunctionDeclaration5_es6.js b/tests/baselines/reference/FunctionDeclaration5_es6.js new file mode 100644 index 00000000000..2530baa220c --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration5_es6.js @@ -0,0 +1,8 @@ +//// [FunctionDeclaration5_es6.ts] +function*foo(yield) { +} + +//// [FunctionDeclaration5_es6.js] +yield; +{ +} diff --git a/tests/baselines/reference/FunctionPropertyAssignments2_es6.js b/tests/baselines/reference/FunctionPropertyAssignments2_es6.js new file mode 100644 index 00000000000..5338afeef39 --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments2_es6.js @@ -0,0 +1,6 @@ +//// [FunctionPropertyAssignments2_es6.ts] +var v = { *() { } } + +//// [FunctionPropertyAssignments2_es6.js] +var v = { : function () { +} }; diff --git a/tests/baselines/reference/FunctionPropertyAssignments3_es6.js b/tests/baselines/reference/FunctionPropertyAssignments3_es6.js new file mode 100644 index 00000000000..7b3adb771f3 --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments3_es6.js @@ -0,0 +1,6 @@ +//// [FunctionPropertyAssignments3_es6.ts] +var v = { *{ } } + +//// [FunctionPropertyAssignments3_es6.js] +var v = { : function () { +} }; diff --git a/tests/baselines/reference/FunctionPropertyAssignments4_es6.js b/tests/baselines/reference/FunctionPropertyAssignments4_es6.js new file mode 100644 index 00000000000..595f7fc9124 --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments4_es6.js @@ -0,0 +1,6 @@ +//// [FunctionPropertyAssignments4_es6.ts] +var v = { * } + +//// [FunctionPropertyAssignments4_es6.js] +var v = { : function () { +} }; diff --git a/tests/baselines/reference/FunctionPropertyAssignments6_es6.js b/tests/baselines/reference/FunctionPropertyAssignments6_es6.js new file mode 100644 index 00000000000..6bd636be73a --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments6_es6.js @@ -0,0 +1,6 @@ +//// [FunctionPropertyAssignments6_es6.ts] +var v = { *() { } } + +//// [FunctionPropertyAssignments6_es6.js] +var v = { : function () { +} }; diff --git a/tests/baselines/reference/MemberFunctionDeclaration4_es6.js b/tests/baselines/reference/MemberFunctionDeclaration4_es6.js new file mode 100644 index 00000000000..9c6d76bfca5 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration4_es6.js @@ -0,0 +1,13 @@ +//// [MemberFunctionDeclaration4_es6.ts] +class C { + *() { } +} + +//// [MemberFunctionDeclaration4_es6.js] +var C = (function () { + function C() { + } + C.prototype. = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration5_es6.js b/tests/baselines/reference/MemberFunctionDeclaration5_es6.js new file mode 100644 index 00000000000..6b43b18fe39 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration5_es6.js @@ -0,0 +1,11 @@ +//// [MemberFunctionDeclaration5_es6.ts] +class C { + * +} + +//// [MemberFunctionDeclaration5_es6.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration6_es6.js b/tests/baselines/reference/MemberFunctionDeclaration6_es6.js new file mode 100644 index 00000000000..ef9c9248763 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration6_es6.js @@ -0,0 +1,11 @@ +//// [MemberFunctionDeclaration6_es6.ts] +class C { + *foo +} + +//// [MemberFunctionDeclaration6_es6.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration8_es6.js b/tests/baselines/reference/MemberFunctionDeclaration8_es6.js new file mode 100644 index 00000000000..8e23a5ec995 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration8_es6.js @@ -0,0 +1,22 @@ +//// [MemberFunctionDeclaration8_es6.ts] +class C { + foo() { + // Make sure we don't think of *bar as the start of a generator method. + if (a) # * bar; + return bar; + } +} + +//// [MemberFunctionDeclaration8_es6.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + // Make sure we don't think of *bar as the start of a generator method. + if (a) + ; + * bar; + return bar; + }; + return C; +})(); diff --git a/tests/baselines/reference/TemplateExpression1.js b/tests/baselines/reference/TemplateExpression1.js new file mode 100644 index 00000000000..c4437260084 --- /dev/null +++ b/tests/baselines/reference/TemplateExpression1.js @@ -0,0 +1,5 @@ +//// [TemplateExpression1.ts] +var v = `foo ${ a + +//// [TemplateExpression1.js] +var v = "foo " + a; diff --git a/tests/baselines/reference/TupleType4.js b/tests/baselines/reference/TupleType4.js new file mode 100644 index 00000000000..aaa660f95d9 --- /dev/null +++ b/tests/baselines/reference/TupleType4.js @@ -0,0 +1,5 @@ +//// [TupleType4.ts] +var v: [ + +//// [TupleType4.js] +var v; diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedLocalVarsOfTheSameName.js b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedLocalVarsOfTheSameName.js new file mode 100644 index 00000000000..c7f55d0a2df --- /dev/null +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedLocalVarsOfTheSameName.js @@ -0,0 +1,60 @@ +//// [tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedLocalVarsOfTheSameName.ts] //// + +//// [part1.ts] +export module A { + export interface Point { + x: number; + y: number; + } + + export module Utils { + export function mirror(p: T) { + return { x: p.y, y: p.x }; + } + } + + export var Origin: Point = { x: 0, y: 0 }; +} + +//// [part2.ts] +export module A { + // collision with 'Origin' var in other part of merged module + export var Origin: Point = { x: 0, y: 0 }; + + export module Utils { + export class Plane { + constructor(public tl: Point, public br: Point) { } + } + } +} + + +//// [part1.js] +var A; +(function (A) { + var Utils; + (function (Utils) { + function mirror(p) { + return { x: p.y, y: p.x }; + } + Utils.mirror = mirror; + })(Utils = A.Utils || (A.Utils = {})); + A.Origin = { x: 0, y: 0 }; +})(A = exports.A || (exports.A = {})); +//// [part2.js] +var A; +(function (A) { + // collision with 'Origin' var in other part of merged module + A.Origin = { x: 0, y: 0 }; + var Utils; + (function (Utils) { + var Plane = (function () { + function Plane(tl, br) { + this.tl = tl; + this.br = br; + } + return Plane; + })(); + Utils.Plane = Plane; + })(Utils = A.Utils || (A.Utils = {})); +})(A = exports.A || (exports.A = {})); diff --git a/tests/baselines/reference/TypeArgumentList1.js b/tests/baselines/reference/TypeArgumentList1.js new file mode 100644 index 00000000000..b87b310a9af --- /dev/null +++ b/tests/baselines/reference/TypeArgumentList1.js @@ -0,0 +1,5 @@ +//// [TypeArgumentList1.ts] +Foo(4, 5, 6); + +//// [TypeArgumentList1.js] +Foo(4, 5, 6); diff --git a/tests/baselines/reference/YieldExpression5_es6.js b/tests/baselines/reference/YieldExpression5_es6.js new file mode 100644 index 00000000000..5e0e9f811fa --- /dev/null +++ b/tests/baselines/reference/YieldExpression5_es6.js @@ -0,0 +1,9 @@ +//// [YieldExpression5_es6.ts] +function* foo() { + yield* +} + +//// [YieldExpression5_es6.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/aliasErrors.js b/tests/baselines/reference/aliasErrors.js new file mode 100644 index 00000000000..e61ca167661 --- /dev/null +++ b/tests/baselines/reference/aliasErrors.js @@ -0,0 +1,68 @@ +//// [aliasErrors.ts] +module foo { + export class Provide { + } + export module bar { export module baz {export class boo {}}} +} + +import provide = foo; +import booz = foo.bar.baz; +import beez = foo.bar; + +import m = no; +import m2 = no.mod; +import n = 5; +import o = "s"; +import q = null; +import r = undefined; + + +var p = new provide.Provide(); + +function use() { + + beez.baz.boo; + var p1: provide.Provide; + var p2: foo.Provide; + var p3:booz.bar; + var p22 = new provide.Provide(); +} + + + +//// [aliasErrors.js] +var foo; +(function (foo) { + var Provide = (function () { + function Provide() { + } + return Provide; + })(); + foo.Provide = Provide; + var bar; + (function (bar) { + var baz; + (function (baz) { + var boo = (function () { + function boo() { + } + return boo; + })(); + baz.boo = boo; + })(baz = bar.baz || (bar.baz = {})); + })(bar = foo.bar || (foo.bar = {})); +})(foo || (foo = {})); +var provide = foo; +var booz = foo.bar.baz; +var beez = foo.bar; +5; +"s"; +null; +var p = new provide.Provide(); +function use() { + beez.baz.boo; + var p1; + var p2; + var p3; + var p22 = new provide.Provide(); +} diff --git a/tests/baselines/reference/ambientDeclarationsExternal.js b/tests/baselines/reference/ambientDeclarationsExternal.js new file mode 100644 index 00000000000..7d8491e0062 --- /dev/null +++ b/tests/baselines/reference/ambientDeclarationsExternal.js @@ -0,0 +1,33 @@ +//// [tests/cases/conformance/ambient/ambientDeclarationsExternal.ts] //// + +//// [decls.ts] + +// Ambient external module with export assignment +declare module 'equ' { + var x; + export = x; +} + +declare module 'equ2' { + var x: number; +} + +// Ambient external import declaration referencing ambient external module using top level module name +//// [consumer.ts] +/// +import imp1 = require('equ'); + + +// Ambient external module members are always exported with or without export keyword when module lacks export assignment +import imp3 = require('equ2'); +var n = imp3.x; +var n: number; + + +//// [decls.js] +// Ambient external import declaration referencing ambient external module using top level module name +//// [consumer.js] +// Ambient external module members are always exported with or without export keyword when module lacks export assignment +var imp3 = require('equ2'); +var n = imp3.x; +var n; diff --git a/tests/baselines/reference/ambiguousGenericAssertion1.js b/tests/baselines/reference/ambiguousGenericAssertion1.js new file mode 100644 index 00000000000..40bbbee6dd2 --- /dev/null +++ b/tests/baselines/reference/ambiguousGenericAssertion1.js @@ -0,0 +1,15 @@ +//// [ambiguousGenericAssertion1.ts] +function f(x: T): T { return null; } +var r = (x: T) => x; +var r2 = < (x: T) => T>f; // valid +var r3 = <(x: T) => T>f; // ambiguous, appears to the parser as a << operation + + +//// [ambiguousGenericAssertion1.js] +function f(x) { + return null; +} +var r = function (x) { return x; }; +var r2 = f; // valid +var r3 = << T > (x), T; +T > f; // ambiguous, appears to the parser as a << operation diff --git a/tests/baselines/reference/amdModuleName2.js b/tests/baselines/reference/amdModuleName2.js new file mode 100644 index 00000000000..90e50ce1e48 --- /dev/null +++ b/tests/baselines/reference/amdModuleName2.js @@ -0,0 +1,24 @@ +//// [amdModuleName2.ts] +/// +/// +class Foo { + x: number; + constructor() { + this.x = 5; + } +} +export = Foo; + + +//// [amdModuleName2.js] +define("SecondModuleName", ["require", "exports"], function (require, exports) { + /// + /// + var Foo = (function () { + function Foo() { + this.x = 5; + } + return Foo; + })(); + return Foo; +}); diff --git a/tests/baselines/reference/anonymousModules.js b/tests/baselines/reference/anonymousModules.js new file mode 100644 index 00000000000..39b21f6990a --- /dev/null +++ b/tests/baselines/reference/anonymousModules.js @@ -0,0 +1,29 @@ +//// [anonymousModules.ts] +module { + export var foo = 1; + + module { + export var bar = 1; + } + + var bar = 2; + + module { + var x = bar; + } +} + +//// [anonymousModules.js] +module; +{ + exports.foo = 1; + module; + { + exports.bar = 1; + } + var bar = 2; + module; + { + var x = bar; + } +} diff --git a/tests/baselines/reference/arrayTypeOfTypeOf.js b/tests/baselines/reference/arrayTypeOfTypeOf.js new file mode 100644 index 00000000000..f3653346be4 --- /dev/null +++ b/tests/baselines/reference/arrayTypeOfTypeOf.js @@ -0,0 +1,16 @@ +//// [arrayTypeOfTypeOf.ts] +// array type cannot use typeof. + +var x = 1; +var xs: typeof x[]; // Not an error. This is equivalent to Array +var xs2: typeof Array; +var xs3: typeof Array; +var xs4: typeof Array; + +//// [arrayTypeOfTypeOf.js] +// array type cannot use typeof. +var x = 1; +var xs; // Not an error. This is equivalent to Array +var xs2; +var xs3 = ; +var xs4 = ; diff --git a/tests/baselines/reference/arrowFunctionMissingCurlyWithSemicolon.js b/tests/baselines/reference/arrowFunctionMissingCurlyWithSemicolon.js new file mode 100644 index 00000000000..931520294e9 --- /dev/null +++ b/tests/baselines/reference/arrowFunctionMissingCurlyWithSemicolon.js @@ -0,0 +1,11 @@ +//// [arrowFunctionMissingCurlyWithSemicolon.ts] +// Should error at semicolon. +var f = () => ; +var b = 1 * 2 * 3 * 4; +var square = (x: number) => x * x; + +//// [arrowFunctionMissingCurlyWithSemicolon.js] +// Should error at semicolon. +var f = ; +var b = 1 * 2 * 3 * 4; +var square = function (x) { return x * x; }; diff --git a/tests/baselines/reference/arrowFunctionsMissingTokens.js b/tests/baselines/reference/arrowFunctionsMissingTokens.js new file mode 100644 index 00000000000..7bd24f07577 --- /dev/null +++ b/tests/baselines/reference/arrowFunctionsMissingTokens.js @@ -0,0 +1,140 @@ +//// [arrowFunctionsMissingTokens.ts] + +module missingArrowsWithCurly { + var a = () { }; + + var b = (): void { } + + var c = (x) { }; + + var d = (x: number, y: string) { }; + + var e = (x: number, y: string): void { }; +} + +module missingCurliesWithArrow { + module withStatement { + var a = () => var k = 10;}; + + var b = (): void => var k = 10;} + + var c = (x) => var k = 10;}; + + var d = (x: number, y: string) => var k = 10;}; + + var e = (x: number, y: string): void => var k = 10;}; + + var f = () => var k = 10;} + } + + module withoutStatement { + var a = () => }; + + var b = (): void => } + + var c = (x) => }; + + var d = (x: number, y: string) => }; + + var e = (x: number, y: string): void => }; + + var f = () => } + } +} + +module ce_nEst_pas_une_arrow_function { + var a = (); + + var b = (): void; + + var c = (x); + + var d = (x: number, y: string); + + var e = (x: number, y: string): void; +} + +module okay { + var a = () => { }; + + var b = (): void => { } + + var c = (x) => { }; + + var d = (x: number, y: string) => { }; + + var e = (x: number, y: string): void => { }; +} + +//// [arrowFunctionsMissingTokens.js] +var missingArrowsWithCurly; +(function (missingArrowsWithCurly) { + var a = function () { + }; + var b = function () { + }; + var c = function (x) { + }; + var d = function (x, y) { + }; + var e = function (x, y) { + }; +})(missingArrowsWithCurly || (missingArrowsWithCurly = {})); +var missingCurliesWithArrow; +(function (missingCurliesWithArrow) { + var withStatement; + (function (withStatement) { + var a = function () { + var k = 10; + }; + var b = function () { + var k = 10; + }; + var c = function (x) { + var k = 10; + }; + var d = function (x, y) { + var k = 10; + }; + var e = function (x, y) { + var k = 10; + }; + var f = function () { + var k = 10; + }; + })(withStatement || (withStatement = {})); + var withoutStatement; + (function (withoutStatement) { + var a = ; + })(withoutStatement || (withoutStatement = {})); + ; + var b = ; +})(missingCurliesWithArrow || (missingCurliesWithArrow = {})); +var c = ; +; +var d = ; +; +var e = ; +; +var f = ; +var ce_nEst_pas_une_arrow_function; +(function (ce_nEst_pas_une_arrow_function) { + var a = (); + var b = ; + var c = (x); + var d = ; + var e = ; +})(ce_nEst_pas_une_arrow_function || (ce_nEst_pas_une_arrow_function = {})); +var okay; +(function (okay) { + var a = function () { + }; + var b = function () { + }; + var c = function (x) { + }; + var d = function (x, y) { + }; + var e = function (x, y) { + }; +})(okay || (okay = {})); diff --git a/tests/baselines/reference/assertInWrapSomeTypeParameter.js b/tests/baselines/reference/assertInWrapSomeTypeParameter.js new file mode 100644 index 00000000000..efb7d31a86a --- /dev/null +++ b/tests/baselines/reference/assertInWrapSomeTypeParameter.js @@ -0,0 +1,16 @@ +//// [assertInWrapSomeTypeParameter.ts] +class C> { + foo>(x: U) { + return null; + } +} + +//// [assertInWrapSomeTypeParameter.js] +var C = (function () { + function C() { + } + C.prototype.foo = function (x) { + return null; + }; + return C; +})(); diff --git a/tests/baselines/reference/assignmentLHSIsValue.js b/tests/baselines/reference/assignmentLHSIsValue.js new file mode 100644 index 00000000000..e6975e70146 --- /dev/null +++ b/tests/baselines/reference/assignmentLHSIsValue.js @@ -0,0 +1,164 @@ +//// [assignmentLHSIsValue.ts] +// expected error for all the LHS of assignments +var value; + +// this +class C { + constructor() { this = value; } + foo() { this = value; } + static sfoo() { this = value; } +} + +function foo() { this = value; } + +this = value; + +// identifiers: module, class, enum, function +module M { export var a; } +M = value; + +C = value; + +enum E { } +E = value; + +foo = value; + +// literals +null = value; +true = value; +false = value; +0 = value; +'' = value; +/d+/ = value; + +// object literals +{ a: 0} = value; + +// array literals +['', ''] = value; + +// super +class Derived extends C { + constructor() { super(); super = value; } + + foo() { super = value } + + static sfoo() { super = value; } +} + +// function expression +function bar() { } = value; +() => { } = value; + +// function calls +foo() = value; + +// parentheses, the containted expression is value +(this) = value; +(M) = value; +(C) = value; +(E) = value; +(foo) = value; +(null) = value; +(true) = value; +(0) = value; +('') = value; +(/d+/) = value; +({}) = value; +([]) = value; +(function baz() { }) = value; +(foo()) = value; + +//// [assignmentLHSIsValue.js] +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 __(); +}; +// expected error for all the LHS of assignments +var value; +// this +var C = (function () { + function C() { + this = value; + } + C.prototype.foo = function () { + this = value; + }; + C.sfoo = function () { + this = value; + }; + return C; +})(); +function foo() { + this = value; +} +this = value; +// identifiers: module, class, enum, function +var M; +(function (M) { + M.a; +})(M || (M = {})); +M = value; +C = value; +var E; +(function (E) { +})(E || (E = {})); +E = value; +foo = value; +// literals +null = value; +true = value; +false = value; +0 = value; +'' = value; +/d+/ = value; +// object literals +{ + a: 0; +} +value; +// array literals +'' = value[0], '' = value[1]; +// super +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + _super.call(this); + _super.prototype. = value; + } + Derived.prototype.foo = function () { + _super.prototype. = value; + }; + Derived.sfoo = function () { + _super. = value; + }; + return Derived; +})(C); +// function expression +function bar() { +} +value; +(function () { +}); +value; +// function calls +foo() = value; +// parentheses, the containted expression is value +(this) = value; +(M) = value; +(C) = value; +(E) = value; +(foo) = value; +(null) = value; +(true) = value; +(0) = value; +('') = value; +(/d+/) = value; +({}) = value; +([]) = value; +(function baz() { +}) = value; +(foo()) = value; diff --git a/tests/baselines/reference/autoLift2.js b/tests/baselines/reference/autoLift2.js new file mode 100644 index 00000000000..cf840277d70 --- /dev/null +++ b/tests/baselines/reference/autoLift2.js @@ -0,0 +1,52 @@ +//// [autoLift2.ts] +class A + +{ + constructor() { + this.foo: any; + this.bar: any; + } + + + baz() { + + this.foo = "foo"; + + this.bar = "bar"; + + [1, 2].forEach((p) => this.foo); + + [1, 2].forEach((p) => this.bar); + + } + +} + + + +var a = new A(); + +a.baz(); + + + + +//// [autoLift2.js] +var A = (function () { + function A() { + this.foo; + any; + this.bar; + any; + } + A.prototype.baz = function () { + var _this = this; + this.foo = "foo"; + this.bar = "bar"; + [1, 2].forEach(function (p) { return _this.foo; }); + [1, 2].forEach(function (p) { return _this.bar; }); + }; + return A; +})(); +var a = new A(); +a.baz(); diff --git a/tests/baselines/reference/bases.js b/tests/baselines/reference/bases.js new file mode 100644 index 00000000000..32d65d1a248 --- /dev/null +++ b/tests/baselines/reference/bases.js @@ -0,0 +1,46 @@ +//// [bases.ts] +interface I { + x; +} + +class B { + constructor() { + this.y: any; + } +} + +class C extends B implements I { + constructor() { + this.x: any; + } +} + +new C().x; +new C().y; + + + +//// [bases.js] +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 B = (function () { + function B() { + this.y; + any; + } + return B; +})(); +var C = (function (_super) { + __extends(C, _super); + function C() { + this.x; + any; + } + return C; +})(B); +new C().x; +new C().y; diff --git a/tests/baselines/reference/binaryIntegerLiteralError.js b/tests/baselines/reference/binaryIntegerLiteralError.js new file mode 100644 index 00000000000..215514982c0 --- /dev/null +++ b/tests/baselines/reference/binaryIntegerLiteralError.js @@ -0,0 +1,23 @@ +//// [binaryIntegerLiteralError.ts] +// error +var bin1 = 0B1102110; +var bin1 = 0b11023410; + +var obj1 = { + 0b11010: "hi", + 26: "Hello", + "26": "world", +}; + + +//// [binaryIntegerLiteralError.js] +// error +var bin1 = 6; +2110; +var bin1 = 6; +23410; +var obj1 = { + 26: "hi", + 26: "Hello", + "26": "world" +}; diff --git a/tests/baselines/reference/bitwiseNotOperatorInvalidOperations.js b/tests/baselines/reference/bitwiseNotOperatorInvalidOperations.js new file mode 100644 index 00000000000..1b64091c048 --- /dev/null +++ b/tests/baselines/reference/bitwiseNotOperatorInvalidOperations.js @@ -0,0 +1,24 @@ +//// [bitwiseNotOperatorInvalidOperations.ts] +// Unary operator ~ +var q; + +// operand before ~ +var a = q~; //expect error + +// multiple operands after ~ +var mul = ~[1, 2, "abc"], ""; //expect error + +// miss an operand +var b =~; + +//// [bitwiseNotOperatorInvalidOperations.js] +// Unary operator ~ +var q; +// operand before ~ +var a = q; +~; //expect error +// multiple operands after ~ +var mul = ~[1, 2, "abc"]; +""; //expect error +// miss an operand +var b = ~; diff --git a/tests/baselines/reference/callExpressionWithMissingTypeArgument1.js b/tests/baselines/reference/callExpressionWithMissingTypeArgument1.js new file mode 100644 index 00000000000..e073758e428 --- /dev/null +++ b/tests/baselines/reference/callExpressionWithMissingTypeArgument1.js @@ -0,0 +1,5 @@ +//// [callExpressionWithMissingTypeArgument1.ts] +Foo(); + +//// [callExpressionWithMissingTypeArgument1.js] +Foo(); diff --git a/tests/baselines/reference/callSignaturesWithParameterInitializers2.js b/tests/baselines/reference/callSignaturesWithParameterInitializers2.js new file mode 100644 index 00000000000..0524db42f65 --- /dev/null +++ b/tests/baselines/reference/callSignaturesWithParameterInitializers2.js @@ -0,0 +1,56 @@ +//// [callSignaturesWithParameterInitializers2.ts] +// Optional parameters allow initializers only in implementation signatures +// All the below declarations are errors + +function foo(x = 2); +function foo(x = 1) { } + +foo(1); +foo(); + +class C { + foo(x = 2); + foo(x = 1) { } +} + +var c: C; +c.foo(); +c.foo(1); + +var b = { + foo(x = 1), // error + foo(x = 1) { }, // error +} + +b.foo(); +b.foo(1); + +//// [callSignaturesWithParameterInitializers2.js] +// Optional parameters allow initializers only in implementation signatures +// All the below declarations are errors +function foo(x) { + if (x === void 0) { x = 1; } +} +foo(1); +foo(); +var C = (function () { + function C() { + } + C.prototype.foo = function (x) { + if (x === void 0) { x = 1; } + }; + return C; +})(); +var c; +c.foo(); +c.foo(1); +var b = { + foo: function (x) { + if (x === void 0) { x = 1; } + }, + foo: function (x) { + if (x === void 0) { x = 1; } + } +}; +b.foo(); +b.foo(1); diff --git a/tests/baselines/reference/circularReference.js b/tests/baselines/reference/circularReference.js new file mode 100644 index 00000000000..02eef63db06 --- /dev/null +++ b/tests/baselines/reference/circularReference.js @@ -0,0 +1,66 @@ +//// [tests/cases/conformance/externalModules/circularReference.ts] //// + +//// [foo1.ts] +import foo2 = require('./foo2'); +export module M1 { + export class C1 { + m1: foo2.M1.C1; + x: number; + constructor(){ + this.m1 = new foo2.M1.C1(); + this.m1.y = 10; // OK + this.m1.x = 20; // Error + } + } +} + +//// [foo2.ts] +import foo1 = require('./foo1'); +export module M1 { + export class C1 { + m1: foo1.M1.C1; + y: number + constructor(){ + this.m1 = new foo1.M1.C1(); + this.m1.y = 10; // Error + this.m1.x = 20; // OK + + var tmp = new M1.C1(); + tmp.y = 10; // OK + tmp.x = 20; // Error + } + } +} + + +//// [foo1.js] +var foo2 = require('./foo2'); +var M1; +(function (M1) { + var C1 = (function () { + function C1() { + this.m1 = new foo2.M1.C1(); + this.m1.y = 10; // OK + this.m1.x = 20; // Error + } + return C1; + })(); + M1.C1 = C1; +})(M1 = exports.M1 || (exports.M1 = {})); +//// [foo2.js] +var foo1 = require('./foo1'); +var M1; +(function (M1) { + var C1 = (function () { + function C1() { + this.m1 = new foo1.M1.C1(); + this.m1.y = 10; // Error + this.m1.x = 20; // OK + var tmp = new M1.C1(); + tmp.y = 10; // OK + tmp.x = 20; // Error + } + return C1; + })(); + M1.C1 = C1; +})(M1 = exports.M1 || (exports.M1 = {})); diff --git a/tests/baselines/reference/class2.js b/tests/baselines/reference/class2.js new file mode 100644 index 00000000000..03b60ac8dc5 --- /dev/null +++ b/tests/baselines/reference/class2.js @@ -0,0 +1,10 @@ +//// [class2.ts] +class foo { constructor() { static f = 3; } } + +//// [class2.js] +var foo = (function () { + function foo() { + } + foo.f = 3; + return foo; +})(); diff --git a/tests/baselines/reference/classBodyWithStatements.js b/tests/baselines/reference/classBodyWithStatements.js new file mode 100644 index 00000000000..bae4860f722 --- /dev/null +++ b/tests/baselines/reference/classBodyWithStatements.js @@ -0,0 +1,37 @@ +//// [classBodyWithStatements.ts] +class C { + var x = 1; +} + +class C2 { + function foo() {} +} + +var x = 1; +var y = 2; +class C3 { + x: number = y + 1; // ok, need a var in the statement production +} + +//// [classBodyWithStatements.js] +var C = (function () { + function C() { + } + return C; +})(); +var x = 1; +var C2 = (function () { + function C2() { + } + return C2; +})(); +function foo() { +} +var x = 1; +var y = 2; +var C3 = (function () { + function C3() { + this.x = y + 1; // ok, need a var in the statement production + } + return C3; +})(); diff --git a/tests/baselines/reference/classExpression.js b/tests/baselines/reference/classExpression.js new file mode 100644 index 00000000000..9d902abbf52 --- /dev/null +++ b/tests/baselines/reference/classExpression.js @@ -0,0 +1,34 @@ +//// [classExpression.ts] +var x = class C { +} + +var y = { + foo: class C2 { + } +} + +module M { + var z = class C4 { + } +} + +//// [classExpression.js] +var x = ; +var C = (function () { + function C() { + } + return C; +})(); +var y = { + foo: , + class: C2 +}, _a = void 0; +var M; +(function (M) { + var z = ; + var C4 = (function () { + function C4() { + } + return C4; + })(); +})(M || (M = {})); diff --git a/tests/baselines/reference/classExtendingPrimitive.js b/tests/baselines/reference/classExtendingPrimitive.js new file mode 100644 index 00000000000..b69bc3403f4 --- /dev/null +++ b/tests/baselines/reference/classExtendingPrimitive.js @@ -0,0 +1,98 @@ +//// [classExtendingPrimitive.ts] +// classes cannot extend primitives + +class C extends number { } +class C2 extends string { } +class C3 extends boolean { } +class C4 extends Void { } +class C4a extends void {} +class C5 extends Null { } +class C5a extends null { } +class C6 extends undefined { } +class C7 extends Undefined { } + +enum E { A } +class C8 extends E { } + +//// [classExtendingPrimitive.js] +// classes cannot extend primitives +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(number); +var C2 = (function (_super) { + __extends(C2, _super); + function C2() { + _super.apply(this, arguments); + } + return C2; +})(string); +var C3 = (function (_super) { + __extends(C3, _super); + function C3() { + _super.apply(this, arguments); + } + return C3; +})(boolean); +var C4 = (function (_super) { + __extends(C4, _super); + function C4() { + _super.apply(this, arguments); + } + return C4; +})(Void); +var C4a = (function () { + function C4a() { + } + return C4a; +})(); +void {}; +var C5 = (function (_super) { + __extends(C5, _super); + function C5() { + _super.apply(this, arguments); + } + return C5; +})(Null); +var C5a = (function () { + function C5a() { + } + return C5a; +})(); +null; +{ +} +var C6 = (function (_super) { + __extends(C6, _super); + function C6() { + _super.apply(this, arguments); + } + return C6; +})(undefined); +var C7 = (function (_super) { + __extends(C7, _super); + function C7() { + _super.apply(this, arguments); + } + return C7; +})(Undefined); +var E; +(function (E) { + E[E["A"] = 0] = "A"; +})(E || (E = {})); +var C8 = (function (_super) { + __extends(C8, _super); + function C8() { + _super.apply(this, arguments); + } + return C8; +})(E); diff --git a/tests/baselines/reference/classExtendingPrimitive2.js b/tests/baselines/reference/classExtendingPrimitive2.js new file mode 100644 index 00000000000..9a507934455 --- /dev/null +++ b/tests/baselines/reference/classExtendingPrimitive2.js @@ -0,0 +1,22 @@ +//// [classExtendingPrimitive2.ts] +// classes cannot extend primitives + +class C4a extends void {} +class C5a extends null { } + +//// [classExtendingPrimitive2.js] +// classes cannot extend primitives +var C4a = (function () { + function C4a() { + } + return C4a; +})(); +void {}; +var C5a = (function () { + function C5a() { + } + return C5a; +})(); +null; +{ +} diff --git a/tests/baselines/reference/classExtendsEveryObjectType.js b/tests/baselines/reference/classExtendsEveryObjectType.js new file mode 100644 index 00000000000..2adb974bb28 --- /dev/null +++ b/tests/baselines/reference/classExtendsEveryObjectType.js @@ -0,0 +1,75 @@ +//// [classExtendsEveryObjectType.ts] +interface I { + foo: string; +} +class C extends I { } // error + +class C2 extends { foo: string; } { } // error +var x: { foo: string; } +class C3 extends x { } // error + +module M { export var x = 1; } +class C4 extends M { } // error + +function foo() { } +class C5 extends foo { } // error + +class C6 extends []{ } // error + +//// [classExtendsEveryObjectType.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(I); // error +var C2 = (function () { + function C2() { + } + return C2; +})(); +{ +} // error +var x; +var C3 = (function (_super) { + __extends(C3, _super); + function C3() { + _super.apply(this, arguments); + } + return C3; +})(x); // error +var M; +(function (M) { + M.x = 1; +})(M || (M = {})); +var C4 = (function (_super) { + __extends(C4, _super); + function C4() { + _super.apply(this, arguments); + } + return C4; +})(M); // error +function foo() { +} +var C5 = (function (_super) { + __extends(C5, _super); + function C5() { + _super.apply(this, arguments); + } + return C5; +})(foo); // error +var C6 = (function () { + function C6() { + } + return C6; +})(); +[]; +{ +} // error diff --git a/tests/baselines/reference/classExtendsEveryObjectType2.js b/tests/baselines/reference/classExtendsEveryObjectType2.js new file mode 100644 index 00000000000..f2bcb02fee4 --- /dev/null +++ b/tests/baselines/reference/classExtendsEveryObjectType2.js @@ -0,0 +1,21 @@ +//// [classExtendsEveryObjectType2.ts] +class C2 extends { foo: string; } { } // error + +class C6 extends []{ } // error + +//// [classExtendsEveryObjectType2.js] +var C2 = (function () { + function C2() { + } + return C2; +})(); +{ +} // error +var C6 = (function () { + function C6() { + } + return C6; +})(); +[]; +{ +} // error diff --git a/tests/baselines/reference/classMemberInitializerWithLamdaScoping3.js b/tests/baselines/reference/classMemberInitializerWithLamdaScoping3.js new file mode 100644 index 00000000000..bcf4cd60d7d --- /dev/null +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping3.js @@ -0,0 +1,34 @@ +//// [tests/cases/compiler/classMemberInitializerWithLamdaScoping3.ts] //// + +//// [classMemberInitializerWithLamdaScoping3_0.ts] +var field1: string; + +//// [classMemberInitializerWithLamdaScoping3_1.ts] +declare var console: { + log(msg?: any): void; +}; +export class Test1 { + constructor(private field1: string) { + } + messageHandler = () => { + console.log(field1); // But this should be error as the field1 will resolve to var field1 + // but since this code would be generated inside constructor, in generated js + // it would resolve to private field1 and thats not what user intended here. + }; +} + +//// [classMemberInitializerWithLamdaScoping3_0.js] +var field1; +//// [classMemberInitializerWithLamdaScoping3_1.js] +var Test1 = (function () { + function Test1(field1) { + this.field1 = field1; + this.messageHandler = function () { + console.log(field1); // But this should be error as the field1 will resolve to var field1 + // but since this code would be generated inside constructor, in generated js + // it would resolve to private field1 and thats not what user intended here. + }; + } + return Test1; +})(); +exports.Test1 = Test1; diff --git a/tests/baselines/reference/classMemberInitializerWithLamdaScoping4.js b/tests/baselines/reference/classMemberInitializerWithLamdaScoping4.js new file mode 100644 index 00000000000..a8e0718f277 --- /dev/null +++ b/tests/baselines/reference/classMemberInitializerWithLamdaScoping4.js @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/classMemberInitializerWithLamdaScoping4.ts] //// + +//// [classMemberInitializerWithLamdaScoping3_0.ts] +export var field1: string; + +//// [classMemberInitializerWithLamdaScoping3_1.ts] +declare var console: { + log(msg?: any): void; +}; +export class Test1 { + constructor(private field1: string) { + } + messageHandler = () => { + console.log(field1); // Should be error that couldnt find symbol field1 + }; +} + +//// [classMemberInitializerWithLamdaScoping3_0.js] +exports.field1; +//// [classMemberInitializerWithLamdaScoping3_1.js] +var Test1 = (function () { + function Test1(field1) { + this.field1 = field1; + this.messageHandler = function () { + console.log(field1); // Should be error that couldnt find symbol field1 + }; + } + return Test1; +})(); +exports.Test1 = Test1; diff --git a/tests/baselines/reference/classUpdateTests.js b/tests/baselines/reference/classUpdateTests.js new file mode 100644 index 00000000000..351ddac52e8 --- /dev/null +++ b/tests/baselines/reference/classUpdateTests.js @@ -0,0 +1,264 @@ +//// [classUpdateTests.ts] +// +// test codegen for instance properties +// +class A { + public p1 = 0; + private p2 = 0; + p3; +} + +class B { + public p1 = 0; + private p2 = 0; + p3; + + constructor() {} +} + +class C { + constructor(public p1=0, private p2=0, p3=0) {} +} + +// +// test requirements for super calls +// +class D { // NO ERROR + +} + +class E extends D { // NO ERROR + public p1 = 0; +} + +class F extends E { + constructor() {} // ERROR - super call required +} + +class G extends D { + public p1 = 0; + constructor() { super(); } // NO ERROR +} + +class H { + constructor() { super(); } // ERROR - no super call allowed +} + +class I extends Object { + constructor() { super(); } // ERROR - no super call allowed +} + +class J extends G { + constructor(public p1:number) { + super(); // NO ERROR + } +} + +class K extends G { + constructor(public p1:number) { // ERROR + var i = 0; + super(); + } +} + +class L extends G { + constructor(private p1:number) { + super(); // NO ERROR + } +} + +class M extends G { + constructor(private p1:number) { // ERROR + var i = 0; + super(); + } +} + +// +// test this reference in field initializers +// +class N { + public p1 = 0; + public p2 = this.p1; + + constructor() { + this.p2 = 0; + } +} + +// +// test error on property declarations within class constructors +// +class O { + constructor() { + public p1 = 0; // ERROR + } +} + +class P { + constructor() { + private p1 = 0; // ERROR + } +} + +class Q { + constructor() { + public this.p1 = 0; // ERROR + } +} + +class R { + constructor() { + private this.p1 = 0; // ERROR + } +} + +//// [classUpdateTests.js] +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 __(); +}; +// +// test codegen for instance properties +// +var A = (function () { + function A() { + this.p1 = 0; + this.p2 = 0; + } + return A; +})(); +var B = (function () { + function B() { + this.p1 = 0; + this.p2 = 0; + } + return B; +})(); +var C = (function () { + function C(p1, p2, p3) { + if (p1 === void 0) { p1 = 0; } + if (p2 === void 0) { p2 = 0; } + if (p3 === void 0) { p3 = 0; } + this.p1 = p1; + this.p2 = p2; + } + return C; +})(); +// +// test requirements for super calls +// +var D = (function () { + function D() { + } + return D; +})(); +var E = (function (_super) { + __extends(E, _super); + function E() { + _super.apply(this, arguments); + this.p1 = 0; + } + return E; +})(D); +var F = (function (_super) { + __extends(F, _super); + function F() { + } // ERROR - super call required + return F; +})(E); +var G = (function (_super) { + __extends(G, _super); + function G() { + _super.call(this); + this.p1 = 0; + } // NO ERROR + return G; +})(D); +var H = (function () { + function H() { + _super.call(this); + } // ERROR - no super call allowed + return H; +})(); +var I = (function (_super) { + __extends(I, _super); + function I() { + _super.call(this); + } // ERROR - no super call allowed + return I; +})(Object); +var J = (function (_super) { + __extends(J, _super); + function J(p1) { + _super.call(this); // NO ERROR + this.p1 = p1; + } + return J; +})(G); +var K = (function (_super) { + __extends(K, _super); + function K(p1) { + this.p1 = p1; + var i = 0; + _super.call(this); + } + return K; +})(G); +var L = (function (_super) { + __extends(L, _super); + function L(p1) { + _super.call(this); // NO ERROR + this.p1 = p1; + } + return L; +})(G); +var M = (function (_super) { + __extends(M, _super); + function M(p1) { + this.p1 = p1; + var i = 0; + _super.call(this); + } + return M; +})(G); +// +// test this reference in field initializers +// +var N = (function () { + function N() { + this.p1 = 0; + this.p2 = this.p1; + this.p2 = 0; + } + return N; +})(); +// +// test error on property declarations within class constructors +// +var O = (function () { + function O() { + this.p1 = 0; // ERROR + } + return O; +})(); +var P = (function () { + function P() { + this.p1 = 0; // ERROR + } + return P; +})(); +var Q = (function () { + function Q() { + this.p1 = 0; // ERROR + } + return Q; +})(); +var R = (function () { + function R() { + this.p1 = 0; // ERROR + } + return R; +})(); diff --git a/tests/baselines/reference/classWithPredefinedTypesAsNames2.js b/tests/baselines/reference/classWithPredefinedTypesAsNames2.js new file mode 100644 index 00000000000..a47adcbe32f --- /dev/null +++ b/tests/baselines/reference/classWithPredefinedTypesAsNames2.js @@ -0,0 +1,13 @@ +//// [classWithPredefinedTypesAsNames2.ts] +// classes cannot use predefined types as names + +class void {} + +//// [classWithPredefinedTypesAsNames2.js] +// classes cannot use predefined types as names +var = (function () { + function () { + } + return ; +})(); +void {}; diff --git a/tests/baselines/reference/commaOperatorWithoutOperand.js b/tests/baselines/reference/commaOperatorWithoutOperand.js new file mode 100644 index 00000000000..d52b8212344 --- /dev/null +++ b/tests/baselines/reference/commaOperatorWithoutOperand.js @@ -0,0 +1,46 @@ +//// [commaOperatorWithoutOperand.ts] +var ANY: any; +var BOOLEAN: boolean; +var NUMBER: number; +var STRING: string; +var OBJECT: Object; + +// Expect to have compiler errors +// Missing the second operand +(ANY, ); +(BOOLEAN, ); +(NUMBER, ); +(STRING, ); +(OBJECT, ); + +// Missing the first operand +(, ANY); +(, BOOLEAN); +(, NUMBER); +(, STRING); +(, OBJECT); + +// Missing all operands +( , ); + +//// [commaOperatorWithoutOperand.js] +var ANY; +var BOOLEAN; +var NUMBER; +var STRING; +var OBJECT; +// Expect to have compiler errors +// Missing the second operand +(ANY, ); +(BOOLEAN, ); +(NUMBER, ); +(STRING, ); +(OBJECT, ); +// Missing the first operand +(, ANY); +(, BOOLEAN); +(, NUMBER); +(, STRING); +(, OBJECT); +// Missing all operands +(, ); diff --git a/tests/baselines/reference/complicatedPrivacy.js b/tests/baselines/reference/complicatedPrivacy.js new file mode 100644 index 00000000000..3d5b321a36f --- /dev/null +++ b/tests/baselines/reference/complicatedPrivacy.js @@ -0,0 +1,204 @@ +//// [complicatedPrivacy.ts] +module m1 { + export module m2 { + + + export function f1(c1: C1) { + } + export function f2(c2: C2) { + } + + export class C2 implements m3.i3 { + public get p1(arg) { + return new C1(); + } + + public set p1(arg1: C1) { + } + + public f55() { + return "Hello world"; + } + } + } + + export function f2(arg1: { x?: C1, y: number }) { + } + + export function f3(): { + (a: number) : C1; + } { + return null; + } + + export function f4(arg1: + { + [number]: C1; // Used to be indexer, now it is a computed property + }) { + } + + + export function f5(arg2: { + new (arg1: C1) : C1 + }) { + } + module m3 { + function f2(f1: C1) { + } + + export interface i3 { + f55(): string; + } + } + + class C1 { + } + + interface i { + x: number; + } + + export class C5 implements i { + public x: number; + } + + export var v2: C1[]; +} + +class C2 { +} + +module m2 { + export module m3 { + + export class c_pr implements mglo5.i5, mglo5.i6 { + f1() { + return "Hello"; + } + } + + module m4 { + class C { + } + module m5 { + + export module m6 { + function f1() { + return new C(); + } + } + } + } + + } +} + +module mglo5 { + export interface i5 { + f1(): string; + } + + interface i6 { + f6(): number; + } +} + + +//// [complicatedPrivacy.js] +var m1; +(function (m1) { + var m2; + (function (m2) { + function f1(c1) { + } + m2.f1 = f1; + function f2(c2) { + } + m2.f2 = f2; + var C2 = (function () { + function C2() { + } + Object.defineProperty(C2.prototype, "p1", { + get: function (arg) { + return new C1(); + }, + set: function (arg1) { + }, + enumerable: true, + configurable: true + }); + C2.prototype.f55 = function () { + return "Hello world"; + }; + return C2; + })(); + m2.C2 = C2; + })(m2 = m1.m2 || (m1.m2 = {})); + function f2(arg1) { + } + m1.f2 = f2; + function f3() { + return null; + } + m1.f3 = f3; + function f4(arg1) { + } + m1.f4 = f4; + function f5(arg2) { + } + m1.f5 = f5; + var m3; + (function (m3) { + function f2(f1) { + } + })(m3 || (m3 = {})); + var C1 = (function () { + function C1() { + } + return C1; + })(); + var C5 = (function () { + function C5() { + } + return C5; + })(); + m1.C5 = C5; + m1.v2; +})(m1 || (m1 = {})); +var C2 = (function () { + function C2() { + } + return C2; +})(); +var m2; +(function (m2) { + var m3; + (function (m3) { + var c_pr = (function () { + function c_pr() { + } + c_pr.prototype.f1 = function () { + return "Hello"; + }; + return c_pr; + })(); + m3.c_pr = c_pr; + var m4; + (function (m4) { + var C = (function () { + function C() { + } + return C; + })(); + var m5; + (function (m5) { + var m6; + (function (m6) { + function f1() { + return new C(); + } + })(m6 = m5.m6 || (m5.m6 = {})); + })(m5 || (m5 = {})); + })(m4 || (m4 = {})); + })(m3 = m2.m3 || (m2.m3 = {})); +})(m2 || (m2 = {})); diff --git a/tests/baselines/reference/compoundAssignmentLHSIsValue.js b/tests/baselines/reference/compoundAssignmentLHSIsValue.js new file mode 100644 index 00000000000..5cefd44e1c5 --- /dev/null +++ b/tests/baselines/reference/compoundAssignmentLHSIsValue.js @@ -0,0 +1,261 @@ +//// [compoundAssignmentLHSIsValue.ts] +// expected error for all the LHS of compound assignments (arithmetic and addition) +var value; + +// this +class C { + constructor() { + this *= value; + this += value; + } + foo() { + this *= value; + this += value; + } + static sfoo() { + this *= value; + this += value; + } +} + +function foo() { + this *= value; + this += value; +} + +this *= value; +this += value; + +// identifiers: module, class, enum, function +module M { export var a; } +M *= value; +M += value; + +C *= value; +C += value; + +enum E { } +E *= value; +E += value; + +foo *= value; +foo += value; + +// literals +null *= value; +null += value; +true *= value; +true += value; +false *= value; +false += value; +0 *= value; +0 += value; +'' *= value; +'' += value; +/d+/ *= value; +/d+/ += value; + +// object literals +{ a: 0} *= value; +{ a: 0} += value; + +// array literals +['', ''] *= value; +['', ''] += value; + +// super +class Derived extends C { + constructor() { + super(); + super *= value; + super += value; + } + + foo() { + super *= value; + super += value; + } + + static sfoo() { + super *= value; + super += value; + } +} + +// function expression +function bar1() { } *= value; +function bar2() { } += value; +() => { } *= value; +() => { } += value; + +// function calls +foo() *= value; +foo() += value; + +// parentheses, the containted expression is value +(this) *= value; +(this) += value; +(M) *= value; +(M) += value; +(C) *= value; +(C) += value; +(E) *= value; +(E) += value; +(foo) *= value; +(foo) += value; +(null) *= value; +(null) += value; +(true) *= value; +(true) += value; +(0) *= value; +(0) += value; +('') *= value; +('') += value; +(/d+/) *= value; +(/d+/) += value; +({}) *= value; +({}) += value; +([]) *= value; +([]) += value; +(function baz1() { }) *= value; +(function baz2() { }) += value; +(foo()) *= value; +(foo()) += value; + +//// [compoundAssignmentLHSIsValue.js] +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 __(); +}; +// expected error for all the LHS of compound assignments (arithmetic and addition) +var value; +// this +var C = (function () { + function C() { + this *= value; + this += value; + } + C.prototype.foo = function () { + this *= value; + this += value; + }; + C.sfoo = function () { + this *= value; + this += value; + }; + return C; +})(); +function foo() { + this *= value; + this += value; +} +this *= value; +this += value; +// identifiers: module, class, enum, function +var M; +(function (M) { + M.a; +})(M || (M = {})); +M *= value; +M += value; +C *= value; +C += value; +var E; +(function (E) { +})(E || (E = {})); +E *= value; +E += value; +foo *= value; +foo += value; +// literals +null *= value; +null += value; +true *= value; +true += value; +false *= value; +false += value; +0 *= value; +0 += value; +'' *= value; +'' += value; +/d+/ *= value; +/d+/ += value; +// object literals +{ + a: 0; +} +value; +{ + a: 0; +} +value; +// array literals +['', ''] *= value; +['', ''] += value; +// super +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + _super.call(this); + _super.prototype. *= value; + _super.prototype. += value; + } + Derived.prototype.foo = function () { + _super.prototype. *= value; + _super.prototype. += value; + }; + Derived.sfoo = function () { + _super. *= value; + _super. += value; + }; + return Derived; +})(C); +// function expression +function bar1() { +} +value; +function bar2() { +} +value; +(function () { +}); +value; +(function () { +}); +value; +// function calls +foo() *= value; +foo() += value; +// parentheses, the containted expression is value +(this) *= value; +(this) += value; +(M) *= value; +(M) += value; +(C) *= value; +(C) += value; +(E) *= value; +(E) += value; +(foo) *= value; +(foo) += value; +(null) *= value; +(null) += value; +(true) *= value; +(true) += value; +(0) *= value; +(0) += value; +('') *= value; +('') += value; +(/d+/) *= value; +(/d+/) += value; +({}) *= value; +({}) += value; +([]) *= value; +([]) += value; +(function baz1() { +}) *= value; +(function baz2() { +}) += value; +(foo()) *= value; +(foo()) += value; diff --git a/tests/baselines/reference/conflictMarkerTrivia1.js b/tests/baselines/reference/conflictMarkerTrivia1.js new file mode 100644 index 00000000000..68f1b82d38b --- /dev/null +++ b/tests/baselines/reference/conflictMarkerTrivia1.js @@ -0,0 +1,16 @@ +//// [conflictMarkerTrivia1.ts] +class C { +<<<<<<< HEAD + v = 1; +======= + v = 2; +>>>>>>> Branch-a +} + +//// [conflictMarkerTrivia1.js] +var C = (function () { + function C() { + this.v = 1; + } + return C; +})(); diff --git a/tests/baselines/reference/conflictMarkerTrivia2.js b/tests/baselines/reference/conflictMarkerTrivia2.js new file mode 100644 index 00000000000..bbb631de388 --- /dev/null +++ b/tests/baselines/reference/conflictMarkerTrivia2.js @@ -0,0 +1,26 @@ +//// [conflictMarkerTrivia2.ts] +class C { + foo() { +<<<<<<< B + a(); + } +======= + b(); + } +>>>>>>> A + + public bar() { } +} + + +//// [conflictMarkerTrivia2.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + a(); + }; + C.prototype.bar = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/constructorStaticParamNameErrors.js b/tests/baselines/reference/constructorStaticParamNameErrors.js new file mode 100644 index 00000000000..0bb8985545c --- /dev/null +++ b/tests/baselines/reference/constructorStaticParamNameErrors.js @@ -0,0 +1,15 @@ +//// [constructorStaticParamNameErrors.ts] +'use strict' +// static as constructor parameter name should give error if 'use strict' +class test { + constructor (static) { } +} + +//// [constructorStaticParamNameErrors.js] +'use strict'; +// static as constructor parameter name should give error if 'use strict' +var test = (function () { + function test() { + } + return test; +})(); diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js new file mode 100644 index 00000000000..5a9a03f293c --- /dev/null +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js @@ -0,0 +1,569 @@ +//// [constructorWithIncompleteTypeAnnotation.ts] +declare module "fs" { + export class File { + constructor(filename: string); + public ReadAllText(): string; + } + export interface IFile { + [index: number]: string; + } +} + +import fs = module("fs"); + + +module TypeScriptAllInOne { + export class Program { + static Main(...args: string[]) { + try { + var bfs = new BasicFeatures(); + var retValue: number = 0; + + retValue = bfs.VARIABLES(); + if (retValue != 0 ^= { + + return 1; + } + + case = bfs.STATEMENTS(4); + if (retValue != 0) { + + return 1; + ^ + + + retValue = bfs.TYPES(); + if (retValue != 0) { + + return 1 && + } + + retValue = bfs.OPERATOR ' ); + if (retValue != 0) { + + return 1; + } + } + catch (e) { + console.log(e); + } + finally { + + } + + console.log('Done'); + + return 0; + + } + } + + class BasicFeatures { + /// + /// Test various of variables. Including nullable,key world as variable,special format + /// + /// + public VARIABLES(): number { + var local = Number.MAX_VALUE; + var min = Number.MIN_VALUE; + var inf = Number.NEGATIVE_INFINITY - + var nan = Number.NaN; + var undef = undefined; + + var _\uD4A5\u7204\uC316\uE59F = local; + var мир = local; + + var local5 = null; + var local6 = local5 instanceof fs.File; + + var hex = 0xBADC0DE, Hex = 0XDEADBEEF; + var float = 6.02e23, float2 = 6.02E-23 + var char = 'c', \u0066 = '\u0066', hexchar = '\x42' != + var quoted = '"', quoted2 = "'"; + var reg = /\w*/; + var objLit = { "var": number = 42, equals: function (x) { return x["var"] === 42; }, instanceof : () => 'objLit{42}' }; + var weekday = Weekdays.Monday; + + var con = char + f + hexchar + float.toString() + float2.toString() + reg.toString() + objLit + weekday; + + // + var any = 0 ^= + var bool = 0; + var declare = 0; + var constructor = 0; + var get = 0; + var implements = 0; + var interface = 0; + var let = 0; + var module = 0; + var number = 0; + var package = 0; + var private = 0; + var protected = 0; + var public = 0; + var set = 0; + var static = 0; + var string = 0 /> + var yield = 0; + + var sum3 = any + bool + declare + constructor + get + implements + interface + let + module + number + package + private + protected + public + set + static + string + yield; + + return 0; + } + + /// + /// Test different statements. Including if-else,swith,foreach,(un)checked,lock,using,try-catch-finally + /// + /// + /// + STATEMENTS(i: number): number { + var retVal = 0; + if (i == 1) + retVal = 1; + else + retVal = 0; + switch (i) { + case 2: + retVal = 1; + break; + case 3: + retVal = 1; + break; + default: + break; + } + + for (var x in { x: 0, y: 1 }) { + ! + + try { + throw null; + } + catch (Exception) ? + } + finally { + try { } + catch (Exception) { } + } + + return retVal; + } + + /// + /// Test types in ts language. Including class,struct,interface,delegate,anonymous type + /// + /// + public TYPES(): number { + var retVal = 0; + var c = new CLASS(); + var xx: IF = c; + retVal += catch .Property; + retVal += c.Member(); + retVal += xx.Foo() ? 0 : 1; + + //anonymous type + var anony = { a: new CLASS() }; + + retVal += anony.a.d(); + + return retVal; + } + + + ///// + ///// Test different operators + ///// + ///// + public OPERATOR(): number { + var a: number[] = [1, 2, 3, 4, 5, ];/*[] bug*/ // YES [] + var i = a[1];/*[]*/ + i = i + i - i * i / i % i & i | i ^ i;/*+ - * / % & | ^*/ + var b = true && false || true ^ false;/*& | ^*/ + b = !b;/*!*/ + i = ~i;/*~i*/ + b = i < (i - 1) && (i + 1) > i;/*< && >*/ + var f = true ? 1 : 0;/*? :*/ // YES : + i++;/*++*/ + i--;/*--*/ + b = true && false || true;/*&& ||*/ + i = i << 5;/*<<*/ + i = i >> 5;/*>>*/ + var j = i; + b = i == j && i != j && i <= j && i >= j;/*= == && != <= >=*/ + i += 5.0;/*+=*/ + i -= i;/*-=*/ + i *= i;/**=*/ + if (i == 0) + i++; + i /= i;/*/=*/ + i %= i;/*%=*/ + i &= i;/*&=*/ + i |= i;/*|=*/ + i ^= i;/*^=*/ + i <<= i;/*<<=*/ + i >>= i;/*>>=*/ + + if (i == 0 && != b && f == 1) + return 0; + else return 1; + } + + } + + interface IF { + Foo(): bool; + } + + class CLASS implements IF { + + case d = () => { yield 0; }; + public get Property() { return 0; } + public Member() { + return 0; + } + public Foo(): bool { + var myEvent = () => { return 1; }; + if (myEvent() == 1) + return true ? + else + return false; + } + } + + + // todo: use these + class A . + public method1(val:number) { + return val; + } + public method2() { + return 2 * this.method1(2); + } + } + + class B extends A { + + public method2() { + return this.method1(2); + } + } + + class Overloading { + + private otherValue = 42; + + constructor(private value: number, public name: string) : } + + public Overloads(value: string); + public Overloads( while : string, ...rest: string[]) { & + + public DefaultValue(value?: string = "Hello") { } + } +} + +enum Weekdays { + Monday, + Tuesday, + Weekend, +} + +enum Fruit { + Apple, + Pear +} + +interface IDisposable { + Dispose(): void; +} + +TypeScriptAllInOne.Program.Main(); + + +//// [constructorWithIncompleteTypeAnnotation.js] +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 fs = module; +("fs"); +var TypeScriptAllInOne; +(function (TypeScriptAllInOne) { + var Program = (function () { + function Program() { + this.case = bfs.STATEMENTS(4); + } + Program.Main = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i - 0] = arguments[_i]; + } + try { + var bfs = new BasicFeatures(); + var retValue = 0; + retValue = bfs.VARIABLES(); + if (retValue != 0) + ^= { + return: 1 + }; + } + finally { + } + }; + Program.prototype.if = function (retValue) { + if (retValue === void 0) { retValue = != 0; } + return 1; + ^ retValue; + bfs.TYPES(); + if (retValue != 0) { + return 1 && ; + } + retValue = bfs.OPERATOR; + ' );; + if (retValue != 0) { + return 1; + } + }; + Program.prototype.catch = function (e) { + console.log(e); + }; + return Program; + })(); + TypeScriptAllInOne.Program = Program; + try { + } + finally { + } + console.log('Done'); + return 0; +})(TypeScriptAllInOne || (TypeScriptAllInOne = {})); +var BasicFeatures = (function () { + function BasicFeatures() { + } + /// + /// Test various of variables. Including nullable,key world as variable,special format + /// + /// + BasicFeatures.prototype.VARIABLES = function () { + var local = Number.MAX_VALUE; + var min = Number.MIN_VALUE; + var inf = Number.NEGATIVE_INFINITY - ; + var nan = Number.NaN; + var undef = undefined; + var _\uD4A5\u7204\uC316, uE59F = local; + var мир = local; + var local5 = null; + var local6 = local5 instanceof fs.File; + var hex = 0xBADC0DE, Hex = 0XDEADBEEF; + var float = 6.02e23, float2 = 6.02E-23; + var char = 'c', \u0066 = '\u0066', hexchar = '\x42' != ; + var quoted = '"', quoted2 = "'"; + var reg = /\w*/; + var objLit = { "var": number = 42, equals: function (x) { + return x["var"] === 42; + }, instanceof: function () { return 'objLit{42}'; } }; + var weekday = 0 /* Monday */; + var con = char + f + hexchar + float.toString() + float2.toString() + reg.toString() + objLit + weekday; + // + var any = 0 ^= ; + var bool = 0; + var declare = 0; + var constructor = 0; + var get = 0; + var implements = 0; + var interface = 0; + var let = 0; + var module = 0; + var number = 0; + var package = 0; + var private = 0; + var protected = 0; + var public = 0; + var set = 0; + var static = 0; + var string = 0 / > ; + var yield = 0; + var sum3 = any + bool + declare + constructor + get + implements + interface + let + module + number + package + private + protected + public + set + static + string + yield; + return 0; + }; + /// + /// Test different statements. Including if-else,swith,foreach,(un)checked,lock,using,try-catch-finally + /// + /// + /// + BasicFeatures.prototype.STATEMENTS = function (i) { + var retVal = 0; + if (i == 1) + retVal = 1; + else + retVal = 0; + switch (i) { + case 2: + retVal = 1; + break; + case 3: + retVal = 1; + break; + default: + break; + } + for (var x in { x: 0, y: 1 }) { + !; + try { + throw null; + } + catch (Exception) { + } + } + try { + } + finally { + try { + } + catch (Exception) { + } + } + return retVal; + }; + /// + /// Test types in ts language. Including class,struct,interface,delegate,anonymous type + /// + /// + BasicFeatures.prototype.TYPES = function () { + var retVal = 0; + var c = new CLASS(); + var xx = c; + retVal += ; + try { + } + catch () { + } + Property; + retVal += c.Member(); + retVal += xx.Foo() ? 0 : 1; + //anonymous type + var anony = { a: new CLASS() }; + retVal += anony.a.d(); + return retVal; + }; + ///// + ///// Test different operators + ///// + ///// + BasicFeatures.prototype.OPERATOR = function () { + var a = [1, 2, 3, 4, 5,]; /*[] bug*/ // YES [] + var i = a[1]; /*[]*/ + i = i + i - i * i / i % i & i | i ^ i; /*+ - * / % & | ^*/ + var b = true && false || true ^ false; /*& | ^*/ + b = !b; /*!*/ + i = ~i; /*~i*/ + b = i < (i - 1) && (i + 1) > i; /*< && >*/ + var f = true ? 1 : 0; /*? :*/ // YES : + i++; /*++*/ + i--; /*--*/ + b = true && false || true; /*&& ||*/ + i = i << 5; /*<<*/ + i = i >> 5; /*>>*/ + var j = i; + b = i == j && i != j && i <= j && i >= j; /*= == && != <= >=*/ + i += 5.0; /*+=*/ + i -= i; /*-=*/ + i *= i; /**=*/ + if (i == 0) + i++; + i /= i; /*/=*/ + i %= i; /*%=*/ + i &= i; /*&=*/ + i |= i; /*|=*/ + i ^= i; /*^=*/ + i <<= i; /*<<=*/ + i >>= i; /*>>=*/ + if (i == 0 && != b && f == 1) + return 0; + else + return 1; + }; + return BasicFeatures; +})(); +var CLASS = (function () { + function CLASS() { + this.d = function () { + yield; + 0; + }; + } + Object.defineProperty(CLASS.prototype, "Property", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + CLASS.prototype.Member = function () { + return 0; + }; + CLASS.prototype.Foo = function () { + var myEvent = function () { + return 1; + }; + if (myEvent() == 1) + return true ? : ; + else + return false; + }; + return CLASS; +})(); +// todo: use these +var A = (function () { + function A() { + } + return A; +})(); +method1(val, number); +{ + return val; +} +method2(); +{ + return 2 * this.method1(2); +} +var B = (function (_super) { + __extends(B, _super); + function B() { + _super.apply(this, arguments); + } + B.prototype.method2 = function () { + return this.method1(2); + }; + return B; +})(A); +var Overloading = (function () { + function Overloading() { + this.otherValue = 42; + } + return Overloading; +})(); +Overloads(value, string); +Overloads(); +while () + : string, ; +rest: string[]; +{ + & public; + DefaultValue(value ? : string = "Hello"); + { + } +} +var Weekdays; +(function (Weekdays) { + Weekdays[Weekdays["Monday"] = 0] = "Monday"; + Weekdays[Weekdays["Tuesday"] = 1] = "Tuesday"; + Weekdays[Weekdays["Weekend"] = 2] = "Weekend"; +})(Weekdays || (Weekdays = {})); +var Fruit; +(function (Fruit) { + Fruit[Fruit["Apple"] = 0] = "Apple"; + Fruit[Fruit["Pear"] = 1] = "Pear"; +})(Fruit || (Fruit = {})); +TypeScriptAllInOne.Program.Main(); diff --git a/tests/baselines/reference/declarationEmit_invalidReference2.js b/tests/baselines/reference/declarationEmit_invalidReference2.js new file mode 100644 index 00000000000..78fb232cca7 --- /dev/null +++ b/tests/baselines/reference/declarationEmit_invalidReference2.js @@ -0,0 +1,11 @@ +//// [declarationEmit_invalidReference2.ts] +/// +var x = 0; + +//// [declarationEmit_invalidReference2.js] +/// +var x = 0; + + +//// [declarationEmit_invalidReference2.d.ts] +declare var x: number; diff --git a/tests/baselines/reference/deleteOperatorInvalidOperations.js b/tests/baselines/reference/deleteOperatorInvalidOperations.js new file mode 100644 index 00000000000..fd15797698e --- /dev/null +++ b/tests/baselines/reference/deleteOperatorInvalidOperations.js @@ -0,0 +1,33 @@ +//// [deleteOperatorInvalidOperations.ts] +// Unary operator delete +var ANY; + +// operand before delete operator +var BOOLEAN1 = ANY delete ; //expect error + +// miss an operand +var BOOLEAN2 = delete ; + +// delete global variable s +class testADelx { + constructor(public s: () => {}) { + delete s; //expect error + } +} + +//// [deleteOperatorInvalidOperations.js] +// Unary operator delete +var ANY; +// operand before delete operator +var BOOLEAN1 = ANY; +delete ; //expect error +// miss an operand +var BOOLEAN2 = delete ; +// delete global variable s +var testADelx = (function () { + function testADelx(s) { + this.s = s; + delete s; //expect error + } + return testADelx; +})(); diff --git a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.js b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.js new file mode 100644 index 00000000000..14ac1f47e2f --- /dev/null +++ b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.js @@ -0,0 +1,83 @@ +//// [derivedClassSuperCallsInNonConstructorMembers.ts] +// error to use super calls outside a constructor + +class Base { + x: string; +} + +class Derived extends Base { + a: super(); + b() { + super(); + } + get C() { + super(); + return 1; + } + set C(v) { + super(); + } + + static a: super(); + static b() { + super(); + } + static get C() { + super(); + return 1; + } + static set C(v) { + super(); + } +} + +//// [derivedClassSuperCallsInNonConstructorMembers.js] +// error to use super calls outside a 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; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Base = (function () { + function Base() { + } + return Base; +})(); +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + _super.apply(this, arguments); + this.a = _super.call(this); + } + Derived.prototype.b = function () { + _super.call(this); + }; + Object.defineProperty(Derived.prototype, "C", { + get: function () { + _super.call(this); + return 1; + }, + set: function (v) { + _super.call(this); + }, + enumerable: true, + configurable: true + }); + Derived.b = function () { + _super.call(this); + }; + Object.defineProperty(Derived, "C", { + get: function () { + _super.call(this); + return 1; + }, + set: function (v) { + _super.call(this); + }, + enumerable: true, + configurable: true + }); + Derived.a = _super.call(this); + return Derived; +})(Base); diff --git a/tests/baselines/reference/dontShowCompilerGeneratedMembers.js b/tests/baselines/reference/dontShowCompilerGeneratedMembers.js new file mode 100644 index 00000000000..5815e49c893 --- /dev/null +++ b/tests/baselines/reference/dontShowCompilerGeneratedMembers.js @@ -0,0 +1,9 @@ +//// [dontShowCompilerGeneratedMembers.ts] +var f: { + x: number; + <- +}; + +//// [dontShowCompilerGeneratedMembers.js] +var f = -; +; diff --git a/tests/baselines/reference/dottedModuleName.js b/tests/baselines/reference/dottedModuleName.js new file mode 100644 index 00000000000..6a8f33ca7bb --- /dev/null +++ b/tests/baselines/reference/dottedModuleName.js @@ -0,0 +1,55 @@ +//// [dottedModuleName.ts] +module M { + export module N { + export function f(x:number)=>2*x; + export module X.Y.Z { + export var v2=f(v); + } + } +} + + + +module M.N { + export module X { + export module Y.Z { + export var v=f(10); + } + } +} + + +//// [dottedModuleName.js] +var M; +(function (M) { + var N; + (function (N) { + 2 * x; + var X; + (function (X) { + var Y; + (function (Y) { + var Z; + (function (Z) { + Z.v2 = f(Z.v); + })(Z = Y.Z || (Y.Z = {})); + })(Y = X.Y || (X.Y = {})); + })(X = N.X || (N.X = {})); + })(N = M.N || (M.N = {})); +})(M || (M = {})); +var M; +(function (M) { + var N; + (function (N) { + var X; + (function (X) { + var Y; + (function (Y) { + var Z; + (function (Z) { + Z.v = N.f(10); + })(Z = Y.Z || (Y.Z = {})); + })(Y = X.Y || (X.Y = {})); + })(X = N.X || (N.X = {})); + })(N = M.N || (M.N = {})); +})(M || (M = {})); diff --git a/tests/baselines/reference/duplicateExportAssignments.js b/tests/baselines/reference/duplicateExportAssignments.js new file mode 100644 index 00000000000..7d2776962f7 --- /dev/null +++ b/tests/baselines/reference/duplicateExportAssignments.js @@ -0,0 +1,80 @@ +//// [tests/cases/conformance/externalModules/duplicateExportAssignments.ts] //// + +//// [foo1.ts] +var x = 10; +var y = 20; +export = x; +export = y; + +//// [foo2.ts] +var x = 10; +class y {}; +export = x; +export = y; + +//// [foo3.ts] +module x { + export var x = 10; +} +class y { + y: number; +} +export = x; +export = y; + +//// [foo4.ts] +export = x; +function x(){ + return 42; +} +function y(){ + return 42; +} +export = y; + +//// [foo5.ts] +var x = 5; +var y = "test"; +var z = {}; +export = x; +export = y; +export = z; + + +//// [foo1.js] +var x = 10; +var y = 20; +module.exports = x; +//// [foo2.js] +var x = 10; +var y = (function () { + function y() { + } + return y; +})(); +; +module.exports = x; +//// [foo3.js] +var x; +(function (_x) { + _x.x = 10; +})(x || (x = {})); +var y = (function () { + function y() { + } + return y; +})(); +module.exports = x; +//// [foo4.js] +function x() { + return 42; +} +function y() { + return 42; +} +module.exports = x; +//// [foo5.js] +var x = 5; +var y = "test"; +var z = {}; +module.exports = x; diff --git a/tests/baselines/reference/emptyMemberAccess.js b/tests/baselines/reference/emptyMemberAccess.js new file mode 100644 index 00000000000..c0fc6064b5d --- /dev/null +++ b/tests/baselines/reference/emptyMemberAccess.js @@ -0,0 +1,12 @@ +//// [emptyMemberAccess.ts] +function getObj() { + + ().toString(); + +} + + +//// [emptyMemberAccess.js] +function getObj() { + ().toString(); +} diff --git a/tests/baselines/reference/enumConflictsWithGlobalIdentifier.js b/tests/baselines/reference/enumConflictsWithGlobalIdentifier.js new file mode 100644 index 00000000000..67d9a020bb6 --- /dev/null +++ b/tests/baselines/reference/enumConflictsWithGlobalIdentifier.js @@ -0,0 +1,15 @@ +//// [enumConflictsWithGlobalIdentifier.ts] +enum Position { + IgnoreRulesSpecific = 0, +} +var x = IgnoreRulesSpecific. +var y = Position.IgnoreRulesSpecific; + + +//// [enumConflictsWithGlobalIdentifier.js] +var Position; +(function (Position) { + Position[Position["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; +})(Position || (Position = {})); +var x = IgnoreRulesSpecific.; +var y = 0 /* IgnoreRulesSpecific */; diff --git a/tests/baselines/reference/enumMemberResolution.js b/tests/baselines/reference/enumMemberResolution.js new file mode 100644 index 00000000000..e1d79ebeb92 --- /dev/null +++ b/tests/baselines/reference/enumMemberResolution.js @@ -0,0 +1,17 @@ +//// [enumMemberResolution.ts] +enum Position2 { + IgnoreRulesSpecific = 0 +} +var x = IgnoreRulesSpecific. // error +var y = 1; +var z = Position2.IgnoreRulesSpecific; // no error + + +//// [enumMemberResolution.js] +var Position2; +(function (Position2) { + Position2[Position2["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; +})(Position2 || (Position2 = {})); +var x = IgnoreRulesSpecific.; // error +var y = 1; +var z = 0 /* IgnoreRulesSpecific */; // no error diff --git a/tests/baselines/reference/enumWithParenthesizedInitializer1.js b/tests/baselines/reference/enumWithParenthesizedInitializer1.js new file mode 100644 index 00000000000..0c125b3d8b2 --- /dev/null +++ b/tests/baselines/reference/enumWithParenthesizedInitializer1.js @@ -0,0 +1,10 @@ +//// [enumWithParenthesizedInitializer1.ts] +enum E { + e = -(3 +} + +//// [enumWithParenthesizedInitializer1.js] +var E; +(function (E) { + E[E["e"] = -(3)] = "e"; +})(E || (E = {})); diff --git a/tests/baselines/reference/errorSuperCalls.js b/tests/baselines/reference/errorSuperCalls.js new file mode 100644 index 00000000000..4e0f84656fd --- /dev/null +++ b/tests/baselines/reference/errorSuperCalls.js @@ -0,0 +1,170 @@ +//// [errorSuperCalls.ts] +//super call in class constructor with no base type +class NoBase { + constructor() { + super(); + } + + //super call in class member function with no base type + fn() { + super(); + } + + //super call in class accessor (get and set) with no base type + get foo() { + super(); + return null; + } + set foo(v) { + super(); + } + + //super call in class member initializer with no base type + p = super(); + + //super call in static class member function with no base type + static fn() { + super(); + } + + //super call in static class member initializer with no base type + static k = super(); + + //super call in static class accessor (get and set) with no base type + static get q() { + super(); + return null; + } + static set q(n) { + super(); + } +} + +class Base { private n: T; } +class Derived extends Base { + //super call with type arguments + constructor() { + super(); + super(); + } +} + + +class OtherBase { + private n: string; +} + +class OtherDerived extends OtherBase { + //super call in class member initializer of derived type + t = super(); + + fn() { + //super call in class member function of derived type + super(); + } + + //super call in class accessor (get and set) of derived type + get foo() { + super(); + return null; + } + set foo(n) { + super(); + } +} + + +//// [errorSuperCalls.js] +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 __(); +}; +//super call in class constructor with no base type +var NoBase = (function () { + function NoBase() { + //super call in class member initializer with no base type + this.p = _super.call(this); + _super.call(this); + } + //super call in class member function with no base type + NoBase.prototype.fn = function () { + _super.call(this); + }; + Object.defineProperty(NoBase.prototype, "foo", { + //super call in class accessor (get and set) with no base type + get: function () { + _super.call(this); + return null; + }, + set: function (v) { + _super.call(this); + }, + enumerable: true, + configurable: true + }); + //super call in static class member function with no base type + NoBase.fn = function () { + _super.call(this); + }; + Object.defineProperty(NoBase, "q", { + //super call in static class accessor (get and set) with no base type + get: function () { + _super.call(this); + return null; + }, + set: function (n) { + _super.call(this); + }, + enumerable: true, + configurable: true + }); + //super call in static class member initializer with no base type + NoBase.k = _super.call(this); + return NoBase; +})(); +var Base = (function () { + function Base() { + } + return Base; +})(); +var Derived = (function (_super) { + __extends(Derived, _super); + //super call with type arguments + function Derived() { + _super.prototype..call(this); + _super.call(this); + } + return Derived; +})(Base); +var OtherBase = (function () { + function OtherBase() { + } + return OtherBase; +})(); +var OtherDerived = (function (_super) { + __extends(OtherDerived, _super); + function OtherDerived() { + _super.apply(this, arguments); + //super call in class member initializer of derived type + this.t = _super.call(this); + } + OtherDerived.prototype.fn = function () { + //super call in class member function of derived type + _super.call(this); + }; + Object.defineProperty(OtherDerived.prototype, "foo", { + //super call in class accessor (get and set) of derived type + get: function () { + _super.call(this); + return null; + }, + set: function (n) { + _super.call(this); + }, + enumerable: true, + configurable: true + }); + return OtherDerived; +})(OtherBase); diff --git a/tests/baselines/reference/es6ClassTest3.js b/tests/baselines/reference/es6ClassTest3.js new file mode 100644 index 00000000000..371a983d152 --- /dev/null +++ b/tests/baselines/reference/es6ClassTest3.js @@ -0,0 +1,31 @@ +//// [es6ClassTest3.ts] +module M { + class Visibility { + public foo() { }; + private bar() { }; + private x: number; + public y: number; + public z: number; + + constructor() { + this.x = 1; + this.y = 2; + } + } +} + +//// [es6ClassTest3.js] +var M; +(function (M) { + var Visibility = (function () { + function Visibility() { + this.x = 1; + this.y = 2; + } + Visibility.prototype.foo = function () { + }; + Visibility.prototype.bar = function () { + }; + return Visibility; + })(); +})(M || (M = {})); diff --git a/tests/baselines/reference/es6ClassTest9.js b/tests/baselines/reference/es6ClassTest9.js new file mode 100644 index 00000000000..d45c99d3b04 --- /dev/null +++ b/tests/baselines/reference/es6ClassTest9.js @@ -0,0 +1,9 @@ +//// [es6ClassTest9.ts] +declare class foo(); +function foo() {} + + +//// [es6ClassTest9.js] +(); +function foo() { +} diff --git a/tests/baselines/reference/exportAssignDottedName.js b/tests/baselines/reference/exportAssignDottedName.js new file mode 100644 index 00000000000..48b06273c17 --- /dev/null +++ b/tests/baselines/reference/exportAssignDottedName.js @@ -0,0 +1,21 @@ +//// [tests/cases/conformance/externalModules/exportAssignDottedName.ts] //// + +//// [foo1.ts] +export function x(){ + return true; +} + +//// [foo2.ts] +import foo1 = require('./foo1'); +export = foo1.x; // Error, export assignment must be identifier only + + +//// [foo1.js] +function x() { + return true; +} +exports.x = x; +//// [foo2.js] +var foo1 = require('./foo1'); +x; // Error, export assignment must be identifier only +module.exports = foo1; diff --git a/tests/baselines/reference/exportAssignImportedIdentifier.js b/tests/baselines/reference/exportAssignImportedIdentifier.js new file mode 100644 index 00000000000..b371e4db5e0 --- /dev/null +++ b/tests/baselines/reference/exportAssignImportedIdentifier.js @@ -0,0 +1,28 @@ +//// [tests/cases/conformance/externalModules/exportAssignImportedIdentifier.ts] //// + +//// [foo1.ts] +export function x(){ + return true; +} + +//// [foo2.ts] +import foo1 = require('./foo1'); +var x = foo1.x; +export = x; + +//// [foo3.ts] +import foo2 = require('./foo2'); +var x = foo2(); // should be boolean + +//// [foo1.js] +function x() { + return true; +} +exports.x = x; +//// [foo2.js] +var foo1 = require('./foo1'); +var x = foo1.x; +module.exports = x; +//// [foo3.js] +var foo2 = require('./foo2'); +var x = foo2(); // should be boolean diff --git a/tests/baselines/reference/exportAssignNonIdentifier.js b/tests/baselines/reference/exportAssignNonIdentifier.js new file mode 100644 index 00000000000..aaefca034cb --- /dev/null +++ b/tests/baselines/reference/exportAssignNonIdentifier.js @@ -0,0 +1,52 @@ +//// [tests/cases/conformance/externalModules/exportAssignNonIdentifier.ts] //// + +//// [foo1.ts] +var x = 10; +export = typeof x; // Error + +//// [foo2.ts] +export = "sausages"; // Error + +//// [foo3.ts] +export = class Foo3 {}; // Error + +//// [foo4.ts] +export = true; // Error + +//// [foo5.ts] +export = undefined; // Valid. undefined is an identifier in JavaScript/TypeScript + +//// [foo6.ts] +export = void; // Error + +//// [foo7.ts] +export = Date || String; // Error + +//// [foo8.ts] +export = null; // Error + + + +//// [foo1.js] +var x = 10; +typeof x; // Error +//// [foo2.js] +"sausages"; // Error +//// [foo3.js] +var Foo3 = (function () { + function Foo3() { + } + return Foo3; +})(); +; // Error +//// [foo4.js] +true; // Error +//// [foo5.js] +module.exports = undefined; +//// [foo6.js] +void ; // Error +//// [foo7.js] + || String; // Error +module.exports = Date; +//// [foo8.js] +null; // Error diff --git a/tests/baselines/reference/exportAssignTypes.js b/tests/baselines/reference/exportAssignTypes.js new file mode 100644 index 00000000000..e898f798a7c --- /dev/null +++ b/tests/baselines/reference/exportAssignTypes.js @@ -0,0 +1,93 @@ +//// [tests/cases/conformance/externalModules/exportAssignTypes.ts] //// + +//// [expString.ts] +var x = "test"; +export = x; + +//// [expNumber.ts] +var x = 42; +export = x; + +//// [expBoolean.ts] +var x = true; +export = x; + +//// [expArray.ts] +var x = [1,2]; +export = x; + +//// [expObject.ts] +var x = { answer: 42, when: 1776}; +export = x; + +//// [expAny.ts] +var x; +export = x; + +//// [expGeneric.ts] +function x(a: T){ + return a; +} +export = x; + +//// [consumer.ts] +import iString = require('./expString'); +var v1: string = iString; + +import iNumber = require('./expNumber'); +var v2: number = iNumber; + +import iBoolean = require('./expBoolean'); +var v3: boolean = iBoolean; + +import iArray = require('./expArray'); +var v4: Array = iArray; + +import iObject = require('./expObject'); +var v5: Object = iObject; + +import iAny = require('./expAny'); +var v6 = iAny; + +import iGeneric = require('./expGeneric'); +var v7: {(p1: x): x} = iGeneric; + + +//// [expString.js] +var x = "test"; +module.exports = x; +//// [expNumber.js] +var x = 42; +module.exports = x; +//// [expBoolean.js] +var x = true; +module.exports = x; +//// [expArray.js] +var x = [1, 2]; +module.exports = x; +//// [expObject.js] +var x = { answer: 42, when: 1776 }; +module.exports = x; +//// [expAny.js] +var x; +module.exports = x; +//// [expGeneric.js] +function x(a) { + return a; +} +module.exports = x; +//// [consumer.js] +var iString = require('./expString'); +var v1 = iString; +var iNumber = require('./expNumber'); +var v2 = iNumber; +var iBoolean = require('./expBoolean'); +var v3 = iBoolean; +var iArray = require('./expArray'); +var v4 = iArray; +var iObject = require('./expObject'); +var v5 = iObject; +var iAny = require('./expAny'); +var v6 = iAny; +var iGeneric = require('./expGeneric'); +var v7 = iGeneric; diff --git a/tests/baselines/reference/exportAssignmentWithoutIdentifier1.js b/tests/baselines/reference/exportAssignmentWithoutIdentifier1.js new file mode 100644 index 00000000000..a90e17d790e --- /dev/null +++ b/tests/baselines/reference/exportAssignmentWithoutIdentifier1.js @@ -0,0 +1,18 @@ +//// [exportAssignmentWithoutIdentifier1.ts] +function Greeter() { + //... +} +Greeter.prototype.greet = function () { + //... +} +export = new Greeter(); + + +//// [exportAssignmentWithoutIdentifier1.js] +function Greeter() { + //... +} +Greeter.prototype.greet = function () { + //... +}; +new Greeter(); diff --git a/tests/baselines/reference/exportDeclareClass1.js b/tests/baselines/reference/exportDeclareClass1.js new file mode 100644 index 00000000000..121db110cc1 --- /dev/null +++ b/tests/baselines/reference/exportDeclareClass1.js @@ -0,0 +1,16 @@ +//// [exportDeclareClass1.ts] + export declare class eaC { + static tF() { }; + static tsF(param:any) { }; + }; + + export declare class eaC2 { + static tF(); + static tsF(param:any); + }; + +//// [exportDeclareClass1.js] +define(["require", "exports"], function (require, exports) { + ; + ; +}); diff --git a/tests/baselines/reference/exportDeclaredModule.js b/tests/baselines/reference/exportDeclaredModule.js new file mode 100644 index 00000000000..7aa75288bff --- /dev/null +++ b/tests/baselines/reference/exportDeclaredModule.js @@ -0,0 +1,19 @@ +//// [tests/cases/conformance/externalModules/exportDeclaredModule.ts] //// + +//// [foo1.ts] + +declare module M1 { + export var a: string; + export function b(): number; +} +export = M1; + +//// [foo2.ts] +import foo1 = require('./foo1'); +var x: number = foo1.b(); + +//// [foo1.js] +module.exports = M1; +//// [foo2.js] +var foo1 = require('./foo1'); +var x = foo1.b(); diff --git a/tests/baselines/reference/exportNonVisibleType.js b/tests/baselines/reference/exportNonVisibleType.js new file mode 100644 index 00000000000..101c356d582 --- /dev/null +++ b/tests/baselines/reference/exportNonVisibleType.js @@ -0,0 +1,54 @@ +//// [tests/cases/conformance/externalModules/exportNonVisibleType.ts] //// + +//// [foo1.ts] +interface I1 { + a: string; + b: number; +} + +var x: I1 = {a: "test", b: 42}; +export = x; // Should fail, I1 not exported. + + +//// [foo2.ts] +interface I1 { + a: string; + b: number; +} + +class C1 { + m1: I1; +} + +export = C1; // Should fail, type I1 of visible member C1.m1 not exported. + +//// [foo3.ts] +interface I1 { + a: string; + b: number; +} + +class C1 { + private m1: I1; +} + +export = C1; // Should work, private type I1 of visible class C1 only used in private member m1. + + +//// [foo1.js] +var x = { a: "test", b: 42 }; +module.exports = x; +//// [foo2.js] +var C1 = (function () { + function C1() { + } + return C1; +})(); +module.exports = C1; +//// [foo3.js] +var C1 = (function () { + function C1() { + } + return C1; +})(); +module.exports = C1; diff --git a/tests/baselines/reference/extension.js b/tests/baselines/reference/extension.js new file mode 100644 index 00000000000..40f4af12564 --- /dev/null +++ b/tests/baselines/reference/extension.js @@ -0,0 +1,37 @@ +//// [extension.ts] +interface I { + x; +} + +interface I { + y; +} + +declare module M { + export class C { + public p:number; + } +} + +declare module M { + export extension class C { + public pe:string; + } +} + +var c=new M.C(); +c.pe; +c.p; +var i:I; +i.x; +i.y; + + + +//// [extension.js] +var c = new M.C(); +c.pe; +c.p; +var i; +i.x; +i.y; diff --git a/tests/baselines/reference/externModule.js b/tests/baselines/reference/externModule.js new file mode 100644 index 00000000000..0dc3d8e84cd --- /dev/null +++ b/tests/baselines/reference/externModule.js @@ -0,0 +1,58 @@ +//// [externModule.ts] +declare module { + export class XDate { + public getDay():number; + public getXDate():number; + // etc. + + // Called as a function + // Not supported anymore? public (): string; + + // Called as a constructor + constructor(year: number, month: number); + constructor(year: number, month: number, date: number); + constructor(year: number, month: number, date: number, hours: number); + constructor(year: number, month: number, date: number, hours: number, minutes: number); + constructor(year: number, month: number, date: number, hours: number, minutes: number, seconds: number); + constructor(year: number, month: number, date: number, hours: number, minutes: number, seconds: number, ms: number); + constructor(value: number); + constructor(); + + static parse(string: string): number; + static UTC(year: number, month: number): number; + static UTC(year: number, month: number, date: number): number; + static UTC(year: number, month: number, date: number, hours: number): number; + static UTC(year: number, month: number, date: number, hours: number, minutes: number): number; + static UTC(year: number, month: number, date: number, hours: number, minutes: number, seconds: number): number; + static UTC(year: number, month: number, date: number, hours: number, minutes: number, seconds: number, + ms: number): number; + static now(): number; + } +} + +var d=new XDate(); +d.getDay(); +d=new XDate(1978,2); +d.getXDate(); +var n=XDate.parse("3/2/2004"); +n=XDate.UTC(1964,2,1); + + + +//// [externModule.js] +declare; +module; +{ +} +var XDate = (function () { + function XDate() { + } + return XDate; +})(); +exports.XDate = XDate; +var d = new XDate(); +d.getDay(); +d = new XDate(1978, 2); +d.getXDate(); +var n = XDate.parse("3/2/2004"); +n = XDate.UTC(1964, 2, 1); diff --git a/tests/baselines/reference/externalModuleWithoutCompilerFlag1.js b/tests/baselines/reference/externalModuleWithoutCompilerFlag1.js new file mode 100644 index 00000000000..b5c939453e6 --- /dev/null +++ b/tests/baselines/reference/externalModuleWithoutCompilerFlag1.js @@ -0,0 +1,7 @@ +//// [externalModuleWithoutCompilerFlag1.ts] + +// Not on line 0 because we want to verify the error is placed in the appropriate location. + export module M { +} + +//// [externalModuleWithoutCompilerFlag1.js] diff --git a/tests/baselines/reference/fatarrowfunctionsErrors.js b/tests/baselines/reference/fatarrowfunctionsErrors.js new file mode 100644 index 00000000000..fd47f60b6a0 --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsErrors.js @@ -0,0 +1,47 @@ +//// [fatarrowfunctionsErrors.ts] +foo((...Far:any[])=>{return 0;}) +foo((1)=>{return 0;}); +foo((x?)=>{return x;}) +foo((x=0)=>{return x;}) +var y = x:number => x*x; +false? (() => null): null; + +// missing fatarrow +var x1 = () :void {}; +var x2 = (a:number) :void {}; +var x3 = (a:number) {}; +var x4= (...a: any[]) { }; + +//// [fatarrowfunctionsErrors.js] +foo(function () { + var Far = []; + for (var _i = 0; _i < arguments.length; _i++) { + Far[_i - 0] = arguments[_i]; + } + return 0; +}); +foo((1), { return: 0 }); +; +foo(function (x) { + return x; +}); +foo(function (x) { + if (x === void 0) { x = 0; } + return x; +}); +var y = x, number; +x * x; +false ? (function () { return null; }) : null; +// missing fatarrow +var x1 = function () { +}; +var x2 = function (a) { +}; +var x3 = function (a) { +}; +var x4 = function () { + var a = []; + for (var _i = 0; _i < arguments.length; _i++) { + a[_i - 0] = arguments[_i]; + } +}; diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgs.js b/tests/baselines/reference/fatarrowfunctionsOptionalArgs.js new file mode 100644 index 00000000000..0b816cc9e09 --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgs.js @@ -0,0 +1,394 @@ +//// [fatarrowfunctionsOptionalArgs.ts] +// valid + +// no params +() => 1; + +// one param, no type +(arg) => 2; + +// one param, no type +arg => 2; + +// one param, no type with default value +(arg = 1) => 3; + +// one param, no type, optional +(arg?) => 4; + +// typed param +(arg: number) => 5; + +// typed param with default value +(arg: number = 0) => 6; + +// optional param +(arg?: number) => 7; + +// var arg param +(...arg: number[]) => 8; + +// multiple arguments +(arg1, arg2) => 12; +(arg1 = 1, arg2 =3) => 13; +(arg1?, arg2?) => 14; +(arg1: number, arg2: number) => 15; +(arg1: number = 0, arg2: number = 1) => 16; +(arg1?: number, arg2?: number) => 17; +(arg1, ...arg2: number[]) => 18; +(arg1, arg2?: number) => 19; + +// in paren +(() => 21); +((arg) => 22); +((arg = 1) => 23); +((arg?) => 24); +((arg: number) => 25); +((arg: number = 0) => 26); +((arg?: number) => 27); +((...arg: number[]) => 28); + +// in multiple paren +(((((arg) => { return 32; })))); + +// in ternary exression +false ? () => 41 : null; +false ? (arg) => 42 : null; +false ? (arg = 1) => 43 : null; +false ? (arg?) => 44 : null; +false ? (arg: number) => 45 : null; +false ? (arg?: number) => 46 : null; +false ? (arg?: number = 0) => 47 : null; +false ? (...arg: number[]) => 48 : null; + +// in ternary exression within paren +false ? (() => 51) : null; +false ? ((arg) => 52) : null; +false ? ((arg = 1) => 53) : null; +false ? ((arg?) => 54) : null; +false ? ((arg: number) => 55) : null; +false ? ((arg?: number) => 56) : null; +false ? ((arg?: number = 0) => 57) : null; +false ? ((...arg: number[]) => 58) : null; + +// ternary exression's else clause +false ? null : () => 61; +false ? null : (arg) => 62; +false ? null : (arg = 1) => 63; +false ? null : (arg?) => 64; +false ? null : (arg: number) => 65; +false ? null : (arg?: number) => 66; +false ? null : (arg?: number = 0) => 67; +false ? null : (...arg: number[]) => 68; + + +// nested ternary expressions +((a?) => { return a; }) ? (b? ) => { return b; } : (c? ) => { return c; }; + +//multiple levels +(a?) => { return a; } ? (b)=>(c)=>81 : (c)=>(d)=>82; + + +// In Expressions +((arg) => 90) instanceof Function; +((arg = 1) => 91) instanceof Function; +((arg? ) => 92) instanceof Function; +((arg: number) => 93) instanceof Function; +((arg: number = 1) => 94) instanceof Function; +((arg?: number) => 95) instanceof Function; +((...arg: number[]) => 96) instanceof Function; + +'' + ((arg) => 100); +((arg) => 0) + '' + ((arg) => 101); +((arg = 1) => 0) + '' + ((arg = 2) => 102); +((arg?) => 0) + '' + ((arg?) => 103); +((arg:number) => 0) + '' + ((arg:number) => 104); +((arg:number = 1) => 0) + '' + ((arg:number = 2) => 105); +((arg?:number = 1) => 0) + '' + ((arg?:number = 2) => 106); +((...arg:number[]) => 0) + '' + ((...arg:number[]) => 107); +((arg1, arg2?) => 0) + '' + ((arg1,arg2?) => 108); +((arg1, ...arg2:number[]) => 0) + '' + ((arg1, ...arg2:number[]) => 108); + + +// Function Parameters +function foo(...arg: any[]) { } + +foo( + (a) => 110, + ((a) => 111), + (a) => { + return 112; + }, + (a? ) => 113, + (a, b? ) => 114, + (a: number) => 115, + (a: number = 0) => 116, + (a = 0) => 117, + (a?: number = 0) => 118, + (...a: number[]) => 119, + (a, b? = 0, ...c: number[]) => 120, + (a) => (b) => (c) => 121, + false? (a) => 0 : (b) => 122 +); + +//// [fatarrowfunctionsOptionalArgs.js] +// valid +// no params +(function () { return 1; }); +// one param, no type +(function (arg) { return 2; }); +// one param, no type +(function (arg) { return 2; }); +// one param, no type with default value +(function (arg) { + if (arg === void 0) { arg = 1; } + return 3; +}); +// one param, no type, optional +(function (arg) { return 4; }); +// typed param +(function (arg) { return 5; }); +// typed param with default value +(function (arg) { + if (arg === void 0) { arg = 0; } + return 6; +}); +// optional param +(function (arg) { return 7; }); +// var arg param +(function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 8; +}); +// multiple arguments +(function (arg1, arg2) { return 12; }); +(function (arg1, arg2) { + if (arg1 === void 0) { arg1 = 1; } + if (arg2 === void 0) { arg2 = 3; } + return 13; +}); +(function (arg1, arg2) { return 14; }); +(function (arg1, arg2) { return 15; }); +(function (arg1, arg2) { + if (arg1 === void 0) { arg1 = 0; } + if (arg2 === void 0) { arg2 = 1; } + return 16; +}); +(function (arg1, arg2) { return 17; }); +(function (arg1) { + var arg2 = []; + for (var _i = 1; _i < arguments.length; _i++) { + arg2[_i - 1] = arguments[_i]; + } + return 18; +}); +(function (arg1, arg2) { return 19; }); +// in paren +(function () { return 21; }); +(function (arg) { return 22; }); +(function (arg) { + if (arg === void 0) { arg = 1; } + return 23; +}); +(function (arg) { return 24; }); +(function (arg) { return 25; }); +(function (arg) { + if (arg === void 0) { arg = 0; } + return 26; +}); +(function (arg) { return 27; }); +(function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 28; +}); +// in multiple paren +((((function (arg) { + return 32; +})))); +// in ternary exression +false ? function () { return 41; } : null; +false ? function (arg) { return 42; } : null; +false ? function (arg) { + if (arg === void 0) { arg = 1; } + return 43; +} : null; +false ? function (arg) { return 44; } : null; +false ? function (arg) { return 45; } : null; +false ? function (arg) { return 46; } : null; +false ? function (arg) { + if (arg === void 0) { arg = 0; } + return 47; +} : null; +false ? function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 48; +} : null; +// in ternary exression within paren +false ? (function () { return 51; }) : null; +false ? (function (arg) { return 52; }) : null; +false ? (function (arg) { + if (arg === void 0) { arg = 1; } + return 53; +}) : null; +false ? (function (arg) { return 54; }) : null; +false ? (function (arg) { return 55; }) : null; +false ? (function (arg) { return 56; }) : null; +false ? (function (arg) { + if (arg === void 0) { arg = 0; } + return 57; +}) : null; +false ? (function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 58; +}) : null; +// ternary exression's else clause +false ? null : function () { return 61; }; +false ? null : function (arg) { return 62; }; +false ? null : function (arg) { + if (arg === void 0) { arg = 1; } + return 63; +}; +false ? null : function (arg) { return 64; }; +false ? null : function (arg) { return 65; }; +false ? null : function (arg) { return 66; }; +false ? null : function (arg) { + if (arg === void 0) { arg = 0; } + return 67; +}; +false ? null : function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 68; +}; +// nested ternary expressions +(function (a) { + return a; +}) ? function (b) { + return b; +} : function (c) { + return c; +}; +//multiple levels +(function (a) { + return a; +}); +(function (b) { return function (c) { return 81; }; }); +(function (c) { return function (d) { return 82; }; }); +// In Expressions +(function (arg) { return 90; }) instanceof Function; +(function (arg) { + if (arg === void 0) { arg = 1; } + return 91; +}) instanceof Function; +(function (arg) { return 92; }) instanceof Function; +(function (arg) { return 93; }) instanceof Function; +(function (arg) { + if (arg === void 0) { arg = 1; } + return 94; +}) instanceof Function; +(function (arg) { return 95; }) instanceof Function; +(function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 96; +}) instanceof Function; +'' + (function (arg) { return 100; }); +(function (arg) { return 0; }) + '' + (function (arg) { return 101; }); +(function (arg) { + if (arg === void 0) { arg = 1; } + return 0; +}) + '' + (function (arg) { + if (arg === void 0) { arg = 2; } + return 102; +}); +(function (arg) { return 0; }) + '' + (function (arg) { return 103; }); +(function (arg) { return 0; }) + '' + (function (arg) { return 104; }); +(function (arg) { + if (arg === void 0) { arg = 1; } + return 0; +}) + '' + (function (arg) { + if (arg === void 0) { arg = 2; } + return 105; +}); +(function (arg) { + if (arg === void 0) { arg = 1; } + return 0; +}) + '' + (function (arg) { + if (arg === void 0) { arg = 2; } + return 106; +}); +(function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 0; +}) + '' + (function () { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } + return 107; +}); +(function (arg1, arg2) { return 0; }) + '' + (function (arg1, arg2) { return 108; }); +(function (arg1) { + var arg2 = []; + for (var _i = 1; _i < arguments.length; _i++) { + arg2[_i - 1] = arguments[_i]; + } + return 0; +}) + '' + (function (arg1) { + var arg2 = []; + for (var _i = 1; _i < arguments.length; _i++) { + arg2[_i - 1] = arguments[_i]; + } + return 108; +}); +// Function Parameters +function foo() { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } +} +foo(function (a) { return 110; }, (function (a) { return 111; }), function (a) { + return 112; +}, function (a) { return 113; }, function (a, b) { return 114; }, function (a) { return 115; }, function (a) { + if (a === void 0) { a = 0; } + return 116; +}, function (a) { + if (a === void 0) { a = 0; } + return 117; +}, function (a) { + if (a === void 0) { a = 0; } + return 118; +}, function () { + var a = []; + for (var _i = 0; _i < arguments.length; _i++) { + a[_i - 0] = arguments[_i]; + } + return 119; +}, function (a, b) { + if (b === void 0) { b = 0; } + var c = []; + for (var _i = 2; _i < arguments.length; _i++) { + c[_i - 2] = arguments[_i]; + } + return 120; +}, function (a) { return function (b) { return function (c) { return 121; }; }; }, false ? function (a) { return 0; } : function (b) { return 122; }); diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors2.js b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors2.js new file mode 100644 index 00000000000..b51003b62df --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors2.js @@ -0,0 +1,13 @@ +//// [fatarrowfunctionsOptionalArgsErrors2.ts] +var tt1 = (a, (b, c)) => a+b+c; +var tt2 = ((a), b, c) => a+b+c; + +var tt3 = ((a)) => a; + +//// [fatarrowfunctionsOptionalArgsErrors2.js] +var tt1 = (a, (b, c)); +a + b + c; +var tt2 = ((a), b, c); +a + b + c; +var tt3 = ((a)); +a; diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors3.js b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors3.js new file mode 100644 index 00000000000..665c5244016 --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors3.js @@ -0,0 +1,12 @@ +//// [fatarrowfunctionsOptionalArgsErrors3.ts] +(...) => 105; + + +//// [fatarrowfunctionsOptionalArgsErrors3.js] +(function () { + var = []; + for (var _i = 0; _i < arguments.length; _i++) { + [_i - 0] = arguments[_i]; + } + return 105; +}); diff --git a/tests/baselines/reference/for.js b/tests/baselines/reference/for.js new file mode 100644 index 00000000000..a77b68d8b6e --- /dev/null +++ b/tests/baselines/reference/for.js @@ -0,0 +1,56 @@ +//// [for.ts] +for (var i = 0; i < 10; i++) { // ok + var x1 = i; +} + +for (var j: number = 0; j < 10; j++) { // ok + var x2 = j; +} + +for (var k = 0; k < 10;) { // ok + k++; +} + +for (; i < 10;) { // ok + i++; +} + +for (; i > 1; i--) { // ok +} + +for (var l = 0; ; l++) { // ok + if (l > 10) { + break; + } +} + +for (; ;) { // ok +} + +for () { // error +} + +//// [for.js] +for (var i = 0; i < 10; i++) { + var x1 = i; +} +for (var j = 0; j < 10; j++) { + var x2 = j; +} +for (var k = 0; k < 10;) { + k++; +} +for (; i < 10;) { + i++; +} +for (; i > 1; i--) { +} +for (var l = 0;; l++) { + if (l > 10) { + break; + } +} +for (;;) { +} +for (;;) { +} diff --git a/tests/baselines/reference/functionTypesLackingReturnTypes.js b/tests/baselines/reference/functionTypesLackingReturnTypes.js new file mode 100644 index 00000000000..10b447a838f --- /dev/null +++ b/tests/baselines/reference/functionTypesLackingReturnTypes.js @@ -0,0 +1,25 @@ +//// [functionTypesLackingReturnTypes.ts] + +// Error (no '=>') +function f(x: ()) { +} + +// Error (no '=>') +var g: (param); + +// Okay +var h: { () } + +// Okay +var i: { new () } + +//// [functionTypesLackingReturnTypes.js] +// Error (no '=>') +function f(x) { +} +// Error (no '=>') +var g; +// Okay +var h; +// Okay +var i; diff --git a/tests/baselines/reference/functionsMissingReturnStatementsAndExpressions.js b/tests/baselines/reference/functionsMissingReturnStatementsAndExpressions.js new file mode 100644 index 00000000000..ae8e7d9c918 --- /dev/null +++ b/tests/baselines/reference/functionsMissingReturnStatementsAndExpressions.js @@ -0,0 +1,237 @@ +//// [functionsMissingReturnStatementsAndExpressions.ts] + +function f1(): string { + // errors because there are no return statements +} + +function f2(): string { + // Permissible; returns undefined. + return; +} + +function f3(): string { + return "Okay, because this is a return expression."; +} + +function f4(): void { + // Fine since we are typed void. +} + +function f5(): void { + // Fine since we are typed void. + return; +} + +function f6(): void { + // Fine since we are typed void and return undefined + return undefined; +} + +function f7(): void { + // Fine since we are typed void and return null + return null; +} + +function f8(): void { + // Fine since are typed any. + return; +} + +function f9(): void { + // Fine since we are typed any and return undefined + return undefined; +} + +function f10(): void { + // Fine since we are typed any and return null + return null; +} + +function f11(): string { + // Fine since we consist of a single throw statement. + throw undefined; +} + +function f12(): void { + // Fine since we consist of a single throw statement. + throw undefined; +} + +function f13(): any { + // Fine since we consist of a single throw statement. + throw undefined; +} + +function f14(): number { + // Not fine, since we can *only* consist of a single throw statement + // if no return statements are present but we are annotated. + throw undefined; + throw null; +} + +function f15(): number { + // Fine, since we have a return statement somewhere. + throw undefined; + throw null; + return; +} + + +function f16() { + // Okay; not type annotated. +} + +function f17() { + // Okay; not type annotated. + return; +} + +function f18() { + return "Okay, not type annotated."; +} + + +class C { + public get m1() { + // Errors; get accessors must return a value. + } + + public get m2() { + // Permissible; returns undefined. + return; + } + + public get m3() { + return "Okay, because this is a return expression."; + } + + public get m4() { + // Fine since this consists of a single throw statement. + throw null; + } + + public get m5() { + // Not fine, since we can *only* consist of a single throw statement + // if no return statements are present but we are a get accessor. + throw null; + throw undefined. + } +} + +//// [functionsMissingReturnStatementsAndExpressions.js] +function f1() { + // errors because there are no return statements +} +function f2() { + // Permissible; returns undefined. + return; +} +function f3() { + return "Okay, because this is a return expression."; +} +function f4() { + // Fine since we are typed void. +} +function f5() { + // Fine since we are typed void. + return; +} +function f6() { + // Fine since we are typed void and return undefined + return undefined; +} +function f7() { + // Fine since we are typed void and return null + return null; +} +function f8() { + // Fine since are typed any. + return; +} +function f9() { + // Fine since we are typed any and return undefined + return undefined; +} +function f10() { + // Fine since we are typed any and return null + return null; +} +function f11() { + // Fine since we consist of a single throw statement. + throw undefined; +} +function f12() { + // Fine since we consist of a single throw statement. + throw undefined; +} +function f13() { + // Fine since we consist of a single throw statement. + throw undefined; +} +function f14() { + // Not fine, since we can *only* consist of a single throw statement + // if no return statements are present but we are annotated. + throw undefined; + throw null; +} +function f15() { + // Fine, since we have a return statement somewhere. + throw undefined; + throw null; + return; +} +function f16() { + // Okay; not type annotated. +} +function f17() { + // Okay; not type annotated. + return; +} +function f18() { + return "Okay, not type annotated."; +} +var C = (function () { + function C() { + } + Object.defineProperty(C.prototype, "m1", { + get: function () { + // Errors; get accessors must return a value. + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C.prototype, "m2", { + get: function () { + // Permissible; returns undefined. + return; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C.prototype, "m3", { + get: function () { + return "Okay, because this is a return expression."; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C.prototype, "m4", { + get: function () { + // Fine since this consists of a single throw statement. + throw null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(C.prototype, "m5", { + get: function () { + // Not fine, since we can *only* consist of a single throw statement + // if no return statements are present but we are a get accessor. + throw null; + throw undefined.; + }, + enumerable: true, + configurable: true + }); + return C; +})(); diff --git a/tests/baselines/reference/genericArrayExtenstions.js b/tests/baselines/reference/genericArrayExtenstions.js new file mode 100644 index 00000000000..774e512d48f --- /dev/null +++ b/tests/baselines/reference/genericArrayExtenstions.js @@ -0,0 +1,8 @@ +//// [genericArrayExtenstions.ts] +export declare class ObservableArray implements Array { // MS.Entertainment.ObservableArray +concat(...items: U[]): T[]; +concat(...items: T[]): T[]; +} + + +//// [genericArrayExtenstions.js] diff --git a/tests/baselines/reference/genericCallWithoutArgs.js b/tests/baselines/reference/genericCallWithoutArgs.js new file mode 100644 index 00000000000..abf947a7d3b --- /dev/null +++ b/tests/baselines/reference/genericCallWithoutArgs.js @@ -0,0 +1,10 @@ +//// [genericCallWithoutArgs.ts] +function f(x: X, y: Y) { +} + +f. + +//// [genericCallWithoutArgs.js] +function f(x, y) { +} +f(); diff --git a/tests/baselines/reference/genericCallsWithoutParens.js b/tests/baselines/reference/genericCallsWithoutParens.js new file mode 100644 index 00000000000..e51ed55224c --- /dev/null +++ b/tests/baselines/reference/genericCallsWithoutParens.js @@ -0,0 +1,21 @@ +//// [genericCallsWithoutParens.ts] +function f() { } +var r = f; // parse error + +class C { + foo: T; +} +var c = new C; // parse error + + + +//// [genericCallsWithoutParens.js] +function f() { +} +var r = f(); // parse error +var C = (function () { + function C() { + } + return C; +})(); +var c = new C(); // parse error diff --git a/tests/baselines/reference/genericConstructExpressionWithoutArgs.js b/tests/baselines/reference/genericConstructExpressionWithoutArgs.js new file mode 100644 index 00000000000..c3066de2721 --- /dev/null +++ b/tests/baselines/reference/genericConstructExpressionWithoutArgs.js @@ -0,0 +1,26 @@ +//// [genericConstructExpressionWithoutArgs.ts] +class B { } +var b = new B; // no error + +class C { + x: T; +} + +var c = new C // C +var c2 = new C // error, type params are actually part of the arg list so you need both + + +//// [genericConstructExpressionWithoutArgs.js] +var B = (function () { + function B() { + } + return B; +})(); +var b = new B; // no error +var C = (function () { + function C() { + } + return C; +})(); +var c = new C; // C +var c2 = new C(); // error, type params are actually part of the arg list so you need both diff --git a/tests/baselines/reference/genericObjectCreationWithoutTypeArgs.js b/tests/baselines/reference/genericObjectCreationWithoutTypeArgs.js new file mode 100644 index 00000000000..75e85283aa9 --- /dev/null +++ b/tests/baselines/reference/genericObjectCreationWithoutTypeArgs.js @@ -0,0 +1,21 @@ +//// [genericObjectCreationWithoutTypeArgs.ts] +class SS{ + +} + +var x1 = new SS(); // OK +var x2 = new SS < number>; // Correctly give error +var x3 = new SS(); // OK +var x4 = new SS; // Should be allowed, but currently give error ('supplied parameters do not match any signature of the call target') + + +//// [genericObjectCreationWithoutTypeArgs.js] +var SS = (function () { + function SS() { + } + return SS; +})(); +var x1 = new SS(); // OK +var x2 = new SS(); // Correctly give error +var x3 = new SS(); // OK +var x4 = new SS; // Should be allowed, but currently give error ('supplied parameters do not match any signature of the call target') diff --git a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline index a5d5d2eb9d7..e1ed630f2f4 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline @@ -1,2 +1,8 @@ -EmitOutputStatus : AllOutputGenerationSkipped +EmitOutputStatus : Succeeded +Filename : out.js +// File to emit, does not contain syntactic errors, but --out is passed +// expected to not generate outputs because of the syntactic errors in the other file. +var noErrors = true; +// File not emitted, and contains syntactic errors +var syntactic = Error; diff --git a/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline b/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline index a5d5d2eb9d7..3353e1b9b9f 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline @@ -1,2 +1,4 @@ -EmitOutputStatus : AllOutputGenerationSkipped +EmitOutputStatus : Succeeded +Filename : tests/cases/fourslash/inputFile.js +var x; diff --git a/tests/baselines/reference/importAliasAnExternalModuleInsideAnInternalModule.js b/tests/baselines/reference/importAliasAnExternalModuleInsideAnInternalModule.js new file mode 100644 index 00000000000..35992b86fec --- /dev/null +++ b/tests/baselines/reference/importAliasAnExternalModuleInsideAnInternalModule.js @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/importAliasAnExternalModuleInsideAnInternalModule.ts] //// + +//// [importAliasAnExternalModuleInsideAnInternalModule_file0.ts] +export module m { + export function foo() { } +} + +//// [importAliasAnExternalModuleInsideAnInternalModule_file1.ts] +import r = require('importAliasAnExternalModuleInsideAnInternalModule_file0'); +module m_private { + //import r2 = require('m'); // would be error + export import C = r; // no error + C.m.foo(); +} + + +//// [importAliasAnExternalModuleInsideAnInternalModule_file0.js] +var m; +(function (m) { + function foo() { + } + m.foo = foo; +})(m = exports.m || (exports.m = {})); +//// [importAliasAnExternalModuleInsideAnInternalModule_file1.js] +var r = require('importAliasAnExternalModuleInsideAnInternalModule_file0'); +var m_private; +(function (m_private) { + //import r2 = require('m'); // would be error + m_private.C = r; // no error + m_private.C.m.foo(); +})(m_private || (m_private = {})); diff --git a/tests/baselines/reference/importDeclRefereingExternalModuleWithNoResolve.js b/tests/baselines/reference/importDeclRefereingExternalModuleWithNoResolve.js new file mode 100644 index 00000000000..34a662d6451 --- /dev/null +++ b/tests/baselines/reference/importDeclRefereingExternalModuleWithNoResolve.js @@ -0,0 +1,8 @@ +//// [importDeclRefereingExternalModuleWithNoResolve.ts] +import b = require("externalModule"); +declare module "m1" { + import im2 = require("externalModule"); +} + + +//// [importDeclRefereingExternalModuleWithNoResolve.js] diff --git a/tests/baselines/reference/importDeclWithDeclareModifier.js b/tests/baselines/reference/importDeclWithDeclareModifier.js new file mode 100644 index 00000000000..3c80e47a90f --- /dev/null +++ b/tests/baselines/reference/importDeclWithDeclareModifier.js @@ -0,0 +1,11 @@ +//// [importDeclWithDeclareModifier.ts] +module x { + interface c { + } +} +declare export import a = x.c; +var b: a; + + +//// [importDeclWithDeclareModifier.js] +var b; diff --git a/tests/baselines/reference/incompleteDottedExpressionAtEOF.js b/tests/baselines/reference/incompleteDottedExpressionAtEOF.js new file mode 100644 index 00000000000..9a51c206683 --- /dev/null +++ b/tests/baselines/reference/incompleteDottedExpressionAtEOF.js @@ -0,0 +1,7 @@ +//// [incompleteDottedExpressionAtEOF.ts] +// used to leak __missing into error message +var p2 = window. + +//// [incompleteDottedExpressionAtEOF.js] +// used to leak __missing into error message +var p2 = window.; diff --git a/tests/baselines/reference/incompleteObjectLiteral1.js b/tests/baselines/reference/incompleteObjectLiteral1.js new file mode 100644 index 00000000000..ecdbe86604a --- /dev/null +++ b/tests/baselines/reference/incompleteObjectLiteral1.js @@ -0,0 +1,7 @@ +//// [incompleteObjectLiteral1.ts] +var tt = { aa; } +var x = tt; + +//// [incompleteObjectLiteral1.js] +var tt = { aa: }; +var x = tt; diff --git a/tests/baselines/reference/incrementAndDecrement.js b/tests/baselines/reference/incrementAndDecrement.js new file mode 100644 index 00000000000..96794e3c956 --- /dev/null +++ b/tests/baselines/reference/incrementAndDecrement.js @@ -0,0 +1,123 @@ +//// [incrementAndDecrement.ts] +enum E { A, B, C }; +var x = 4; +var e = E.B; +var a: any; +var w = window; + +// Assign to expression++ +x++ = 4; // Error + +// Assign to expression-- +x-- = 5; // Error + +// Assign to++expression +++x = 4; // Error + +// Assign to--expression +--x = 5; // Error + +// Pre and postfix++ on number +x++; +x--; +++x; +--x; +++x++; // Error +--x--; // Error +++x--; // Error +--x++; // Error + +// Pre and postfix++ on enum +e++; +e--; +++e; +--e; +++e++; // Error +--e--; // Error +++e--; // Error +--e++; // Error + +// Pre and postfix++ on value of type 'any' +a++; +a--; +++a; +--a; +++a++; // Error +--a--; // Error +++a--; // Error +--a++; // Error + + +// Pre and postfix++ on other types +w++; // Error +w--; // Error +++w; // Error +--w; // Error +++w++; // Error +--w--; // Error +++w--; // Error +--w++; // Error + + + + +//// [incrementAndDecrement.js] +var E; +(function (E) { + E[E["A"] = 0] = "A"; + E[E["B"] = 1] = "B"; + E[E["C"] = 2] = "C"; +})(E || (E = {})); +; +var x = 4; +var e = 1 /* B */; +var a; +var w = window; +// Assign to expression++ +x++; +4; // Error +// Assign to expression-- +x--; +5; // Error +// Assign to++expression +++x; +4; // Error +// Assign to--expression +--x; +5; // Error +// Pre and postfix++ on number +x++; +x--; +++x; +--x; +++x++; // Error +--x--; // Error +++x--; // Error +--x++; // Error +// Pre and postfix++ on enum +e++; +e--; +++e; +--e; +++e++; // Error +--e--; // Error +++e--; // Error +--e++; // Error +// Pre and postfix++ on value of type 'any' +a++; +a--; +++a; +--a; +++a++; // Error +--a--; // Error +++a--; // Error +--a++; // Error +// Pre and postfix++ on other types +w++; // Error +w--; // Error +++w; // Error +--w; // Error +++w++; // Error +--w--; // Error +++w--; // Error +--w++; // Error diff --git a/tests/baselines/reference/initializerReferencingConstructorLocals.js b/tests/baselines/reference/initializerReferencingConstructorLocals.js new file mode 100644 index 00000000000..f382b5b7010 --- /dev/null +++ b/tests/baselines/reference/initializerReferencingConstructorLocals.js @@ -0,0 +1,43 @@ +//// [initializerReferencingConstructorLocals.ts] +// 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. + +class C { + a = z; // error + b: typeof z; // error + c = this.z; // error + d: typeof this.z; // error + constructor(x) { + z = 1; + } +} + +class D { + a = z; // error + b: typeof z; // error + c = this.z; // error + d: typeof this.z; // error + constructor(x: T) { + z = 1; + } +} + +//// [initializerReferencingConstructorLocals.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. +var C = (function () { + function C(x) { + this.a = z; // error + this.c = this.z; // error + this.d = this.z; // error + z = 1; + } + return C; +})(); +var D = (function () { + function D(x) { + this.a = z; // error + this.c = this.z; // error + this.d = this.z; // error + z = 1; + } + return D; +})(); diff --git a/tests/baselines/reference/initializerReferencingConstructorParameters.js b/tests/baselines/reference/initializerReferencingConstructorParameters.js new file mode 100644 index 00000000000..8314d5b7155 --- /dev/null +++ b/tests/baselines/reference/initializerReferencingConstructorParameters.js @@ -0,0 +1,58 @@ +//// [initializerReferencingConstructorParameters.ts] +// 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. + +class C { + a = x; // error + b: typeof x; // error + constructor(x) { } +} + +class D { + a = x; // error + b: typeof x; // error + constructor(public x) { } +} + +class E { + a = this.x; // ok + b: typeof this.x; // error + constructor(public x) { } +} + +class F { + a = this.x; // ok + b = x; // error + constructor(public x: T) { } +} + +//// [initializerReferencingConstructorParameters.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. +var C = (function () { + function C(x) { + this.a = x; // error + } + return C; +})(); +var D = (function () { + function D(x) { + this.x = x; + this.a = x; // error + } + return D; +})(); +var E = (function () { + function E(x) { + this.x = x; + this.a = this.x; // ok + this.b = this.x; // error + } + return E; +})(); +var F = (function () { + function F(x) { + this.x = x; + this.a = this.x; // ok + this.b = x; // error + } + return F; +})(); diff --git a/tests/baselines/reference/innerModExport1.js b/tests/baselines/reference/innerModExport1.js new file mode 100644 index 00000000000..d61e79f2396 --- /dev/null +++ b/tests/baselines/reference/innerModExport1.js @@ -0,0 +1,45 @@ +//// [innerModExport1.ts] +module Outer { + + // inner mod 1 + var non_export_var: number; + module { + var non_export_var = 0; + export var export_var = 1; + + function NonExportFunc() { return 0; } + + export function ExportFunc() { return 0; } + } + + export var outer_var_export = 0; + export function outerFuncExport() { return 0; } + +} + +Outer.ExportFunc(); + +//// [innerModExport1.js] +var Outer; +(function (Outer) { + // inner mod 1 + var non_export_var; + module; + { + var non_export_var = 0; + Outer.export_var = 1; + function NonExportFunc() { + return 0; + } + function ExportFunc() { + return 0; + } + Outer.ExportFunc = ExportFunc; + } + Outer.outer_var_export = 0; + function outerFuncExport() { + return 0; + } + Outer.outerFuncExport = outerFuncExport; +})(Outer || (Outer = {})); +Outer.ExportFunc(); diff --git a/tests/baselines/reference/innerModExport2.js b/tests/baselines/reference/innerModExport2.js new file mode 100644 index 00000000000..26399879e6d --- /dev/null +++ b/tests/baselines/reference/innerModExport2.js @@ -0,0 +1,47 @@ +//// [innerModExport2.ts] +module Outer { + + // inner mod 1 + var non_export_var: number; + module { + var non_export_var = 0; + export var export_var = 1; + + function NonExportFunc() { return 0; } + + export function ExportFunc() { return 0; } + } + var export_var: number; + + export var outer_var_export = 0; + export function outerFuncExport() { return 0; } + +} + +Outer.NonExportFunc(); + +//// [innerModExport2.js] +var Outer; +(function (Outer) { + // inner mod 1 + var non_export_var; + module; + { + var non_export_var = 0; + Outer.export_var = 1; + function NonExportFunc() { + return 0; + } + function ExportFunc() { + return 0; + } + Outer.ExportFunc = ExportFunc; + } + var export_var; + Outer.outer_var_export = 0; + function outerFuncExport() { + return 0; + } + Outer.outerFuncExport = outerFuncExport; +})(Outer || (Outer = {})); +Outer.NonExportFunc(); diff --git a/tests/baselines/reference/instantiateTypeParameter.js b/tests/baselines/reference/instantiateTypeParameter.js new file mode 100644 index 00000000000..7dcf77366bc --- /dev/null +++ b/tests/baselines/reference/instantiateTypeParameter.js @@ -0,0 +1,7 @@ +//// [instantiateTypeParameter.ts] +interface Foo { + var x: T<>; +} + +//// [instantiateTypeParameter.js] +var x; diff --git a/tests/baselines/reference/intTypeCheck.js b/tests/baselines/reference/intTypeCheck.js new file mode 100644 index 00000000000..41f648610b5 --- /dev/null +++ b/tests/baselines/reference/intTypeCheck.js @@ -0,0 +1,348 @@ +//// [intTypeCheck.ts] +interface i1 { + //Property Signatures + p; + p1?; + p2?: string; + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7? (pa1, pa2): void; +} +interface i2 { + //Call Signatures + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); +} +interface i3 { + //Construct Signatures + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); +} +interface i4 { + // Used to be indexer, now it is a computed property + [p]; + //Index Signatures + [p1: string]; + [p2: string, p3: number]; +} +interface i5 extends i1 { } +interface i6 extends i2 { } +interface i7 extends i3 { } +interface i8 extends i4 { } +interface i9 { } + +class Base { foo() { } } + +interface i11 { + //Call Signatures + (); + (): number; + (p); + (p1: string); + (p2?: string); + (...p3: any[]); + (p4: string, p5?: string); + (p6: string, ...p7: any[]); + //(p8?: string, ...p9: any[]); + //(p10:string, p8?: string, ...p9: any[]); + + //Construct Signatures + new (); + new (): number; + new (p: string); + new (p2?: string); + new (...p3: any[]); + new (p4: string, p5?: string); + new (p6: string, ...p7: any[]); + + // Used to be indexer, now it is a computed property + [p]; + //Index Signatures + [p1: string]; + [p2: string, p3: number]; + + //Property Signatures + p; + p1?; + p2?: string; + p3(); + p4? (); + p5? (): void; + p6(pa1): void; + p7(pa1, pa2): void; + p7? (pa1, pa2): void; +} + +var anyVar: any; +// +// Property signatures +// +var obj0: i1; +var obj1: i1 = { + p: null, + p3: function ():any { return 0; }, + p6: function (pa1):any { return 0; }, + p7: function (pa1, pa2):any { return 0; } +}; +var obj2: i1 = new Object(); +var obj3: i1 = new obj0; +var obj4: i1 = new Base; +var obj5: i1 = null; +var obj6: i1 = function () { }; +//var obj7: i1 = function foo() { }; +var obj8: i1 = anyVar; +var obj9: i1 = new anyVar; +var obj10: i1 = new {}; +// +// Call signatures +// +var obj11: i2; +var obj12: i2 = {}; +var obj13: i2 = new Object(); +var obj14: i2 = new obj11; +var obj15: i2 = new Base; +var obj16: i2 = null; +var obj17: i2 = function ():any { return 0; }; +//var obj18: i2 = function foo() { }; +var obj19: i2 = anyVar; +var obj20: i2 = new anyVar; +var obj21: i2 = new {}; +// +// Construct Signatures +// +var obj22: i3; +var obj23: i3 = {}; +var obj24: i3 = new Object(); +var obj25: i3 = new obj22; +var obj26: i3 = new Base; +var obj27: i3 = null; +var obj28: i3 = function () { }; +//var obj29: i3 = function foo() { }; +var obj30: i3 = anyVar; +var obj31: i3 = new anyVar; +var obj32: i3 = new {}; +// +// Index Signatures +// +var obj33: i4; +var obj34: i4 = {}; +var obj35: i4 = new Object(); +var obj36: i4 = new obj33; +var obj37: i4 = new Base; +var obj38: i4 = null; +var obj39: i4 = function () { }; +//var obj40: i4 = function foo() { }; +var obj41: i4 = anyVar; +var obj42: i4 = new anyVar; +var obj43: i4 = new {}; +// +// Interface Derived I1 +// +var obj44: i5; +var obj45: i5 = {}; +var obj46: i5 = new Object(); +var obj47: i5 = new obj44; +var obj48: i5 = new Base; +var obj49: i5 = null; +var obj50: i5 = function () { }; +//var obj51: i5 = function foo() { }; +var obj52: i5 = anyVar; +var obj53: i5 = new anyVar; +var obj54: i5 = new {}; +// +// Interface Derived I2 +// +var obj55: i6; +var obj56: i6 = {}; +var obj57: i6 = new Object(); +var obj58: i6 = new obj55; +var obj59: i6 = new Base; +var obj60: i6 = null; +var obj61: i6 = function () { }; +//var obj62: i6 = function foo() { }; +var obj63: i6 = anyVar; +var obj64: i6 = new anyVar; +var obj65: i6 = new {}; +// +// Interface Derived I3 +// +var obj66: i7; +var obj67: i7 = {}; +var obj68: i7 = new Object(); +var obj69: i7 = new obj66; +var obj70: i7 = new Base; +var obj71: i7 = null; +var obj72: i7 = function () { }; +//var obj73: i7 = function foo() { }; +var obj74: i7 = anyVar; +var obj75: i7 = new anyVar; +var obj76: i7 = new {}; +// +// Interface Derived I4 +// +var obj77: i8; +var obj78: i8 = {}; +var obj79: i8 = new Object(); +var obj80: i8 = new obj77; +var obj81: i8 = new Base; +var obj82: i8 = null; +var obj83: i8 = function () { }; +//var obj84: i8 = function foo() { }; +var obj85: i8 = anyVar; +var obj86: i8 = new anyVar; +var obj87: i8 = new {}; + +//// [intTypeCheck.js] +var Base = (function () { + function Base() { + } + Base.prototype.foo = function () { + }; + return Base; +})(); +var anyVar; +// +// Property signatures +// +var obj0; +var obj1 = { + p: null, + p3: function () { + return 0; + }, + p6: function (pa1) { + return 0; + }, + p7: function (pa1, pa2) { + return 0; + } +}; +var obj2 = new Object(); +var obj3 = new obj0; +var obj4 = new Base; +var obj5 = null; +var obj6 = function () { +}; +//var obj7: i1 = function foo() { }; +var obj8 = anyVar; +var obj9 = new < i1 > anyVar; +var obj10 = new {}; +// +// Call signatures +// +var obj11; +var obj12 = {}; +var obj13 = new Object(); +var obj14 = new obj11; +var obj15 = new Base; +var obj16 = null; +var obj17 = function () { + return 0; +}; +//var obj18: i2 = function foo() { }; +var obj19 = anyVar; +var obj20 = new < i2 > anyVar; +var obj21 = new {}; +// +// Construct Signatures +// +var obj22; +var obj23 = {}; +var obj24 = new Object(); +var obj25 = new obj22; +var obj26 = new Base; +var obj27 = null; +var obj28 = function () { +}; +//var obj29: i3 = function foo() { }; +var obj30 = anyVar; +var obj31 = new < i3 > anyVar; +var obj32 = new {}; +// +// Index Signatures +// +var obj33; +var obj34 = {}; +var obj35 = new Object(); +var obj36 = new obj33; +var obj37 = new Base; +var obj38 = null; +var obj39 = function () { +}; +//var obj40: i4 = function foo() { }; +var obj41 = anyVar; +var obj42 = new < i4 > anyVar; +var obj43 = new {}; +// +// Interface Derived I1 +// +var obj44; +var obj45 = {}; +var obj46 = new Object(); +var obj47 = new obj44; +var obj48 = new Base; +var obj49 = null; +var obj50 = function () { +}; +//var obj51: i5 = function foo() { }; +var obj52 = anyVar; +var obj53 = new < i5 > anyVar; +var obj54 = new {}; +// +// Interface Derived I2 +// +var obj55; +var obj56 = {}; +var obj57 = new Object(); +var obj58 = new obj55; +var obj59 = new Base; +var obj60 = null; +var obj61 = function () { +}; +//var obj62: i6 = function foo() { }; +var obj63 = anyVar; +var obj64 = new < i6 > anyVar; +var obj65 = new {}; +// +// Interface Derived I3 +// +var obj66; +var obj67 = {}; +var obj68 = new Object(); +var obj69 = new obj66; +var obj70 = new Base; +var obj71 = null; +var obj72 = function () { +}; +//var obj73: i7 = function foo() { }; +var obj74 = anyVar; +var obj75 = new < i7 > anyVar; +var obj76 = new {}; +// +// Interface Derived I4 +// +var obj77; +var obj78 = {}; +var obj79 = new Object(); +var obj80 = new obj77; +var obj81 = new Base; +var obj82 = null; +var obj83 = function () { +}; +//var obj84: i8 = function foo() { }; +var obj85 = anyVar; +var obj86 = new < i8 > anyVar; +var obj87 = new {}; diff --git a/tests/baselines/reference/interfaceDeclaration4.js b/tests/baselines/reference/interfaceDeclaration4.js new file mode 100644 index 00000000000..576479c2beb --- /dev/null +++ b/tests/baselines/reference/interfaceDeclaration4.js @@ -0,0 +1,73 @@ +//// [interfaceDeclaration4.ts] +// Import this module when test harness supports external modules. Also remove the internal module below. +// import Foo = require("interfaceDeclaration5") +module Foo { + export interface I1 { item: string; } + export class C1 { } +} + +class C1 implements Foo.I1 { + public item:string; +} + +// Allowed +interface I2 extends Foo.I1 { + item:string; +} + +// Negative Case +interface I3 extends Foo.I1 { + item:number; +} + +interface I4 extends Foo.I1 { + token:string; +} + +// Err - not implemented item +class C2 implements I4 { + public token: string; +} + +interface I5 extends Foo { } + +// Negative case +interface I6 extends Foo.C1 { } + +class C3 implements Foo.I1 { } + +// Negative case +interface Foo.I1 { } + + +//// [interfaceDeclaration4.js] +// Import this module when test harness supports external modules. Also remove the internal module below. +// import Foo = require("interfaceDeclaration5") +var Foo; +(function (Foo) { + var C1 = (function () { + function C1() { + } + return C1; + })(); + Foo.C1 = C1; +})(Foo || (Foo = {})); +var C1 = (function () { + function C1() { + } + return C1; +})(); +// Err - not implemented item +var C2 = (function () { + function C2() { + } + return C2; +})(); +var C3 = (function () { + function C3() { + } + return C3; +})(); +I1; +{ +} diff --git a/tests/baselines/reference/interfaceExtendingClass2.js b/tests/baselines/reference/interfaceExtendingClass2.js new file mode 100644 index 00000000000..b0958717aa8 --- /dev/null +++ b/tests/baselines/reference/interfaceExtendingClass2.js @@ -0,0 +1,34 @@ +//// [interfaceExtendingClass2.ts] +class Foo { + x: string; + y() { } + get Z() { + return 1; + } + [x: string]: Object; +} + +interface I2 extends Foo { // error + a: { + toString: () => { + return 1; + }; + } + +//// [interfaceExtendingClass2.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.y = function () { + }; + Object.defineProperty(Foo.prototype, "Z", { + get: function () { + return 1; + }, + enumerable: true, + configurable: true + }); + return Foo; +})(); +return 1; +; diff --git a/tests/baselines/reference/interfaceMayNotBeExtendedWitACall.js b/tests/baselines/reference/interfaceMayNotBeExtendedWitACall.js new file mode 100644 index 00000000000..a283722d6ad --- /dev/null +++ b/tests/baselines/reference/interfaceMayNotBeExtendedWitACall.js @@ -0,0 +1,11 @@ +//// [interfaceMayNotBeExtendedWitACall.ts] +interface color {} + +interface blue extends color() { // error + +} + + +//// [interfaceMayNotBeExtendedWitACall.js] +(function () { +}); diff --git a/tests/baselines/reference/interfaceNaming1.js b/tests/baselines/reference/interfaceNaming1.js new file mode 100644 index 00000000000..e16f186379b --- /dev/null +++ b/tests/baselines/reference/interfaceNaming1.js @@ -0,0 +1,11 @@ +//// [interfaceNaming1.ts] +interface { } +interface interface{ } +interface & { } + + +//// [interfaceNaming1.js] +interface; +{ +} +interface & {}; diff --git a/tests/baselines/reference/interfaceWithAccessibilityModifiers.js b/tests/baselines/reference/interfaceWithAccessibilityModifiers.js new file mode 100644 index 00000000000..bd29d319466 --- /dev/null +++ b/tests/baselines/reference/interfaceWithAccessibilityModifiers.js @@ -0,0 +1,9 @@ +//// [interfaceWithAccessibilityModifiers.ts] +// Errors +interface Foo { + public a: any; + private b: any; + protected c: any; +} + +//// [interfaceWithAccessibilityModifiers.js] diff --git a/tests/baselines/reference/interfaceWithPrivateMember.js b/tests/baselines/reference/interfaceWithPrivateMember.js new file mode 100644 index 00000000000..24c2cf9ecf5 --- /dev/null +++ b/tests/baselines/reference/interfaceWithPrivateMember.js @@ -0,0 +1,19 @@ +//// [interfaceWithPrivateMember.ts] +// interfaces do not permit private members, these are errors + +interface I { + private x: string; +} + +interface I2 { + private y: T; +} + +var x: { + private y: string; +} + +//// [interfaceWithPrivateMember.js] +// interfaces do not permit private members, these are errors +var x; +y: string; diff --git a/tests/baselines/reference/interfacesWithPredefinedTypesAsNames.js b/tests/baselines/reference/interfacesWithPredefinedTypesAsNames.js new file mode 100644 index 00000000000..b79dfc12a04 --- /dev/null +++ b/tests/baselines/reference/interfacesWithPredefinedTypesAsNames.js @@ -0,0 +1,9 @@ +//// [interfacesWithPredefinedTypesAsNames.ts] +interface any { } +interface number { } +interface string { } +interface boolean { } +interface void {} + +//// [interfacesWithPredefinedTypesAsNames.js] +void {}; diff --git a/tests/baselines/reference/invalidBinaryIntegerLiteralAndOctalIntegerLiteral.js b/tests/baselines/reference/invalidBinaryIntegerLiteralAndOctalIntegerLiteral.js new file mode 100644 index 00000000000..a46af16763d --- /dev/null +++ b/tests/baselines/reference/invalidBinaryIntegerLiteralAndOctalIntegerLiteral.js @@ -0,0 +1,17 @@ +//// [invalidBinaryIntegerLiteralAndOctalIntegerLiteral.ts] +// Error +var binary = 0b21010; +var binary1 = 0B21010; +var octal = 0o81010; +var octal = 0O91010; + +//// [invalidBinaryIntegerLiteralAndOctalIntegerLiteral.js] +// Error +var binary = 0; +21010; +var binary1 = 0; +21010; +var octal = 0; +81010; +var octal = 0; +91010; diff --git a/tests/baselines/reference/invalidReferenceSyntax1.js b/tests/baselines/reference/invalidReferenceSyntax1.js new file mode 100644 index 00000000000..39ecf8e6ab4 --- /dev/null +++ b/tests/baselines/reference/invalidReferenceSyntax1.js @@ -0,0 +1,13 @@ +//// [invalidReferenceSyntax1.ts] +/// +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/invalidThrowStatement.js b/tests/baselines/reference/invalidThrowStatement.js new file mode 100644 index 00000000000..4b794ab3d51 --- /dev/null +++ b/tests/baselines/reference/invalidThrowStatement.js @@ -0,0 +1,9 @@ +//// [invalidThrowStatement.ts] +throw; + +export throw null; + + +//// [invalidThrowStatement.js] +throw ; +throw null; diff --git a/tests/baselines/reference/invalidTripleSlashReference.js b/tests/baselines/reference/invalidTripleSlashReference.js new file mode 100644 index 00000000000..c0dcec0d23c --- /dev/null +++ b/tests/baselines/reference/invalidTripleSlashReference.js @@ -0,0 +1,12 @@ +//// [invalidTripleSlashReference.ts] +/// +/// + +// this test doesn't actually give the errors you want due to the way the compiler reports errors +var x = 1; + +//// [invalidTripleSlashReference.js] +/// +/// +// this test doesn't actually give the errors you want due to the way the compiler reports errors +var x = 1; diff --git a/tests/baselines/reference/invalidTryStatements2.js b/tests/baselines/reference/invalidTryStatements2.js new file mode 100644 index 00000000000..d2ef92ac831 --- /dev/null +++ b/tests/baselines/reference/invalidTryStatements2.js @@ -0,0 +1,68 @@ +//// [invalidTryStatements2.ts] +function fn() { + try { + } catch { // syntax error, missing '(x)' + } + + catch(x) { } // error missing try + + finally{ } // potential error; can be absorbed by the 'catch' +} + +function fn2() { + finally { } // error missing try + catch (x) { } // error missing try + + // no error + try { + } + finally { + } + + // error missing try + finally { + } + + // error missing try + catch (x) { + } +} + +//// [invalidTryStatements2.js] +function fn() { + try { + } + catch () { + } + try { + } + catch (x) { + } // error missing try + finally { + } // potential error; can be absorbed by the 'catch' +} +function fn2() { + try { + } + finally { + } // error missing try + try { + } // error missing try + catch (x) { + } // error missing try + // no error + try { + } + finally { + } + // error missing try + try { + } + finally { + } + // error missing try + try { + } + catch (x) { + } +} diff --git a/tests/baselines/reference/invalidTypeOfTarget.js b/tests/baselines/reference/invalidTypeOfTarget.js new file mode 100644 index 00000000000..88128d15e85 --- /dev/null +++ b/tests/baselines/reference/invalidTypeOfTarget.js @@ -0,0 +1,20 @@ +//// [invalidTypeOfTarget.ts] +var x1: typeof {}; +var x2: typeof (): void; +var x3: typeof 1; +var x4: typeof ''; +var x5: typeof []; +var x6: typeof null; +var x7: typeof function f() { }; +var x8: typeof /123/; + +//// [invalidTypeOfTarget.js] +var x1 = {}; +var x2 = ; +var x3 = 1; +var x4 = ''; +var x5; +var x6 = null; +var x7 = function f() { +}; +var x8 = /123/; diff --git a/tests/baselines/reference/invalidUnicodeEscapeSequance.js b/tests/baselines/reference/invalidUnicodeEscapeSequance.js new file mode 100644 index 00000000000..06c7af443e0 --- /dev/null +++ b/tests/baselines/reference/invalidUnicodeEscapeSequance.js @@ -0,0 +1,5 @@ +//// [invalidUnicodeEscapeSequance.ts] +var arg\u003 + +//// [invalidUnicodeEscapeSequance.js] +var arg, u003; diff --git a/tests/baselines/reference/invalidUnicodeEscapeSequance2.js b/tests/baselines/reference/invalidUnicodeEscapeSequance2.js new file mode 100644 index 00000000000..06714db3f7e --- /dev/null +++ b/tests/baselines/reference/invalidUnicodeEscapeSequance2.js @@ -0,0 +1,5 @@ +//// [invalidUnicodeEscapeSequance2.ts] +var arg\uxxxx + +//// [invalidUnicodeEscapeSequance2.js] +var arg, uxxxx; diff --git a/tests/baselines/reference/invalidUnicodeEscapeSequance3.js b/tests/baselines/reference/invalidUnicodeEscapeSequance3.js new file mode 100644 index 00000000000..b6b0307bbe6 --- /dev/null +++ b/tests/baselines/reference/invalidUnicodeEscapeSequance3.js @@ -0,0 +1,6 @@ +//// [invalidUnicodeEscapeSequance3.ts] +a\u + +//// [invalidUnicodeEscapeSequance3.js] +a; +u; diff --git a/tests/baselines/reference/invalidUnicodeEscapeSequance4.js b/tests/baselines/reference/invalidUnicodeEscapeSequance4.js new file mode 100644 index 00000000000..014ebb6eead --- /dev/null +++ b/tests/baselines/reference/invalidUnicodeEscapeSequance4.js @@ -0,0 +1,7 @@ +//// [invalidUnicodeEscapeSequance4.ts] +var a\u0031; // a1 is a valid identifier +var \u0031a; // 1a is an invalid identifier + +//// [invalidUnicodeEscapeSequance4.js] +var a\u0031; // a1 is a valid identifier +var u0031a; // 1a is an invalid identifier diff --git a/tests/baselines/reference/letAsIdentifierInStrictMode.js b/tests/baselines/reference/letAsIdentifierInStrictMode.js new file mode 100644 index 00000000000..e844bc1d1dc --- /dev/null +++ b/tests/baselines/reference/letAsIdentifierInStrictMode.js @@ -0,0 +1,17 @@ +//// [letAsIdentifierInStrictMode.ts] +"use strict"; +var let = 10; +var a = 10; +let = 30; +let +a; + +//// [letAsIdentifierInStrictMode.js] +"use strict"; +var ; +let ; +10; +var a = 10; +let ; +30; +let a; diff --git a/tests/baselines/reference/logicalNotOperatorInvalidOperations.js b/tests/baselines/reference/logicalNotOperatorInvalidOperations.js new file mode 100644 index 00000000000..7b16f2ef36f --- /dev/null +++ b/tests/baselines/reference/logicalNotOperatorInvalidOperations.js @@ -0,0 +1,23 @@ +//// [logicalNotOperatorInvalidOperations.ts] +// Unary operator ! +var b: number; + +// operand before ! +var BOOLEAN1 = b!; //expect error + +// miss parentheses +var BOOLEAN2 = !b + b; + +// miss an operand +var BOOLEAN3 =!; + +//// [logicalNotOperatorInvalidOperations.js] +// Unary operator ! +var b; +// operand before ! +var BOOLEAN1 = b; +!; //expect error +// miss parentheses +var BOOLEAN2 = !b + b; +// miss an operand +var BOOLEAN3 = !; diff --git a/tests/baselines/reference/mergedModuleDeclarationCodeGen.js b/tests/baselines/reference/mergedModuleDeclarationCodeGen.js new file mode 100644 index 00000000000..88b949dd920 --- /dev/null +++ b/tests/baselines/reference/mergedModuleDeclarationCodeGen.js @@ -0,0 +1,42 @@ +//// [mergedModuleDeclarationCodeGen.ts] +export module X { + export module Y { + class A { + constructor(Y: any) { + new B(); + } + } + } +} +export module X { + export module Y { + export class B { + } + } +} + +//// [mergedModuleDeclarationCodeGen.js] +var X; +(function (X) { + var Y; + (function (_Y) { + var A = (function () { + function A(Y) { + new _Y.B(); + } + return A; + })(); + })(Y = X.Y || (X.Y = {})); +})(X = exports.X || (exports.X = {})); +var X; +(function (X) { + var Y; + (function (Y) { + var B = (function () { + function B() { + } + return B; + })(); + Y.B = B; + })(Y = X.Y || (X.Y = {})); +})(X = exports.X || (exports.X = {})); diff --git a/tests/baselines/reference/moduleKeywordRepeatError.js b/tests/baselines/reference/moduleKeywordRepeatError.js new file mode 100644 index 00000000000..8ec656f22ae --- /dev/null +++ b/tests/baselines/reference/moduleKeywordRepeatError.js @@ -0,0 +1,10 @@ +//// [moduleKeywordRepeatError.ts] +// "module.module { }" should raise a syntax error + +module.module { } + +//// [moduleKeywordRepeatError.js] +// "module.module { }" should raise a syntax error +module.module; +{ +} diff --git a/tests/baselines/reference/moduleProperty1.js b/tests/baselines/reference/moduleProperty1.js new file mode 100644 index 00000000000..3848203a66f --- /dev/null +++ b/tests/baselines/reference/moduleProperty1.js @@ -0,0 +1,26 @@ +//// [moduleProperty1.ts] +module M { + var x=10; // variable local to this module body + var y=x; // property visible only in module + export var z=y; // property visible to any code +} + +module M2 { + var x = 10; // variable local to this module body + private y = x; // can't use private in modules + export var z = y; // property visible to any code +} + +//// [moduleProperty1.js] +var M; +(function (M) { + var x = 10; // variable local to this module body + var y = x; // property visible only in module + M.z = y; // property visible to any code +})(M || (M = {})); +var M2; +(function (M2) { + var x = 10; // variable local to this module body + y = x; // can't use private in modules + M2.z = y; // property visible to any code +})(M2 || (M2 = {})); diff --git a/tests/baselines/reference/moduleScoping.js b/tests/baselines/reference/moduleScoping.js new file mode 100644 index 00000000000..cbe435e570c --- /dev/null +++ b/tests/baselines/reference/moduleScoping.js @@ -0,0 +1,40 @@ +//// [tests/cases/conformance/externalModules/moduleScoping.ts] //// + +//// [file1.ts] +var v1 = "sausages"; // Global scope + +//// [file2.ts] +var v2 = 42; // Global scope +var v4 = () => 5; + +//// [file3.ts] +export var v3 = true; +var v2 = [1,2,3]; // Module scope. Should not appear in global scope + +//// [file4.ts] +import file3 = require('./file3'); +var t1 = v1; +var t2 = v2; +var t3 = file3.v3; +var v4 = {a: true, b: NaN}; // Should shadow global v2 in this module + +//// [file5.ts] +var x = v2; // Should be global v2 of type number again + + +//// [file1.js] +var v1 = "sausages"; // Global scope +//// [file2.js] +var v2 = 42; // Global scope +var v4 = function () { return 5; }; +//// [file3.js] +exports.v3 = true; +var v2 = [1, 2, 3]; // Module scope. Should not appear in global scope +//// [file4.js] +var file3 = require('./file3'); +var t1 = v1; +var t2 = v2; +var t3 = file3.v3; +var v4 = { a: true, b: NaN }; // Should shadow global v2 in this module +//// [file5.js] +var x = v2; // Should be global v2 of type number again diff --git a/tests/baselines/reference/negateOperatorInvalidOperations.js b/tests/baselines/reference/negateOperatorInvalidOperations.js new file mode 100644 index 00000000000..d7aa6154eb2 --- /dev/null +++ b/tests/baselines/reference/negateOperatorInvalidOperations.js @@ -0,0 +1,25 @@ +//// [negateOperatorInvalidOperations.ts] +// Unary operator - + +// operand before - +var NUMBER1 = var NUMBER-; //expect error + +// invalid expressions +var NUMBER2 = -(null - undefined); +var NUMBER3 = -(null - null); +var NUMBER4 = -(undefined - undefined); + +// miss operand +var NUMBER =-; + +//// [negateOperatorInvalidOperations.js] +// Unary operator - +// operand before - +var NUMBER1 = ; +var NUMBER = -; //expect error +// invalid expressions +var NUMBER2 = -(null - undefined); +var NUMBER3 = -(null - null); +var NUMBER4 = -(undefined - undefined); +// miss operand +var NUMBER = -; diff --git a/tests/baselines/reference/nestedClassDeclaration.js b/tests/baselines/reference/nestedClassDeclaration.js new file mode 100644 index 00000000000..c7f0ffe34fc --- /dev/null +++ b/tests/baselines/reference/nestedClassDeclaration.js @@ -0,0 +1,42 @@ +//// [nestedClassDeclaration.ts] +// nested classes are not allowed + +class C { + x: string; + class C2 { + } +} + +function foo() { + class C3 { + } +} + +var x = { + class C4 { + } +} + + +//// [nestedClassDeclaration.js] +// nested classes are not allowed +var C = (function () { + function C() { + } + return C; +})(); +var C2 = (function () { + function C2() { + } + return C2; +})(); +function foo() { +} +var C3 = (function () { + function C3() { + } + return C3; +})(); +var x = { + class: C4 +}, _a = void 0; diff --git a/tests/baselines/reference/newExpressionWithCast.js b/tests/baselines/reference/newExpressionWithCast.js new file mode 100644 index 00000000000..6ce025a4267 --- /dev/null +++ b/tests/baselines/reference/newExpressionWithCast.js @@ -0,0 +1,29 @@ +//// [newExpressionWithCast.ts] + +function Test() { } +// valid but error with noImplicitAny +var test = new Test(); + +function Test2() { } +// parse error +var test2 = new Test2(); + +function Test3() { } +// valid with noImplicitAny +var test3 = new (Test3)(); + + + +//// [newExpressionWithCast.js] +function Test() { +} +// valid but error with noImplicitAny +var test = new Test(); +function Test2() { +} +// parse error +var test2 = new < any > Test2(); +function Test3() { +} +// valid with noImplicitAny +var test3 = new Test3(); diff --git a/tests/baselines/reference/newMissingIdentifier.js b/tests/baselines/reference/newMissingIdentifier.js new file mode 100644 index 00000000000..0b19a8d187b --- /dev/null +++ b/tests/baselines/reference/newMissingIdentifier.js @@ -0,0 +1,6 @@ +//// [newMissingIdentifier.ts] +var x = new (); + + +//// [newMissingIdentifier.js] +var x = new (); diff --git a/tests/baselines/reference/newOperatorErrorCases.js b/tests/baselines/reference/newOperatorErrorCases.js new file mode 100644 index 00000000000..8a44d51fb5c --- /dev/null +++ b/tests/baselines/reference/newOperatorErrorCases.js @@ -0,0 +1,71 @@ +//// [newOperatorErrorCases.ts] + +class C0 { + +} +class C1 { + constructor(n: number, s: string) { } +} + +class T { + constructor(n?: T) { } +} + +var anyCtor: { + new (): any; +}; + +var anyCtor1: { + new (n): any; +}; + +interface nestedCtor { + new (): nestedCtor; +} +var nestedCtor: nestedCtor; + +// Construct expression with no parentheses for construct signature with > 0 parameters +var b = new C0 32, ''; // Parse error + +// Generic construct expression with no parentheses +var c1 = new T; +var c1: T<{}>; +var c2 = new T; // Parse error + + +// Construct expression of non-void returning function +function fnNumber(): number { return 32; } +var s = new fnNumber(); // Error + + +//// [newOperatorErrorCases.js] +var C0 = (function () { + function C0() { + } + return C0; +})(); +var C1 = (function () { + function C1(n, s) { + } + return C1; +})(); +var T = (function () { + function T(n) { + } + return T; +})(); +var anyCtor; +var anyCtor1; +var nestedCtor; +// Construct expression with no parentheses for construct signature with > 0 parameters +var b = new C0; +32, ''; // Parse error +// Generic construct expression with no parentheses +var c1 = new T; +var c1; +var c2 = new T(); // Parse error +// Construct expression of non-void returning function +function fnNumber() { + return 32; +} +var s = new fnNumber(); // Error diff --git a/tests/baselines/reference/numLit.js b/tests/baselines/reference/numLit.js new file mode 100644 index 00000000000..aaec91cde5d --- /dev/null +++ b/tests/baselines/reference/numLit.js @@ -0,0 +1,12 @@ +//// [numLit.ts] +1..toString(); +1.0.toString(); +1.toString(); +1.+2.0 + 3. ; + +//// [numLit.js] +1..toString(); +1.0.toString(); +1.; +toString(); +1. + 2.0 + 3.; diff --git a/tests/baselines/reference/numericNamedPropertyDuplicates.js b/tests/baselines/reference/numericNamedPropertyDuplicates.js new file mode 100644 index 00000000000..e4340d629ea --- /dev/null +++ b/tests/baselines/reference/numericNamedPropertyDuplicates.js @@ -0,0 +1,34 @@ +//// [numericNamedPropertyDuplicates.ts] +class C { + 1: number; + 1.0: number; + static 2: number; + static 2: number; +} + +interface I { + 2: number; + 2.: number; +} + +var a: { + 1: number; + 1: number; +} + +var b = { + 2: 1 + 2: 1 +} + +//// [numericNamedPropertyDuplicates.js] +var C = (function () { + function C() { + } + return C; +})(); +var a; +var b = { + 2: 1, + 2: 1 +}; diff --git a/tests/baselines/reference/objectCreationExpressionInFunctionParameter.js b/tests/baselines/reference/objectCreationExpressionInFunctionParameter.js new file mode 100644 index 00000000000..55ac0c530e6 --- /dev/null +++ b/tests/baselines/reference/objectCreationExpressionInFunctionParameter.js @@ -0,0 +1,18 @@ +//// [objectCreationExpressionInFunctionParameter.ts] +class A { + constructor(public a1: string) { + } +} +function foo(x = new A(123)) { //should error, 123 is not string +}} + +//// [objectCreationExpressionInFunctionParameter.js] +var A = (function () { + function A(a1) { + this.a1 = a1; + } + return A; +})(); +function foo(x) { + if (x === void 0) { x = new A(123); } +} diff --git a/tests/baselines/reference/objectLitArrayDeclNoNew.js b/tests/baselines/reference/objectLitArrayDeclNoNew.js new file mode 100644 index 00000000000..a52ff55fc4d --- /dev/null +++ b/tests/baselines/reference/objectLitArrayDeclNoNew.js @@ -0,0 +1,49 @@ +//// [objectLitArrayDeclNoNew.ts] +declare var console; +"use strict"; +module Test { + export interface IState { + } + + export interface IToken { + } + + export interface ILineTokens { + tokens: IToken[]; + endState: IState; + } + + export class Gar { + public moo: number = 0; + } + + export function bug(): ILineTokens { + var state:IState= null; + return { + tokens: Gar[],//IToken[], // Missing new. Correct syntax is: tokens: new IToken[] + endState: state + }; + } + } +} + +//// [objectLitArrayDeclNoNew.js] +"use strict"; +var Test; +(function (Test) { + var Gar = (function () { + function Gar() { + this.moo = 0; + } + return Gar; + })(); + Test.Gar = Gar; + function bug() { + var state = null; + return { + tokens: Gar[], + endState: state + }; + } + Test.bug = bug; +})(Test || (Test = {})); diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesAssignmentError.js b/tests/baselines/reference/objectLiteralShorthandPropertiesAssignmentError.js new file mode 100644 index 00000000000..84a5a9342d0 --- /dev/null +++ b/tests/baselines/reference/objectLiteralShorthandPropertiesAssignmentError.js @@ -0,0 +1,24 @@ +//// [objectLiteralShorthandPropertiesAssignmentError.ts] +var id: number = 10000; +var name: string = "my name"; + +var person: { b: string; id: number } = { name, id }; // error +var person1: { name, id }; // error: can't use short-hand property assignment in type position +function foo(name: string, id: number): { id: string, name: number } { return { name, id }; } // error +function bar(obj: { name: string; id: boolean }) { } +bar({ name, id }); // error + + + +//// [objectLiteralShorthandPropertiesAssignmentError.js] +var id = 10000; +var name = "my name"; +var person = { name: name, id: id }; // error +var person1 = name, id; +; // error: can't use short-hand property assignment in type position +function foo(name, id) { + return { name: name, id: id }; +} // error +function bar(obj) { +} +bar({ name: name, id: id }); // error diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesAssignmentErrorFromMissingIdentifier.js b/tests/baselines/reference/objectLiteralShorthandPropertiesAssignmentErrorFromMissingIdentifier.js new file mode 100644 index 00000000000..b008644116b --- /dev/null +++ b/tests/baselines/reference/objectLiteralShorthandPropertiesAssignmentErrorFromMissingIdentifier.js @@ -0,0 +1,23 @@ +//// [objectLiteralShorthandPropertiesAssignmentErrorFromMissingIdentifier.ts] +var id: number = 10000; +var name: string = "my name"; + +var person: { b: string; id: number } = { name, id }; // error +function bar(name: string, id: number): { name: number, id: string } { return { name, id }; } // error +function foo(name: string, id: number): { name: string, id: number } { return { name, id }; } // error +var person1: { name, id }; // error : Can't use shorthand in the type position +var person2: { name: string, id: number } = bar("hello", 5); + +//// [objectLiteralShorthandPropertiesAssignmentErrorFromMissingIdentifier.js] +var id = 10000; +var name = "my name"; +var person = { name: name, id: id }; // error +function bar(name, id) { + return { name: name, id: id }; +} // error +function foo(name, id) { + return { name: name, id: id }; +} // error +var person1 = name, id; +; // error : Can't use shorthand in the type position +var person2 = bar("hello", 5); diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js b/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js new file mode 100644 index 00000000000..79e7882796f --- /dev/null +++ b/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js @@ -0,0 +1,43 @@ +//// [objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts] +// errors +var y = { + "stringLiteral", + 42, + get e, + set f, + this, + super, + var, + class, + typeof +}; + +var x = { + a.b, + a["ss"], + a[1], +}; + +var v = { class }; // error + +//// [objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js] +// errors +var y = { + "stringLiteral": , + 42: , + get e() { + }, + set f() { + }, + this: , + super: , + var: , + class: , + typeof: +}; +var x = { + a: .b, + a: ["ss"], + a: [1] +}; +var v = { class: }; // error diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesErrorWithModule.js b/tests/baselines/reference/objectLiteralShorthandPropertiesErrorWithModule.js new file mode 100644 index 00000000000..010afbc4b9e --- /dev/null +++ b/tests/baselines/reference/objectLiteralShorthandPropertiesErrorWithModule.js @@ -0,0 +1,32 @@ +//// [objectLiteralShorthandPropertiesErrorWithModule.ts] +// module export +var x = "Foo"; +module m { + export var x; +} + +module n { + var z = 10000; + export var y = { + m.x // error + }; +} + +m.y.x; + + +//// [objectLiteralShorthandPropertiesErrorWithModule.js] +// module export +var x = "Foo"; +var m; +(function (m) { + m.x; +})(m || (m = {})); +var n; +(function (n) { + var z = 10000; + n.y = { + m: .x // error + }; +})(n || (n = {})); +m.y.x; diff --git a/tests/baselines/reference/objectTypeLiteralSyntax2.js b/tests/baselines/reference/objectTypeLiteralSyntax2.js new file mode 100644 index 00000000000..c0da0ed83d6 --- /dev/null +++ b/tests/baselines/reference/objectTypeLiteralSyntax2.js @@ -0,0 +1,19 @@ +//// [objectTypeLiteralSyntax2.ts] +var x: { + foo: string, + bar: string +} + +// ASI makes this work +var y: { + foo: string + bar: string +} + +var z: { foo: string bar: string } + +//// [objectTypeLiteralSyntax2.js] +var x; +// ASI makes this work +var y; +var z; diff --git a/tests/baselines/reference/objectTypesWithOptionalProperties2.js b/tests/baselines/reference/objectTypesWithOptionalProperties2.js new file mode 100644 index 00000000000..3faa10447b6 --- /dev/null +++ b/tests/baselines/reference/objectTypesWithOptionalProperties2.js @@ -0,0 +1,48 @@ +//// [objectTypesWithOptionalProperties2.ts] +// Illegal attempts to define optional methods + +var a: { + x()?: number; // error +} + +interface I { + x()?: number; // error +} + +class C { + x()?: number; // error +} + +interface I2 { + x()?: T; // error +} + +class C2 { + x()?: T; // error +} + + +var b = { + x()?: 1 // error +} + +//// [objectTypesWithOptionalProperties2.js] +// Illegal attempts to define optional methods +var a; +var C = (function () { + function C() { + } + C.prototype.x = ; + return C; +})(); +var C2 = (function () { + function C2() { + } + C2.prototype.x = ; + return C2; +})(); +var b = { + x: function () { + }, + 1: // error +}; diff --git a/tests/baselines/reference/objectTypesWithPredefinedTypesAsName2.js b/tests/baselines/reference/objectTypesWithPredefinedTypesAsName2.js new file mode 100644 index 00000000000..b47901b2f0c --- /dev/null +++ b/tests/baselines/reference/objectTypesWithPredefinedTypesAsName2.js @@ -0,0 +1,13 @@ +//// [objectTypesWithPredefinedTypesAsName2.ts] +// it is an error to use a predefined type as a type name + +class void {} // parse error unlike the others + +//// [objectTypesWithPredefinedTypesAsName2.js] +// it is an error to use a predefined type as a type name +var = (function () { + function () { + } + return ; +})(); +void {}; // parse error unlike the others diff --git a/tests/baselines/reference/octalIntegerLiteralError.js b/tests/baselines/reference/octalIntegerLiteralError.js new file mode 100644 index 00000000000..068978d2657 --- /dev/null +++ b/tests/baselines/reference/octalIntegerLiteralError.js @@ -0,0 +1,23 @@ +//// [octalIntegerLiteralError.ts] +// error +var oct1 = 0O13334823; +var oct2 = 0o34318592; + +var obj1 = { + 0O45436: "hi", + 19230: "Hello", + "19230": "world", +}; + + +//// [octalIntegerLiteralError.js] +// error +var oct1 = 5852; +823; +var oct2 = 1817; +8592; +var obj1 = { + 19230: "hi", + 19230: "Hello", + "19230": "world" +}; diff --git a/tests/baselines/reference/optionalPropertiesSyntax.js b/tests/baselines/reference/optionalPropertiesSyntax.js new file mode 100644 index 00000000000..21a572757ec --- /dev/null +++ b/tests/baselines/reference/optionalPropertiesSyntax.js @@ -0,0 +1,38 @@ +//// [optionalPropertiesSyntax.ts] +interface fnSigs { + //functions signatures can be optional + fn(): void; + fn?(): void; //err + fn2?(): void; +} + +interface callSig { + //Call signatures can't be optional + (): any; + ()?: any; //err + ?(): any; //err +} + +interface constructSig { + //Construct signatures can't be optional + new (): any; + new ()?: any; //err + new ?(): any; //err +} + +interface propertySig { + //Property signatures can be optional + prop: any; + prop?: any; + prop2?: any; +} + +interface indexSig { + //Index signatures can't be optional + [idx: number]: any; + [idx: number]?: any; //err + ? [idx: number]: any; //err + [idx?: number]: any; //err +} + +//// [optionalPropertiesSyntax.js] diff --git a/tests/baselines/reference/overloadOnConstAsTypeAnnotation.js b/tests/baselines/reference/overloadOnConstAsTypeAnnotation.js new file mode 100644 index 00000000000..48e52ba0967 --- /dev/null +++ b/tests/baselines/reference/overloadOnConstAsTypeAnnotation.js @@ -0,0 +1,9 @@ +//// [overloadOnConstAsTypeAnnotation.ts] +var f: (x: 'hi') => number = ('hi') => { return 1; }; + +//// [overloadOnConstAsTypeAnnotation.js] +var f = ('hi'); +{ + return 1; +} +; diff --git a/tests/baselines/reference/overloadingStaticFunctionsInFunctions.js b/tests/baselines/reference/overloadingStaticFunctionsInFunctions.js new file mode 100644 index 00000000000..7e926a6250a --- /dev/null +++ b/tests/baselines/reference/overloadingStaticFunctionsInFunctions.js @@ -0,0 +1,15 @@ +//// [overloadingStaticFunctionsInFunctions.ts] +function boo { + static test() + static test(name:string) + static test(name?:any){ } +} + +//// [overloadingStaticFunctionsInFunctions.js] +function boo() { + test(); + test(name, string); + test(name ? : any); + { + } +} diff --git a/tests/baselines/reference/parse1.js b/tests/baselines/reference/parse1.js new file mode 100644 index 00000000000..08af81bda17 --- /dev/null +++ b/tests/baselines/reference/parse1.js @@ -0,0 +1,12 @@ +//// [parse1.ts] +var bar = 42; +function foo() { + bar. +} + + +//// [parse1.js] +var bar = 42; +function foo() { + bar.; +} diff --git a/tests/baselines/reference/parse2.js b/tests/baselines/reference/parse2.js new file mode 100644 index 00000000000..69bc1e9e5e4 --- /dev/null +++ b/tests/baselines/reference/parse2.js @@ -0,0 +1,9 @@ +//// [parse2.ts] +function foo() { + foo( +} + +//// [parse2.js] +function foo() { + foo(); +} diff --git a/tests/baselines/reference/parseErrorInHeritageClause1.js b/tests/baselines/reference/parseErrorInHeritageClause1.js new file mode 100644 index 00000000000..d08a4920171 --- /dev/null +++ b/tests/baselines/reference/parseErrorInHeritageClause1.js @@ -0,0 +1,18 @@ +//// [parseErrorInHeritageClause1.ts] +class C extends A # { +} + +//// [parseErrorInHeritageClause1.js] +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 C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +})(A); diff --git a/tests/baselines/reference/parseIncompleteBinaryExpression1.js b/tests/baselines/reference/parseIncompleteBinaryExpression1.js new file mode 100644 index 00000000000..f136e318ae4 --- /dev/null +++ b/tests/baselines/reference/parseIncompleteBinaryExpression1.js @@ -0,0 +1,5 @@ +//// [parseIncompleteBinaryExpression1.ts] +var v = || b; + +//// [parseIncompleteBinaryExpression1.js] +var v = || b; diff --git a/tests/baselines/reference/parser0_004152.js b/tests/baselines/reference/parser0_004152.js new file mode 100644 index 00000000000..cce49f68fcc --- /dev/null +++ b/tests/baselines/reference/parser0_004152.js @@ -0,0 +1,14 @@ +//// [parser0_004152.ts] +export class Game { + private position = new DisplayPosition([), 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0], NoMove, 0); + private prevConfig: SeedCoords[][]; +} + +//// [parser0_004152.js] +var Game = (function () { + function Game() { + this.position = new DisplayPosition([]); + } + return Game; +})(); +exports.Game = Game; diff --git a/tests/baselines/reference/parser10.1.1-8gs.js b/tests/baselines/reference/parser10.1.1-8gs.js new file mode 100644 index 00000000000..85227fab116 --- /dev/null +++ b/tests/baselines/reference/parser10.1.1-8gs.js @@ -0,0 +1,37 @@ +//// [parser10.1.1-8gs.ts] +/// 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 ch10/10.1/10.1.1/10.1.1-8gs.js + * @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears twice in the code + * @noStrict + * @negative ^((?!NotEarlyError).)*$ + */ + +"use strict"; +"use strict"; +throw NotEarlyError; +var public = 1; + + +//// [parser10.1.1-8gs.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 ch10/10.1/10.1.1/10.1.1-8gs.js + * @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears twice in the code + * @noStrict + * @negative ^((?!NotEarlyError).)*$ + */ +"use strict"; +"use strict"; +throw NotEarlyError; +var ; +1; diff --git a/tests/baselines/reference/parser509546.js b/tests/baselines/reference/parser509546.js new file mode 100644 index 00000000000..5524a4d606f --- /dev/null +++ b/tests/baselines/reference/parser509546.js @@ -0,0 +1,13 @@ +//// [parser509546.ts] +export class Logger { + public +} + + +//// [parser509546.js] +var Logger = (function () { + function Logger() { + } + return Logger; +})(); +exports.Logger = Logger; diff --git a/tests/baselines/reference/parser509546_1.js b/tests/baselines/reference/parser509546_1.js new file mode 100644 index 00000000000..d0e32feb1ca --- /dev/null +++ b/tests/baselines/reference/parser509546_1.js @@ -0,0 +1,13 @@ +//// [parser509546_1.ts] +export class Logger { + public +} + + +//// [parser509546_1.js] +var Logger = (function () { + function Logger() { + } + return Logger; +})(); +exports.Logger = Logger; diff --git a/tests/baselines/reference/parser509546_2.js b/tests/baselines/reference/parser509546_2.js new file mode 100644 index 00000000000..976bbd1e471 --- /dev/null +++ b/tests/baselines/reference/parser509546_2.js @@ -0,0 +1,16 @@ +//// [parser509546_2.ts] +"use strict"; + +export class Logger { + public +} + + +//// [parser509546_2.js] +"use strict"; +var Logger = (function () { + function Logger() { + } + return Logger; +})(); +exports.Logger = Logger; diff --git a/tests/baselines/reference/parser509630.js b/tests/baselines/reference/parser509630.js new file mode 100644 index 00000000000..0d5a96884f3 --- /dev/null +++ b/tests/baselines/reference/parser509630.js @@ -0,0 +1,28 @@ +//// [parser509630.ts] +class Type { + public examples = [ // typing here +} +class Any extends Type { +} + + +//// [parser509630.js] +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 Type = (function () { + function Type() { + this.examples = []; // typing here + } + return Type; +})(); +var Any = (function (_super) { + __extends(Any, _super); + function Any() { + _super.apply(this, arguments); + } + return Any; +})(Type); diff --git a/tests/baselines/reference/parser509667.js b/tests/baselines/reference/parser509667.js new file mode 100644 index 00000000000..21e0bc55ce4 --- /dev/null +++ b/tests/baselines/reference/parser509667.js @@ -0,0 +1,27 @@ +//// [parser509667.ts] +class Foo { + f1() { + if (this. + } + + f2() { + } + + f3() { + } +} + +//// [parser509667.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.f1 = function () { + if (this.) + ; + }; + Foo.prototype.f2 = function () { + }; + Foo.prototype.f3 = function () { + }; + return Foo; +})(); diff --git a/tests/baselines/reference/parser509668.js b/tests/baselines/reference/parser509668.js new file mode 100644 index 00000000000..63c5d8a1a95 --- /dev/null +++ b/tests/baselines/reference/parser509668.js @@ -0,0 +1,17 @@ +//// [parser509668.ts] +class Foo3 { + // Doesn't work, but should + constructor (public ...args: string[]) { } +} + +//// [parser509668.js] +var Foo3 = (function () { + // Doesn't work, but should + function Foo3(public) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + } + return Foo3; +})(); diff --git a/tests/baselines/reference/parser509669.js b/tests/baselines/reference/parser509669.js new file mode 100644 index 00000000000..e4ce2b90312 --- /dev/null +++ b/tests/baselines/reference/parser509669.js @@ -0,0 +1,10 @@ +//// [parser509669.ts] +function foo():any { + return ():void {}; +} + +//// [parser509669.js] +function foo() { + return function () { + }; +} diff --git a/tests/baselines/reference/parser512084.js b/tests/baselines/reference/parser512084.js new file mode 100644 index 00000000000..967c8db3cb0 --- /dev/null +++ b/tests/baselines/reference/parser512084.js @@ -0,0 +1,10 @@ +//// [parser512084.ts] +class foo { + + +//// [parser512084.js] +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/parser512097.js b/tests/baselines/reference/parser512097.js new file mode 100644 index 00000000000..f507b86ccd7 --- /dev/null +++ b/tests/baselines/reference/parser512097.js @@ -0,0 +1,10 @@ +//// [parser512097.ts] +var tt = { aa; } // After this point, no useful parsing occurs in the entire file + +if (true) { +} + +//// [parser512097.js] +var tt = { aa: }; +if (true) { +} diff --git a/tests/baselines/reference/parser512325.js b/tests/baselines/reference/parser512325.js new file mode 100644 index 00000000000..14cbcddd86b --- /dev/null +++ b/tests/baselines/reference/parser512325.js @@ -0,0 +1,6 @@ +//// [parser512325.ts] +var tt = (a, (b, c)) => a+b+c; + +//// [parser512325.js] +var tt = (a, (b, c)); +a + b + c; diff --git a/tests/baselines/reference/parser519458.js b/tests/baselines/reference/parser519458.js new file mode 100644 index 00000000000..3c294d593ff --- /dev/null +++ b/tests/baselines/reference/parser519458.js @@ -0,0 +1,8 @@ +//// [parser519458.ts] +import rect = module("rect"); var bar = new rect.Rect(); + + +//// [parser519458.js] +var rect = module; +("rect"); +var bar = new rect.Rect(); diff --git a/tests/baselines/reference/parser521128.js b/tests/baselines/reference/parser521128.js new file mode 100644 index 00000000000..e16cbad6c33 --- /dev/null +++ b/tests/baselines/reference/parser521128.js @@ -0,0 +1,7 @@ +//// [parser521128.ts] +module.module { } + +//// [parser521128.js] +module.module; +{ +} diff --git a/tests/baselines/reference/parser566700.js b/tests/baselines/reference/parser566700.js new file mode 100644 index 00000000000..6c3628058b2 --- /dev/null +++ b/tests/baselines/reference/parser566700.js @@ -0,0 +1,5 @@ +//// [parser566700.ts] +var v = ()({}); + +//// [parser566700.js] +var v = ()({}); diff --git a/tests/baselines/reference/parser585151.js b/tests/baselines/reference/parser585151.js new file mode 100644 index 00000000000..16085ab3f16 --- /dev/null +++ b/tests/baselines/reference/parser585151.js @@ -0,0 +1,13 @@ +//// [parser585151.ts] +class Foo2 { + var icecream = "chocolate"; +} + + +//// [parser585151.js] +var Foo2 = (function () { + function Foo2() { + } + return Foo2; +})(); +var icecream = "chocolate"; diff --git a/tests/baselines/reference/parser618973.js b/tests/baselines/reference/parser618973.js new file mode 100644 index 00000000000..e52c9667e76 --- /dev/null +++ b/tests/baselines/reference/parser618973.js @@ -0,0 +1,15 @@ +//// [parser618973.ts] +export export class Foo { + public Bar() { + } +} + +//// [parser618973.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.Bar = function () { + }; + return Foo; +})(); +exports.Foo = Foo; diff --git a/tests/baselines/reference/parser642331_1.js b/tests/baselines/reference/parser642331_1.js new file mode 100644 index 00000000000..d4de3c04d1d --- /dev/null +++ b/tests/baselines/reference/parser642331_1.js @@ -0,0 +1,15 @@ +//// [parser642331_1.ts] +"use strict"; + +class test { + constructor (static) { } +} + + +//// [parser642331_1.js] +"use strict"; +var test = (function () { + function test() { + } + return test; +})(); diff --git a/tests/baselines/reference/parser645086_1.js b/tests/baselines/reference/parser645086_1.js new file mode 100644 index 00000000000..6036616e37c --- /dev/null +++ b/tests/baselines/reference/parser645086_1.js @@ -0,0 +1,6 @@ +//// [parser645086_1.ts] +var v = /[]/]/ + +//// [parser645086_1.js] +var v = /[]/; +/; diff --git a/tests/baselines/reference/parser645086_2.js b/tests/baselines/reference/parser645086_2.js new file mode 100644 index 00000000000..d4ed8be1486 --- /dev/null +++ b/tests/baselines/reference/parser645086_2.js @@ -0,0 +1,6 @@ +//// [parser645086_2.ts] +var v = /[^]/]/ + +//// [parser645086_2.js] +var v = /[^]/; +/; diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic6.js b/tests/baselines/reference/parserAccessibilityAfterStatic6.js new file mode 100644 index 00000000000..de4fc048785 --- /dev/null +++ b/tests/baselines/reference/parserAccessibilityAfterStatic6.js @@ -0,0 +1,11 @@ +//// [parserAccessibilityAfterStatic6.ts] +class Outer +{ +static public + +//// [parserAccessibilityAfterStatic6.js] +var Outer = (function () { + function Outer() { + } + return Outer; +})(); diff --git a/tests/baselines/reference/parserArgumentList1.js b/tests/baselines/reference/parserArgumentList1.js new file mode 100644 index 00000000000..d33e8931d18 --- /dev/null +++ b/tests/baselines/reference/parserArgumentList1.js @@ -0,0 +1,14 @@ +//// [parserArgumentList1.ts] +export function removeClass (node:HTMLElement, className:string) { + node.className = node.className.replace(_classNameRegexp(className), function (everything, leftDelimiter, name, rightDelimiter) { + return leftDelimiter.length + rightDelimiter.length === 2 ? ' ' : ''; + }); +} + +//// [parserArgumentList1.js] +function removeClass(node, className) { + node.className = node.className.replace(_classNameRegexp(className), function (everything, leftDelimiter, name, rightDelimiter) { + return leftDelimiter.length + rightDelimiter.length === 2 ? ' ' : ''; + }); +} +exports.removeClass = removeClass; diff --git a/tests/baselines/reference/parserArrowFunctionExpression2.js b/tests/baselines/reference/parserArrowFunctionExpression2.js new file mode 100644 index 00000000000..5059cf32182 --- /dev/null +++ b/tests/baselines/reference/parserArrowFunctionExpression2.js @@ -0,0 +1,7 @@ +//// [parserArrowFunctionExpression2.ts] +a = () => { } || a + +//// [parserArrowFunctionExpression2.js] +a = function () { +}; + || a; diff --git a/tests/baselines/reference/parserArrowFunctionExpression3.js b/tests/baselines/reference/parserArrowFunctionExpression3.js new file mode 100644 index 00000000000..68ea230d87b --- /dev/null +++ b/tests/baselines/reference/parserArrowFunctionExpression3.js @@ -0,0 +1,6 @@ +//// [parserArrowFunctionExpression3.ts] +a = (() => { } || a) + +//// [parserArrowFunctionExpression3.js] +a = (function () { +}) || a; diff --git a/tests/baselines/reference/parserClass1.js b/tests/baselines/reference/parserClass1.js new file mode 100644 index 00000000000..1245da3363f --- /dev/null +++ b/tests/baselines/reference/parserClass1.js @@ -0,0 +1,35 @@ +//// [parserClass1.ts] + export class NullLogger implements ILogger { + public information(): boolean { return false; } + public debug(): boolean { return false; } + public warning(): boolean { return false; } + public error(): boolean { return false; } + public fatal(): boolean { return false; } + public log(s: string): void { + } + } + +//// [parserClass1.js] +var NullLogger = (function () { + function NullLogger() { + } + NullLogger.prototype.information = function () { + return false; + }; + NullLogger.prototype.debug = function () { + return false; + }; + NullLogger.prototype.warning = function () { + return false; + }; + NullLogger.prototype.error = function () { + return false; + }; + NullLogger.prototype.fatal = function () { + return false; + }; + NullLogger.prototype.log = function (s) { + }; + return NullLogger; +})(); +exports.NullLogger = NullLogger; diff --git a/tests/baselines/reference/parserClass2.js b/tests/baselines/reference/parserClass2.js new file mode 100644 index 00000000000..b3816ea6ebb --- /dev/null +++ b/tests/baselines/reference/parserClass2.js @@ -0,0 +1,18 @@ +//// [parserClass2.ts] + + + export class LoggerAdapter implements ILogger { + constructor (public logger: ILogger) { + this._information = this.logger.information(); + } + } + +//// [parserClass2.js] +var LoggerAdapter = (function () { + function LoggerAdapter(logger) { + this.logger = logger; + this._information = this.logger.information(); + } + return LoggerAdapter; +})(); +exports.LoggerAdapter = LoggerAdapter; diff --git a/tests/baselines/reference/parserCommaInTypeMemberList1.js b/tests/baselines/reference/parserCommaInTypeMemberList1.js new file mode 100644 index 00000000000..25be7d9f18b --- /dev/null +++ b/tests/baselines/reference/parserCommaInTypeMemberList1.js @@ -0,0 +1,5 @@ +//// [parserCommaInTypeMemberList1.ts] +var v: { workItem: any, width: string }; + +//// [parserCommaInTypeMemberList1.js] +var v; diff --git a/tests/baselines/reference/parserCommaInTypeMemberList2.js b/tests/baselines/reference/parserCommaInTypeMemberList2.js new file mode 100644 index 00000000000..fd79326b7b0 --- /dev/null +++ b/tests/baselines/reference/parserCommaInTypeMemberList2.js @@ -0,0 +1,6 @@ +//// [parserCommaInTypeMemberList2.ts] +var s = $.extend< { workItem: any }, { workItem: any, width: string }>({ workItem: this._workItem }, {}); + + +//// [parserCommaInTypeMemberList2.js] +var s = $.extend({ workItem: this._workItem }, {}); diff --git a/tests/baselines/reference/parserComputedPropertyName1.js b/tests/baselines/reference/parserComputedPropertyName1.js new file mode 100644 index 00000000000..ee5b0a22cb6 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName1.js @@ -0,0 +1,5 @@ +//// [parserComputedPropertyName1.ts] +var v = { [e] }; + +//// [parserComputedPropertyName1.js] +var v = { [e]: }; diff --git a/tests/baselines/reference/parserComputedPropertyName27.js b/tests/baselines/reference/parserComputedPropertyName27.js new file mode 100644 index 00000000000..03b156af840 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName27.js @@ -0,0 +1,15 @@ +//// [parserComputedPropertyName27.ts] +class C { + // No ASI + [e]: number = 0 + [e2]: number +} + +//// [parserComputedPropertyName27.js] +var C = (function () { + function C() { + // No ASI + this[e] = 0[e2]; + } + return C; +})(); diff --git a/tests/baselines/reference/parserComputedPropertyName30.js b/tests/baselines/reference/parserComputedPropertyName30.js new file mode 100644 index 00000000000..cdad5321cff --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName30.js @@ -0,0 +1,14 @@ +//// [parserComputedPropertyName30.ts] +enum E { + // no ASI, comma expected + [e] = id++ + [e2] = 1 +} + +//// [parserComputedPropertyName30.js] +var E; +(function (E) { + // no ASI, comma expected + E[E[e] = id++] = e; + E[E[e2] = 1] = e2; +})(E || (E = {})); diff --git a/tests/baselines/reference/parserComputedPropertyName33.js b/tests/baselines/reference/parserComputedPropertyName33.js new file mode 100644 index 00000000000..1cc06c06780 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName33.js @@ -0,0 +1,17 @@ +//// [parserComputedPropertyName33.ts] +class C { + // No ASI + [e] = 0 + [e2]() { } +} + +//// [parserComputedPropertyName33.js] +var C = (function () { + function C() { + // No ASI + this[e] = 0[e2](); + } + return C; +})(); +{ +} diff --git a/tests/baselines/reference/parserComputedPropertyName39.js b/tests/baselines/reference/parserComputedPropertyName39.js new file mode 100644 index 00000000000..c37312f0034 --- /dev/null +++ b/tests/baselines/reference/parserComputedPropertyName39.js @@ -0,0 +1,15 @@ +//// [parserComputedPropertyName39.ts] +"use strict"; +class C { + [public]() { } +} + +//// [parserComputedPropertyName39.js] +"use strict"; +var C = (function () { + function C() { + } + return C; +})(); +(() => { +}); diff --git a/tests/baselines/reference/parserConstructorAmbiguity3.js b/tests/baselines/reference/parserConstructorAmbiguity3.js new file mode 100644 index 00000000000..bc565c70a7a --- /dev/null +++ b/tests/baselines/reference/parserConstructorAmbiguity3.js @@ -0,0 +1,5 @@ +//// [parserConstructorAmbiguity3.ts] +new Date + +//// [parserConstructorAmbiguity3.js] +new Date(); diff --git a/tests/baselines/reference/parserConstructorDeclaration8.js b/tests/baselines/reference/parserConstructorDeclaration8.js new file mode 100644 index 00000000000..26c06b591c0 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration8.js @@ -0,0 +1,12 @@ +//// [parserConstructorDeclaration8.ts] +class C { + // Not a constructor + public constructor; +} + +//// [parserConstructorDeclaration8.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserEmptyParenthesizedExpression1.js b/tests/baselines/reference/parserEmptyParenthesizedExpression1.js new file mode 100644 index 00000000000..d8e6385db4c --- /dev/null +++ b/tests/baselines/reference/parserEmptyParenthesizedExpression1.js @@ -0,0 +1,9 @@ +//// [parserEmptyParenthesizedExpression1.ts] +function getObj() { + ().toString(); +} + +//// [parserEmptyParenthesizedExpression1.js] +function getObj() { + ().toString(); +} diff --git a/tests/baselines/reference/parserEnum1.js b/tests/baselines/reference/parserEnum1.js new file mode 100644 index 00000000000..8bd9d128233 --- /dev/null +++ b/tests/baselines/reference/parserEnum1.js @@ -0,0 +1,18 @@ +//// [parserEnum1.ts] + + + export enum SignatureFlags { + None = 0, + IsIndexer = 1, + IsStringIndexer = 1 << 1, + IsNumberIndexer = 1 << 2, + } + +//// [parserEnum1.js] +(function (SignatureFlags) { + SignatureFlags[SignatureFlags["None"] = 0] = "None"; + SignatureFlags[SignatureFlags["IsIndexer"] = 1] = "IsIndexer"; + SignatureFlags[SignatureFlags["IsStringIndexer"] = 1 << 1] = "IsStringIndexer"; + SignatureFlags[SignatureFlags["IsNumberIndexer"] = 1 << 2] = "IsNumberIndexer"; +})(exports.SignatureFlags || (exports.SignatureFlags = {})); +var SignatureFlags = exports.SignatureFlags; diff --git a/tests/baselines/reference/parserEnum2.js b/tests/baselines/reference/parserEnum2.js new file mode 100644 index 00000000000..22946153449 --- /dev/null +++ b/tests/baselines/reference/parserEnum2.js @@ -0,0 +1,18 @@ +//// [parserEnum2.ts] + + + export enum SignatureFlags { + None = 0, + IsIndexer = 1, + IsStringIndexer = 1 << 1, + IsNumberIndexer = 1 << 2 + } + +//// [parserEnum2.js] +(function (SignatureFlags) { + SignatureFlags[SignatureFlags["None"] = 0] = "None"; + SignatureFlags[SignatureFlags["IsIndexer"] = 1] = "IsIndexer"; + SignatureFlags[SignatureFlags["IsStringIndexer"] = 1 << 1] = "IsStringIndexer"; + SignatureFlags[SignatureFlags["IsNumberIndexer"] = 1 << 2] = "IsNumberIndexer"; +})(exports.SignatureFlags || (exports.SignatureFlags = {})); +var SignatureFlags = exports.SignatureFlags; diff --git a/tests/baselines/reference/parserEnum3.js b/tests/baselines/reference/parserEnum3.js new file mode 100644 index 00000000000..bbfb2039314 --- /dev/null +++ b/tests/baselines/reference/parserEnum3.js @@ -0,0 +1,10 @@ +//// [parserEnum3.ts] + + + export enum SignatureFlags { + } + +//// [parserEnum3.js] +(function (SignatureFlags) { +})(exports.SignatureFlags || (exports.SignatureFlags = {})); +var SignatureFlags = exports.SignatureFlags; diff --git a/tests/baselines/reference/parserEnum4.js b/tests/baselines/reference/parserEnum4.js new file mode 100644 index 00000000000..1bad7047486 --- /dev/null +++ b/tests/baselines/reference/parserEnum4.js @@ -0,0 +1,11 @@ +//// [parserEnum4.ts] + + + export enum SignatureFlags { + , + } + +//// [parserEnum4.js] +(function (SignatureFlags) { +})(exports.SignatureFlags || (exports.SignatureFlags = {})); +var SignatureFlags = exports.SignatureFlags; diff --git a/tests/baselines/reference/parserEnum5.js b/tests/baselines/reference/parserEnum5.js new file mode 100644 index 00000000000..50781f40dd7 --- /dev/null +++ b/tests/baselines/reference/parserEnum5.js @@ -0,0 +1,24 @@ +//// [parserEnum5.ts] +enum E2 { a, } +enum E3 { a: 1, } +enum E1 { a, b: 1, c, d: 2 = 3 } + +//// [parserEnum5.js] +var E2; +(function (E2) { + E2[E2["a"] = 0] = "a"; +})(E2 || (E2 = {})); +var E3; +(function (E3) { + E3[E3["a"] = 0] = "a"; + E3[E3["1"] = 1] = "1"; +})(E3 || (E3 = {})); +var E1; +(function (E1) { + E1[E1["a"] = 0] = "a"; + E1[E1["b"] = 1] = "b"; + E1[E1["1"] = 2] = "1"; + E1[E1["c"] = 3] = "c"; + E1[E1["d"] = 4] = "d"; + E1[E1["2"] = 3] = "2"; +})(E1 || (E1 = {})); diff --git a/tests/baselines/reference/parserEnumDeclaration4.js b/tests/baselines/reference/parserEnumDeclaration4.js new file mode 100644 index 00000000000..47450d419e1 --- /dev/null +++ b/tests/baselines/reference/parserEnumDeclaration4.js @@ -0,0 +1,9 @@ +//// [parserEnumDeclaration4.ts] +enum void { +} + +//// [parserEnumDeclaration4.js] +var ; +(function () { +})( || ( = {})); +void {}; diff --git a/tests/baselines/reference/parserEqualsGreaterThanAfterFunction1.js b/tests/baselines/reference/parserEqualsGreaterThanAfterFunction1.js new file mode 100644 index 00000000000..5358a25fd82 --- /dev/null +++ b/tests/baselines/reference/parserEqualsGreaterThanAfterFunction1.js @@ -0,0 +1,4 @@ +//// [parserEqualsGreaterThanAfterFunction1.ts] +function => + +//// [parserEqualsGreaterThanAfterFunction1.js] diff --git a/tests/baselines/reference/parserEqualsGreaterThanAfterFunction2.js b/tests/baselines/reference/parserEqualsGreaterThanAfterFunction2.js new file mode 100644 index 00000000000..a0c210486a3 --- /dev/null +++ b/tests/baselines/reference/parserEqualsGreaterThanAfterFunction2.js @@ -0,0 +1,4 @@ +//// [parserEqualsGreaterThanAfterFunction2.ts] +function (a => b; + +//// [parserEqualsGreaterThanAfterFunction2.js] diff --git a/tests/baselines/reference/parserErrantAccessibilityModifierInModule1.js b/tests/baselines/reference/parserErrantAccessibilityModifierInModule1.js new file mode 100644 index 00000000000..be0bb67511d --- /dev/null +++ b/tests/baselines/reference/parserErrantAccessibilityModifierInModule1.js @@ -0,0 +1,14 @@ +//// [parserErrantAccessibilityModifierInModule1.ts] +module M { + var x=10; // variable local to this module body + private y=x; // property visible only in module + export var z=y; // property visible to any code +} + +//// [parserErrantAccessibilityModifierInModule1.js] +var M; +(function (M) { + var x = 10; // variable local to this module body + y = x; // property visible only in module + M.z = y; // property visible to any code +})(M || (M = {})); diff --git a/tests/baselines/reference/parserErrantEqualsGreaterThanAfterFunction1.js b/tests/baselines/reference/parserErrantEqualsGreaterThanAfterFunction1.js new file mode 100644 index 00000000000..c1b2f517b45 --- /dev/null +++ b/tests/baselines/reference/parserErrantEqualsGreaterThanAfterFunction1.js @@ -0,0 +1,5 @@ +//// [parserErrantEqualsGreaterThanAfterFunction1.ts] +function f() => 4; + +//// [parserErrantEqualsGreaterThanAfterFunction1.js] +4; diff --git a/tests/baselines/reference/parserErrantEqualsGreaterThanAfterFunction2.js b/tests/baselines/reference/parserErrantEqualsGreaterThanAfterFunction2.js new file mode 100644 index 00000000000..5b4b71cab1f --- /dev/null +++ b/tests/baselines/reference/parserErrantEqualsGreaterThanAfterFunction2.js @@ -0,0 +1,5 @@ +//// [parserErrantEqualsGreaterThanAfterFunction2.ts] +function f(p: A) => p; + +//// [parserErrantEqualsGreaterThanAfterFunction2.js] +p; diff --git a/tests/baselines/reference/parserErrantSemicolonInClass1.js b/tests/baselines/reference/parserErrantSemicolonInClass1.js new file mode 100644 index 00000000000..2f38e2b5323 --- /dev/null +++ b/tests/baselines/reference/parserErrantSemicolonInClass1.js @@ -0,0 +1,73 @@ +//// [parserErrantSemicolonInClass1.ts] +class a { + //constructor (); + constructor (n: number); + constructor (s: string); + constructor (ns: any) { + + } + + public pgF() { }; + + public pv; + public get d() { + return 30; + } + public set d() { + } + + public static get p2() { + return { x: 30, y: 40 }; + } + + private static d2() { + } + private static get p3() { + return "string"; + } + private pv3; + + private foo(n: number): string; + private foo(s: string): string; + private foo(ns: any) { + return ns.toString(); + } +} + + +//// [parserErrantSemicolonInClass1.js] +var a = (function () { + function a(ns) { + } + a.prototype.pgF = function () { + }; + Object.defineProperty(a.prototype, "d", { + get: function () { + return 30; + }, + set: function () { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(a, "p2", { + get: function () { + return { x: 30, y: 40 }; + }, + enumerable: true, + configurable: true + }); + a.d2 = function () { + }; + Object.defineProperty(a, "p3", { + get: function () { + return "string"; + }, + enumerable: true, + configurable: true + }); + a.prototype.foo = function (ns) { + return ns.toString(); + }; + return a; +})(); diff --git a/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression1.js b/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression1.js new file mode 100644 index 00000000000..1ed36d8dac5 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression1.js @@ -0,0 +1,6 @@ +//// [parserErrorRecoveryArrayLiteralExpression1.ts] +var v = [1, 2, 3 +4, 5, 6, 7]; + +//// [parserErrorRecoveryArrayLiteralExpression1.js] +var v = [1, 2, 3, 4, 5, 6, 7]; diff --git a/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression2.js b/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression2.js new file mode 100644 index 00000000000..c5386a2b6a2 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression2.js @@ -0,0 +1,8 @@ +//// [parserErrorRecoveryArrayLiteralExpression2.ts] +var points = [-0.6961439251899719, 1.207661509513855, 0.19374050199985504, -0 + + .7042760848999023, 1.1955541372299194, 0.19600726664066315, -0.7120069861412048]; + + +//// [parserErrorRecoveryArrayLiteralExpression2.js] +var points = [-0.6961439251899719, 1.207661509513855, 0.19374050199985504, -0, .7042760848999023, 1.1955541372299194, 0.19600726664066315, -0.7120069861412048]; diff --git a/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression3.js b/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression3.js new file mode 100644 index 00000000000..c366c750cc7 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryArrayLiteralExpression3.js @@ -0,0 +1,9 @@ +//// [parserErrorRecoveryArrayLiteralExpression3.ts] + +var texCoords = [2, 2, 0.5000001192092895, 0.8749999 ; 403953552, 0.5000001192092895, 0.8749999403953552]; + + +//// [parserErrorRecoveryArrayLiteralExpression3.js] +var texCoords = [2, 2, 0.5000001192092895, 0.8749999]; +403953552, 0.5000001192092895, 0.8749999403953552; +; diff --git a/tests/baselines/reference/parserErrorRecoveryIfStatement1.js b/tests/baselines/reference/parserErrorRecoveryIfStatement1.js new file mode 100644 index 00000000000..662f3056a3d --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryIfStatement1.js @@ -0,0 +1,25 @@ +//// [parserErrorRecoveryIfStatement1.ts] +class Foo { + f1() { + if ( + } + f2() { + } + f3() { + } +} + +//// [parserErrorRecoveryIfStatement1.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.f1 = function () { + if () + ; + }; + Foo.prototype.f2 = function () { + }; + Foo.prototype.f3 = function () { + }; + return Foo; +})(); diff --git a/tests/baselines/reference/parserErrorRecoveryIfStatement2.js b/tests/baselines/reference/parserErrorRecoveryIfStatement2.js new file mode 100644 index 00000000000..171f3072535 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryIfStatement2.js @@ -0,0 +1,25 @@ +//// [parserErrorRecoveryIfStatement2.ts] +class Foo { + f1() { + if (a + } + f2() { + } + f3() { + } +} + +//// [parserErrorRecoveryIfStatement2.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.f1 = function () { + if (a) + ; + }; + Foo.prototype.f2 = function () { + }; + Foo.prototype.f3 = function () { + }; + return Foo; +})(); diff --git a/tests/baselines/reference/parserErrorRecoveryIfStatement3.js b/tests/baselines/reference/parserErrorRecoveryIfStatement3.js new file mode 100644 index 00000000000..117525bcba0 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryIfStatement3.js @@ -0,0 +1,25 @@ +//// [parserErrorRecoveryIfStatement3.ts] +class Foo { + f1() { + if (a.b + } + f2() { + } + f3() { + } +} + +//// [parserErrorRecoveryIfStatement3.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.f1 = function () { + if (a.b) + ; + }; + Foo.prototype.f2 = function () { + }; + Foo.prototype.f3 = function () { + }; + return Foo; +})(); diff --git a/tests/baselines/reference/parserErrorRecoveryIfStatement4.js b/tests/baselines/reference/parserErrorRecoveryIfStatement4.js new file mode 100644 index 00000000000..460ca957c02 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryIfStatement4.js @@ -0,0 +1,25 @@ +//// [parserErrorRecoveryIfStatement4.ts] +class Foo { + f1() { + if (a.b) + } + f2() { + } + f3() { + } +} + +//// [parserErrorRecoveryIfStatement4.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.f1 = function () { + if (a.b) + ; + }; + Foo.prototype.f2 = function () { + }; + Foo.prototype.f3 = function () { + }; + return Foo; +})(); diff --git a/tests/baselines/reference/parserErrorRecoveryIfStatement5.js b/tests/baselines/reference/parserErrorRecoveryIfStatement5.js new file mode 100644 index 00000000000..8df07082c42 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryIfStatement5.js @@ -0,0 +1,27 @@ +//// [parserErrorRecoveryIfStatement5.ts] +class Foo { + f1() { + if (a.b) { + } + f2() { + } + f3() { + } +} + +//// [parserErrorRecoveryIfStatement5.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.f1 = function () { + if (a.b) { + } + f2(); + { + } + f3(); + { + } + }; + return Foo; +})(); diff --git a/tests/baselines/reference/parserErrorRecoveryIfStatement6.js b/tests/baselines/reference/parserErrorRecoveryIfStatement6.js new file mode 100644 index 00000000000..fa327a73814 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecoveryIfStatement6.js @@ -0,0 +1,26 @@ +//// [parserErrorRecoveryIfStatement6.ts] +class Foo { + f1() { + if (a.b) { + } + public f2() { + } + f3() { + } +} + + +//// [parserErrorRecoveryIfStatement6.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.f1 = function () { + if (a.b) { + } + }; + Foo.prototype.f2 = function () { + }; + Foo.prototype.f3 = function () { + }; + return Foo; +})(); diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList1.js b/tests/baselines/reference/parserErrorRecovery_ArgumentList1.js new file mode 100644 index 00000000000..86bbf4494f4 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList1.js @@ -0,0 +1,11 @@ +//// [parserErrorRecovery_ArgumentList1.ts] +function foo() { + bar( + return x; +} + +//// [parserErrorRecovery_ArgumentList1.js] +function foo() { + bar(); + return x; +} diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList2.js b/tests/baselines/reference/parserErrorRecovery_ArgumentList2.js new file mode 100644 index 00000000000..14f6b67c868 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList2.js @@ -0,0 +1,9 @@ +//// [parserErrorRecovery_ArgumentList2.ts] +function foo() { + bar(; +} + +//// [parserErrorRecovery_ArgumentList2.js] +function foo() { + bar(); +} diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList3.js b/tests/baselines/reference/parserErrorRecovery_ArgumentList3.js new file mode 100644 index 00000000000..ab76ec173fb --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList3.js @@ -0,0 +1,11 @@ +//// [parserErrorRecovery_ArgumentList3.ts] +function foo() { + bar(a, + return; +} + +//// [parserErrorRecovery_ArgumentList3.js] +function foo() { + bar(a); + return; +} diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList4.js b/tests/baselines/reference/parserErrorRecovery_ArgumentList4.js new file mode 100644 index 00000000000..2557faacba5 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList4.js @@ -0,0 +1,11 @@ +//// [parserErrorRecovery_ArgumentList4.ts] +function foo() { + bar(a,b + return; +} + +//// [parserErrorRecovery_ArgumentList4.js] +function foo() { + bar(a, b); + return; +} diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList6.js b/tests/baselines/reference/parserErrorRecovery_ArgumentList6.js new file mode 100644 index 00000000000..16b52248d54 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList6.js @@ -0,0 +1,5 @@ +//// [parserErrorRecovery_ArgumentList6.ts] +Foo(, + +//// [parserErrorRecovery_ArgumentList6.js] +Foo(); diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList7.js b/tests/baselines/reference/parserErrorRecovery_ArgumentList7.js new file mode 100644 index 00000000000..94eba9445e9 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList7.js @@ -0,0 +1,5 @@ +//// [parserErrorRecovery_ArgumentList7.ts] +Foo(a,, + +//// [parserErrorRecovery_ArgumentList7.js] +Foo(a, ); diff --git a/tests/baselines/reference/parserErrorRecovery_Block1.js b/tests/baselines/reference/parserErrorRecovery_Block1.js new file mode 100644 index 00000000000..cdcd5856fa6 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_Block1.js @@ -0,0 +1,11 @@ +//// [parserErrorRecovery_Block1.ts] +function f() { + 1 + + return; +} + +//// [parserErrorRecovery_Block1.js] +function f() { + 1 + ; + return; +} diff --git a/tests/baselines/reference/parserErrorRecovery_Block2.js b/tests/baselines/reference/parserErrorRecovery_Block2.js new file mode 100644 index 00000000000..24ddaf0db3f --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_Block2.js @@ -0,0 +1,10 @@ +//// [parserErrorRecovery_Block2.ts] +function f() { + # + return; +} + +//// [parserErrorRecovery_Block2.js] +function f() { + return; +} diff --git a/tests/baselines/reference/parserErrorRecovery_Block3.js b/tests/baselines/reference/parserErrorRecovery_Block3.js new file mode 100644 index 00000000000..30183fb7d8b --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_Block3.js @@ -0,0 +1,18 @@ +//// [parserErrorRecovery_Block3.ts] +class C { + private a(): boolean { + + private b(): boolean { + } +} + +//// [parserErrorRecovery_Block3.js] +var C = (function () { + function C() { + } + C.prototype.a = function () { + }; + C.prototype.b = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/parserErrorRecovery_ClassElement1.js b/tests/baselines/reference/parserErrorRecovery_ClassElement1.js new file mode 100644 index 00000000000..7a3bf441e47 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ClassElement1.js @@ -0,0 +1,21 @@ +//// [parserErrorRecovery_ClassElement1.ts] +class C { + +// Classes can't be nested. So we should bail out of parsing here and recover +// this as a source unit element. +class D { +} + +//// [parserErrorRecovery_ClassElement1.js] +var C = (function () { + function C() { + } + return C; +})(); +// Classes can't be nested. So we should bail out of parsing here and recover +// this as a source unit element. +var D = (function () { + function D() { + } + return D; +})(); diff --git a/tests/baselines/reference/parserErrorRecovery_ClassElement2.js b/tests/baselines/reference/parserErrorRecovery_ClassElement2.js new file mode 100644 index 00000000000..fca227a4e8a --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ClassElement2.js @@ -0,0 +1,20 @@ +//// [parserErrorRecovery_ClassElement2.ts] +module M { + class C { + + enum E { + } +} + +//// [parserErrorRecovery_ClassElement2.js] +var M; +(function (M) { + var C = (function () { + function C() { + } + return C; + })(); + var E; + (function (E) { + })(E || (E = {})); +})(M || (M = {})); diff --git a/tests/baselines/reference/parserErrorRecovery_ClassElement3.js b/tests/baselines/reference/parserErrorRecovery_ClassElement3.js new file mode 100644 index 00000000000..39e701628bb --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ClassElement3.js @@ -0,0 +1,21 @@ +//// [parserErrorRecovery_ClassElement3.ts] +module M { + # + class C { + } + @ + enum E { + # + +//// [parserErrorRecovery_ClassElement3.js] +var M; +(function (M) { + var C = (function () { + function C() { + } + return C; + })(); + var E; + (function (E) { + })(E || (E = {})); +})(M || (M = {})); diff --git a/tests/baselines/reference/parserErrorRecovery_Expression1.js b/tests/baselines/reference/parserErrorRecovery_Expression1.js new file mode 100644 index 00000000000..b2c9d64945c --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_Expression1.js @@ -0,0 +1,5 @@ +//// [parserErrorRecovery_Expression1.ts] +var v = ()({}); + +//// [parserErrorRecovery_Expression1.js] +var v = ()({}); diff --git a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js new file mode 100644 index 00000000000..c26b16b5a0a --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable1.js @@ -0,0 +1,55 @@ +//// [parserErrorRecovery_IncompleteMemberVariable1.ts] +// Interface +interface IPoint { + getDist(): number; +} + +// Module +module Shapes { + + // Class + export class Point implements IPoint { + + public con: "hello"; + // Constructor + constructor (public x: number, public y: number) { } + + // Instance member + getDist() { return Math.sqrt(this.x * this.x + this.y * this.y); } + + // Static member + static origin = new Point(0, 0); + } + +} + +// Local variables +var p: IPoint = new Shapes.Point(3, 4); +var dist = p.getDist(); + + +//// [parserErrorRecovery_IncompleteMemberVariable1.js] +// Module +var Shapes; +(function (Shapes) { + // Class + var Point = (function () { + // Constructor + function Point(x, y) { + this.x = x; + this.y = y; + this.con = "hello"; + } + // Instance member + Point.prototype.getDist = function () { + return Math.sqrt(this.x * this.x + this.y * this.y); + }; + // Static member + Point.origin = new Point(0, 0); + return Point; + })(); + Shapes.Point = Point; +})(Shapes || (Shapes = {})); +// Local variables +var p = new Shapes.Point(3, 4); +var dist = p.getDist(); diff --git a/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js new file mode 100644 index 00000000000..866f96a8030 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_IncompleteMemberVariable2.js @@ -0,0 +1,55 @@ +//// [parserErrorRecovery_IncompleteMemberVariable2.ts] +// Interface +interface IPoint { + getDist(): number; +} + +// Module +module Shapes { + + // Class + export class Point implements IPoint { + + public con:C "hello"; + // Constructor + constructor (public x: number, public y: number) { } + + // Instance member + getDist() { return Math.sqrt(this.x * this.x + this.y * this.y); } + + // Static member + static origin = new Point(0, 0); + } + +} + +// Local variables +var p: IPoint = new Shapes.Point(3, 4); +var dist = p.getDist(); + + +//// [parserErrorRecovery_IncompleteMemberVariable2.js] +// Module +var Shapes; +(function (Shapes) { + // Class + var Point = (function () { + // Constructor + function Point(x, y) { + this.x = x; + this.y = y; + this.con = "hello"; + } + // Instance member + Point.prototype.getDist = function () { + return Math.sqrt(this.x * this.x + this.y * this.y); + }; + // Static member + Point.origin = new Point(0, 0); + return Point; + })(); + Shapes.Point = Point; +})(Shapes || (Shapes = {})); +// Local variables +var p = new Shapes.Point(3, 4); +var dist = p.getDist(); diff --git a/tests/baselines/reference/parserErrorRecovery_LeftShift1.js b/tests/baselines/reference/parserErrorRecovery_LeftShift1.js new file mode 100644 index 00000000000..69392c15be1 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_LeftShift1.js @@ -0,0 +1,6 @@ +//// [parserErrorRecovery_LeftShift1.ts] +retValue = bfs.VARIABLES >> ); + +//// [parserErrorRecovery_LeftShift1.js] +retValue = bfs.VARIABLES >> ; +; diff --git a/tests/baselines/reference/parserErrorRecovery_ModuleElement1.js b/tests/baselines/reference/parserErrorRecovery_ModuleElement1.js new file mode 100644 index 00000000000..27febb99c86 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ModuleElement1.js @@ -0,0 +1,9 @@ +//// [parserErrorRecovery_ModuleElement1.ts] +return foo; +} +return bar; +} + +//// [parserErrorRecovery_ModuleElement1.js] +return foo; +return bar; diff --git a/tests/baselines/reference/parserErrorRecovery_ModuleElement2.js b/tests/baselines/reference/parserErrorRecovery_ModuleElement2.js new file mode 100644 index 00000000000..722ccbc787c --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ModuleElement2.js @@ -0,0 +1,15 @@ +//// [parserErrorRecovery_ModuleElement2.ts] +function foo() { +} + +function foo() { +} + +) +) + +//// [parserErrorRecovery_ModuleElement2.js] +function foo() { +} +function foo() { +} diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral1.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral1.js new file mode 100644 index 00000000000..dbf89fec52b --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral1.js @@ -0,0 +1,5 @@ +//// [parserErrorRecovery_ObjectLiteral1.ts] +var v = { a: 1 b: 2 } + +//// [parserErrorRecovery_ObjectLiteral1.js] +var v = { a: 1, b: 2 }; diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral2.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral2.js new file mode 100644 index 00000000000..08dc96d38ef --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral2.js @@ -0,0 +1,6 @@ +//// [parserErrorRecovery_ObjectLiteral2.ts] +var v = { a +return; + +//// [parserErrorRecovery_ObjectLiteral2.js] +var v = { a: , return: }; diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral3.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral3.js new file mode 100644 index 00000000000..1ea23d59112 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral3.js @@ -0,0 +1,6 @@ +//// [parserErrorRecovery_ObjectLiteral3.ts] +var v = { a: +return; + +//// [parserErrorRecovery_ObjectLiteral3.js] +var v = { a: , return: }; diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral4.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral4.js new file mode 100644 index 00000000000..4fe49788740 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral4.js @@ -0,0 +1,6 @@ +//// [parserErrorRecovery_ObjectLiteral4.ts] +var v = { a: 1 +return; + +//// [parserErrorRecovery_ObjectLiteral4.js] +var v = { a: 1, return: }; diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral5.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral5.js new file mode 100644 index 00000000000..cf55b59c711 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral5.js @@ -0,0 +1,6 @@ +//// [parserErrorRecovery_ObjectLiteral5.ts] +var v = { a: 1, +return; + +//// [parserErrorRecovery_ObjectLiteral5.js] +var v = { a: 1, return: }; diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList1.js b/tests/baselines/reference/parserErrorRecovery_ParameterList1.js new file mode 100644 index 00000000000..0a9e78b59cf --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList1.js @@ -0,0 +1,5 @@ +//// [parserErrorRecovery_ParameterList1.ts] +function f(a { +} + +//// [parserErrorRecovery_ParameterList1.js] diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList2.js b/tests/baselines/reference/parserErrorRecovery_ParameterList2.js new file mode 100644 index 00000000000..9f85762a89a --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList2.js @@ -0,0 +1,5 @@ +//// [parserErrorRecovery_ParameterList2.ts] +function f(a, { +} + +//// [parserErrorRecovery_ParameterList2.js] diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList4.js b/tests/baselines/reference/parserErrorRecovery_ParameterList4.js new file mode 100644 index 00000000000..53775cad92e --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList4.js @@ -0,0 +1,7 @@ +//// [parserErrorRecovery_ParameterList4.ts] +function f(a,#) { +} + +//// [parserErrorRecovery_ParameterList4.js] +function f(a) { +} diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList5.js b/tests/baselines/reference/parserErrorRecovery_ParameterList5.js new file mode 100644 index 00000000000..7ff32fd1873 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList5.js @@ -0,0 +1,5 @@ +//// [parserErrorRecovery_ParameterList5.ts] +(a:number => { } + +//// [parserErrorRecovery_ParameterList5.js] +(); diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList6.js b/tests/baselines/reference/parserErrorRecovery_ParameterList6.js new file mode 100644 index 00000000000..e83c045208d --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList6.js @@ -0,0 +1,15 @@ +//// [parserErrorRecovery_ParameterList6.ts] +class Foo { + public banana (x: break) { } +} + +//// [parserErrorRecovery_ParameterList6.js] +var Foo = (function () { + function Foo() { + } + Foo.prototype.banana = ; + return Foo; +})(); +break ; +{ +} diff --git a/tests/baselines/reference/parserErrorRecovery_SourceUnit1.js b/tests/baselines/reference/parserErrorRecovery_SourceUnit1.js new file mode 100644 index 00000000000..a4b6427508f --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_SourceUnit1.js @@ -0,0 +1,18 @@ +//// [parserErrorRecovery_SourceUnit1.ts] +class C { +} +} +class D { +} + +//// [parserErrorRecovery_SourceUnit1.js] +var C = (function () { + function C() { + } + return C; +})(); +var D = (function () { + function D() { + } + return D; +})(); diff --git a/tests/baselines/reference/parserErrorRecovery_SwitchStatement1.js b/tests/baselines/reference/parserErrorRecovery_SwitchStatement1.js new file mode 100644 index 00000000000..63591985d1e --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_SwitchStatement1.js @@ -0,0 +1,17 @@ +//// [parserErrorRecovery_SwitchStatement1.ts] +switch (e) { + case 1: + 1 + + case 2: + 1 + + default: +} + +//// [parserErrorRecovery_SwitchStatement1.js] +switch (e) { + case 1: + 1 + ; + case 2: + 1 + ; + default: +} diff --git a/tests/baselines/reference/parserErrorRecovery_SwitchStatement2.js b/tests/baselines/reference/parserErrorRecovery_SwitchStatement2.js new file mode 100644 index 00000000000..d7000bc23d7 --- /dev/null +++ b/tests/baselines/reference/parserErrorRecovery_SwitchStatement2.js @@ -0,0 +1,21 @@ +//// [parserErrorRecovery_SwitchStatement2.ts] +class C { + constructor() { + switch (e) { + +class D { +} + +//// [parserErrorRecovery_SwitchStatement2.js] +var C = (function () { + function C() { + switch (e) { + } + } + return C; +})(); +var D = (function () { + function D() { + } + return D; +})(); diff --git a/tests/baselines/reference/parserExportAssignment1.js b/tests/baselines/reference/parserExportAssignment1.js new file mode 100644 index 00000000000..5f3c0e1513f --- /dev/null +++ b/tests/baselines/reference/parserExportAssignment1.js @@ -0,0 +1,4 @@ +//// [parserExportAssignment1.ts] +export = foo + +//// [parserExportAssignment1.js] diff --git a/tests/baselines/reference/parserExportAssignment2.js b/tests/baselines/reference/parserExportAssignment2.js new file mode 100644 index 00000000000..aaa12cea179 --- /dev/null +++ b/tests/baselines/reference/parserExportAssignment2.js @@ -0,0 +1,4 @@ +//// [parserExportAssignment2.ts] +export = foo; + +//// [parserExportAssignment2.js] diff --git a/tests/baselines/reference/parserExportAssignment3.js b/tests/baselines/reference/parserExportAssignment3.js new file mode 100644 index 00000000000..13e04c3607a --- /dev/null +++ b/tests/baselines/reference/parserExportAssignment3.js @@ -0,0 +1,4 @@ +//// [parserExportAssignment3.ts] +export = + +//// [parserExportAssignment3.js] diff --git a/tests/baselines/reference/parserExportAssignment4.js b/tests/baselines/reference/parserExportAssignment4.js new file mode 100644 index 00000000000..7cfd8206dbe --- /dev/null +++ b/tests/baselines/reference/parserExportAssignment4.js @@ -0,0 +1,4 @@ +//// [parserExportAssignment4.ts] +export = ; + +//// [parserExportAssignment4.js] diff --git a/tests/baselines/reference/parserExportAssignment7.js b/tests/baselines/reference/parserExportAssignment7.js new file mode 100644 index 00000000000..52f9848c243 --- /dev/null +++ b/tests/baselines/reference/parserExportAssignment7.js @@ -0,0 +1,13 @@ +//// [parserExportAssignment7.ts] +export class C { +} + +export = B; + +//// [parserExportAssignment7.js] +var C = (function () { + function C() { + } + return C; +})(); +exports.C = C; diff --git a/tests/baselines/reference/parserExportAssignment8.js b/tests/baselines/reference/parserExportAssignment8.js new file mode 100644 index 00000000000..3c5b851284e --- /dev/null +++ b/tests/baselines/reference/parserExportAssignment8.js @@ -0,0 +1,13 @@ +//// [parserExportAssignment8.ts] +export = B; + +export class C { +} + +//// [parserExportAssignment8.js] +var C = (function () { + function C() { + } + return C; +})(); +exports.C = C; diff --git a/tests/baselines/reference/parserFuzz1.js b/tests/baselines/reference/parserFuzz1.js new file mode 100644 index 00000000000..969c07c1659 --- /dev/null +++ b/tests/baselines/reference/parserFuzz1.js @@ -0,0 +1,13 @@ +//// [parserFuzz1.ts] +cla > = 2; + +//// [parserGreaterThanTokenAmbiguity12.js] +1 >> ; +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity13.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity13.js new file mode 100644 index 00000000000..49130a9dd13 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity13.js @@ -0,0 +1,6 @@ +//// [parserGreaterThanTokenAmbiguity13.ts] +1 >>/**/= 2; + +//// [parserGreaterThanTokenAmbiguity13.js] +1 >> ; /**/ +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity14.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity14.js new file mode 100644 index 00000000000..5cc8bb3b88e --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity14.js @@ -0,0 +1,7 @@ +//// [parserGreaterThanTokenAmbiguity14.ts] +1 >> += 2; + +//// [parserGreaterThanTokenAmbiguity14.js] +1 >> ; +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity17.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity17.js new file mode 100644 index 00000000000..58ea53274aa --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity17.js @@ -0,0 +1,6 @@ +//// [parserGreaterThanTokenAmbiguity17.ts] +1 >>> = 2; + +//// [parserGreaterThanTokenAmbiguity17.js] +1 >>> ; +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity18.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity18.js new file mode 100644 index 00000000000..71527689b2c --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity18.js @@ -0,0 +1,6 @@ +//// [parserGreaterThanTokenAmbiguity18.ts] +1 >>>/**/= 2; + +//// [parserGreaterThanTokenAmbiguity18.js] +1 >>> ; /**/ +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity19.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity19.js new file mode 100644 index 00000000000..52035691c84 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity19.js @@ -0,0 +1,7 @@ +//// [parserGreaterThanTokenAmbiguity19.ts] +1 >>> += 2; + +//// [parserGreaterThanTokenAmbiguity19.js] +1 >>> ; +2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity2.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity2.js new file mode 100644 index 00000000000..d4cb01bf4c3 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity2.js @@ -0,0 +1,5 @@ +//// [parserGreaterThanTokenAmbiguity2.ts] +1 > > 2; + +//// [parserGreaterThanTokenAmbiguity2.js] +1 > > 2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity3.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity3.js new file mode 100644 index 00000000000..79f8c139260 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity3.js @@ -0,0 +1,5 @@ +//// [parserGreaterThanTokenAmbiguity3.ts] +1 >/**/> 2; + +//// [parserGreaterThanTokenAmbiguity3.js] +1 > /**/ > 2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity4.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity4.js new file mode 100644 index 00000000000..5ef065681dc --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity4.js @@ -0,0 +1,6 @@ +//// [parserGreaterThanTokenAmbiguity4.ts] +1 > +> 2; + +//// [parserGreaterThanTokenAmbiguity4.js] +1 > > 2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity7.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity7.js new file mode 100644 index 00000000000..a97cfa4bcc9 --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity7.js @@ -0,0 +1,5 @@ +//// [parserGreaterThanTokenAmbiguity7.ts] +1 >> > 2; + +//// [parserGreaterThanTokenAmbiguity7.js] +1 >> > 2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity8.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity8.js new file mode 100644 index 00000000000..0006c03219a --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity8.js @@ -0,0 +1,5 @@ +//// [parserGreaterThanTokenAmbiguity8.ts] +1 >>/**/> 2; + +//// [parserGreaterThanTokenAmbiguity8.js] +1 >> /**/ > 2; diff --git a/tests/baselines/reference/parserGreaterThanTokenAmbiguity9.js b/tests/baselines/reference/parserGreaterThanTokenAmbiguity9.js new file mode 100644 index 00000000000..25c5ed53a7c --- /dev/null +++ b/tests/baselines/reference/parserGreaterThanTokenAmbiguity9.js @@ -0,0 +1,6 @@ +//// [parserGreaterThanTokenAmbiguity9.ts] +1 >> +> 2; + +//// [parserGreaterThanTokenAmbiguity9.js] +1 >> > 2; diff --git a/tests/baselines/reference/parserIndexMemberDeclaration5.js b/tests/baselines/reference/parserIndexMemberDeclaration5.js new file mode 100644 index 00000000000..209e26ae4c0 --- /dev/null +++ b/tests/baselines/reference/parserIndexMemberDeclaration5.js @@ -0,0 +1,11 @@ +//// [parserIndexMemberDeclaration5.ts] +class C { + [a: string]: number public v: number +} + +//// [parserIndexMemberDeclaration5.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/parserInterfaceDeclaration6.js b/tests/baselines/reference/parserInterfaceDeclaration6.js new file mode 100644 index 00000000000..3cecca19198 --- /dev/null +++ b/tests/baselines/reference/parserInterfaceDeclaration6.js @@ -0,0 +1,5 @@ +//// [parserInterfaceDeclaration6.ts] +export export interface I { +} + +//// [parserInterfaceDeclaration6.js] diff --git a/tests/baselines/reference/parserInterfaceDeclaration7.js b/tests/baselines/reference/parserInterfaceDeclaration7.js new file mode 100644 index 00000000000..40998c119cf --- /dev/null +++ b/tests/baselines/reference/parserInterfaceDeclaration7.js @@ -0,0 +1,5 @@ +//// [parserInterfaceDeclaration7.ts] +export interface I { +} + +//// [parserInterfaceDeclaration7.js] diff --git a/tests/baselines/reference/parserInvalidIdentifiersInVariableStatements1.js b/tests/baselines/reference/parserInvalidIdentifiersInVariableStatements1.js new file mode 100644 index 00000000000..09fcffc1b0d --- /dev/null +++ b/tests/baselines/reference/parserInvalidIdentifiersInVariableStatements1.js @@ -0,0 +1,12 @@ +//// [parserInvalidIdentifiersInVariableStatements1.ts] +var export; +var foo; +var class; +var bar; + + +//// [parserInvalidIdentifiersInVariableStatements1.js] +var ; +var foo; +var ; +var bar; diff --git a/tests/baselines/reference/parserKeywordsAsIdentifierName2.js b/tests/baselines/reference/parserKeywordsAsIdentifierName2.js new file mode 100644 index 00000000000..bc47da5766e --- /dev/null +++ b/tests/baselines/reference/parserKeywordsAsIdentifierName2.js @@ -0,0 +1,7 @@ +//// [parserKeywordsAsIdentifierName2.ts] +// 'public' should be marked unusable, should complain on trailing /* +a.public /* + +//// [parserKeywordsAsIdentifierName2.js] +// 'public' should be marked unusable, should complain on trailing /* +a.public; /* diff --git a/tests/baselines/reference/parserMemberAccessAfterPostfixExpression1.js b/tests/baselines/reference/parserMemberAccessAfterPostfixExpression1.js new file mode 100644 index 00000000000..d8f6204adfa --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessAfterPostfixExpression1.js @@ -0,0 +1,6 @@ +//// [parserMemberAccessAfterPostfixExpression1.ts] +a--.toString() + +//// [parserMemberAccessAfterPostfixExpression1.js] +a--; +toString(); diff --git a/tests/baselines/reference/parserMemberAccessExpression1.js b/tests/baselines/reference/parserMemberAccessExpression1.js new file mode 100644 index 00000000000..83897e27097 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessExpression1.js @@ -0,0 +1,12 @@ +//// [parserMemberAccessExpression1.ts] +Foo(); +Foo.Bar(); +Foo.Bar(); +Foo.Bar(); + + +//// [parserMemberAccessExpression1.js] +Foo(); +Foo.Bar(); +Foo(Bar()); +Foo(Bar()); diff --git a/tests/baselines/reference/parserMemberAccessOffOfGenericType1.js b/tests/baselines/reference/parserMemberAccessOffOfGenericType1.js new file mode 100644 index 00000000000..4529fafba02 --- /dev/null +++ b/tests/baselines/reference/parserMemberAccessOffOfGenericType1.js @@ -0,0 +1,5 @@ +//// [parserMemberAccessOffOfGenericType1.ts] +var v = List.makeChild(); + +//// [parserMemberAccessOffOfGenericType1.js] +var v = List(makeChild()); diff --git a/tests/baselines/reference/parserMissingLambdaOpenBrace1.js b/tests/baselines/reference/parserMissingLambdaOpenBrace1.js new file mode 100644 index 00000000000..8280d8dc9b2 --- /dev/null +++ b/tests/baselines/reference/parserMissingLambdaOpenBrace1.js @@ -0,0 +1,23 @@ +//// [parserMissingLambdaOpenBrace1.ts] +class C { + where(filter: Iterator): Query { + return fromDoWhile(test => + var index = 0; + return this.doWhile((item, i) => filter(item, i) ? test(item, index++) : true); + }); + } +} + +//// [parserMissingLambdaOpenBrace1.js] +var C = (function () { + function C() { + } + C.prototype.where = function (filter) { + var _this = this; + return fromDoWhile(function (test) { + var index = 0; + return _this.doWhile(function (item, i) { return filter(item, i) ? test(item, index++) : true; }); + }); + }; + return C; +})(); diff --git a/tests/baselines/reference/parserMissingToken1.js b/tests/baselines/reference/parserMissingToken1.js new file mode 100644 index 00000000000..506e628fa38 --- /dev/null +++ b/tests/baselines/reference/parserMissingToken1.js @@ -0,0 +1,9 @@ +//// [parserMissingToken1.ts] +a / finally + +//// [parserMissingToken1.js] +a / ; +try { +} +finally { +} diff --git a/tests/baselines/reference/parserMissingToken2.js b/tests/baselines/reference/parserMissingToken2.js new file mode 100644 index 00000000000..753132a4a4a --- /dev/null +++ b/tests/baselines/reference/parserMissingToken2.js @@ -0,0 +1,5 @@ +//// [parserMissingToken2.ts] +/ b; + +//// [parserMissingToken2.js] +/ b;; diff --git a/tests/baselines/reference/parserModifierOnPropertySignature1.js b/tests/baselines/reference/parserModifierOnPropertySignature1.js new file mode 100644 index 00000000000..a71bfd756a0 --- /dev/null +++ b/tests/baselines/reference/parserModifierOnPropertySignature1.js @@ -0,0 +1,7 @@ +//// [parserModifierOnPropertySignature1.ts] +interface Foo{ + public biz; +} + + +//// [parserModifierOnPropertySignature1.js] diff --git a/tests/baselines/reference/parserModifierOnStatementInBlock1.js b/tests/baselines/reference/parserModifierOnStatementInBlock1.js new file mode 100644 index 00000000000..1796c9eddf5 --- /dev/null +++ b/tests/baselines/reference/parserModifierOnStatementInBlock1.js @@ -0,0 +1,11 @@ +//// [parserModifierOnStatementInBlock1.ts] +export function foo() { + export var x = this; +} + + +//// [parserModifierOnStatementInBlock1.js] +function foo() { + exports.x = this; +} +exports.foo = foo; diff --git a/tests/baselines/reference/parserModifierOnStatementInBlock3.js b/tests/baselines/reference/parserModifierOnStatementInBlock3.js new file mode 100644 index 00000000000..9c625f0dc7f --- /dev/null +++ b/tests/baselines/reference/parserModifierOnStatementInBlock3.js @@ -0,0 +1,14 @@ +//// [parserModifierOnStatementInBlock3.ts] +export function foo() { + export function bar() { + } +} + + +//// [parserModifierOnStatementInBlock3.js] +function foo() { + function bar() { + } + exports.bar = bar; +} +exports.foo = foo; diff --git a/tests/baselines/reference/parserModule1.js b/tests/baselines/reference/parserModule1.js new file mode 100644 index 00000000000..1eba49114ab --- /dev/null +++ b/tests/baselines/reference/parserModule1.js @@ -0,0 +1,60 @@ +//// [parserModule1.ts] + export module CompilerDiagnostics { + export var debug = false; + export interface IDiagnosticWriter { + Alert(output: string): void; + } + + export var diagnosticWriter: IDiagnosticWriter = null; + + export var analysisPass: number = 0; + + export function Alert(output: string) { + if (diagnosticWriter) { + diagnosticWriter.Alert(output); + } + } + + export function debugPrint(s: string) { + if (debug) { + Alert(s); + } + } + + export function assert(condition: boolean, s: string) { + if (debug) { + if (!condition) { + Alert(s); + } + } + } + + } + +//// [parserModule1.js] +var CompilerDiagnostics; +(function (CompilerDiagnostics) { + CompilerDiagnostics.debug = false; + CompilerDiagnostics.diagnosticWriter = null; + CompilerDiagnostics.analysisPass = 0; + function Alert(output) { + if (CompilerDiagnostics.diagnosticWriter) { + CompilerDiagnostics.diagnosticWriter.Alert(output); + } + } + CompilerDiagnostics.Alert = Alert; + function debugPrint(s) { + if (CompilerDiagnostics.debug) { + Alert(s); + } + } + CompilerDiagnostics.debugPrint = debugPrint; + function assert(condition, s) { + if (CompilerDiagnostics.debug) { + if (!condition) { + Alert(s); + } + } + } + CompilerDiagnostics.assert = assert; +})(CompilerDiagnostics = exports.CompilerDiagnostics || (exports.CompilerDiagnostics = {})); diff --git a/tests/baselines/reference/parserObjectType5.js b/tests/baselines/reference/parserObjectType5.js new file mode 100644 index 00000000000..59284c73e73 --- /dev/null +++ b/tests/baselines/reference/parserObjectType5.js @@ -0,0 +1,8 @@ +//// [parserObjectType5.ts] +var v: { + A: B + ; +}; + +//// [parserObjectType5.js] +var v; diff --git a/tests/baselines/reference/parserPostfixPostfixExpression1.js b/tests/baselines/reference/parserPostfixPostfixExpression1.js new file mode 100644 index 00000000000..ebb8917d777 --- /dev/null +++ b/tests/baselines/reference/parserPostfixPostfixExpression1.js @@ -0,0 +1,6 @@ +//// [parserPostfixPostfixExpression1.ts] +a++ ++; + +//// [parserPostfixPostfixExpression1.js] +a++; +++; diff --git a/tests/baselines/reference/parserPostfixUnaryExpression1.js b/tests/baselines/reference/parserPostfixUnaryExpression1.js new file mode 100644 index 00000000000..991e2f34f99 --- /dev/null +++ b/tests/baselines/reference/parserPostfixUnaryExpression1.js @@ -0,0 +1,6 @@ +//// [parserPostfixUnaryExpression1.ts] +foo ++ ++; + +//// [parserPostfixUnaryExpression1.js] +foo++; +++; diff --git a/tests/baselines/reference/parserPublicBreak1.js b/tests/baselines/reference/parserPublicBreak1.js new file mode 100644 index 00000000000..f1b9647f228 --- /dev/null +++ b/tests/baselines/reference/parserPublicBreak1.js @@ -0,0 +1,6 @@ +//// [parserPublicBreak1.ts] +public break; + + +//// [parserPublicBreak1.js] +break; diff --git a/tests/baselines/reference/parserRealSource1.js b/tests/baselines/reference/parserRealSource1.js new file mode 100644 index 00000000000..c62897c9aff --- /dev/null +++ b/tests/baselines/reference/parserRealSource1.js @@ -0,0 +1,325 @@ +//// [parserRealSource1.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + export module CompilerDiagnostics { + export var debug = false; + export interface IDiagnosticWriter { + Alert(output: string): void; + } + + export var diagnosticWriter: IDiagnosticWriter = null; + + export var analysisPass: number = 0; + + export function Alert(output: string) { + if (diagnosticWriter) { + diagnosticWriter.Alert(output); + } + } + + export function debugPrint(s: string) { + if (debug) { + Alert(s); + } + } + + export function assert(condition: boolean, s: string) { + if (debug) { + if (!condition) { + Alert(s); + } + } + } + + } + + export interface ILogger { + information(): boolean; + debug(): boolean; + warning(): boolean; + error(): boolean; + fatal(): boolean; + log(s: string): void; + } + + export class NullLogger implements ILogger { + public information(): boolean { return false; } + public debug(): boolean { return false; } + public warning(): boolean { return false; } + public error(): boolean { return false; } + public fatal(): boolean { return false; } + public log(s: string): void { + } + } + + export class LoggerAdapter implements ILogger { + private _information: boolean; + private _debug: boolean; + private _warning: boolean; + private _error: boolean; + private _fatal: boolean; + + constructor (public logger: ILogger) { + this._information = this.logger.information(); + this._debug = this.logger.debug(); + this._warning = this.logger.warning(); + this._error = this.logger.error(); + this._fatal = this.logger.fatal(); + } + + + public information(): boolean { return this._information; } + public debug(): boolean { return this._debug; } + public warning(): boolean { return this._warning; } + public error(): boolean { return this._error; } + public fatal(): boolean { return this._fatal; } + public log(s: string): void { + this.logger.log(s); + } + } + + export class BufferedLogger implements ILogger { + public logContents = []; + + public information(): boolean { return false; } + public debug(): boolean { return false; } + public warning(): boolean { return false; } + public error(): boolean { return false; } + public fatal(): boolean { return false; } + public log(s: string): void { + this.logContents.push(s); + } + } + + export function timeFunction(logger: ILogger, funcDescription: string, func: () =>any): any { + var start = +new Date(); + var result = func(); + var end = +new Date(); + logger.log(funcDescription + " completed in " + (end - start) + " msec"); + return result; + } + + export function stringToLiteral(value: string, length: number): string { + var result = ""; + + var addChar = (index: number) => { + var ch = value.charCodeAt(index); + switch (ch) { + case 0x09: // tab + result += "\\t"; + break; + case 0x0a: // line feed + result += "\\n"; + break; + case 0x0b: // vertical tab + result += "\\v"; + break; + case 0x0c: // form feed + result += "\\f"; + break; + case 0x0d: // carriage return + result += "\\r"; + break; + case 0x22: // double quote + result += "\\\""; + break; + case 0x27: // single quote + result += "\\\'"; + break; + case 0x5c: // Backslash + result += "\\"; + break; + default: + result += value.charAt(index); + } + } + + var tooLong = (value.length > length); + if (tooLong) { + var mid = length >> 1; + for (var i = 0; i < mid; i++) addChar(i); + result += "(...)"; + for (var i = value.length - mid; i < value.length; i++) addChar(i); + } + else { + length = value.length; + for (var i = 0; i < length; i++) addChar(i); + } + return result; + } +} + + +//// [parserRealSource1.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +/// +var TypeScript; +(function (TypeScript) { + var CompilerDiagnostics; + (function (CompilerDiagnostics) { + CompilerDiagnostics.debug = false; + CompilerDiagnostics.diagnosticWriter = null; + CompilerDiagnostics.analysisPass = 0; + function Alert(output) { + if (CompilerDiagnostics.diagnosticWriter) { + CompilerDiagnostics.diagnosticWriter.Alert(output); + } + } + CompilerDiagnostics.Alert = Alert; + function debugPrint(s) { + if (CompilerDiagnostics.debug) { + Alert(s); + } + } + CompilerDiagnostics.debugPrint = debugPrint; + function assert(condition, s) { + if (CompilerDiagnostics.debug) { + if (!condition) { + Alert(s); + } + } + } + CompilerDiagnostics.assert = assert; + })(CompilerDiagnostics = TypeScript.CompilerDiagnostics || (TypeScript.CompilerDiagnostics = {})); + var NullLogger = (function () { + function NullLogger() { + } + NullLogger.prototype.information = function () { + return false; + }; + NullLogger.prototype.debug = function () { + return false; + }; + NullLogger.prototype.warning = function () { + return false; + }; + NullLogger.prototype.error = function () { + return false; + }; + NullLogger.prototype.fatal = function () { + return false; + }; + NullLogger.prototype.log = function (s) { + }; + return NullLogger; + })(); + TypeScript.NullLogger = NullLogger; + var LoggerAdapter = (function () { + function LoggerAdapter(logger) { + this.logger = logger; + this._information = this.logger.information(); + this._debug = this.logger.debug(); + this._warning = this.logger.warning(); + this._error = this.logger.error(); + this._fatal = this.logger.fatal(); + } + LoggerAdapter.prototype.information = function () { + return this._information; + }; + LoggerAdapter.prototype.debug = function () { + return this._debug; + }; + LoggerAdapter.prototype.warning = function () { + return this._warning; + }; + LoggerAdapter.prototype.error = function () { + return this._error; + }; + LoggerAdapter.prototype.fatal = function () { + return this._fatal; + }; + LoggerAdapter.prototype.log = function (s) { + this.logger.log(s); + }; + return LoggerAdapter; + })(); + TypeScript.LoggerAdapter = LoggerAdapter; + var BufferedLogger = (function () { + function BufferedLogger() { + this.logContents = []; + } + BufferedLogger.prototype.information = function () { + return false; + }; + BufferedLogger.prototype.debug = function () { + return false; + }; + BufferedLogger.prototype.warning = function () { + return false; + }; + BufferedLogger.prototype.error = function () { + return false; + }; + BufferedLogger.prototype.fatal = function () { + return false; + }; + BufferedLogger.prototype.log = function (s) { + this.logContents.push(s); + }; + return BufferedLogger; + })(); + TypeScript.BufferedLogger = BufferedLogger; + function timeFunction(logger, funcDescription, func) { + var start = +new Date(); + var result = func(); + var end = +new Date(); + logger.log(funcDescription + " completed in " + (end - start) + " msec"); + return result; + } + TypeScript.timeFunction = timeFunction; + function stringToLiteral(value, length) { + var result = ""; + var addChar = function (index) { + var ch = value.charCodeAt(index); + switch (ch) { + case 0x09: + result += "\\t"; + break; + case 0x0a: + result += "\\n"; + break; + case 0x0b: + result += "\\v"; + break; + case 0x0c: + result += "\\f"; + break; + case 0x0d: + result += "\\r"; + break; + case 0x22: + result += "\\\""; + break; + case 0x27: + result += "\\\'"; + break; + case 0x5c: + result += "\\"; + break; + default: + result += value.charAt(index); + } + }; + var tooLong = (value.length > length); + if (tooLong) { + var mid = length >> 1; + for (var i = 0; i < mid; i++) + addChar(i); + result += "(...)"; + for (var i = value.length - mid; i < value.length; i++) + addChar(i); + } + else { + length = value.length; + for (var i = 0; i < length; i++) + addChar(i); + } + return result; + } + TypeScript.stringToLiteral = stringToLiteral; +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource10.js b/tests/baselines/reference/parserRealSource10.js new file mode 100644 index 00000000000..0dd944a7721 --- /dev/null +++ b/tests/baselines/reference/parserRealSource10.js @@ -0,0 +1,930 @@ +//// [parserRealSource10.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + export enum TokenID { + // Keywords + Any, + Bool, + Break, + Case, + Catch, + Class, + Const, + Continue, + Debugger, + Default, + Delete, + Do, + Else, + Enum, + Export, + Extends, + Declare, + False, + Finally, + For, + Function, + Constructor, + Get, + If, + Implements, + Import, + In, + InstanceOf, + Interface, + Let, + Module, + New, + Number, + Null, + Package, + Private, + Protected, + Public, + Return, + Set, + Static, + String, + Super, + Switch, + This, + Throw, + True, + Try, + TypeOf, + Var, + Void, + With, + While, + Yield, + // Punctuation + Semicolon, + OpenParen, + CloseParen, + OpenBracket, + CloseBracket, + OpenBrace, + CloseBrace, + Comma, + Equals, + PlusEquals, + MinusEquals, + AsteriskEquals, + SlashEquals, + PercentEquals, + AmpersandEquals, + CaretEquals, + BarEquals, + LessThanLessThanEquals, + GreaterThanGreaterThanEquals, + GreaterThanGreaterThanGreaterThanEquals, + Question, + Colon, + BarBar, + AmpersandAmpersand, + Bar, + Caret, + And, + EqualsEquals, + ExclamationEquals, + EqualsEqualsEquals, + ExclamationEqualsEquals, + LessThan, + LessThanEquals, + GreaterThan, + GreaterThanEquals, + LessThanLessThan, + GreaterThanGreaterThan, + GreaterThanGreaterThanGreaterThan, + Plus, + Minus, + Asterisk, + Slash, + Percent, + Tilde, + Exclamation, + PlusPlus, + MinusMinus, + Dot, + DotDotDot, + Error, + EndOfFile, + EqualsGreaterThan, + Identifier, + StringLiteral, + RegularExpressionLiteral, + NumberLiteral, + Whitespace, + Comment, + Lim, + LimFixed = EqualsGreaterThan, + LimKeyword = Yield, + } + + export var tokenTable = new TokenInfo[]; + export var nodeTypeTable = new string[]; + export var nodeTypeToTokTable = new number[]; + export var noRegexTable = new boolean[]; + + noRegexTable[TokenID.Identifier] = true; + noRegexTable[TokenID.StringLiteral] = true; + noRegexTable[TokenID.NumberLiteral] = true; + noRegexTable[TokenID.RegularExpressionLiteral] = true; + noRegexTable[TokenID.This] = true; + noRegexTable[TokenID.PlusPlus] = true; + noRegexTable[TokenID.MinusMinus] = true; + noRegexTable[TokenID.CloseParen] = true; + noRegexTable[TokenID.CloseBracket] = true; + noRegexTable[TokenID.CloseBrace] = true; + noRegexTable[TokenID.True] = true; + noRegexTable[TokenID.False] = true; + + export enum OperatorPrecedence { + None, + Comma, + Assignment, + Conditional, + LogicalOr, + LogicalAnd, + BitwiseOr, + BitwiseExclusiveOr, + BitwiseAnd, + Equality, + Relational, + Shift, + Additive, + Multiplicative, + Unary, + Lim + } + + export enum Reservation { + None = 0, + Javascript = 1, + JavascriptFuture = 2, + TypeScript = 4, + JavascriptFutureStrict = 8, + TypeScriptAndJS = Javascript | TypeScript, + TypeScriptAndJSFuture = JavascriptFuture | TypeScript, + TypeScriptAndJSFutureStrict = JavascriptFutureStrict | TypeScript, + } + + export class TokenInfo { + constructor (public tokenId: TokenID, public reservation: Reservation, + public binopPrecedence: number, public binopNodeType: number, + public unopPrecedence: number, public unopNodeType: number, + public text: string, public ers: ErrorRecoverySet) { } + } + + function setTokenInfo(tokenId: TokenID, reservation: number, binopPrecedence: number, + binopNodeType: number, unopPrecedence: number, unopNodeType: number, + text: string, ers: ErrorRecoverySet) { + if (tokenId !== undefined) { + tokenTable[tokenId] = new TokenInfo(tokenId, reservation, binopPrecedence, + binopNodeType, unopPrecedence, unopNodeType, text, ers); + if (binopNodeType != NodeType.None) { + nodeTypeTable[binopNodeType] = text; + nodeTypeToTokTable[binopNodeType] = tokenId; + } + if (unopNodeType != NodeType.None) { + nodeTypeTable[unopNodeType] = text; + } + } + } + + setTokenInfo(TokenID.Any, Reservation.TypeScript, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "any", ErrorRecoverySet.PrimType); + setTokenInfo(TokenID.Bool, Reservation.TypeScript, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "boolean", ErrorRecoverySet.PrimType); + setTokenInfo(TokenID.Break, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "break", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.Case, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "case", ErrorRecoverySet.SCase); + setTokenInfo(TokenID.Catch, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "catch", ErrorRecoverySet.Catch); + setTokenInfo(TokenID.Class, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "class", ErrorRecoverySet.TypeScriptS); + setTokenInfo(TokenID.Const, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "const", ErrorRecoverySet.Var); + setTokenInfo(TokenID.Continue, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "continue", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.Debugger, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.Debugger, "debugger", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.Default, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "default", ErrorRecoverySet.SCase); + setTokenInfo(TokenID.Delete, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.Unary, NodeType.Delete, "delete", ErrorRecoverySet.Prefix); + setTokenInfo(TokenID.Do, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "do", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.Else, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "else", ErrorRecoverySet.Else); + setTokenInfo(TokenID.Enum, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "enum", ErrorRecoverySet.TypeScriptS); + setTokenInfo(TokenID.Export, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "export", ErrorRecoverySet.TypeScriptS); + setTokenInfo(TokenID.Extends, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "extends", ErrorRecoverySet.None); + setTokenInfo(TokenID.Declare, Reservation.TypeScript, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "declare", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.False, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "false", ErrorRecoverySet.RLit); + setTokenInfo(TokenID.Finally, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "finally", ErrorRecoverySet.Catch); + setTokenInfo(TokenID.For, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "for", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.Function, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "function", ErrorRecoverySet.Func); + setTokenInfo(TokenID.Constructor, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "constructor", ErrorRecoverySet.Func); + setTokenInfo(TokenID.Get, Reservation.TypeScript, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "get", ErrorRecoverySet.Func); + setTokenInfo(TokenID.Set, Reservation.TypeScript, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "set", ErrorRecoverySet.Func); + setTokenInfo(TokenID.If, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "if", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.Implements, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "implements", ErrorRecoverySet.None); + setTokenInfo(TokenID.Import, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "import", ErrorRecoverySet.TypeScriptS); + setTokenInfo(TokenID.In, Reservation.TypeScriptAndJS, OperatorPrecedence.Relational, NodeType.In, OperatorPrecedence.None, NodeType.None, "in", ErrorRecoverySet.None); + setTokenInfo(TokenID.InstanceOf, Reservation.TypeScriptAndJS, OperatorPrecedence.Relational, NodeType.InstOf, OperatorPrecedence.None, NodeType.None, "instanceof", ErrorRecoverySet.BinOp); + setTokenInfo(TokenID.Interface, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "interface", ErrorRecoverySet.TypeScriptS); + setTokenInfo(TokenID.Let, Reservation.JavascriptFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "let", ErrorRecoverySet.None); + setTokenInfo(TokenID.Module, Reservation.TypeScript, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "module", ErrorRecoverySet.TypeScriptS); + setTokenInfo(TokenID.New, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "new", ErrorRecoverySet.PreOp); + setTokenInfo(TokenID.Number, Reservation.TypeScript, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "number", ErrorRecoverySet.PrimType); + setTokenInfo(TokenID.Null, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "null", ErrorRecoverySet.RLit); + setTokenInfo(TokenID.Package, Reservation.JavascriptFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "package", ErrorRecoverySet.None); + setTokenInfo(TokenID.Private, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "private", ErrorRecoverySet.TypeScriptS); + setTokenInfo(TokenID.Protected, Reservation.JavascriptFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "protected", ErrorRecoverySet.None); + setTokenInfo(TokenID.Public, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "public", ErrorRecoverySet.TypeScriptS); + setTokenInfo(TokenID.Return, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "return", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.Static, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "static", ErrorRecoverySet.None); + setTokenInfo(TokenID.String, Reservation.TypeScript, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "string", ErrorRecoverySet.PrimType); + setTokenInfo(TokenID.Super, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "super", ErrorRecoverySet.RLit); + setTokenInfo(TokenID.Switch, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "switch", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.This, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "this", ErrorRecoverySet.RLit); + setTokenInfo(TokenID.Throw, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "throw", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.True, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "true", ErrorRecoverySet.RLit); + setTokenInfo(TokenID.Try, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "try", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.TypeOf, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.Unary, NodeType.Typeof, "typeof", ErrorRecoverySet.Prefix); + setTokenInfo(TokenID.Var, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "var", ErrorRecoverySet.Var); + setTokenInfo(TokenID.Void, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.Unary, NodeType.Void, "void", ErrorRecoverySet.Prefix); + setTokenInfo(TokenID.With, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.With, "with", ErrorRecoverySet.Stmt); + setTokenInfo(TokenID.While, Reservation.TypeScriptAndJS, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "while", ErrorRecoverySet.While); + setTokenInfo(TokenID.Yield, Reservation.JavascriptFutureStrict, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "yield", ErrorRecoverySet.None); + + setTokenInfo(TokenID.Identifier, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "identifier", ErrorRecoverySet.ID); + setTokenInfo(TokenID.NumberLiteral, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "numberLiteral", ErrorRecoverySet.Literal); + setTokenInfo(TokenID.RegularExpressionLiteral, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "regex", ErrorRecoverySet.RegExp); + setTokenInfo(TokenID.StringLiteral, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "qstring", ErrorRecoverySet.Literal); + + // Non-operator non-identifier tokens + setTokenInfo(TokenID.Semicolon, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, ";", ErrorRecoverySet.SColon); // ; + setTokenInfo(TokenID.CloseParen, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, ")", ErrorRecoverySet.RParen); // ) + setTokenInfo(TokenID.CloseBracket, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "]", ErrorRecoverySet.RBrack); // ] + setTokenInfo(TokenID.OpenBrace, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "{", ErrorRecoverySet.LCurly); // { + setTokenInfo(TokenID.CloseBrace, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "}", ErrorRecoverySet.RCurly); // } + setTokenInfo(TokenID.DotDotDot, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "...", ErrorRecoverySet.None); // ... + + // Operator non-identifier tokens + setTokenInfo(TokenID.Comma, Reservation.None, OperatorPrecedence.Comma, NodeType.Comma, OperatorPrecedence.None, NodeType.None, ",", ErrorRecoverySet.Comma); // , + setTokenInfo(TokenID.Equals, Reservation.None, OperatorPrecedence.Assignment, NodeType.Asg, OperatorPrecedence.None, NodeType.None, "=", ErrorRecoverySet.Asg); // = + setTokenInfo(TokenID.PlusEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgAdd, OperatorPrecedence.None, NodeType.None, "+=", ErrorRecoverySet.BinOp); // += + setTokenInfo(TokenID.MinusEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgSub, OperatorPrecedence.None, NodeType.None, "-=", ErrorRecoverySet.BinOp); // -= + setTokenInfo(TokenID.AsteriskEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgMul, OperatorPrecedence.None, NodeType.None, "*=", ErrorRecoverySet.BinOp); // *= + + setTokenInfo(TokenID.SlashEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgDiv, OperatorPrecedence.None, NodeType.None, "/=", ErrorRecoverySet.BinOp); // /= + setTokenInfo(TokenID.PercentEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgMod, OperatorPrecedence.None, NodeType.None, "%=", ErrorRecoverySet.BinOp); // %= + setTokenInfo(TokenID.AmpersandEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgAnd, OperatorPrecedence.None, NodeType.None, "&=", ErrorRecoverySet.BinOp); // &= + setTokenInfo(TokenID.CaretEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgXor, OperatorPrecedence.None, NodeType.None, "^=", ErrorRecoverySet.BinOp); // ^= + setTokenInfo(TokenID.BarEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgOr, OperatorPrecedence.None, NodeType.None, "|=", ErrorRecoverySet.BinOp); // |= + setTokenInfo(TokenID.LessThanLessThanEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgLsh, OperatorPrecedence.None, NodeType.None, "<<=", ErrorRecoverySet.BinOp); // <<= + setTokenInfo(TokenID.GreaterThanGreaterThanEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgRsh, OperatorPrecedence.None, NodeType.None, ">>=", ErrorRecoverySet.BinOp); // >>= + setTokenInfo(TokenID.GreaterThanGreaterThanGreaterThanEquals, Reservation.None, OperatorPrecedence.Assignment, NodeType.AsgRs2, OperatorPrecedence.None, NodeType.None, ">>>=", ErrorRecoverySet.BinOp); // >>>= + setTokenInfo(TokenID.Question, Reservation.None, OperatorPrecedence.Conditional, NodeType.ConditionalExpression, OperatorPrecedence.None, NodeType.None, "?", ErrorRecoverySet.BinOp); // ? + setTokenInfo(TokenID.Colon, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, ":", ErrorRecoverySet.Colon); // : + setTokenInfo(TokenID.BarBar, Reservation.None, OperatorPrecedence.LogicalOr, NodeType.LogOr, OperatorPrecedence.None, NodeType.None, "||", ErrorRecoverySet.BinOp); // || + setTokenInfo(TokenID.AmpersandAmpersand, Reservation.None, OperatorPrecedence.LogicalAnd, NodeType.LogAnd, OperatorPrecedence.None, NodeType.None, "&&", ErrorRecoverySet.BinOp); // && + setTokenInfo(TokenID.Bar, Reservation.None, OperatorPrecedence.BitwiseOr, NodeType.Or, OperatorPrecedence.None, NodeType.None, "|", ErrorRecoverySet.BinOp); // | + setTokenInfo(TokenID.Caret, Reservation.None, OperatorPrecedence.BitwiseExclusiveOr, NodeType.Xor, OperatorPrecedence.None, NodeType.None, "^", ErrorRecoverySet.BinOp); // ^ + setTokenInfo(TokenID.And, Reservation.None, OperatorPrecedence.BitwiseAnd, NodeType.And, OperatorPrecedence.None, NodeType.None, "&", ErrorRecoverySet.BinOp); // & + setTokenInfo(TokenID.EqualsEquals, Reservation.None, OperatorPrecedence.Equality, NodeType.Eq, OperatorPrecedence.None, NodeType.None, "==", ErrorRecoverySet.BinOp); // == + setTokenInfo(TokenID.ExclamationEquals, Reservation.None, OperatorPrecedence.Equality, NodeType.Ne, OperatorPrecedence.None, NodeType.None, "!=", ErrorRecoverySet.BinOp); // != + setTokenInfo(TokenID.EqualsEqualsEquals, Reservation.None, OperatorPrecedence.Equality, NodeType.Eqv, OperatorPrecedence.None, NodeType.None, "===", ErrorRecoverySet.BinOp); // === + setTokenInfo(TokenID.ExclamationEqualsEquals, Reservation.None, OperatorPrecedence.Equality, NodeType.NEqv, OperatorPrecedence.None, NodeType.None, "!==", ErrorRecoverySet.BinOp); // !== + setTokenInfo(TokenID.LessThan, Reservation.None, OperatorPrecedence.Relational, NodeType.Lt, OperatorPrecedence.None, NodeType.None, "<", ErrorRecoverySet.BinOp); // < + setTokenInfo(TokenID.LessThanEquals, Reservation.None, OperatorPrecedence.Relational, NodeType.Le, OperatorPrecedence.None, NodeType.None, "<=", ErrorRecoverySet.BinOp); // <= + setTokenInfo(TokenID.GreaterThan, Reservation.None, OperatorPrecedence.Relational, NodeType.Gt, OperatorPrecedence.None, NodeType.None, ">", ErrorRecoverySet.BinOp); // > + setTokenInfo(TokenID.GreaterThanEquals, Reservation.None, OperatorPrecedence.Relational, NodeType.Ge, OperatorPrecedence.None, NodeType.None, ">=", ErrorRecoverySet.BinOp); // >= + setTokenInfo(TokenID.LessThanLessThan, Reservation.None, OperatorPrecedence.Shift, NodeType.Lsh, OperatorPrecedence.None, NodeType.None, "<<", ErrorRecoverySet.BinOp); // << + setTokenInfo(TokenID.GreaterThanGreaterThan, Reservation.None, OperatorPrecedence.Shift, NodeType.Rsh, OperatorPrecedence.None, NodeType.None, ">>", ErrorRecoverySet.BinOp); // >> + setTokenInfo(TokenID.GreaterThanGreaterThanGreaterThan, Reservation.None, OperatorPrecedence.Shift, NodeType.Rs2, OperatorPrecedence.None, NodeType.None, ">>>", ErrorRecoverySet.BinOp); // >>> + setTokenInfo(TokenID.Plus, Reservation.None, OperatorPrecedence.Additive, NodeType.Add, OperatorPrecedence.Unary, NodeType.Pos, "+", ErrorRecoverySet.AddOp); // + + setTokenInfo(TokenID.Minus, Reservation.None, OperatorPrecedence.Additive, NodeType.Sub, OperatorPrecedence.Unary, NodeType.Neg, "-", ErrorRecoverySet.AddOp); // - + setTokenInfo(TokenID.Asterisk, Reservation.None, OperatorPrecedence.Multiplicative, NodeType.Mul, OperatorPrecedence.None, NodeType.None, "*", ErrorRecoverySet.BinOp); // * + setTokenInfo(TokenID.Slash, Reservation.None, OperatorPrecedence.Multiplicative, NodeType.Div, OperatorPrecedence.None, NodeType.None, "/", ErrorRecoverySet.BinOp); // / + setTokenInfo(TokenID.Percent, Reservation.None, OperatorPrecedence.Multiplicative, NodeType.Mod, OperatorPrecedence.None, NodeType.None, "%", ErrorRecoverySet.BinOp); // % + setTokenInfo(TokenID.Tilde, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.Unary, NodeType.Not, "~", ErrorRecoverySet.PreOp); // ~ + setTokenInfo(TokenID.Exclamation, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.Unary, NodeType.LogNot, "!", ErrorRecoverySet.PreOp); // ! + setTokenInfo(TokenID.PlusPlus, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.Unary, NodeType.IncPre, "++", ErrorRecoverySet.PreOp); // ++ + setTokenInfo(TokenID.MinusMinus, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.Unary, NodeType.DecPre, "--", ErrorRecoverySet.PreOp); // -- + setTokenInfo(TokenID.OpenParen, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "(", ErrorRecoverySet.LParen); // ( + setTokenInfo(TokenID.OpenBracket, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "[", ErrorRecoverySet.LBrack); // [ + setTokenInfo(TokenID.Dot, Reservation.None, OperatorPrecedence.Unary, NodeType.None, OperatorPrecedence.None, NodeType.None, ".", ErrorRecoverySet.Dot); // . + setTokenInfo(TokenID.EndOfFile, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "", ErrorRecoverySet.EOF); // EOF + setTokenInfo(TokenID.EqualsGreaterThan, Reservation.None, OperatorPrecedence.None, NodeType.None, OperatorPrecedence.None, NodeType.None, "=>", ErrorRecoverySet.None); // => + + export function lookupToken(tokenId: TokenID): TokenInfo { + return tokenTable[tokenId]; + } + + export enum TokenClass { + Punctuation, + Keyword, + Operator, + Comment, + Whitespace, + Identifier, + Literal, + } + + export class SavedToken { + constructor (public tok: Token, public minChar: number, public limChar: number) { } + } + + export class Token { + constructor (public tokenId: TokenID) { + } + + public toString() { + return "token: " + this.tokenId + " " + this.getText() + " (" + (TokenID)._map[this.tokenId] + ")"; + } + + public print(line: number, outfile) { + outfile.WriteLine(this.toString() + ",on line" + line); + } + + public getText(): string { + return tokenTable[this.tokenId].text; + } + + public classification(): TokenClass { + if (this.tokenId <= TokenID.LimKeyword) { + return TokenClass.Keyword; + } + else { + var tokenInfo = lookupToken(this.tokenId); + if (tokenInfo != undefined) { + if ((tokenInfo.unopNodeType != NodeType.None) || + (tokenInfo.binopNodeType != NodeType.None)) { + return TokenClass.Operator; + } + } + } + + return TokenClass.Punctuation; + } + } + + export class NumberLiteralToken extends Token { + constructor (public value: number, public hasEmptyFraction?: boolean) { + super(TokenID.NumberLiteral); + } + + public getText(): string { + return this.hasEmptyFraction ? this.value.toString() + ".0" : this.value.toString(); + } + + public classification(): TokenClass { + return TokenClass.Literal; + } + } + + export class StringLiteralToken extends Token { + constructor (public value: string) { + super(TokenID.StringLiteral); + } + + public getText(): string { + return this.value; + } + + public classification(): TokenClass { + return TokenClass.Literal; + } + } + + export class IdentifierToken extends Token { + constructor (public value: string, public hasEscapeSequence : boolean) { + super(TokenID.Identifier); + } + public getText(): string { + return this.value; + } + public classification(): TokenClass { + return TokenClass.Identifier; + } + } + + export class WhitespaceToken extends Token { + constructor (tokenId: TokenID, public value: string) { + super(tokenId); + } + + public getText(): string { + return this.value; + } + + public classification(): TokenClass { + return TokenClass.Whitespace; + } + } + + export class CommentToken extends Token { + constructor (tokenID: TokenID, public value: string, public isBlock: boolean, public startPos: number, public line: number, public endsLine: boolean) { + super(tokenID); + } + + public getText(): string { + return this.value; + } + + public classification(): TokenClass { + return TokenClass.Comment; + } + } + + export class RegularExpressionLiteralToken extends Token { + constructor(public regex) { + super(TokenID.RegularExpressionLiteral); + } + + public getText(): string { + return this.regex.toString(); + } + + public classification(): TokenClass { + return TokenClass.Literal; + } + } + + // TODO: new with length TokenID.LimFixed + export var staticTokens = new Token[]; + export function initializeStaticTokens() { + for (var i = 0; i <= TokenID.LimFixed; i++) { + staticTokens[i] = new Token(i); + } + } +} + +//// [parserRealSource10.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +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 TypeScript; +(function (TypeScript) { + (function (TokenID) { + // Keywords + TokenID[TokenID["Any"] = 0] = "Any"; + TokenID[TokenID["Bool"] = 1] = "Bool"; + TokenID[TokenID["Break"] = 2] = "Break"; + TokenID[TokenID["Case"] = 3] = "Case"; + TokenID[TokenID["Catch"] = 4] = "Catch"; + TokenID[TokenID["Class"] = 5] = "Class"; + TokenID[TokenID["Const"] = 6] = "Const"; + TokenID[TokenID["Continue"] = 7] = "Continue"; + TokenID[TokenID["Debugger"] = 8] = "Debugger"; + TokenID[TokenID["Default"] = 9] = "Default"; + TokenID[TokenID["Delete"] = 10] = "Delete"; + TokenID[TokenID["Do"] = 11] = "Do"; + TokenID[TokenID["Else"] = 12] = "Else"; + TokenID[TokenID["Enum"] = 13] = "Enum"; + TokenID[TokenID["Export"] = 14] = "Export"; + TokenID[TokenID["Extends"] = 15] = "Extends"; + TokenID[TokenID["Declare"] = 16] = "Declare"; + TokenID[TokenID["False"] = 17] = "False"; + TokenID[TokenID["Finally"] = 18] = "Finally"; + TokenID[TokenID["For"] = 19] = "For"; + TokenID[TokenID["Function"] = 20] = "Function"; + TokenID[TokenID["Constructor"] = 21] = "Constructor"; + TokenID[TokenID["Get"] = 22] = "Get"; + TokenID[TokenID["If"] = 23] = "If"; + TokenID[TokenID["Implements"] = 24] = "Implements"; + TokenID[TokenID["Import"] = 25] = "Import"; + TokenID[TokenID["In"] = 26] = "In"; + TokenID[TokenID["InstanceOf"] = 27] = "InstanceOf"; + TokenID[TokenID["Interface"] = 28] = "Interface"; + TokenID[TokenID["Let"] = 29] = "Let"; + TokenID[TokenID["Module"] = 30] = "Module"; + TokenID[TokenID["New"] = 31] = "New"; + TokenID[TokenID["Number"] = 32] = "Number"; + TokenID[TokenID["Null"] = 33] = "Null"; + TokenID[TokenID["Package"] = 34] = "Package"; + TokenID[TokenID["Private"] = 35] = "Private"; + TokenID[TokenID["Protected"] = 36] = "Protected"; + TokenID[TokenID["Public"] = 37] = "Public"; + TokenID[TokenID["Return"] = 38] = "Return"; + TokenID[TokenID["Set"] = 39] = "Set"; + TokenID[TokenID["Static"] = 40] = "Static"; + TokenID[TokenID["String"] = 41] = "String"; + TokenID[TokenID["Super"] = 42] = "Super"; + TokenID[TokenID["Switch"] = 43] = "Switch"; + TokenID[TokenID["This"] = 44] = "This"; + TokenID[TokenID["Throw"] = 45] = "Throw"; + TokenID[TokenID["True"] = 46] = "True"; + TokenID[TokenID["Try"] = 47] = "Try"; + TokenID[TokenID["TypeOf"] = 48] = "TypeOf"; + TokenID[TokenID["Var"] = 49] = "Var"; + TokenID[TokenID["Void"] = 50] = "Void"; + TokenID[TokenID["With"] = 51] = "With"; + TokenID[TokenID["While"] = 52] = "While"; + TokenID[TokenID["Yield"] = 53] = "Yield"; + // Punctuation + TokenID[TokenID["Semicolon"] = 54] = "Semicolon"; + TokenID[TokenID["OpenParen"] = 55] = "OpenParen"; + TokenID[TokenID["CloseParen"] = 56] = "CloseParen"; + TokenID[TokenID["OpenBracket"] = 57] = "OpenBracket"; + TokenID[TokenID["CloseBracket"] = 58] = "CloseBracket"; + TokenID[TokenID["OpenBrace"] = 59] = "OpenBrace"; + TokenID[TokenID["CloseBrace"] = 60] = "CloseBrace"; + TokenID[TokenID["Comma"] = 61] = "Comma"; + TokenID[TokenID["Equals"] = 62] = "Equals"; + TokenID[TokenID["PlusEquals"] = 63] = "PlusEquals"; + TokenID[TokenID["MinusEquals"] = 64] = "MinusEquals"; + TokenID[TokenID["AsteriskEquals"] = 65] = "AsteriskEquals"; + TokenID[TokenID["SlashEquals"] = 66] = "SlashEquals"; + TokenID[TokenID["PercentEquals"] = 67] = "PercentEquals"; + TokenID[TokenID["AmpersandEquals"] = 68] = "AmpersandEquals"; + TokenID[TokenID["CaretEquals"] = 69] = "CaretEquals"; + TokenID[TokenID["BarEquals"] = 70] = "BarEquals"; + TokenID[TokenID["LessThanLessThanEquals"] = 71] = "LessThanLessThanEquals"; + TokenID[TokenID["GreaterThanGreaterThanEquals"] = 72] = "GreaterThanGreaterThanEquals"; + TokenID[TokenID["GreaterThanGreaterThanGreaterThanEquals"] = 73] = "GreaterThanGreaterThanGreaterThanEquals"; + TokenID[TokenID["Question"] = 74] = "Question"; + TokenID[TokenID["Colon"] = 75] = "Colon"; + TokenID[TokenID["BarBar"] = 76] = "BarBar"; + TokenID[TokenID["AmpersandAmpersand"] = 77] = "AmpersandAmpersand"; + TokenID[TokenID["Bar"] = 78] = "Bar"; + TokenID[TokenID["Caret"] = 79] = "Caret"; + TokenID[TokenID["And"] = 80] = "And"; + TokenID[TokenID["EqualsEquals"] = 81] = "EqualsEquals"; + TokenID[TokenID["ExclamationEquals"] = 82] = "ExclamationEquals"; + TokenID[TokenID["EqualsEqualsEquals"] = 83] = "EqualsEqualsEquals"; + TokenID[TokenID["ExclamationEqualsEquals"] = 84] = "ExclamationEqualsEquals"; + TokenID[TokenID["LessThan"] = 85] = "LessThan"; + TokenID[TokenID["LessThanEquals"] = 86] = "LessThanEquals"; + TokenID[TokenID["GreaterThan"] = 87] = "GreaterThan"; + TokenID[TokenID["GreaterThanEquals"] = 88] = "GreaterThanEquals"; + TokenID[TokenID["LessThanLessThan"] = 89] = "LessThanLessThan"; + TokenID[TokenID["GreaterThanGreaterThan"] = 90] = "GreaterThanGreaterThan"; + TokenID[TokenID["GreaterThanGreaterThanGreaterThan"] = 91] = "GreaterThanGreaterThanGreaterThan"; + TokenID[TokenID["Plus"] = 92] = "Plus"; + TokenID[TokenID["Minus"] = 93] = "Minus"; + TokenID[TokenID["Asterisk"] = 94] = "Asterisk"; + TokenID[TokenID["Slash"] = 95] = "Slash"; + TokenID[TokenID["Percent"] = 96] = "Percent"; + TokenID[TokenID["Tilde"] = 97] = "Tilde"; + TokenID[TokenID["Exclamation"] = 98] = "Exclamation"; + TokenID[TokenID["PlusPlus"] = 99] = "PlusPlus"; + TokenID[TokenID["MinusMinus"] = 100] = "MinusMinus"; + TokenID[TokenID["Dot"] = 101] = "Dot"; + TokenID[TokenID["DotDotDot"] = 102] = "DotDotDot"; + TokenID[TokenID["Error"] = 103] = "Error"; + TokenID[TokenID["EndOfFile"] = 104] = "EndOfFile"; + TokenID[TokenID["EqualsGreaterThan"] = 105] = "EqualsGreaterThan"; + TokenID[TokenID["Identifier"] = 106] = "Identifier"; + TokenID[TokenID["StringLiteral"] = 107] = "StringLiteral"; + TokenID[TokenID["RegularExpressionLiteral"] = 108] = "RegularExpressionLiteral"; + TokenID[TokenID["NumberLiteral"] = 109] = "NumberLiteral"; + TokenID[TokenID["Whitespace"] = 110] = "Whitespace"; + TokenID[TokenID["Comment"] = 111] = "Comment"; + TokenID[TokenID["Lim"] = 112] = "Lim"; + TokenID[TokenID["LimFixed"] = TokenID.EqualsGreaterThan] = "LimFixed"; + TokenID[TokenID["LimKeyword"] = TokenID.Yield] = "LimKeyword"; + })(TypeScript.TokenID || (TypeScript.TokenID = {})); + var TokenID = TypeScript.TokenID; + TypeScript.tokenTable = new TokenInfo[]; + TypeScript.nodeTypeTable = new string[]; + TypeScript.nodeTypeToTokTable = new number[]; + TypeScript.noRegexTable = new boolean[]; + TypeScript.noRegexTable[106 /* Identifier */] = true; + TypeScript.noRegexTable[107 /* StringLiteral */] = true; + TypeScript.noRegexTable[109 /* NumberLiteral */] = true; + TypeScript.noRegexTable[108 /* RegularExpressionLiteral */] = true; + TypeScript.noRegexTable[44 /* This */] = true; + TypeScript.noRegexTable[99 /* PlusPlus */] = true; + TypeScript.noRegexTable[100 /* MinusMinus */] = true; + TypeScript.noRegexTable[56 /* CloseParen */] = true; + TypeScript.noRegexTable[58 /* CloseBracket */] = true; + TypeScript.noRegexTable[60 /* CloseBrace */] = true; + TypeScript.noRegexTable[46 /* True */] = true; + TypeScript.noRegexTable[17 /* False */] = true; + (function (OperatorPrecedence) { + OperatorPrecedence[OperatorPrecedence["None"] = 0] = "None"; + OperatorPrecedence[OperatorPrecedence["Comma"] = 1] = "Comma"; + OperatorPrecedence[OperatorPrecedence["Assignment"] = 2] = "Assignment"; + OperatorPrecedence[OperatorPrecedence["Conditional"] = 3] = "Conditional"; + OperatorPrecedence[OperatorPrecedence["LogicalOr"] = 4] = "LogicalOr"; + OperatorPrecedence[OperatorPrecedence["LogicalAnd"] = 5] = "LogicalAnd"; + OperatorPrecedence[OperatorPrecedence["BitwiseOr"] = 6] = "BitwiseOr"; + OperatorPrecedence[OperatorPrecedence["BitwiseExclusiveOr"] = 7] = "BitwiseExclusiveOr"; + OperatorPrecedence[OperatorPrecedence["BitwiseAnd"] = 8] = "BitwiseAnd"; + OperatorPrecedence[OperatorPrecedence["Equality"] = 9] = "Equality"; + OperatorPrecedence[OperatorPrecedence["Relational"] = 10] = "Relational"; + OperatorPrecedence[OperatorPrecedence["Shift"] = 11] = "Shift"; + OperatorPrecedence[OperatorPrecedence["Additive"] = 12] = "Additive"; + OperatorPrecedence[OperatorPrecedence["Multiplicative"] = 13] = "Multiplicative"; + OperatorPrecedence[OperatorPrecedence["Unary"] = 14] = "Unary"; + OperatorPrecedence[OperatorPrecedence["Lim"] = 15] = "Lim"; + })(TypeScript.OperatorPrecedence || (TypeScript.OperatorPrecedence = {})); + var OperatorPrecedence = TypeScript.OperatorPrecedence; + (function (Reservation) { + Reservation[Reservation["None"] = 0] = "None"; + Reservation[Reservation["Javascript"] = 1] = "Javascript"; + Reservation[Reservation["JavascriptFuture"] = 2] = "JavascriptFuture"; + Reservation[Reservation["TypeScript"] = 4] = "TypeScript"; + Reservation[Reservation["JavascriptFutureStrict"] = 8] = "JavascriptFutureStrict"; + Reservation[Reservation["TypeScriptAndJS"] = Reservation.Javascript | Reservation.TypeScript] = "TypeScriptAndJS"; + Reservation[Reservation["TypeScriptAndJSFuture"] = Reservation.JavascriptFuture | Reservation.TypeScript] = "TypeScriptAndJSFuture"; + Reservation[Reservation["TypeScriptAndJSFutureStrict"] = Reservation.JavascriptFutureStrict | Reservation.TypeScript] = "TypeScriptAndJSFutureStrict"; + })(TypeScript.Reservation || (TypeScript.Reservation = {})); + var Reservation = TypeScript.Reservation; + var TokenInfo = (function () { + function TokenInfo(tokenId, reservation, binopPrecedence, binopNodeType, unopPrecedence, unopNodeType, text, ers) { + this.tokenId = tokenId; + this.reservation = reservation; + this.binopPrecedence = binopPrecedence; + this.binopNodeType = binopNodeType; + this.unopPrecedence = unopPrecedence; + this.unopNodeType = unopNodeType; + this.text = text; + this.ers = ers; + } + return TokenInfo; + })(); + TypeScript.TokenInfo = TokenInfo; + function setTokenInfo(tokenId, reservation, binopPrecedence, binopNodeType, unopPrecedence, unopNodeType, text, ers) { + if (tokenId !== undefined) { + TypeScript.tokenTable[tokenId] = new TokenInfo(tokenId, reservation, binopPrecedence, binopNodeType, unopPrecedence, unopNodeType, text, ers); + if (binopNodeType != NodeType.None) { + TypeScript.nodeTypeTable[binopNodeType] = text; + TypeScript.nodeTypeToTokTable[binopNodeType] = tokenId; + } + if (unopNodeType != NodeType.None) { + TypeScript.nodeTypeTable[unopNodeType] = text; + } + } + } + setTokenInfo(0 /* Any */, 4 /* TypeScript */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "any", ErrorRecoverySet.PrimType); + setTokenInfo(1 /* Bool */, 4 /* TypeScript */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "boolean", ErrorRecoverySet.PrimType); + setTokenInfo(2 /* Break */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "break", ErrorRecoverySet.Stmt); + setTokenInfo(3 /* Case */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "case", ErrorRecoverySet.SCase); + setTokenInfo(4 /* Catch */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "catch", ErrorRecoverySet.Catch); + setTokenInfo(5 /* Class */, Reservation.TypeScriptAndJSFuture, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "class", ErrorRecoverySet.TypeScriptS); + setTokenInfo(6 /* Const */, Reservation.TypeScriptAndJSFuture, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "const", ErrorRecoverySet.Var); + setTokenInfo(7 /* Continue */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "continue", ErrorRecoverySet.Stmt); + setTokenInfo(8 /* Debugger */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.Debugger, "debugger", ErrorRecoverySet.Stmt); + setTokenInfo(9 /* Default */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "default", ErrorRecoverySet.SCase); + setTokenInfo(10 /* Delete */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 14 /* Unary */, NodeType.Delete, "delete", ErrorRecoverySet.Prefix); + setTokenInfo(11 /* Do */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "do", ErrorRecoverySet.Stmt); + setTokenInfo(12 /* Else */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "else", ErrorRecoverySet.Else); + setTokenInfo(13 /* Enum */, Reservation.TypeScriptAndJSFuture, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "enum", ErrorRecoverySet.TypeScriptS); + setTokenInfo(14 /* Export */, Reservation.TypeScriptAndJSFuture, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "export", ErrorRecoverySet.TypeScriptS); + setTokenInfo(15 /* Extends */, Reservation.TypeScriptAndJSFuture, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "extends", ErrorRecoverySet.None); + setTokenInfo(16 /* Declare */, 4 /* TypeScript */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "declare", ErrorRecoverySet.Stmt); + setTokenInfo(17 /* False */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "false", ErrorRecoverySet.RLit); + setTokenInfo(18 /* Finally */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "finally", ErrorRecoverySet.Catch); + setTokenInfo(19 /* For */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "for", ErrorRecoverySet.Stmt); + setTokenInfo(20 /* Function */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "function", ErrorRecoverySet.Func); + setTokenInfo(21 /* Constructor */, Reservation.TypeScriptAndJSFutureStrict, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "constructor", ErrorRecoverySet.Func); + setTokenInfo(22 /* Get */, 4 /* TypeScript */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "get", ErrorRecoverySet.Func); + setTokenInfo(39 /* Set */, 4 /* TypeScript */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "set", ErrorRecoverySet.Func); + setTokenInfo(23 /* If */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "if", ErrorRecoverySet.Stmt); + setTokenInfo(24 /* Implements */, Reservation.TypeScriptAndJSFutureStrict, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "implements", ErrorRecoverySet.None); + setTokenInfo(25 /* Import */, Reservation.TypeScriptAndJSFuture, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "import", ErrorRecoverySet.TypeScriptS); + setTokenInfo(26 /* In */, Reservation.TypeScriptAndJS, 10 /* Relational */, NodeType.In, 0 /* None */, NodeType.None, "in", ErrorRecoverySet.None); + setTokenInfo(27 /* InstanceOf */, Reservation.TypeScriptAndJS, 10 /* Relational */, NodeType.InstOf, 0 /* None */, NodeType.None, "instanceof", ErrorRecoverySet.BinOp); + setTokenInfo(28 /* Interface */, Reservation.TypeScriptAndJSFutureStrict, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "interface", ErrorRecoverySet.TypeScriptS); + setTokenInfo(29 /* Let */, 8 /* JavascriptFutureStrict */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "let", ErrorRecoverySet.None); + setTokenInfo(30 /* Module */, 4 /* TypeScript */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "module", ErrorRecoverySet.TypeScriptS); + setTokenInfo(31 /* New */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "new", ErrorRecoverySet.PreOp); + setTokenInfo(32 /* Number */, 4 /* TypeScript */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "number", ErrorRecoverySet.PrimType); + setTokenInfo(33 /* Null */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "null", ErrorRecoverySet.RLit); + setTokenInfo(34 /* Package */, 8 /* JavascriptFutureStrict */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "package", ErrorRecoverySet.None); + setTokenInfo(35 /* Private */, Reservation.TypeScriptAndJSFutureStrict, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "private", ErrorRecoverySet.TypeScriptS); + setTokenInfo(36 /* Protected */, 8 /* JavascriptFutureStrict */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "protected", ErrorRecoverySet.None); + setTokenInfo(37 /* Public */, Reservation.TypeScriptAndJSFutureStrict, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "public", ErrorRecoverySet.TypeScriptS); + setTokenInfo(38 /* Return */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "return", ErrorRecoverySet.Stmt); + setTokenInfo(40 /* Static */, Reservation.TypeScriptAndJSFutureStrict, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "static", ErrorRecoverySet.None); + setTokenInfo(41 /* String */, 4 /* TypeScript */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "string", ErrorRecoverySet.PrimType); + setTokenInfo(42 /* Super */, Reservation.TypeScriptAndJSFuture, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "super", ErrorRecoverySet.RLit); + setTokenInfo(43 /* Switch */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "switch", ErrorRecoverySet.Stmt); + setTokenInfo(44 /* This */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "this", ErrorRecoverySet.RLit); + setTokenInfo(45 /* Throw */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "throw", ErrorRecoverySet.Stmt); + setTokenInfo(46 /* True */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "true", ErrorRecoverySet.RLit); + setTokenInfo(47 /* Try */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "try", ErrorRecoverySet.Stmt); + setTokenInfo(48 /* TypeOf */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 14 /* Unary */, NodeType.Typeof, "typeof", ErrorRecoverySet.Prefix); + setTokenInfo(49 /* Var */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "var", ErrorRecoverySet.Var); + setTokenInfo(50 /* Void */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 14 /* Unary */, NodeType.Void, "void", ErrorRecoverySet.Prefix); + setTokenInfo(51 /* With */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.With, "with", ErrorRecoverySet.Stmt); + setTokenInfo(52 /* While */, Reservation.TypeScriptAndJS, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "while", ErrorRecoverySet.While); + setTokenInfo(53 /* Yield */, 8 /* JavascriptFutureStrict */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "yield", ErrorRecoverySet.None); + setTokenInfo(106 /* Identifier */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "identifier", ErrorRecoverySet.ID); + setTokenInfo(109 /* NumberLiteral */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "numberLiteral", ErrorRecoverySet.Literal); + setTokenInfo(108 /* RegularExpressionLiteral */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "regex", ErrorRecoverySet.RegExp); + setTokenInfo(107 /* StringLiteral */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "qstring", ErrorRecoverySet.Literal); + // Non-operator non-identifier tokens + setTokenInfo(54 /* Semicolon */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, ";", ErrorRecoverySet.SColon); // ; + setTokenInfo(56 /* CloseParen */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, ")", ErrorRecoverySet.RParen); // ) + setTokenInfo(58 /* CloseBracket */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "]", ErrorRecoverySet.RBrack); // ] + setTokenInfo(59 /* OpenBrace */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "{", ErrorRecoverySet.LCurly); // { + setTokenInfo(60 /* CloseBrace */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "}", ErrorRecoverySet.RCurly); // } + setTokenInfo(102 /* DotDotDot */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "...", ErrorRecoverySet.None); // ... + // Operator non-identifier tokens + setTokenInfo(61 /* Comma */, 0 /* None */, 1 /* Comma */, NodeType.Comma, 0 /* None */, NodeType.None, ",", ErrorRecoverySet.Comma); // , + setTokenInfo(62 /* Equals */, 0 /* None */, 2 /* Assignment */, NodeType.Asg, 0 /* None */, NodeType.None, "=", ErrorRecoverySet.Asg); // = + setTokenInfo(63 /* PlusEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgAdd, 0 /* None */, NodeType.None, "+=", ErrorRecoverySet.BinOp); // += + setTokenInfo(64 /* MinusEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgSub, 0 /* None */, NodeType.None, "-=", ErrorRecoverySet.BinOp); // -= + setTokenInfo(65 /* AsteriskEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgMul, 0 /* None */, NodeType.None, "*=", ErrorRecoverySet.BinOp); // *= + setTokenInfo(66 /* SlashEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgDiv, 0 /* None */, NodeType.None, "/=", ErrorRecoverySet.BinOp); // /= + setTokenInfo(67 /* PercentEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgMod, 0 /* None */, NodeType.None, "%=", ErrorRecoverySet.BinOp); // %= + setTokenInfo(68 /* AmpersandEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgAnd, 0 /* None */, NodeType.None, "&=", ErrorRecoverySet.BinOp); // &= + setTokenInfo(69 /* CaretEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgXor, 0 /* None */, NodeType.None, "^=", ErrorRecoverySet.BinOp); // ^= + setTokenInfo(70 /* BarEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgOr, 0 /* None */, NodeType.None, "|=", ErrorRecoverySet.BinOp); // |= + setTokenInfo(71 /* LessThanLessThanEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgLsh, 0 /* None */, NodeType.None, "<<=", ErrorRecoverySet.BinOp); // <<= + setTokenInfo(72 /* GreaterThanGreaterThanEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgRsh, 0 /* None */, NodeType.None, ">>=", ErrorRecoverySet.BinOp); // >>= + setTokenInfo(73 /* GreaterThanGreaterThanGreaterThanEquals */, 0 /* None */, 2 /* Assignment */, NodeType.AsgRs2, 0 /* None */, NodeType.None, ">>>=", ErrorRecoverySet.BinOp); // >>>= + setTokenInfo(74 /* Question */, 0 /* None */, 3 /* Conditional */, NodeType.ConditionalExpression, 0 /* None */, NodeType.None, "?", ErrorRecoverySet.BinOp); // ? + setTokenInfo(75 /* Colon */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, ":", ErrorRecoverySet.Colon); // : + setTokenInfo(76 /* BarBar */, 0 /* None */, 4 /* LogicalOr */, NodeType.LogOr, 0 /* None */, NodeType.None, "||", ErrorRecoverySet.BinOp); // || + setTokenInfo(77 /* AmpersandAmpersand */, 0 /* None */, 5 /* LogicalAnd */, NodeType.LogAnd, 0 /* None */, NodeType.None, "&&", ErrorRecoverySet.BinOp); // && + setTokenInfo(78 /* Bar */, 0 /* None */, 6 /* BitwiseOr */, NodeType.Or, 0 /* None */, NodeType.None, "|", ErrorRecoverySet.BinOp); // | + setTokenInfo(79 /* Caret */, 0 /* None */, 7 /* BitwiseExclusiveOr */, NodeType.Xor, 0 /* None */, NodeType.None, "^", ErrorRecoverySet.BinOp); // ^ + setTokenInfo(80 /* And */, 0 /* None */, 8 /* BitwiseAnd */, NodeType.And, 0 /* None */, NodeType.None, "&", ErrorRecoverySet.BinOp); // & + setTokenInfo(81 /* EqualsEquals */, 0 /* None */, 9 /* Equality */, NodeType.Eq, 0 /* None */, NodeType.None, "==", ErrorRecoverySet.BinOp); // == + setTokenInfo(82 /* ExclamationEquals */, 0 /* None */, 9 /* Equality */, NodeType.Ne, 0 /* None */, NodeType.None, "!=", ErrorRecoverySet.BinOp); // != + setTokenInfo(83 /* EqualsEqualsEquals */, 0 /* None */, 9 /* Equality */, NodeType.Eqv, 0 /* None */, NodeType.None, "===", ErrorRecoverySet.BinOp); // === + setTokenInfo(84 /* ExclamationEqualsEquals */, 0 /* None */, 9 /* Equality */, NodeType.NEqv, 0 /* None */, NodeType.None, "!==", ErrorRecoverySet.BinOp); // !== + setTokenInfo(85 /* LessThan */, 0 /* None */, 10 /* Relational */, NodeType.Lt, 0 /* None */, NodeType.None, "<", ErrorRecoverySet.BinOp); // < + setTokenInfo(86 /* LessThanEquals */, 0 /* None */, 10 /* Relational */, NodeType.Le, 0 /* None */, NodeType.None, "<=", ErrorRecoverySet.BinOp); // <= + setTokenInfo(87 /* GreaterThan */, 0 /* None */, 10 /* Relational */, NodeType.Gt, 0 /* None */, NodeType.None, ">", ErrorRecoverySet.BinOp); // > + setTokenInfo(88 /* GreaterThanEquals */, 0 /* None */, 10 /* Relational */, NodeType.Ge, 0 /* None */, NodeType.None, ">=", ErrorRecoverySet.BinOp); // >= + setTokenInfo(89 /* LessThanLessThan */, 0 /* None */, 11 /* Shift */, NodeType.Lsh, 0 /* None */, NodeType.None, "<<", ErrorRecoverySet.BinOp); // << + setTokenInfo(90 /* GreaterThanGreaterThan */, 0 /* None */, 11 /* Shift */, NodeType.Rsh, 0 /* None */, NodeType.None, ">>", ErrorRecoverySet.BinOp); // >> + setTokenInfo(91 /* GreaterThanGreaterThanGreaterThan */, 0 /* None */, 11 /* Shift */, NodeType.Rs2, 0 /* None */, NodeType.None, ">>>", ErrorRecoverySet.BinOp); // >>> + setTokenInfo(92 /* Plus */, 0 /* None */, 12 /* Additive */, NodeType.Add, 14 /* Unary */, NodeType.Pos, "+", ErrorRecoverySet.AddOp); // + + setTokenInfo(93 /* Minus */, 0 /* None */, 12 /* Additive */, NodeType.Sub, 14 /* Unary */, NodeType.Neg, "-", ErrorRecoverySet.AddOp); // - + setTokenInfo(94 /* Asterisk */, 0 /* None */, 13 /* Multiplicative */, NodeType.Mul, 0 /* None */, NodeType.None, "*", ErrorRecoverySet.BinOp); // * + setTokenInfo(95 /* Slash */, 0 /* None */, 13 /* Multiplicative */, NodeType.Div, 0 /* None */, NodeType.None, "/", ErrorRecoverySet.BinOp); // / + setTokenInfo(96 /* Percent */, 0 /* None */, 13 /* Multiplicative */, NodeType.Mod, 0 /* None */, NodeType.None, "%", ErrorRecoverySet.BinOp); // % + setTokenInfo(97 /* Tilde */, 0 /* None */, 0 /* None */, NodeType.None, 14 /* Unary */, NodeType.Not, "~", ErrorRecoverySet.PreOp); // ~ + setTokenInfo(98 /* Exclamation */, 0 /* None */, 0 /* None */, NodeType.None, 14 /* Unary */, NodeType.LogNot, "!", ErrorRecoverySet.PreOp); // ! + setTokenInfo(99 /* PlusPlus */, 0 /* None */, 0 /* None */, NodeType.None, 14 /* Unary */, NodeType.IncPre, "++", ErrorRecoverySet.PreOp); // ++ + setTokenInfo(100 /* MinusMinus */, 0 /* None */, 0 /* None */, NodeType.None, 14 /* Unary */, NodeType.DecPre, "--", ErrorRecoverySet.PreOp); // -- + setTokenInfo(55 /* OpenParen */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "(", ErrorRecoverySet.LParen); // ( + setTokenInfo(57 /* OpenBracket */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "[", ErrorRecoverySet.LBrack); // [ + setTokenInfo(101 /* Dot */, 0 /* None */, 14 /* Unary */, NodeType.None, 0 /* None */, NodeType.None, ".", ErrorRecoverySet.Dot); // . + setTokenInfo(104 /* EndOfFile */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "", ErrorRecoverySet.EOF); // EOF + setTokenInfo(105 /* EqualsGreaterThan */, 0 /* None */, 0 /* None */, NodeType.None, 0 /* None */, NodeType.None, "=>", ErrorRecoverySet.None); // => + function lookupToken(tokenId) { + return TypeScript.tokenTable[tokenId]; + } + TypeScript.lookupToken = lookupToken; + (function (TokenClass) { + TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation"; + TokenClass[TokenClass["Keyword"] = 1] = "Keyword"; + TokenClass[TokenClass["Operator"] = 2] = "Operator"; + TokenClass[TokenClass["Comment"] = 3] = "Comment"; + TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace"; + TokenClass[TokenClass["Identifier"] = 5] = "Identifier"; + TokenClass[TokenClass["Literal"] = 6] = "Literal"; + })(TypeScript.TokenClass || (TypeScript.TokenClass = {})); + var TokenClass = TypeScript.TokenClass; + var SavedToken = (function () { + function SavedToken(tok, minChar, limChar) { + this.tok = tok; + this.minChar = minChar; + this.limChar = limChar; + } + return SavedToken; + })(); + TypeScript.SavedToken = SavedToken; + var Token = (function () { + function Token(tokenId) { + this.tokenId = tokenId; + } + Token.prototype.toString = function () { + return "token: " + this.tokenId + " " + this.getText() + " (" + TokenID._map[this.tokenId] + ")"; + }; + Token.prototype.print = function (line, outfile) { + outfile.WriteLine(this.toString() + ",on line" + line); + }; + Token.prototype.getText = function () { + return TypeScript.tokenTable[this.tokenId].text; + }; + Token.prototype.classification = function () { + if (this.tokenId <= TokenID.LimKeyword) { + return 1 /* Keyword */; + } + else { + var tokenInfo = lookupToken(this.tokenId); + if (tokenInfo != undefined) { + if ((tokenInfo.unopNodeType != NodeType.None) || (tokenInfo.binopNodeType != NodeType.None)) { + return 2 /* Operator */; + } + } + } + return 0 /* Punctuation */; + }; + return Token; + })(); + TypeScript.Token = Token; + var NumberLiteralToken = (function (_super) { + __extends(NumberLiteralToken, _super); + function NumberLiteralToken(value, hasEmptyFraction) { + _super.call(this, 109 /* NumberLiteral */); + this.value = value; + this.hasEmptyFraction = hasEmptyFraction; + } + NumberLiteralToken.prototype.getText = function () { + return this.hasEmptyFraction ? this.value.toString() + ".0" : this.value.toString(); + }; + NumberLiteralToken.prototype.classification = function () { + return 6 /* Literal */; + }; + return NumberLiteralToken; + })(Token); + TypeScript.NumberLiteralToken = NumberLiteralToken; + var StringLiteralToken = (function (_super) { + __extends(StringLiteralToken, _super); + function StringLiteralToken(value) { + _super.call(this, 107 /* StringLiteral */); + this.value = value; + } + StringLiteralToken.prototype.getText = function () { + return this.value; + }; + StringLiteralToken.prototype.classification = function () { + return 6 /* Literal */; + }; + return StringLiteralToken; + })(Token); + TypeScript.StringLiteralToken = StringLiteralToken; + var IdentifierToken = (function (_super) { + __extends(IdentifierToken, _super); + function IdentifierToken(value, hasEscapeSequence) { + _super.call(this, 106 /* Identifier */); + this.value = value; + this.hasEscapeSequence = hasEscapeSequence; + } + IdentifierToken.prototype.getText = function () { + return this.value; + }; + IdentifierToken.prototype.classification = function () { + return 5 /* Identifier */; + }; + return IdentifierToken; + })(Token); + TypeScript.IdentifierToken = IdentifierToken; + var WhitespaceToken = (function (_super) { + __extends(WhitespaceToken, _super); + function WhitespaceToken(tokenId, value) { + _super.call(this, tokenId); + this.value = value; + } + WhitespaceToken.prototype.getText = function () { + return this.value; + }; + WhitespaceToken.prototype.classification = function () { + return 4 /* Whitespace */; + }; + return WhitespaceToken; + })(Token); + TypeScript.WhitespaceToken = WhitespaceToken; + var CommentToken = (function (_super) { + __extends(CommentToken, _super); + function CommentToken(tokenID, value, isBlock, startPos, line, endsLine) { + _super.call(this, tokenID); + this.value = value; + this.isBlock = isBlock; + this.startPos = startPos; + this.line = line; + this.endsLine = endsLine; + } + CommentToken.prototype.getText = function () { + return this.value; + }; + CommentToken.prototype.classification = function () { + return 3 /* Comment */; + }; + return CommentToken; + })(Token); + TypeScript.CommentToken = CommentToken; + var RegularExpressionLiteralToken = (function (_super) { + __extends(RegularExpressionLiteralToken, _super); + function RegularExpressionLiteralToken(regex) { + _super.call(this, 108 /* RegularExpressionLiteral */); + this.regex = regex; + } + RegularExpressionLiteralToken.prototype.getText = function () { + return this.regex.toString(); + }; + RegularExpressionLiteralToken.prototype.classification = function () { + return 6 /* Literal */; + }; + return RegularExpressionLiteralToken; + })(Token); + TypeScript.RegularExpressionLiteralToken = RegularExpressionLiteralToken; + // TODO: new with length TokenID.LimFixed + TypeScript.staticTokens = new Token[]; + function initializeStaticTokens() { + for (var i = 0; i <= TokenID.LimFixed; i++) { + TypeScript.staticTokens[i] = new Token(i); + } + } + TypeScript.initializeStaticTokens = initializeStaticTokens; +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource11.js b/tests/baselines/reference/parserRealSource11.js new file mode 100644 index 00000000000..0574c52eaaa --- /dev/null +++ b/tests/baselines/reference/parserRealSource11.js @@ -0,0 +1,4717 @@ +//// [parserRealSource11.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + export class ASTSpan { + public minChar: number = -1; // -1 = "undefined" or "compiler generated" + public limChar: number = -1; // -1 = "undefined" or "compiler generated" + } + + export class AST extends ASTSpan { + public type: Type = null; + public flags = ASTFlags.Writeable; + + // REVIEW: for diagnostic purposes + public passCreated: number = CompilerDiagnostics.analysisPass; + + public preComments: Comment[] = null; + public postComments: Comment[] = null; + + public isParenthesized = false; + + constructor (public nodeType: NodeType) { + super(); + } + + public isExpression() { return false; } + + public isStatementOrExpression() { return false; } + + public isCompoundStatement() { return false; } + + public isLeaf() { return this.isStatementOrExpression() && (!this.isCompoundStatement()); } + + public typeCheck(typeFlow: TypeFlow) { + switch (this.nodeType) { + case NodeType.Error: + case NodeType.EmptyExpr: + this.type = typeFlow.anyType; + break; + case NodeType.This: + return typeFlow.typeCheckThis(this); + case NodeType.Null: + this.type = typeFlow.nullType; + break; + case NodeType.False: + case NodeType.True: + this.type = typeFlow.booleanType; + break; + case NodeType.Super: + return typeFlow.typeCheckSuper(this); + case NodeType.EndCode: + case NodeType.Empty: + case NodeType.Void: + this.type = typeFlow.voidType; + break; + default: + throw new Error("please implement in derived class"); + } + return this; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + switch (this.nodeType) { + case NodeType.This: + emitter.recordSourceMappingStart(this); + if (emitter.thisFnc && (hasFlag(emitter.thisFnc.fncFlags, FncFlags.IsFatArrowFunction))) { + emitter.writeToOutput("_this"); + } + else { + emitter.writeToOutput("this"); + } + emitter.recordSourceMappingEnd(this); + break; + case NodeType.Null: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("null"); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.False: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("false"); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.True: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("true"); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.Super: + emitter.recordSourceMappingStart(this); + emitter.emitSuperReference(); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.EndCode: + break; + case NodeType.Error: + case NodeType.EmptyExpr: + break; + + case NodeType.Empty: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("; "); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.Void: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("void "); + emitter.recordSourceMappingEnd(this); + break; + default: + throw new Error("please implement in derived class"); + } + emitter.emitParensAndCommentsInPlace(this, false); + } + + public print(context: PrintContext) { + context.startLine(); + var lineCol = { line: -1, col: -1 }; + var limLineCol = { line: -1, col: -1 }; + if (context.parser !== null) { + context.parser.getSourceLineCol(lineCol, this.minChar); + context.parser.getSourceLineCol(limLineCol, this.limChar); + context.write("(" + lineCol.line + "," + lineCol.col + ")--" + + "(" + limLineCol.line + "," + limLineCol.col + "): "); + } + var lab = this.printLabel(); + if (hasFlag(this.flags, ASTFlags.Error)) { + lab += " (Error)"; + } + context.writeLine(lab); + } + + public printLabel() { + if (nodeTypeTable[this.nodeType] !== undefined) { + return nodeTypeTable[this.nodeType]; + } + else { + return (NodeType)._map[this.nodeType]; + } + } + + public addToControlFlow(context: ControlFlowContext): void { + // by default, AST adds itself to current basic block and does not check its children + context.walker.options.goChildren = false; + context.addContent(this); + } + + public netFreeUses(container: Symbol, freeUses: StringHashTable) { + } + + public treeViewLabel() { + return (NodeType)._map[this.nodeType]; + } + + public static getResolvedIdentifierName(name: string): string { + if (!name) return ""; + + var resolved = ""; + var start = 0; + var i = 0; + while(i <= name.length - 6) { + // Look for escape sequence \uxxxx + if (name.charAt(i) == '\\' && name.charAt(i+1) == 'u') { + var charCode = parseInt(name.substr(i + 2, 4), 16); + resolved += name.substr(start, i - start); + resolved += String.fromCharCode(charCode); + i += 6; + start = i; + continue; + } + i++; + } + // Append remaining string + resolved += name.substring(start); + return resolved; + } + } + + export class IncompleteAST extends AST { + constructor (min: number, lim: number) { + super(NodeType.Error); + + this.minChar = min; + this.limChar = lim; + } + } + + export class ASTList extends AST { + public enclosingScope: SymbolScope = null; + public members: AST[] = new AST[]; + + constructor () { + super(NodeType.List); + } + + public addToControlFlow(context: ControlFlowContext) { + var len = this.members.length; + for (var i = 0; i < len; i++) { + if (context.noContinuation) { + context.addUnreachable(this.members[i]); + break; + } + else { + this.members[i] = context.walk(this.members[i], this); + } + } + context.walker.options.goChildren = false; + } + + public append(ast: AST) { + this.members[this.members.length] = ast; + return this; + } + + public appendAll(ast: AST) { + if (ast.nodeType == NodeType.List) { + var list = ast; + for (var i = 0, len = list.members.length; i < len; i++) { + this.append(list.members[i]); + } + } + else { + this.append(ast); + } + return this; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.recordSourceMappingStart(this); + emitter.emitJavascriptList(this, null, TokenID.Semicolon, startLine, false, false); + emitter.recordSourceMappingEnd(this); + } + + public typeCheck(typeFlow: TypeFlow) { + var len = this.members.length; + typeFlow.nestingLevel++; + for (var i = 0; i < len; i++) { + if (this.members[i]) { + this.members[i] = this.members[i].typeCheck(typeFlow); + } + } + typeFlow.nestingLevel--; + return this; + } + } + + export class Identifier extends AST { + public sym: Symbol = null; + public cloId = -1; + public text: string; + + // 'actualText' is the text that the user has entered for the identifier. the text might + // include any Unicode escape sequences (e.g.: \u0041 for 'A'). 'text', however, contains + // the resolved value of any escape sequences in the actual text; so in the previous + // example, actualText = '\u0041', text = 'A'. + // + // For purposes of finding a symbol, use text, as this will allow you to match all + // variations of the variable text. For full-fidelity translation of the user input, such + // as emitting, use the actualText field. + // + // Note: + // To change text, and to avoid running into a situation where 'actualText' does not + // match 'text', always use setText. + constructor (public actualText: string, public hasEscapeSequence?: boolean) { + super(NodeType.Name); + this.setText(actualText, hasEscapeSequence); + } + + public setText(actualText: string, hasEscapeSequence?: boolean) { + this.actualText = actualText; + if (hasEscapeSequence) { + this.text = AST.getResolvedIdentifierName(actualText); + } + else { + this.text = actualText; + } + } + + public isMissing() { return false; } + public isLeaf() { return true; } + + public treeViewLabel() { + return "id: " + this.actualText; + } + + public printLabel() { + if (this.actualText) { + return "id: " + this.actualText; + } + else { + return "name node"; + } + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckName(this); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitJavascriptName(this, true); + } + + public static fromToken(token: Token): Identifier { + return new Identifier(token.getText(), (token).hasEscapeSequence); + } + } + + export class MissingIdentifier extends Identifier { + constructor () { + super("__missing"); + } + + public isMissing() { + return true; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + // Emit nothing for a missing ID + } + } + + export class Label extends AST { + constructor (public id: Identifier) { + super(NodeType.Label); + } + + public printLabel() { return this.id.actualText + ":"; } + + public typeCheck(typeFlow: TypeFlow) { + this.type = typeFlow.voidType; + return this; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.recordSourceMappingStart(this.id); + emitter.writeToOutput(this.id.actualText); + emitter.recordSourceMappingEnd(this.id); + emitter.writeLineToOutput(":"); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + + export class Expression extends AST { + constructor (nodeType: NodeType) { + super(nodeType); + } + + public isExpression() { return true; } + + public isStatementOrExpression() { return true; } + } + + export class UnaryExpression extends Expression { + public targetType: Type = null; // Target type for an object literal (null if no target type) + public castTerm: AST = null; + + constructor (nodeType: NodeType, public operand: AST) { + super(nodeType); + } + + public addToControlFlow(context: ControlFlowContext): void { + super.addToControlFlow(context); + // TODO: add successor as catch block/finally block if present + if (this.nodeType == NodeType.Throw) { + context.returnStmt(); + } + } + + public typeCheck(typeFlow: TypeFlow) { + switch (this.nodeType) { + case NodeType.Not: + return typeFlow.typeCheckBitNot(this); + + case NodeType.LogNot: + return typeFlow.typeCheckLogNot(this); + + case NodeType.Pos: + case NodeType.Neg: + return typeFlow.typeCheckUnaryNumberOperator(this); + + case NodeType.IncPost: + case NodeType.IncPre: + case NodeType.DecPost: + case NodeType.DecPre: + return typeFlow.typeCheckIncOrDec(this); + + case NodeType.ArrayLit: + typeFlow.typeCheckArrayLit(this); + return this; + + case NodeType.ObjectLit: + typeFlow.typeCheckObjectLit(this); + return this; + + case NodeType.Throw: + this.operand = typeFlow.typeCheck(this.operand); + this.type = typeFlow.voidType; + return this; + + case NodeType.Typeof: + this.operand = typeFlow.typeCheck(this.operand); + this.type = typeFlow.stringType; + return this; + + case NodeType.Delete: + this.operand = typeFlow.typeCheck(this.operand); + this.type = typeFlow.booleanType; + break; + + case NodeType.TypeAssertion: + this.castTerm = typeFlow.typeCheck(this.castTerm); + var applyTargetType = !this.operand.isParenthesized; + + var targetType = applyTargetType ? this.castTerm.type : null; + + typeFlow.checker.typeCheckWithContextualType(targetType, typeFlow.checker.inProvisionalTypecheckMode(), true, this.operand); + typeFlow.castWithCoercion(this.operand, this.castTerm.type, false, true); + this.type = this.castTerm.type; + return this; + + case NodeType.Void: + // REVIEW - Although this is good to do for completeness's sake, + // this shouldn't be strictly necessary from the void operator's + // point of view + this.operand = typeFlow.typeCheck(this.operand); + this.type = typeFlow.checker.undefinedType; + break; + + default: + throw new Error("please implement in derived class"); + } + return this; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + switch (this.nodeType) { + case NodeType.IncPost: + emitter.emitJavascript(this.operand, TokenID.PlusPlus, false); + emitter.writeToOutput("++"); + break; + case NodeType.LogNot: + emitter.writeToOutput("!"); + emitter.emitJavascript(this.operand, TokenID.Exclamation, false); + break; + case NodeType.DecPost: + emitter.emitJavascript(this.operand, TokenID.MinusMinus, false); + emitter.writeToOutput("--"); + break; + case NodeType.ObjectLit: + emitter.emitObjectLiteral(this.operand); + break; + case NodeType.ArrayLit: + emitter.emitArrayLiteral(this.operand); + break; + case NodeType.Not: + emitter.writeToOutput("~"); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + case NodeType.Neg: + emitter.writeToOutput("-"); + if (this.operand.nodeType == NodeType.Neg) { + this.operand.isParenthesized = true; + } + emitter.emitJavascript(this.operand, TokenID.Minus, false); + break; + case NodeType.Pos: + emitter.writeToOutput("+"); + if (this.operand.nodeType == NodeType.Pos) { + this.operand.isParenthesized = true; + } + emitter.emitJavascript(this.operand, TokenID.Plus, false); + break; + case NodeType.IncPre: + emitter.writeToOutput("++"); + emitter.emitJavascript(this.operand, TokenID.PlusPlus, false); + break; + case NodeType.DecPre: + emitter.writeToOutput("--"); + emitter.emitJavascript(this.operand, TokenID.MinusMinus, false); + break; + case NodeType.Throw: + emitter.writeToOutput("throw "); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + emitter.writeToOutput(";"); + break; + case NodeType.Typeof: + emitter.writeToOutput("typeof "); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + case NodeType.Delete: + emitter.writeToOutput("delete "); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + case NodeType.Void: + emitter.writeToOutput("void "); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + case NodeType.TypeAssertion: + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + default: + throw new Error("please implement in derived class"); + } + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + + export class CallExpression extends Expression { + constructor (nodeType: NodeType, + public target: AST, + public arguments: ASTList) { + super(nodeType); + this.minChar = this.target.minChar; + } + + public signature: Signature = null; + + public typeCheck(typeFlow: TypeFlow) { + if (this.nodeType == NodeType.New) { + return typeFlow.typeCheckNew(this); + } + else { + return typeFlow.typeCheckCall(this); + } + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + + if (this.nodeType == NodeType.New) { + emitter.emitNew(this.target, this.arguments); + } + else { + emitter.emitCall(this, this.target, this.arguments); + } + + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + + export class BinaryExpression extends Expression { + constructor (nodeType: NodeType, public operand1: AST, public operand2: AST) { + super(nodeType); + } + + public typeCheck(typeFlow: TypeFlow) { + switch (this.nodeType) { + case NodeType.Dot: + return typeFlow.typeCheckDotOperator(this); + case NodeType.Asg: + return typeFlow.typeCheckAsgOperator(this); + case NodeType.Add: + case NodeType.Sub: + case NodeType.Mul: + case NodeType.Div: + case NodeType.Mod: + case NodeType.Or: + case NodeType.And: + return typeFlow.typeCheckArithmeticOperator(this, false); + case NodeType.Xor: + return typeFlow.typeCheckBitwiseOperator(this, false); + case NodeType.Ne: + case NodeType.Eq: + var text: string; + if (typeFlow.checker.styleSettings.eqeqeq) { + text = nodeTypeTable[this.nodeType]; + typeFlow.checker.errorReporter.styleError(this, "use of " + text); + } + else if (typeFlow.checker.styleSettings.eqnull) { + text = nodeTypeTable[this.nodeType]; + if ((this.operand2 !== null) && (this.operand2.nodeType == NodeType.Null)) { + typeFlow.checker.errorReporter.styleError(this, "use of " + text + " to compare with null"); + } + } + case NodeType.Eqv: + case NodeType.NEqv: + case NodeType.Lt: + case NodeType.Le: + case NodeType.Ge: + case NodeType.Gt: + return typeFlow.typeCheckBooleanOperator(this); + case NodeType.Index: + return typeFlow.typeCheckIndex(this); + case NodeType.Member: + this.type = typeFlow.voidType; + return this; + case NodeType.LogOr: + return typeFlow.typeCheckLogOr(this); + case NodeType.LogAnd: + return typeFlow.typeCheckLogAnd(this); + case NodeType.AsgAdd: + case NodeType.AsgSub: + case NodeType.AsgMul: + case NodeType.AsgDiv: + case NodeType.AsgMod: + case NodeType.AsgOr: + case NodeType.AsgAnd: + return typeFlow.typeCheckArithmeticOperator(this, true); + case NodeType.AsgXor: + return typeFlow.typeCheckBitwiseOperator(this, true); + case NodeType.Lsh: + case NodeType.Rsh: + case NodeType.Rs2: + return typeFlow.typeCheckShift(this, false); + case NodeType.AsgLsh: + case NodeType.AsgRsh: + case NodeType.AsgRs2: + return typeFlow.typeCheckShift(this, true); + case NodeType.Comma: + return typeFlow.typeCheckCommaOperator(this); + case NodeType.InstOf: + return typeFlow.typeCheckInstOf(this); + case NodeType.In: + return typeFlow.typeCheckInOperator(this); + case NodeType.From: + typeFlow.checker.errorReporter.simpleError(this, "Illegal use of 'from' keyword in binary expression"); + break; + default: + throw new Error("please implement in derived class"); + } + return this; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + var binTokenId = nodeTypeToTokTable[this.nodeType]; + + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (binTokenId != undefined) { + + emitter.emitJavascript(this.operand1, binTokenId, false); + + if (tokenTable[binTokenId].text == "instanceof") { + emitter.writeToOutput(" instanceof "); + } + else if (tokenTable[binTokenId].text == "in") { + emitter.writeToOutput(" in "); + } + else { + emitter.writeToOutputTrimmable(" " + tokenTable[binTokenId].text + " "); + } + + emitter.emitJavascript(this.operand2, binTokenId, false); + } + else { + switch (this.nodeType) { + case NodeType.Dot: + if (!emitter.tryEmitConstant(this)) { + emitter.emitJavascript(this.operand1, TokenID.Dot, false); + emitter.writeToOutput("."); + emitter.emitJavascriptName(this.operand2, false); + } + break; + case NodeType.Index: + emitter.emitIndex(this.operand1, this.operand2); + break; + + case NodeType.Member: + if (this.operand2.nodeType == NodeType.FuncDecl && (this.operand2).isAccessor()) { + var funcDecl = this.operand2; + if (hasFlag(funcDecl.fncFlags, FncFlags.GetAccessor)) { + emitter.writeToOutput("get "); + } + else { + emitter.writeToOutput("set "); + } + emitter.emitJavascript(this.operand1, TokenID.Colon, false); + } + else { + emitter.emitJavascript(this.operand1, TokenID.Colon, false); + emitter.writeToOutputTrimmable(": "); + } + emitter.emitJavascript(this.operand2, TokenID.Comma, false); + break; + case NodeType.Comma: + emitter.emitJavascript(this.operand1, TokenID.Comma, false); + if (emitter.emitState.inObjectLiteral) { + emitter.writeLineToOutput(", "); + } + else { + emitter.writeToOutput(","); + } + emitter.emitJavascript(this.operand2, TokenID.Comma, false); + break; + case NodeType.Is: + throw new Error("should be de-sugared during type check"); + default: + throw new Error("please implement in derived class"); + } + } + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + + export class ConditionalExpression extends Expression { + constructor (public operand1: AST, + public operand2: AST, + public operand3: AST) { + super(NodeType.ConditionalExpression); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckQMark(this); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitJavascript(this.operand1, TokenID.Question, false); + emitter.writeToOutput(" ? "); + emitter.emitJavascript(this.operand2, TokenID.Question, false); + emitter.writeToOutput(" : "); + emitter.emitJavascript(this.operand3, TokenID.Question, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + + export class NumberLiteral extends Expression { + constructor (public value: number, public hasEmptyFraction?: boolean) { + super(NodeType.NumberLit); + } + + public isNegativeZero = false; + + public typeCheck(typeFlow: TypeFlow) { + this.type = typeFlow.doubleType; + return this; + } + + public treeViewLabel() { + return "num: " + this.printLabel(); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.isNegativeZero) { + emitter.writeToOutput("-"); + } + + emitter.writeToOutput(this.value.toString()); + + if (this.hasEmptyFraction) + emitter.writeToOutput(".0"); + + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public printLabel() { + if (Math.floor(this.value) != this.value) { + return this.value.toFixed(2).toString(); + } + else if (this.hasEmptyFraction) { + return this.value.toString() + ".0"; + } + else { + return this.value.toString(); + } + } + } + + export class RegexLiteral extends Expression { + constructor (public regex) { + super(NodeType.Regex); + } + + public typeCheck(typeFlow: TypeFlow) { + this.type = typeFlow.regexType; + return this; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput(this.regex.toString()); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + + export class StringLiteral extends Expression { + constructor (public text: string) { + super(NodeType.QString); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitStringLiteral(this.text); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + this.type = typeFlow.stringType; + return this; + } + + public treeViewLabel() { + return "st: " + this.text; + } + + public printLabel() { + return this.text; + } + } + + export class ModuleElement extends AST { + constructor (nodeType: NodeType) { + super(nodeType); + } + } + + export class ImportDeclaration extends ModuleElement { + public isStatementOrExpression() { return true; } + public varFlags = VarFlags.None; + public isDynamicImport = false; + + constructor (public id: Identifier, public alias: AST) { + super(NodeType.ImportDeclaration); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + var mod = this.alias.type; + // REVIEW: Only modules may be aliased for now, though there's no real + // restriction on what the type symbol may be + if (!this.isDynamicImport || (this.id.sym && !(this.id.sym).onlyReferencedAsTypeRef)) { + var prevModAliasId = emitter.modAliasId; + var prevFirstModAlias = emitter.firstModAlias; + + emitter.recordSourceMappingStart(this); + emitter.emitParensAndCommentsInPlace(this, true); + emitter.writeToOutput("var " + this.id.actualText + " = "); + emitter.modAliasId = this.id.actualText; + emitter.firstModAlias = this.firstAliasedModToString(); + emitter.emitJavascript(this.alias, TokenID.Tilde, false); + // the dynamic import case will insert the semi-colon automatically + if (!this.isDynamicImport) { + emitter.writeToOutput(";"); + } + emitter.emitParensAndCommentsInPlace(this, false); + emitter.recordSourceMappingEnd(this); + + emitter.modAliasId = prevModAliasId; + emitter.firstModAlias = prevFirstModAlias; + } + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckImportDecl(this); + } + + public getAliasName(aliasAST?: AST = this.alias) : string { + if (aliasAST.nodeType == NodeType.Name) { + return (aliasAST).actualText; + } else { + var dotExpr = aliasAST; + return this.getAliasName(dotExpr.operand1) + "." + this.getAliasName(dotExpr.operand2); + } + } + + public firstAliasedModToString() { + if (this.alias.nodeType == NodeType.Name) { + return (this.alias).actualText; + } + else { + var dotExpr = this.alias; + var firstMod = dotExpr.operand1; + return firstMod.actualText; + } + } + } + + export class BoundDecl extends AST { + public init: AST = null; + public typeExpr: AST = null; + public varFlags = VarFlags.None; + public sym: Symbol = null; + + constructor (public id: Identifier, nodeType: NodeType, public nestingLevel: number) { + super(nodeType); + } + + public isStatementOrExpression() { return true; } + + public isPrivate() { return hasFlag(this.varFlags, VarFlags.Private); } + public isPublic() { return hasFlag(this.varFlags, VarFlags.Public); } + public isProperty() { return hasFlag(this.varFlags, VarFlags.Property); } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckBoundDecl(this); + } + + public printLabel() { + return this.treeViewLabel(); + } + } + + export class VarDecl extends BoundDecl { + constructor (id: Identifier, nest: number) { + super(id, NodeType.VarDecl, nest); + } + + public isAmbient() { return hasFlag(this.varFlags, VarFlags.Ambient); } + public isExported() { return hasFlag(this.varFlags, VarFlags.Exported); } + public isStatic() { return hasFlag(this.varFlags, VarFlags.Static); } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitJavascriptVarDecl(this, tokenId); + } + + public treeViewLabel() { + return "var " + this.id.actualText; + } + } + + export class ArgDecl extends BoundDecl { + constructor (id: Identifier) { + super(id, NodeType.ArgDecl, 0); + } + + public isOptional = false; + + public isOptionalArg() { return this.isOptional || this.init; } + + public treeViewLabel() { + return "arg: " + this.id.actualText; + } + + public parameterPropertySym: FieldSymbol = null; + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput(this.id.actualText); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + + var internalId = 0; + + export class FuncDecl extends AST { + public hint: string = null; + public fncFlags = FncFlags.None; + public returnTypeAnnotation: AST = null; + public symbols: IHashTable; + public variableArgList = false; + public signature: Signature; + public envids: Identifier[]; + public jumpRefs: Identifier[] = null; + public internalNameCache: string = null; + public tmp1Declared = false; + public enclosingFnc: FuncDecl = null; + public freeVariables: Symbol[] = []; + public unitIndex = -1; + public classDecl: NamedDeclaration = null; + public boundToProperty: VarDecl = null; + public isOverload = false; + public innerStaticFuncs: FuncDecl[] = []; + public isTargetTypedAsMethod = false; + public isInlineCallLiteral = false; + public accessorSymbol: Symbol = null; + public leftCurlyCount = 0; + public rightCurlyCount = 0; + public returnStatementsWithExpressions: ReturnStatement[] = []; + public scopeType: Type = null; // Type of the FuncDecl, before target typing + public endingToken: ASTSpan = null; + + constructor (public name: Identifier, public bod: ASTList, public isConstructor: boolean, + public arguments: ASTList, public vars: ASTList, public scopes: ASTList, public statics: ASTList, + nodeType: number) { + + super(nodeType); + } + + public internalName(): string { + if (this.internalNameCache == null) { + var extName = this.getNameText(); + if (extName) { + this.internalNameCache = "_internal_" + extName; + } + else { + this.internalNameCache = "_internal_" + internalId++; + } + } + return this.internalNameCache; + } + + public hasSelfReference() { return hasFlag(this.fncFlags, FncFlags.HasSelfReference); } + public setHasSelfReference() { this.fncFlags |= FncFlags.HasSelfReference; } + + public addCloRef(id: Identifier, sym: Symbol): number { + if (this.envids == null) { + this.envids = new Identifier[]; + } + this.envids[this.envids.length] = id; + var outerFnc = this.enclosingFnc; + if (sym) { + while (outerFnc && (outerFnc.type.symbol != sym.container)) { + outerFnc.addJumpRef(sym); + outerFnc = outerFnc.enclosingFnc; + } + } + return this.envids.length - 1; + } + + public addJumpRef(sym: Symbol): void { + if (this.jumpRefs == null) { + this.jumpRefs = new Identifier[]; + } + var id = new Identifier(sym.name); + this.jumpRefs[this.jumpRefs.length] = id; + id.sym = sym; + id.cloId = this.addCloRef(id, null); + } + + public buildControlFlow(): ControlFlowContext { + var entry = new BasicBlock(); + var exit = new BasicBlock(); + + var context = new ControlFlowContext(entry, exit); + + var controlFlowPrefix = (ast: AST, parent: AST, walker: IAstWalker) => { + ast.addToControlFlow(walker.state); + return ast; + } + + var walker = getAstWalkerFactory().getWalker(controlFlowPrefix, null, null, context); + context.walker = walker; + walker.walk(this.bod, this); + + return context; + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckFunction(this); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitJavascriptFunction(this); + } + + public getNameText() { + if (this.name) { + return this.name.actualText; + } + else { + return this.hint; + } + } + + public isMethod() { + return (this.fncFlags & FncFlags.Method) != FncFlags.None; + } + + public isCallMember() { return hasFlag(this.fncFlags, FncFlags.CallMember); } + public isConstructMember() { return hasFlag(this.fncFlags, FncFlags.ConstructMember); } + public isIndexerMember() { return hasFlag(this.fncFlags, FncFlags.IndexerMember); } + public isSpecialFn() { return this.isCallMember() || this.isIndexerMember() || this.isConstructMember(); } + public isAnonymousFn() { return this.name === null; } + public isAccessor() { return hasFlag(this.fncFlags, FncFlags.GetAccessor) || hasFlag(this.fncFlags, FncFlags.SetAccessor); } + public isGetAccessor() { return hasFlag(this.fncFlags, FncFlags.GetAccessor); } + public isSetAccessor() { return hasFlag(this.fncFlags, FncFlags.SetAccessor); } + public isAmbient() { return hasFlag(this.fncFlags, FncFlags.Ambient); } + public isExported() { return hasFlag(this.fncFlags, FncFlags.Exported); } + public isPrivate() { return hasFlag(this.fncFlags, FncFlags.Private); } + public isPublic() { return hasFlag(this.fncFlags, FncFlags.Public); } + public isStatic() { return hasFlag(this.fncFlags, FncFlags.Static); } + + public treeViewLabel() { + if (this.name == null) { + return "funcExpr"; + } + else { + return "func: " + this.name.actualText + } + } + + public ClearFlags(): void { + this.fncFlags = FncFlags.None; + } + + public isSignature() { return (this.fncFlags & FncFlags.Signature) != FncFlags.None; } + + public hasStaticDeclarations() { return (!this.isConstructor && (this.statics.members.length > 0 || this.innerStaticFuncs.length > 0)); } + } + + export class LocationInfo { + constructor (public filename: string, public lineMap: number[], public unitIndex) { } + } + + export var unknownLocationInfo = new LocationInfo("unknown", null, -1); + + export class Script extends FuncDecl { + public locationInfo: LocationInfo = null; + public referencedFiles: IFileReference[] = []; + public requiresGlobal = false; + public requiresInherits = false; + public isResident = false; + public isDeclareFile = false; + public hasBeenTypeChecked = false; + public topLevelMod: ModuleDeclaration = null; + public leftCurlyCount = 0; + public rightCurlyCount = 0; + public vars: ASTList; + public scopes: ASTList; + // Remember if the script contains Unicode chars, that is needed when generating code for this script object to decide the output file correct encoding. + public containsUnicodeChar = false; + public containsUnicodeCharInComment = false; + + constructor (vars: ASTList, scopes: ASTList) { + super(new Identifier("script"), null, false, null, vars, scopes, null, NodeType.Script); + this.vars = vars; + this.scopes = scopes; + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckScript(this); + } + + public treeViewLabel() { + return "Script"; + } + + public emitRequired() { + if (!this.isDeclareFile && !this.isResident && this.bod) { + for (var i = 0, len = this.bod.members.length; i < len; i++) { + var stmt = this.bod.members[i]; + if (stmt.nodeType == NodeType.ModuleDeclaration) { + if (!hasFlag((stmt).modFlags, ModuleFlags.ShouldEmitModuleDecl | ModuleFlags.Ambient)) { + return true; + } + } + else if (stmt.nodeType == NodeType.ClassDeclaration) { + if (!hasFlag((stmt).varFlags, VarFlags.Ambient)) { + return true; + } + } + else if (stmt.nodeType == NodeType.VarDecl) { + if (!hasFlag((stmt).varFlags, VarFlags.Ambient)) { + return true; + } + } + else if (stmt.nodeType == NodeType.FuncDecl) { + if (!(stmt).isSignature()) { + return true; + } + } + else if (stmt.nodeType != NodeType.InterfaceDeclaration && stmt.nodeType != NodeType.Empty) { + return true; + } + } + } + return false; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + if (this.emitRequired()) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitJavascriptList(this.bod, null, TokenID.Semicolon, true, false, false, true, this.requiresInherits); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + } + + export class NamedDeclaration extends ModuleElement { + public leftCurlyCount = 0; + public rightCurlyCount = 0; + + constructor (nodeType: NodeType, + public name: Identifier, + public members: ASTList) { + super(nodeType); + } + } + + export class ModuleDeclaration extends NamedDeclaration { + public modFlags = ModuleFlags.ShouldEmitModuleDecl; + public mod: ModuleType; + public prettyName: string; + public amdDependencies: string[] = []; + public vars: ASTList; + public scopes: ASTList; + // Remember if the module contains Unicode chars, that is needed for dynamic module as we will generate a file for each. + public containsUnicodeChar = false; + public containsUnicodeCharInComment = false; + + constructor (name: Identifier, members: ASTList, vars: ASTList, scopes: ASTList, public endingToken: ASTSpan) { + super(NodeType.ModuleDeclaration, name, members); + + this.vars = vars; + this.scopes = scopes; + this.prettyName = this.name.actualText; + } + + public isExported() { return hasFlag(this.modFlags, ModuleFlags.Exported); } + public isAmbient() { return hasFlag(this.modFlags, ModuleFlags.Ambient); } + public isEnum() { return hasFlag(this.modFlags, ModuleFlags.IsEnum); } + + public recordNonInterface() { + this.modFlags &= ~ModuleFlags.ShouldEmitModuleDecl; + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckModule(this); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + if (!hasFlag(this.modFlags, ModuleFlags.ShouldEmitModuleDecl)) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitJavascriptModule(this); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + } + + export class TypeDeclaration extends NamedDeclaration { + public varFlags = VarFlags.None; + + constructor (nodeType: NodeType, + name: Identifier, + public extendsList: ASTList, + public implementsList: ASTList, + members: ASTList) { + super(nodeType, name, members); + } + + public isExported() { + return hasFlag(this.varFlags, VarFlags.Exported); + } + + public isAmbient() { + return hasFlag(this.varFlags, VarFlags.Ambient); + } + } + + export class ClassDeclaration extends TypeDeclaration { + public knownMemberNames: any = {}; + public constructorDecl: FuncDecl = null; + public constructorNestingLevel = 0; + public endingToken: ASTSpan = null; + + constructor (name: Identifier, + members: ASTList, + extendsList: ASTList, + implementsList: ASTList) { + super(NodeType.ClassDeclaration, name, extendsList, implementsList, members); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckClass(this); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitJavascriptClass(this); + } + } + + export class InterfaceDeclaration extends TypeDeclaration { + constructor (name: Identifier, + members: ASTList, + extendsList: ASTList, + implementsList: ASTList) { + super(NodeType.InterfaceDeclaration, name, extendsList, implementsList, members); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckInterface(this); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + } + } + + export class Statement extends ModuleElement { + constructor (nodeType: NodeType) { + super(nodeType); + this.flags |= ASTFlags.IsStatement; + } + + public isLoop() { return false; } + + public isStatementOrExpression() { return true; } + + public isCompoundStatement() { return this.isLoop(); } + + public typeCheck(typeFlow: TypeFlow) { + this.type = typeFlow.voidType; + return this; + } + } + + export class LabeledStatement extends Statement { + constructor (public labels: ASTList, public stmt: AST) { + super(NodeType.LabeledStatement); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.labels) { + var labelsLen = this.labels.members.length; + for (var i = 0; i < labelsLen; i++) { + this.labels.members[i].emit(emitter, tokenId, startLine); + } + } + this.stmt.emit(emitter, tokenId, true); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + typeFlow.typeCheck(this.labels); + this.stmt = this.stmt.typeCheck(typeFlow); + return this; + } + + public addToControlFlow(context: ControlFlowContext): void { + var beforeBB = context.current; + var bb = new BasicBlock(); + context.current = bb; + beforeBB.addSuccessor(bb); + } + } + + export class Block extends Statement { + constructor (public statements: ASTList, + public isStatementBlock: boolean) { + super(NodeType.Block); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.isStatementBlock) { + emitter.writeLineToOutput(" {"); + emitter.indenter.increaseIndent(); + } else { + emitter.setInVarBlock(this.statements.members.length); + } + var temp = emitter.setInObjectLiteral(false); + if (this.statements) { + emitter.emitJavascriptList(this.statements, null, TokenID.Semicolon, true, false, false); + } + if (this.isStatementBlock) { + emitter.indenter.decreaseIndent(); + emitter.emitIndent(); + emitter.writeToOutput("}"); + } + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public addToControlFlow(context: ControlFlowContext) { + var afterIfNeeded = new BasicBlock(); + context.pushStatement(this, context.current, afterIfNeeded); + if (this.statements) { + context.walk(this.statements, this); + } + context.walker.options.goChildren = false; + context.popStatement(); + if (afterIfNeeded.predecessors.length > 0) { + context.current.addSuccessor(afterIfNeeded); + context.current = afterIfNeeded; + } + } + + public typeCheck(typeFlow: TypeFlow) { + if (!typeFlow.checker.styleSettings.emptyBlocks) { + if ((this.statements === null) || (this.statements.members.length == 0)) { + typeFlow.checker.errorReporter.styleError(this, "empty block"); + } + } + + typeFlow.typeCheck(this.statements); + return this; + } + } + + export class Jump extends Statement { + public target: string = null; + public hasExplicitTarget() { return (this.target); } + public resolvedTarget: Statement = null; + + constructor (nodeType: NodeType) { + super(nodeType); + } + + public setResolvedTarget(parser: Parser, stmt: Statement): boolean { + if (stmt.isLoop()) { + this.resolvedTarget = stmt; + return true; + } + if (this.nodeType === NodeType.Continue) { + parser.reportParseError("continue statement applies only to loops"); + return false; + } + else { + if ((stmt.nodeType == NodeType.Switch) || this.hasExplicitTarget()) { + this.resolvedTarget = stmt; + return true; + } + else { + parser.reportParseError("break statement with no label can apply only to a loop or switch statement"); + return false; + } + } + } + + public addToControlFlow(context: ControlFlowContext): void { + super.addToControlFlow(context); + context.unconditionalBranch(this.resolvedTarget, (this.nodeType == NodeType.Continue)); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.nodeType == NodeType.Break) { + emitter.writeToOutput("break"); + } + else { + emitter.writeToOutput("continue"); + } + if (this.hasExplicitTarget()) { + emitter.writeToOutput(" " + this.target); + } + emitter.recordSourceMappingEnd(this); + emitter.writeToOutput(";"); + emitter.emitParensAndCommentsInPlace(this, false); + } + } + + export class WhileStatement extends Statement { + public body: AST = null; + + constructor (public cond: AST) { + super(NodeType.While); + } + + public isLoop() { return true; } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.writeToOutput("while("); + emitter.emitJavascript(this.cond, TokenID.While, false); + emitter.writeToOutput(")"); + emitter.emitJavascriptStatements(this.body, false, false); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckWhile(this); + } + + public addToControlFlow(context: ControlFlowContext): void { + var loopHeader = context.current; + var loopStart = new BasicBlock(); + var afterLoop = new BasicBlock(); + + loopHeader.addSuccessor(loopStart); + context.current = loopStart; + context.addContent(this.cond); + var condBlock = context.current; + var targetInfo: ITargetInfo = null; + if (this.body) { + context.current = new BasicBlock(); + condBlock.addSuccessor(context.current); + context.pushStatement(this, loopStart, afterLoop); + context.walk(this.body, this); + targetInfo = context.popStatement(); + } + if (!(context.noContinuation)) { + var loopEnd = context.current; + loopEnd.addSuccessor(loopStart); + } + context.current = afterLoop; + condBlock.addSuccessor(afterLoop); + // TODO: check for while (true) and then only continue if afterLoop has predecessors + context.noContinuation = false; + context.walker.options.goChildren = false; + } + } + + export class DoWhileStatement extends Statement { + public body: AST = null; + public whileAST: AST = null; + public cond: AST = null; + public isLoop() { return true; } + + constructor () { + super(NodeType.DoWhile); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.writeToOutput("do"); + emitter.emitJavascriptStatements(this.body, true, false); + emitter.recordSourceMappingStart(this.whileAST); + emitter.writeToOutput("while"); + emitter.recordSourceMappingEnd(this.whileAST); + emitter.writeToOutput('('); + emitter.emitJavascript(this.cond, TokenID.CloseParen, false); + emitter.writeToOutput(")"); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckDoWhile(this); + } + + public addToControlFlow(context: ControlFlowContext): void { + var loopHeader = context.current; + var loopStart = new BasicBlock(); + var afterLoop = new BasicBlock(); + loopHeader.addSuccessor(loopStart); + context.current = loopStart; + var targetInfo: ITargetInfo = null; + if (this.body) { + context.pushStatement(this, loopStart, afterLoop); + context.walk(this.body, this); + targetInfo = context.popStatement(); + } + if (!(context.noContinuation)) { + var loopEnd = context.current; + loopEnd.addSuccessor(loopStart); + context.addContent(this.cond); + // TODO: check for while (true) + context.current = afterLoop; + loopEnd.addSuccessor(afterLoop); + } + else { + context.addUnreachable(this.cond); + } + context.walker.options.goChildren = false; + } + } + + export class IfStatement extends Statement { + public thenBod: AST; + public elseBod: AST = null; + public statement: ASTSpan = new ASTSpan(); + + constructor (public cond: AST) { + super(NodeType.If); + } + + public isCompoundStatement() { return true; } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.recordSourceMappingStart(this.statement); + emitter.writeToOutput("if("); + emitter.emitJavascript(this.cond, TokenID.If, false); + emitter.writeToOutput(")"); + emitter.recordSourceMappingEnd(this.statement); + emitter.emitJavascriptStatements(this.thenBod, true, false); + if (this.elseBod) { + emitter.writeToOutput(" else"); + emitter.emitJavascriptStatements(this.elseBod, true, true); + } + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckIf(this); + } + + public addToControlFlow(context: ControlFlowContext): void { + this.cond.addToControlFlow(context); + var afterIf = new BasicBlock(); + var beforeIf = context.current; + context.pushStatement(this, beforeIf, afterIf); + var hasContinuation = false; + context.current = new BasicBlock(); + beforeIf.addSuccessor(context.current); + context.walk(this.thenBod, this); + if (!context.noContinuation) { + hasContinuation = true; + context.current.addSuccessor(afterIf); + } + if (this.elseBod) { + // current block will be thenBod + context.current = new BasicBlock(); + context.noContinuation = false; + beforeIf.addSuccessor(context.current); + context.walk(this.elseBod, this); + if (!context.noContinuation) { + hasContinuation = true; + context.current.addSuccessor(afterIf); + } + else { + // thenBod created continuation for if statement + if (hasContinuation) { + context.noContinuation = false; + } + } + } + else { + beforeIf.addSuccessor(afterIf); + context.noContinuation = false; + hasContinuation = true; + } + var targetInfo = context.popStatement(); + if (afterIf.predecessors.length > 0) { + context.noContinuation = false; + hasContinuation = true; + } + if (hasContinuation) { + context.current = afterIf; + } + context.walker.options.goChildren = false; + } + } + + export class ReturnStatement extends Statement { + public returnExpression: AST = null; + + constructor () { + super(NodeType.Return); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + if (this.returnExpression) { + emitter.writeToOutput("return "); + emitter.emitJavascript(this.returnExpression, TokenID.Semicolon, false); + } + else { + emitter.writeToOutput("return;"); + } + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public addToControlFlow(context: ControlFlowContext): void { + super.addToControlFlow(context); + context.returnStmt(); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckReturn(this); + } + } + + export class EndCode extends AST { + constructor () { + super(NodeType.EndCode); + } + } + + export class ForInStatement extends Statement { + constructor (public lval: AST, public obj: AST) { + super(NodeType.ForIn); + if (this.lval && (this.lval.nodeType == NodeType.VarDecl)) { + (this.lval).varFlags |= VarFlags.AutoInit; + } + } + public statement: ASTSpan = new ASTSpan(); + public body: AST; + + public isLoop() { return true; } + + public isFiltered() { + if (this.body) { + var singleItem: AST = null; + if (this.body.nodeType == NodeType.List) { + var stmts = this.body; + if (stmts.members.length == 1) { + singleItem = stmts.members[0]; + } + } + else { + singleItem = this.body; + } + // match template for filtering 'own' properties from obj + if (singleItem !== null) { + if (singleItem.nodeType == NodeType.Block) { + var block = singleItem; + if ((block.statements !== null) && (block.statements.members.length == 1)) { + singleItem = block.statements.members[0]; + } + } + if (singleItem.nodeType == NodeType.If) { + var cond = (singleItem).cond; + if (cond.nodeType == NodeType.Call) { + var target = (cond).target; + if (target.nodeType == NodeType.Dot) { + var binex = target; + if ((binex.operand1.nodeType == NodeType.Name) && + (this.obj.nodeType == NodeType.Name) && + ((binex.operand1).actualText == (this.obj).actualText)) { + var prop = binex.operand2; + if (prop.actualText == "hasOwnProperty") { + var args = (cond).arguments; + if ((args !== null) && (args.members.length == 1)) { + var arg = args.members[0]; + if ((arg.nodeType == NodeType.Name) && + (this.lval.nodeType == NodeType.Name)) { + if (((this.lval).actualText) == (arg).actualText) { + return true; + } + } + } + } + } + } + } + } + } + } + return false; + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.recordSourceMappingStart(this.statement); + emitter.writeToOutput("for("); + emitter.emitJavascript(this.lval, TokenID.For, false); + emitter.writeToOutput(" in "); + emitter.emitJavascript(this.obj, TokenID.For, false); + emitter.writeToOutput(")"); + emitter.recordSourceMappingEnd(this.statement); + emitter.emitJavascriptStatements(this.body, true, false); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + if (typeFlow.checker.styleSettings.forin) { + if (!this.isFiltered()) { + typeFlow.checker.errorReporter.styleError(this, "no hasOwnProperty filter"); + } + } + return typeFlow.typeCheckForIn(this); + } + + public addToControlFlow(context: ControlFlowContext): void { + if (this.lval) { + context.addContent(this.lval); + } + if (this.obj) { + context.addContent(this.obj); + } + + var loopHeader = context.current; + var loopStart = new BasicBlock(); + var afterLoop = new BasicBlock(); + + loopHeader.addSuccessor(loopStart); + context.current = loopStart; + if (this.body) { + context.pushStatement(this, loopStart, afterLoop); + context.walk(this.body, this); + context.popStatement(); + } + if (!(context.noContinuation)) { + var loopEnd = context.current; + loopEnd.addSuccessor(loopStart); + } + context.current = afterLoop; + context.noContinuation = false; + loopHeader.addSuccessor(afterLoop); + context.walker.options.goChildren = false; + } + } + + export class ForStatement extends Statement { + public cond: AST; + public body: AST; + public incr: AST; + + constructor (public init: AST) { + super(NodeType.For); + } + + public isLoop() { return true; } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.writeToOutput("for("); + if (this.init) { + if (this.init.nodeType != NodeType.List) { + emitter.emitJavascript(this.init, TokenID.For, false); + } + else { + emitter.setInVarBlock((this.init).members.length); + emitter.emitJavascriptList(this.init, null, TokenID.For, false, false, false); + } + } + emitter.writeToOutput("; "); + emitter.emitJavascript(this.cond, TokenID.For, false); + emitter.writeToOutput("; "); + emitter.emitJavascript(this.incr, TokenID.For, false); + emitter.writeToOutput(")"); + emitter.emitJavascriptStatements(this.body, true, false); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckFor(this); + } + + public addToControlFlow(context: ControlFlowContext): void { + if (this.init) { + context.addContent(this.init); + } + var loopHeader = context.current; + var loopStart = new BasicBlock(); + var afterLoop = new BasicBlock(); + + loopHeader.addSuccessor(loopStart); + context.current = loopStart; + var condBlock: BasicBlock = null; + var continueTarget = loopStart; + var incrBB: BasicBlock = null; + if (this.incr) { + incrBB = new BasicBlock(); + continueTarget = incrBB; + } + if (this.cond) { + condBlock = context.current; + context.addContent(this.cond); + context.current = new BasicBlock(); + condBlock.addSuccessor(context.current); + } + var targetInfo: ITargetInfo = null; + if (this.body) { + context.pushStatement(this, continueTarget, afterLoop); + context.walk(this.body, this); + targetInfo = context.popStatement(); + } + if (this.incr) { + if (context.noContinuation) { + if (incrBB.predecessors.length == 0) { + context.addUnreachable(this.incr); + } + } + else { + context.current.addSuccessor(incrBB); + context.current = incrBB; + context.addContent(this.incr); + } + } + var loopEnd = context.current; + if (!(context.noContinuation)) { + loopEnd.addSuccessor(loopStart); + + } + if (condBlock) { + condBlock.addSuccessor(afterLoop); + context.noContinuation = false; + } + if (afterLoop.predecessors.length > 0) { + context.noContinuation = false; + context.current = afterLoop; + } + context.walker.options.goChildren = false; + } + } + + export class WithStatement extends Statement { + public body: AST; + + public isCompoundStatement() { return true; } + + public withSym: WithSymbol = null; + + constructor (public expr: AST) { + super(NodeType.With); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("with ("); + if (this.expr) { + emitter.emitJavascript(this.expr, TokenID.With, false); + } + + emitter.writeToOutput(")"); + emitter.emitJavascriptStatements(this.body, true, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + return typeFlow.typeCheckWith(this); + } + } + + export class SwitchStatement extends Statement { + public caseList: ASTList; + public defaultCase: CaseStatement = null; + public statement: ASTSpan = new ASTSpan(); + + constructor (public val: AST) { + super(NodeType.Switch); + } + + public isCompoundStatement() { return true; } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.recordSourceMappingStart(this.statement); + emitter.writeToOutput("switch("); + emitter.emitJavascript(this.val, TokenID.Identifier, false); + emitter.writeToOutput(")"); + emitter.recordSourceMappingEnd(this.statement); + emitter.writeLineToOutput(" {"); + emitter.indenter.increaseIndent(); + var casesLen = this.caseList.members.length; + for (var i = 0; i < casesLen; i++) { + var caseExpr = this.caseList.members[i]; + emitter.emitJavascript(caseExpr, TokenID.Case, true); + emitter.writeLineToOutput(""); + } + emitter.indenter.decreaseIndent(); + emitter.emitIndent(); + emitter.writeToOutput("}"); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + var len = this.caseList.members.length; + this.val = typeFlow.typeCheck(this.val); + for (var i = 0; i < len; i++) { + this.caseList.members[i] = typeFlow.typeCheck(this.caseList.members[i]); + } + this.defaultCase = typeFlow.typeCheck(this.defaultCase); + this.type = typeFlow.voidType; + return this; + } + + // if there are break statements that match this switch, then just link cond block with block after switch + public addToControlFlow(context: ControlFlowContext) { + var condBlock = context.current; + context.addContent(this.val); + var execBlock = new BasicBlock(); + var afterSwitch = new BasicBlock(); + + condBlock.addSuccessor(execBlock); + context.pushSwitch(execBlock); + context.current = execBlock; + context.pushStatement(this, execBlock, afterSwitch); + context.walk(this.caseList, this); + context.popSwitch(); + var targetInfo = context.popStatement(); + var hasCondContinuation = (this.defaultCase == null); + if (this.defaultCase == null) { + condBlock.addSuccessor(afterSwitch); + } + if (afterSwitch.predecessors.length > 0) { + context.noContinuation = false; + context.current = afterSwitch; + } + else { + context.noContinuation = true; + } + context.walker.options.goChildren = false; + } + } + + export class CaseStatement extends Statement { + public expr: AST = null; + public body: ASTList; + + constructor () { + super(NodeType.Case); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.expr) { + emitter.writeToOutput("case "); + emitter.emitJavascript(this.expr, TokenID.Identifier, false); + } + else { + emitter.writeToOutput("default"); + } + emitter.writeToOutput(":"); + emitter.emitJavascriptStatements(this.body, false, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + this.expr = typeFlow.typeCheck(this.expr); + typeFlow.typeCheck(this.body); + this.type = typeFlow.voidType; + return this; + } + + // TODO: more reasoning about unreachable cases (such as duplicate literals as case expressions) + // for now, assume all cases are reachable, regardless of whether some cases fall through + public addToControlFlow(context: ControlFlowContext) { + var execBlock = new BasicBlock(); + var sw = context.currentSwitch[context.currentSwitch.length - 1]; + // TODO: fall-through from previous (+ to end of switch) + if (this.expr) { + var exprBlock = new BasicBlock(); + context.current = exprBlock; + sw.addSuccessor(exprBlock); + context.addContent(this.expr); + exprBlock.addSuccessor(execBlock); + } + else { + sw.addSuccessor(execBlock); + } + context.current = execBlock; + if (this.body) { + context.walk(this.body, this); + } + context.noContinuation = false; + context.walker.options.goChildren = false; + } + } + + export class TypeReference extends AST { + constructor (public term: AST, public arrayCount: number) { + super(NodeType.TypeRef); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + throw new Error("should not emit a type ref"); + } + + public typeCheck(typeFlow: TypeFlow) { + var prevInTCTR = typeFlow.inTypeRefTypeCheck; + typeFlow.inTypeRefTypeCheck = true; + var typeLink = getTypeLink(this, typeFlow.checker, true); + typeFlow.checker.resolveTypeLink(typeFlow.scope, typeLink, false); + + if (this.term) { + typeFlow.typeCheck(this.term); + } + + typeFlow.checkForVoidConstructor(typeLink.type, this); + + this.type = typeLink.type; + + // in error recovery cases, there may not be a term + if (this.term) { + this.term.type = this.type; + } + + typeFlow.inTypeRefTypeCheck = prevInTCTR; + return this; + } + } + + export class TryFinally extends Statement { + constructor (public tryNode: AST, public finallyNode: Finally) { + super(NodeType.TryFinally); + } + + public isCompoundStatement() { return true; } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.recordSourceMappingStart(this); + emitter.emitJavascript(this.tryNode, TokenID.Try, false); + emitter.emitJavascript(this.finallyNode, TokenID.Finally, false); + emitter.recordSourceMappingEnd(this); + } + + public typeCheck(typeFlow: TypeFlow) { + this.tryNode = typeFlow.typeCheck(this.tryNode); + this.finallyNode = typeFlow.typeCheck(this.finallyNode); + this.type = typeFlow.voidType; + return this; + } + + public addToControlFlow(context: ControlFlowContext) { + var afterFinally = new BasicBlock(); + context.walk(this.tryNode, this); + var finBlock = new BasicBlock(); + if (context.current) { + context.current.addSuccessor(finBlock); + } + context.current = finBlock; + context.pushStatement(this, null, afterFinally); + context.walk(this.finallyNode, this); + if (!context.noContinuation && context.current) { + context.current.addSuccessor(afterFinally); + } + if (afterFinally.predecessors.length > 0) { + context.current = afterFinally; + } + else { + context.noContinuation = true; + } + context.popStatement(); + context.walker.options.goChildren = false; + } + } + + export class TryCatch extends Statement { + constructor (public tryNode: Try, public catchNode: Catch) { + super(NodeType.TryCatch); + } + + public isCompoundStatement() { return true; } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitJavascript(this.tryNode, TokenID.Try, false); + emitter.emitJavascript(this.catchNode, TokenID.Catch, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public addToControlFlow(context: ControlFlowContext) { + var beforeTry = context.current; + var tryBlock = new BasicBlock(); + beforeTry.addSuccessor(tryBlock); + context.current = tryBlock; + var afterTryCatch = new BasicBlock(); + context.pushStatement(this, null, afterTryCatch); + context.walk(this.tryNode, this); + if (!context.noContinuation) { + if (context.current) { + context.current.addSuccessor(afterTryCatch); + } + } + context.current = new BasicBlock(); + beforeTry.addSuccessor(context.current); + context.walk(this.catchNode, this); + context.popStatement(); + if (!context.noContinuation) { + if (context.current) { + context.current.addSuccessor(afterTryCatch); + } + } + context.current = afterTryCatch; + context.walker.options.goChildren = false; + } + + public typeCheck(typeFlow: TypeFlow) { + this.tryNode = typeFlow.typeCheck(this.tryNode); + this.catchNode = typeFlow.typeCheck(this.catchNode); + this.type = typeFlow.voidType; + return this; + } + } + + export class Try extends Statement { + constructor (public body: AST) { + super(NodeType.Try); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("try "); + emitter.emitJavascript(this.body, TokenID.Try, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public typeCheck(typeFlow: TypeFlow) { + this.body = typeFlow.typeCheck(this.body); + return this; + } + + public addToControlFlow(context: ControlFlowContext) { + if (this.body) { + context.walk(this.body, this); + } + context.walker.options.goChildren = false; + context.noContinuation = false; + } + } + + export class Catch extends Statement { + constructor (public param: VarDecl, public body: AST) { + super(NodeType.Catch); + if (this.param) { + this.param.varFlags |= VarFlags.AutoInit; + } + } + public statement: ASTSpan = new ASTSpan(); + public containedScope: SymbolScope = null; + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput(" "); + emitter.recordSourceMappingStart(this.statement); + emitter.writeToOutput("catch ("); + emitter.emitJavascript(this.param, TokenID.OpenParen, false); + emitter.writeToOutput(")"); + emitter.recordSourceMappingEnd(this.statement); + emitter.emitJavascript(this.body, TokenID.Catch, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public addToControlFlow(context: ControlFlowContext) { + if (this.param) { + context.addContent(this.param); + var bodBlock = new BasicBlock(); + context.current.addSuccessor(bodBlock); + context.current = bodBlock; + } + if (this.body) { + context.walk(this.body, this); + } + context.noContinuation = false; + context.walker.options.goChildren = false; + } + + public typeCheck(typeFlow: TypeFlow) { + var prevScope = typeFlow.scope; + typeFlow.scope = this.containedScope; + this.param = typeFlow.typeCheck(this.param); + var exceptVar = new ValueLocation(); + var varSym = new VariableSymbol((this.param).id.text, + this.param.minChar, + typeFlow.checker.locationInfo.unitIndex, + exceptVar); + exceptVar.symbol = varSym; + exceptVar.typeLink = new TypeLink(); + // var type for now (add syntax for type annotation) + exceptVar.typeLink.type = typeFlow.anyType; + var thisFnc = typeFlow.thisFnc; + if (thisFnc && thisFnc.type) { + exceptVar.symbol.container = thisFnc.type.symbol; + } + else { + exceptVar.symbol.container = null; + } + this.param.sym = exceptVar.symbol; + typeFlow.scope.enter(exceptVar.symbol.container, this.param, exceptVar.symbol, + typeFlow.checker.errorReporter, false, false, false); + this.body = typeFlow.typeCheck(this.body); + + // if we're in provisional typecheck mode, clean up the symbol entry + // REVIEW: This is obviously bad form, since we're counting on the internal + // layout of the symbol table, but this is also the only place where we insert + // symbols during typecheck + if (typeFlow.checker.inProvisionalTypecheckMode()) { + var table = typeFlow.scope.getTable(); + (table).secondaryTable.table[exceptVar.symbol.name] = undefined; + } + this.type = typeFlow.voidType; + typeFlow.scope = prevScope; + return this; + } + } + + export class Finally extends Statement { + constructor (public body: AST) { + super(NodeType.Finally); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("finally"); + emitter.emitJavascript(this.body, TokenID.Finally, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + + public addToControlFlow(context: ControlFlowContext) { + if (this.body) { + context.walk(this.body, this); + } + context.walker.options.goChildren = false; + context.noContinuation = false; + } + + public typeCheck(typeFlow: TypeFlow) { + this.body = typeFlow.typeCheck(this.body); + return this; + } + } + + export class Comment extends AST { + + public text: string[] = null; + + constructor (public content: string, public isBlockComment: boolean, public endsLine) { + super(NodeType.Comment); + } + + public getText(): string[] { + if (this.text == null) { + if (this.isBlockComment) { + this.text = this.content.split("\n"); + for (var i = 0; i < this.text.length; i++) { + this.text[i] = this.text[i].replace(/^\s+|\s+$/g, ''); + } + } + else { + this.text = [(this.content.replace(/^\s+|\s+$/g, ''))]; + } + } + + return this.text; + } + } + + export class DebuggerStatement extends Statement { + constructor () { + super(NodeType.Debugger); + } + + public emit(emitter: Emitter, tokenId: TokenID, startLine: boolean) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeLineToOutput("debugger;"); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + } +} + +//// [parserRealSource11.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +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 TypeScript; +(function (TypeScript) { + var ASTSpan = (function () { + function ASTSpan() { + this.minChar = -1; // -1 = "undefined" or "compiler generated" + this.limChar = -1; // -1 = "undefined" or "compiler generated" + } + return ASTSpan; + })(); + TypeScript.ASTSpan = ASTSpan; + var AST = (function (_super) { + __extends(AST, _super); + function AST(nodeType) { + _super.call(this); + this.nodeType = nodeType; + this.type = null; + this.flags = ASTFlags.Writeable; + // REVIEW: for diagnostic purposes + this.passCreated = CompilerDiagnostics.analysisPass; + this.preComments = null; + this.postComments = null; + this.isParenthesized = false; + } + AST.prototype.isExpression = function () { + return false; + }; + AST.prototype.isStatementOrExpression = function () { + return false; + }; + AST.prototype.isCompoundStatement = function () { + return false; + }; + AST.prototype.isLeaf = function () { + return this.isStatementOrExpression() && (!this.isCompoundStatement()); + }; + AST.prototype.typeCheck = function (typeFlow) { + switch (this.nodeType) { + case NodeType.Error: + case NodeType.EmptyExpr: + this.type = typeFlow.anyType; + break; + case NodeType.This: + return typeFlow.typeCheckThis(this); + case NodeType.Null: + this.type = typeFlow.nullType; + break; + case NodeType.False: + case NodeType.True: + this.type = typeFlow.booleanType; + break; + case NodeType.Super: + return typeFlow.typeCheckSuper(this); + case NodeType.EndCode: + case NodeType.Empty: + case NodeType.Void: + this.type = typeFlow.voidType; + break; + default: + throw new Error("please implement in derived class"); + } + return this; + }; + AST.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + switch (this.nodeType) { + case NodeType.This: + emitter.recordSourceMappingStart(this); + if (emitter.thisFnc && (hasFlag(emitter.thisFnc.fncFlags, FncFlags.IsFatArrowFunction))) { + emitter.writeToOutput("_this"); + } + else { + emitter.writeToOutput("this"); + } + emitter.recordSourceMappingEnd(this); + break; + case NodeType.Null: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("null"); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.False: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("false"); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.True: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("true"); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.Super: + emitter.recordSourceMappingStart(this); + emitter.emitSuperReference(); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.EndCode: + break; + case NodeType.Error: + case NodeType.EmptyExpr: + break; + case NodeType.Empty: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("; "); + emitter.recordSourceMappingEnd(this); + break; + case NodeType.Void: + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("void "); + emitter.recordSourceMappingEnd(this); + break; + default: + throw new Error("please implement in derived class"); + } + emitter.emitParensAndCommentsInPlace(this, false); + }; + AST.prototype.print = function (context) { + context.startLine(); + var lineCol = { line: -1, col: -1 }; + var limLineCol = { line: -1, col: -1 }; + if (context.parser !== null) { + context.parser.getSourceLineCol(lineCol, this.minChar); + context.parser.getSourceLineCol(limLineCol, this.limChar); + context.write("(" + lineCol.line + "," + lineCol.col + ")--" + "(" + limLineCol.line + "," + limLineCol.col + "): "); + } + var lab = this.printLabel(); + if (hasFlag(this.flags, ASTFlags.Error)) { + lab += " (Error)"; + } + context.writeLine(lab); + }; + AST.prototype.printLabel = function () { + if (nodeTypeTable[this.nodeType] !== undefined) { + return nodeTypeTable[this.nodeType]; + } + else { + return NodeType._map[this.nodeType]; + } + }; + AST.prototype.addToControlFlow = function (context) { + // by default, AST adds itself to current basic block and does not check its children + context.walker.options.goChildren = false; + context.addContent(this); + }; + AST.prototype.netFreeUses = function (container, freeUses) { + }; + AST.prototype.treeViewLabel = function () { + return NodeType._map[this.nodeType]; + }; + AST.getResolvedIdentifierName = function (name) { + if (!name) + return ""; + var resolved = ""; + var start = 0; + var i = 0; + while (i <= name.length - 6) { + // Look for escape sequence \uxxxx + if (name.charAt(i) == '\\' && name.charAt(i + 1) == 'u') { + var charCode = parseInt(name.substr(i + 2, 4), 16); + resolved += name.substr(start, i - start); + resolved += String.fromCharCode(charCode); + i += 6; + start = i; + continue; + } + i++; + } + // Append remaining string + resolved += name.substring(start); + return resolved; + }; + return AST; + })(ASTSpan); + TypeScript.AST = AST; + var IncompleteAST = (function (_super) { + __extends(IncompleteAST, _super); + function IncompleteAST(min, lim) { + _super.call(this, NodeType.Error); + this.minChar = min; + this.limChar = lim; + } + return IncompleteAST; + })(AST); + TypeScript.IncompleteAST = IncompleteAST; + var ASTList = (function (_super) { + __extends(ASTList, _super); + function ASTList() { + _super.call(this, NodeType.List); + this.enclosingScope = null; + this.members = new AST[]; + } + ASTList.prototype.addToControlFlow = function (context) { + var len = this.members.length; + for (var i = 0; i < len; i++) { + if (context.noContinuation) { + context.addUnreachable(this.members[i]); + break; + } + else { + this.members[i] = context.walk(this.members[i], this); + } + } + context.walker.options.goChildren = false; + }; + ASTList.prototype.append = function (ast) { + this.members[this.members.length] = ast; + return this; + }; + ASTList.prototype.appendAll = function (ast) { + if (ast.nodeType == NodeType.List) { + var list = ast; + for (var i = 0, len = list.members.length; i < len; i++) { + this.append(list.members[i]); + } + } + else { + this.append(ast); + } + return this; + }; + ASTList.prototype.emit = function (emitter, tokenId, startLine) { + emitter.recordSourceMappingStart(this); + emitter.emitJavascriptList(this, null, TokenID.Semicolon, startLine, false, false); + emitter.recordSourceMappingEnd(this); + }; + ASTList.prototype.typeCheck = function (typeFlow) { + var len = this.members.length; + typeFlow.nestingLevel++; + for (var i = 0; i < len; i++) { + if (this.members[i]) { + this.members[i] = this.members[i].typeCheck(typeFlow); + } + } + typeFlow.nestingLevel--; + return this; + }; + return ASTList; + })(AST); + TypeScript.ASTList = ASTList; + var Identifier = (function (_super) { + __extends(Identifier, _super); + // 'actualText' is the text that the user has entered for the identifier. the text might + // include any Unicode escape sequences (e.g.: \u0041 for 'A'). 'text', however, contains + // the resolved value of any escape sequences in the actual text; so in the previous + // example, actualText = '\u0041', text = 'A'. + // + // For purposes of finding a symbol, use text, as this will allow you to match all + // variations of the variable text. For full-fidelity translation of the user input, such + // as emitting, use the actualText field. + // + // Note: + // To change text, and to avoid running into a situation where 'actualText' does not + // match 'text', always use setText. + function Identifier(actualText, hasEscapeSequence) { + _super.call(this, NodeType.Name); + this.actualText = actualText; + this.hasEscapeSequence = hasEscapeSequence; + this.sym = null; + this.cloId = -1; + this.setText(actualText, hasEscapeSequence); + } + Identifier.prototype.setText = function (actualText, hasEscapeSequence) { + this.actualText = actualText; + if (hasEscapeSequence) { + this.text = AST.getResolvedIdentifierName(actualText); + } + else { + this.text = actualText; + } + }; + Identifier.prototype.isMissing = function () { + return false; + }; + Identifier.prototype.isLeaf = function () { + return true; + }; + Identifier.prototype.treeViewLabel = function () { + return "id: " + this.actualText; + }; + Identifier.prototype.printLabel = function () { + if (this.actualText) { + return "id: " + this.actualText; + } + else { + return "name node"; + } + }; + Identifier.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckName(this); + }; + Identifier.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitJavascriptName(this, true); + }; + Identifier.fromToken = function (token) { + return new Identifier(token.getText(), token.hasEscapeSequence); + }; + return Identifier; + })(AST); + TypeScript.Identifier = Identifier; + var MissingIdentifier = (function (_super) { + __extends(MissingIdentifier, _super); + function MissingIdentifier() { + _super.call(this, "__missing"); + } + MissingIdentifier.prototype.isMissing = function () { + return true; + }; + MissingIdentifier.prototype.emit = function (emitter, tokenId, startLine) { + // Emit nothing for a missing ID + }; + return MissingIdentifier; + })(Identifier); + TypeScript.MissingIdentifier = MissingIdentifier; + var Label = (function (_super) { + __extends(Label, _super); + function Label(id) { + _super.call(this, NodeType.Label); + this.id = id; + } + Label.prototype.printLabel = function () { + return this.id.actualText + ":"; + }; + Label.prototype.typeCheck = function (typeFlow) { + this.type = typeFlow.voidType; + return this; + }; + Label.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.recordSourceMappingStart(this.id); + emitter.writeToOutput(this.id.actualText); + emitter.recordSourceMappingEnd(this.id); + emitter.writeLineToOutput(":"); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return Label; + })(AST); + TypeScript.Label = Label; + var Expression = (function (_super) { + __extends(Expression, _super); + function Expression(nodeType) { + _super.call(this, nodeType); + } + Expression.prototype.isExpression = function () { + return true; + }; + Expression.prototype.isStatementOrExpression = function () { + return true; + }; + return Expression; + })(AST); + TypeScript.Expression = Expression; + var UnaryExpression = (function (_super) { + __extends(UnaryExpression, _super); + function UnaryExpression(nodeType, operand) { + _super.call(this, nodeType); + this.operand = operand; + this.targetType = null; // Target type for an object literal (null if no target type) + this.castTerm = null; + } + UnaryExpression.prototype.addToControlFlow = function (context) { + _super.prototype.addToControlFlow.call(this, context); + // TODO: add successor as catch block/finally block if present + if (this.nodeType == NodeType.Throw) { + context.returnStmt(); + } + }; + UnaryExpression.prototype.typeCheck = function (typeFlow) { + switch (this.nodeType) { + case NodeType.Not: + return typeFlow.typeCheckBitNot(this); + case NodeType.LogNot: + return typeFlow.typeCheckLogNot(this); + case NodeType.Pos: + case NodeType.Neg: + return typeFlow.typeCheckUnaryNumberOperator(this); + case NodeType.IncPost: + case NodeType.IncPre: + case NodeType.DecPost: + case NodeType.DecPre: + return typeFlow.typeCheckIncOrDec(this); + case NodeType.ArrayLit: + typeFlow.typeCheckArrayLit(this); + return this; + case NodeType.ObjectLit: + typeFlow.typeCheckObjectLit(this); + return this; + case NodeType.Throw: + this.operand = typeFlow.typeCheck(this.operand); + this.type = typeFlow.voidType; + return this; + case NodeType.Typeof: + this.operand = typeFlow.typeCheck(this.operand); + this.type = typeFlow.stringType; + return this; + case NodeType.Delete: + this.operand = typeFlow.typeCheck(this.operand); + this.type = typeFlow.booleanType; + break; + case NodeType.TypeAssertion: + this.castTerm = typeFlow.typeCheck(this.castTerm); + var applyTargetType = !this.operand.isParenthesized; + var targetType = applyTargetType ? this.castTerm.type : null; + typeFlow.checker.typeCheckWithContextualType(targetType, typeFlow.checker.inProvisionalTypecheckMode(), true, this.operand); + typeFlow.castWithCoercion(this.operand, this.castTerm.type, false, true); + this.type = this.castTerm.type; + return this; + case NodeType.Void: + // REVIEW - Although this is good to do for completeness's sake, + // this shouldn't be strictly necessary from the void operator's + // point of view + this.operand = typeFlow.typeCheck(this.operand); + this.type = typeFlow.checker.undefinedType; + break; + default: + throw new Error("please implement in derived class"); + } + return this; + }; + UnaryExpression.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + switch (this.nodeType) { + case NodeType.IncPost: + emitter.emitJavascript(this.operand, TokenID.PlusPlus, false); + emitter.writeToOutput("++"); + break; + case NodeType.LogNot: + emitter.writeToOutput("!"); + emitter.emitJavascript(this.operand, TokenID.Exclamation, false); + break; + case NodeType.DecPost: + emitter.emitJavascript(this.operand, TokenID.MinusMinus, false); + emitter.writeToOutput("--"); + break; + case NodeType.ObjectLit: + emitter.emitObjectLiteral(this.operand); + break; + case NodeType.ArrayLit: + emitter.emitArrayLiteral(this.operand); + break; + case NodeType.Not: + emitter.writeToOutput("~"); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + case NodeType.Neg: + emitter.writeToOutput("-"); + if (this.operand.nodeType == NodeType.Neg) { + this.operand.isParenthesized = true; + } + emitter.emitJavascript(this.operand, TokenID.Minus, false); + break; + case NodeType.Pos: + emitter.writeToOutput("+"); + if (this.operand.nodeType == NodeType.Pos) { + this.operand.isParenthesized = true; + } + emitter.emitJavascript(this.operand, TokenID.Plus, false); + break; + case NodeType.IncPre: + emitter.writeToOutput("++"); + emitter.emitJavascript(this.operand, TokenID.PlusPlus, false); + break; + case NodeType.DecPre: + emitter.writeToOutput("--"); + emitter.emitJavascript(this.operand, TokenID.MinusMinus, false); + break; + case NodeType.Throw: + emitter.writeToOutput("throw "); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + emitter.writeToOutput(";"); + break; + case NodeType.Typeof: + emitter.writeToOutput("typeof "); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + case NodeType.Delete: + emitter.writeToOutput("delete "); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + case NodeType.Void: + emitter.writeToOutput("void "); + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + case NodeType.TypeAssertion: + emitter.emitJavascript(this.operand, TokenID.Tilde, false); + break; + default: + throw new Error("please implement in derived class"); + } + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return UnaryExpression; + })(Expression); + TypeScript.UnaryExpression = UnaryExpression; + var CallExpression = (function (_super) { + __extends(CallExpression, _super); + function CallExpression(nodeType, target, arguments) { + _super.call(this, nodeType); + this.target = target; + this.arguments = arguments; + this.signature = null; + this.minChar = this.target.minChar; + } + CallExpression.prototype.typeCheck = function (typeFlow) { + if (this.nodeType == NodeType.New) { + return typeFlow.typeCheckNew(this); + } + else { + return typeFlow.typeCheckCall(this); + } + }; + CallExpression.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.nodeType == NodeType.New) { + emitter.emitNew(this.target, this.arguments); + } + else { + emitter.emitCall(this, this.target, this.arguments); + } + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return CallExpression; + })(Expression); + TypeScript.CallExpression = CallExpression; + var BinaryExpression = (function (_super) { + __extends(BinaryExpression, _super); + function BinaryExpression(nodeType, operand1, operand2) { + _super.call(this, nodeType); + this.operand1 = operand1; + this.operand2 = operand2; + } + BinaryExpression.prototype.typeCheck = function (typeFlow) { + switch (this.nodeType) { + case NodeType.Dot: + return typeFlow.typeCheckDotOperator(this); + case NodeType.Asg: + return typeFlow.typeCheckAsgOperator(this); + case NodeType.Add: + case NodeType.Sub: + case NodeType.Mul: + case NodeType.Div: + case NodeType.Mod: + case NodeType.Or: + case NodeType.And: + return typeFlow.typeCheckArithmeticOperator(this, false); + case NodeType.Xor: + return typeFlow.typeCheckBitwiseOperator(this, false); + case NodeType.Ne: + case NodeType.Eq: + var text; + if (typeFlow.checker.styleSettings.eqeqeq) { + text = nodeTypeTable[this.nodeType]; + typeFlow.checker.errorReporter.styleError(this, "use of " + text); + } + else if (typeFlow.checker.styleSettings.eqnull) { + text = nodeTypeTable[this.nodeType]; + if ((this.operand2 !== null) && (this.operand2.nodeType == NodeType.Null)) { + typeFlow.checker.errorReporter.styleError(this, "use of " + text + " to compare with null"); + } + } + case NodeType.Eqv: + case NodeType.NEqv: + case NodeType.Lt: + case NodeType.Le: + case NodeType.Ge: + case NodeType.Gt: + return typeFlow.typeCheckBooleanOperator(this); + case NodeType.Index: + return typeFlow.typeCheckIndex(this); + case NodeType.Member: + this.type = typeFlow.voidType; + return this; + case NodeType.LogOr: + return typeFlow.typeCheckLogOr(this); + case NodeType.LogAnd: + return typeFlow.typeCheckLogAnd(this); + case NodeType.AsgAdd: + case NodeType.AsgSub: + case NodeType.AsgMul: + case NodeType.AsgDiv: + case NodeType.AsgMod: + case NodeType.AsgOr: + case NodeType.AsgAnd: + return typeFlow.typeCheckArithmeticOperator(this, true); + case NodeType.AsgXor: + return typeFlow.typeCheckBitwiseOperator(this, true); + case NodeType.Lsh: + case NodeType.Rsh: + case NodeType.Rs2: + return typeFlow.typeCheckShift(this, false); + case NodeType.AsgLsh: + case NodeType.AsgRsh: + case NodeType.AsgRs2: + return typeFlow.typeCheckShift(this, true); + case NodeType.Comma: + return typeFlow.typeCheckCommaOperator(this); + case NodeType.InstOf: + return typeFlow.typeCheckInstOf(this); + case NodeType.In: + return typeFlow.typeCheckInOperator(this); + case NodeType.From: + typeFlow.checker.errorReporter.simpleError(this, "Illegal use of 'from' keyword in binary expression"); + break; + default: + throw new Error("please implement in derived class"); + } + return this; + }; + BinaryExpression.prototype.emit = function (emitter, tokenId, startLine) { + var binTokenId = nodeTypeToTokTable[this.nodeType]; + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (binTokenId != undefined) { + emitter.emitJavascript(this.operand1, binTokenId, false); + if (tokenTable[binTokenId].text == "instanceof") { + emitter.writeToOutput(" instanceof "); + } + else if (tokenTable[binTokenId].text == "in") { + emitter.writeToOutput(" in "); + } + else { + emitter.writeToOutputTrimmable(" " + tokenTable[binTokenId].text + " "); + } + emitter.emitJavascript(this.operand2, binTokenId, false); + } + else { + switch (this.nodeType) { + case NodeType.Dot: + if (!emitter.tryEmitConstant(this)) { + emitter.emitJavascript(this.operand1, TokenID.Dot, false); + emitter.writeToOutput("."); + emitter.emitJavascriptName(this.operand2, false); + } + break; + case NodeType.Index: + emitter.emitIndex(this.operand1, this.operand2); + break; + case NodeType.Member: + if (this.operand2.nodeType == NodeType.FuncDecl && this.operand2.isAccessor()) { + var funcDecl = this.operand2; + if (hasFlag(funcDecl.fncFlags, FncFlags.GetAccessor)) { + emitter.writeToOutput("get "); + } + else { + emitter.writeToOutput("set "); + } + emitter.emitJavascript(this.operand1, TokenID.Colon, false); + } + else { + emitter.emitJavascript(this.operand1, TokenID.Colon, false); + emitter.writeToOutputTrimmable(": "); + } + emitter.emitJavascript(this.operand2, TokenID.Comma, false); + break; + case NodeType.Comma: + emitter.emitJavascript(this.operand1, TokenID.Comma, false); + if (emitter.emitState.inObjectLiteral) { + emitter.writeLineToOutput(", "); + } + else { + emitter.writeToOutput(","); + } + emitter.emitJavascript(this.operand2, TokenID.Comma, false); + break; + case NodeType.Is: + throw new Error("should be de-sugared during type check"); + default: + throw new Error("please implement in derived class"); + } + } + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return BinaryExpression; + })(Expression); + TypeScript.BinaryExpression = BinaryExpression; + var ConditionalExpression = (function (_super) { + __extends(ConditionalExpression, _super); + function ConditionalExpression(operand1, operand2, operand3) { + _super.call(this, NodeType.ConditionalExpression); + this.operand1 = operand1; + this.operand2 = operand2; + this.operand3 = operand3; + } + ConditionalExpression.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckQMark(this); + }; + ConditionalExpression.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitJavascript(this.operand1, TokenID.Question, false); + emitter.writeToOutput(" ? "); + emitter.emitJavascript(this.operand2, TokenID.Question, false); + emitter.writeToOutput(" : "); + emitter.emitJavascript(this.operand3, TokenID.Question, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return ConditionalExpression; + })(Expression); + TypeScript.ConditionalExpression = ConditionalExpression; + var NumberLiteral = (function (_super) { + __extends(NumberLiteral, _super); + function NumberLiteral(value, hasEmptyFraction) { + _super.call(this, NodeType.NumberLit); + this.value = value; + this.hasEmptyFraction = hasEmptyFraction; + this.isNegativeZero = false; + } + NumberLiteral.prototype.typeCheck = function (typeFlow) { + this.type = typeFlow.doubleType; + return this; + }; + NumberLiteral.prototype.treeViewLabel = function () { + return "num: " + this.printLabel(); + }; + NumberLiteral.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.isNegativeZero) { + emitter.writeToOutput("-"); + } + emitter.writeToOutput(this.value.toString()); + if (this.hasEmptyFraction) + emitter.writeToOutput(".0"); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + NumberLiteral.prototype.printLabel = function () { + if (Math.floor(this.value) != this.value) { + return this.value.toFixed(2).toString(); + } + else if (this.hasEmptyFraction) { + return this.value.toString() + ".0"; + } + else { + return this.value.toString(); + } + }; + return NumberLiteral; + })(Expression); + TypeScript.NumberLiteral = NumberLiteral; + var RegexLiteral = (function (_super) { + __extends(RegexLiteral, _super); + function RegexLiteral(regex) { + _super.call(this, NodeType.Regex); + this.regex = regex; + } + RegexLiteral.prototype.typeCheck = function (typeFlow) { + this.type = typeFlow.regexType; + return this; + }; + RegexLiteral.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput(this.regex.toString()); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return RegexLiteral; + })(Expression); + TypeScript.RegexLiteral = RegexLiteral; + var StringLiteral = (function (_super) { + __extends(StringLiteral, _super); + function StringLiteral(text) { + _super.call(this, NodeType.QString); + this.text = text; + } + StringLiteral.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitStringLiteral(this.text); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + StringLiteral.prototype.typeCheck = function (typeFlow) { + this.type = typeFlow.stringType; + return this; + }; + StringLiteral.prototype.treeViewLabel = function () { + return "st: " + this.text; + }; + StringLiteral.prototype.printLabel = function () { + return this.text; + }; + return StringLiteral; + })(Expression); + TypeScript.StringLiteral = StringLiteral; + var ModuleElement = (function (_super) { + __extends(ModuleElement, _super); + function ModuleElement(nodeType) { + _super.call(this, nodeType); + } + return ModuleElement; + })(AST); + TypeScript.ModuleElement = ModuleElement; + var ImportDeclaration = (function (_super) { + __extends(ImportDeclaration, _super); + function ImportDeclaration(id, alias) { + _super.call(this, NodeType.ImportDeclaration); + this.id = id; + this.alias = alias; + this.varFlags = VarFlags.None; + this.isDynamicImport = false; + } + ImportDeclaration.prototype.isStatementOrExpression = function () { + return true; + }; + ImportDeclaration.prototype.emit = function (emitter, tokenId, startLine) { + var mod = this.alias.type; + // REVIEW: Only modules may be aliased for now, though there's no real + // restriction on what the type symbol may be + if (!this.isDynamicImport || (this.id.sym && !this.id.sym.onlyReferencedAsTypeRef)) { + var prevModAliasId = emitter.modAliasId; + var prevFirstModAlias = emitter.firstModAlias; + emitter.recordSourceMappingStart(this); + emitter.emitParensAndCommentsInPlace(this, true); + emitter.writeToOutput("var " + this.id.actualText + " = "); + emitter.modAliasId = this.id.actualText; + emitter.firstModAlias = this.firstAliasedModToString(); + emitter.emitJavascript(this.alias, TokenID.Tilde, false); + // the dynamic import case will insert the semi-colon automatically + if (!this.isDynamicImport) { + emitter.writeToOutput(";"); + } + emitter.emitParensAndCommentsInPlace(this, false); + emitter.recordSourceMappingEnd(this); + emitter.modAliasId = prevModAliasId; + emitter.firstModAlias = prevFirstModAlias; + } + }; + ImportDeclaration.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckImportDecl(this); + }; + ImportDeclaration.prototype.getAliasName = function (aliasAST) { + if (aliasAST === void 0) { aliasAST = this.alias; } + if (aliasAST.nodeType == NodeType.Name) { + return aliasAST.actualText; + } + else { + var dotExpr = aliasAST; + return this.getAliasName(dotExpr.operand1) + "." + this.getAliasName(dotExpr.operand2); + } + }; + ImportDeclaration.prototype.firstAliasedModToString = function () { + if (this.alias.nodeType == NodeType.Name) { + return this.alias.actualText; + } + else { + var dotExpr = this.alias; + var firstMod = dotExpr.operand1; + return firstMod.actualText; + } + }; + return ImportDeclaration; + })(ModuleElement); + TypeScript.ImportDeclaration = ImportDeclaration; + var BoundDecl = (function (_super) { + __extends(BoundDecl, _super); + function BoundDecl(id, nodeType, nestingLevel) { + _super.call(this, nodeType); + this.id = id; + this.nestingLevel = nestingLevel; + this.init = null; + this.typeExpr = null; + this.varFlags = VarFlags.None; + this.sym = null; + } + BoundDecl.prototype.isStatementOrExpression = function () { + return true; + }; + BoundDecl.prototype.isPrivate = function () { + return hasFlag(this.varFlags, VarFlags.Private); + }; + BoundDecl.prototype.isPublic = function () { + return hasFlag(this.varFlags, VarFlags.Public); + }; + BoundDecl.prototype.isProperty = function () { + return hasFlag(this.varFlags, VarFlags.Property); + }; + BoundDecl.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckBoundDecl(this); + }; + BoundDecl.prototype.printLabel = function () { + return this.treeViewLabel(); + }; + return BoundDecl; + })(AST); + TypeScript.BoundDecl = BoundDecl; + var VarDecl = (function (_super) { + __extends(VarDecl, _super); + function VarDecl(id, nest) { + _super.call(this, id, NodeType.VarDecl, nest); + } + VarDecl.prototype.isAmbient = function () { + return hasFlag(this.varFlags, VarFlags.Ambient); + }; + VarDecl.prototype.isExported = function () { + return hasFlag(this.varFlags, VarFlags.Exported); + }; + VarDecl.prototype.isStatic = function () { + return hasFlag(this.varFlags, VarFlags.Static); + }; + VarDecl.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitJavascriptVarDecl(this, tokenId); + }; + VarDecl.prototype.treeViewLabel = function () { + return "var " + this.id.actualText; + }; + return VarDecl; + })(BoundDecl); + TypeScript.VarDecl = VarDecl; + var ArgDecl = (function (_super) { + __extends(ArgDecl, _super); + function ArgDecl(id) { + _super.call(this, id, NodeType.ArgDecl, 0); + this.isOptional = false; + this.parameterPropertySym = null; + } + ArgDecl.prototype.isOptionalArg = function () { + return this.isOptional || this.init; + }; + ArgDecl.prototype.treeViewLabel = function () { + return "arg: " + this.id.actualText; + }; + ArgDecl.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput(this.id.actualText); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return ArgDecl; + })(BoundDecl); + TypeScript.ArgDecl = ArgDecl; + var internalId = 0; + var FuncDecl = (function (_super) { + __extends(FuncDecl, _super); + function FuncDecl(name, bod, isConstructor, arguments, vars, scopes, statics, nodeType) { + _super.call(this, nodeType); + this.name = name; + this.bod = bod; + this.isConstructor = isConstructor; + this.arguments = arguments; + this.vars = vars; + this.scopes = scopes; + this.statics = statics; + this.hint = null; + this.fncFlags = FncFlags.None; + this.returnTypeAnnotation = null; + this.variableArgList = false; + this.jumpRefs = null; + this.internalNameCache = null; + this.tmp1Declared = false; + this.enclosingFnc = null; + this.freeVariables = []; + this.unitIndex = -1; + this.classDecl = null; + this.boundToProperty = null; + this.isOverload = false; + this.innerStaticFuncs = []; + this.isTargetTypedAsMethod = false; + this.isInlineCallLiteral = false; + this.accessorSymbol = null; + this.leftCurlyCount = 0; + this.rightCurlyCount = 0; + this.returnStatementsWithExpressions = []; + this.scopeType = null; // Type of the FuncDecl, before target typing + this.endingToken = null; + } + FuncDecl.prototype.internalName = function () { + if (this.internalNameCache == null) { + var extName = this.getNameText(); + if (extName) { + this.internalNameCache = "_internal_" + extName; + } + else { + this.internalNameCache = "_internal_" + internalId++; + } + } + return this.internalNameCache; + }; + FuncDecl.prototype.hasSelfReference = function () { + return hasFlag(this.fncFlags, FncFlags.HasSelfReference); + }; + FuncDecl.prototype.setHasSelfReference = function () { + this.fncFlags |= FncFlags.HasSelfReference; + }; + FuncDecl.prototype.addCloRef = function (id, sym) { + if (this.envids == null) { + this.envids = new Identifier[]; + } + this.envids[this.envids.length] = id; + var outerFnc = this.enclosingFnc; + if (sym) { + while (outerFnc && (outerFnc.type.symbol != sym.container)) { + outerFnc.addJumpRef(sym); + outerFnc = outerFnc.enclosingFnc; + } + } + return this.envids.length - 1; + }; + FuncDecl.prototype.addJumpRef = function (sym) { + if (this.jumpRefs == null) { + this.jumpRefs = new Identifier[]; + } + var id = new Identifier(sym.name); + this.jumpRefs[this.jumpRefs.length] = id; + id.sym = sym; + id.cloId = this.addCloRef(id, null); + }; + FuncDecl.prototype.buildControlFlow = function () { + var entry = new BasicBlock(); + var exit = new BasicBlock(); + var context = new ControlFlowContext(entry, exit); + var controlFlowPrefix = function (ast, parent, walker) { + ast.addToControlFlow(walker.state); + return ast; + }; + var walker = getAstWalkerFactory().getWalker(controlFlowPrefix, null, null, context); + context.walker = walker; + walker.walk(this.bod, this); + return context; + }; + FuncDecl.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckFunction(this); + }; + FuncDecl.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitJavascriptFunction(this); + }; + FuncDecl.prototype.getNameText = function () { + if (this.name) { + return this.name.actualText; + } + else { + return this.hint; + } + }; + FuncDecl.prototype.isMethod = function () { + return (this.fncFlags & FncFlags.Method) != FncFlags.None; + }; + FuncDecl.prototype.isCallMember = function () { + return hasFlag(this.fncFlags, FncFlags.CallMember); + }; + FuncDecl.prototype.isConstructMember = function () { + return hasFlag(this.fncFlags, FncFlags.ConstructMember); + }; + FuncDecl.prototype.isIndexerMember = function () { + return hasFlag(this.fncFlags, FncFlags.IndexerMember); + }; + FuncDecl.prototype.isSpecialFn = function () { + return this.isCallMember() || this.isIndexerMember() || this.isConstructMember(); + }; + FuncDecl.prototype.isAnonymousFn = function () { + return this.name === null; + }; + FuncDecl.prototype.isAccessor = function () { + return hasFlag(this.fncFlags, FncFlags.GetAccessor) || hasFlag(this.fncFlags, FncFlags.SetAccessor); + }; + FuncDecl.prototype.isGetAccessor = function () { + return hasFlag(this.fncFlags, FncFlags.GetAccessor); + }; + FuncDecl.prototype.isSetAccessor = function () { + return hasFlag(this.fncFlags, FncFlags.SetAccessor); + }; + FuncDecl.prototype.isAmbient = function () { + return hasFlag(this.fncFlags, FncFlags.Ambient); + }; + FuncDecl.prototype.isExported = function () { + return hasFlag(this.fncFlags, FncFlags.Exported); + }; + FuncDecl.prototype.isPrivate = function () { + return hasFlag(this.fncFlags, FncFlags.Private); + }; + FuncDecl.prototype.isPublic = function () { + return hasFlag(this.fncFlags, FncFlags.Public); + }; + FuncDecl.prototype.isStatic = function () { + return hasFlag(this.fncFlags, FncFlags.Static); + }; + FuncDecl.prototype.treeViewLabel = function () { + if (this.name == null) { + return "funcExpr"; + } + else { + return "func: " + this.name.actualText; + } + }; + FuncDecl.prototype.ClearFlags = function () { + this.fncFlags = FncFlags.None; + }; + FuncDecl.prototype.isSignature = function () { + return (this.fncFlags & FncFlags.Signature) != FncFlags.None; + }; + FuncDecl.prototype.hasStaticDeclarations = function () { + return (!this.isConstructor && (this.statics.members.length > 0 || this.innerStaticFuncs.length > 0)); + }; + return FuncDecl; + })(AST); + TypeScript.FuncDecl = FuncDecl; + var LocationInfo = (function () { + function LocationInfo(filename, lineMap, unitIndex) { + this.filename = filename; + this.lineMap = lineMap; + this.unitIndex = unitIndex; + } + return LocationInfo; + })(); + TypeScript.LocationInfo = LocationInfo; + TypeScript.unknownLocationInfo = new LocationInfo("unknown", null, -1); + var Script = (function (_super) { + __extends(Script, _super); + function Script(vars, scopes) { + _super.call(this, new Identifier("script"), null, false, null, vars, scopes, null, NodeType.Script); + this.locationInfo = null; + this.referencedFiles = []; + this.requiresGlobal = false; + this.requiresInherits = false; + this.isResident = false; + this.isDeclareFile = false; + this.hasBeenTypeChecked = false; + this.topLevelMod = null; + this.leftCurlyCount = 0; + this.rightCurlyCount = 0; + // Remember if the script contains Unicode chars, that is needed when generating code for this script object to decide the output file correct encoding. + this.containsUnicodeChar = false; + this.containsUnicodeCharInComment = false; + this.vars = vars; + this.scopes = scopes; + } + Script.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckScript(this); + }; + Script.prototype.treeViewLabel = function () { + return "Script"; + }; + Script.prototype.emitRequired = function () { + if (!this.isDeclareFile && !this.isResident && this.bod) { + for (var i = 0, len = this.bod.members.length; i < len; i++) { + var stmt = this.bod.members[i]; + if (stmt.nodeType == NodeType.ModuleDeclaration) { + if (!hasFlag(stmt.modFlags, ModuleFlags.ShouldEmitModuleDecl | ModuleFlags.Ambient)) { + return true; + } + } + else if (stmt.nodeType == NodeType.ClassDeclaration) { + if (!hasFlag(stmt.varFlags, VarFlags.Ambient)) { + return true; + } + } + else if (stmt.nodeType == NodeType.VarDecl) { + if (!hasFlag(stmt.varFlags, VarFlags.Ambient)) { + return true; + } + } + else if (stmt.nodeType == NodeType.FuncDecl) { + if (!stmt.isSignature()) { + return true; + } + } + else if (stmt.nodeType != NodeType.InterfaceDeclaration && stmt.nodeType != NodeType.Empty) { + return true; + } + } + } + return false; + }; + Script.prototype.emit = function (emitter, tokenId, startLine) { + if (this.emitRequired()) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitJavascriptList(this.bod, null, TokenID.Semicolon, true, false, false, true, this.requiresInherits); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + }; + return Script; + })(FuncDecl); + TypeScript.Script = Script; + var NamedDeclaration = (function (_super) { + __extends(NamedDeclaration, _super); + function NamedDeclaration(nodeType, name, members) { + _super.call(this, nodeType); + this.name = name; + this.members = members; + this.leftCurlyCount = 0; + this.rightCurlyCount = 0; + } + return NamedDeclaration; + })(ModuleElement); + TypeScript.NamedDeclaration = NamedDeclaration; + var ModuleDeclaration = (function (_super) { + __extends(ModuleDeclaration, _super); + function ModuleDeclaration(name, members, vars, scopes, endingToken) { + _super.call(this, NodeType.ModuleDeclaration, name, members); + this.endingToken = endingToken; + this.modFlags = ModuleFlags.ShouldEmitModuleDecl; + this.amdDependencies = []; + // Remember if the module contains Unicode chars, that is needed for dynamic module as we will generate a file for each. + this.containsUnicodeChar = false; + this.containsUnicodeCharInComment = false; + this.vars = vars; + this.scopes = scopes; + this.prettyName = this.name.actualText; + } + ModuleDeclaration.prototype.isExported = function () { + return hasFlag(this.modFlags, ModuleFlags.Exported); + }; + ModuleDeclaration.prototype.isAmbient = function () { + return hasFlag(this.modFlags, ModuleFlags.Ambient); + }; + ModuleDeclaration.prototype.isEnum = function () { + return hasFlag(this.modFlags, ModuleFlags.IsEnum); + }; + ModuleDeclaration.prototype.recordNonInterface = function () { + this.modFlags &= ~ModuleFlags.ShouldEmitModuleDecl; + }; + ModuleDeclaration.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckModule(this); + }; + ModuleDeclaration.prototype.emit = function (emitter, tokenId, startLine) { + if (!hasFlag(this.modFlags, ModuleFlags.ShouldEmitModuleDecl)) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitJavascriptModule(this); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + } + }; + return ModuleDeclaration; + })(NamedDeclaration); + TypeScript.ModuleDeclaration = ModuleDeclaration; + var TypeDeclaration = (function (_super) { + __extends(TypeDeclaration, _super); + function TypeDeclaration(nodeType, name, extendsList, implementsList, members) { + _super.call(this, nodeType, name, members); + this.extendsList = extendsList; + this.implementsList = implementsList; + this.varFlags = VarFlags.None; + } + TypeDeclaration.prototype.isExported = function () { + return hasFlag(this.varFlags, VarFlags.Exported); + }; + TypeDeclaration.prototype.isAmbient = function () { + return hasFlag(this.varFlags, VarFlags.Ambient); + }; + return TypeDeclaration; + })(NamedDeclaration); + TypeScript.TypeDeclaration = TypeDeclaration; + var ClassDeclaration = (function (_super) { + __extends(ClassDeclaration, _super); + function ClassDeclaration(name, members, extendsList, implementsList) { + _super.call(this, NodeType.ClassDeclaration, name, extendsList, implementsList, members); + this.knownMemberNames = {}; + this.constructorDecl = null; + this.constructorNestingLevel = 0; + this.endingToken = null; + } + ClassDeclaration.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckClass(this); + }; + ClassDeclaration.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitJavascriptClass(this); + }; + return ClassDeclaration; + })(TypeDeclaration); + TypeScript.ClassDeclaration = ClassDeclaration; + var InterfaceDeclaration = (function (_super) { + __extends(InterfaceDeclaration, _super); + function InterfaceDeclaration(name, members, extendsList, implementsList) { + _super.call(this, NodeType.InterfaceDeclaration, name, extendsList, implementsList, members); + } + InterfaceDeclaration.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckInterface(this); + }; + InterfaceDeclaration.prototype.emit = function (emitter, tokenId, startLine) { + }; + return InterfaceDeclaration; + })(TypeDeclaration); + TypeScript.InterfaceDeclaration = InterfaceDeclaration; + var Statement = (function (_super) { + __extends(Statement, _super); + function Statement(nodeType) { + _super.call(this, nodeType); + this.flags |= ASTFlags.IsStatement; + } + Statement.prototype.isLoop = function () { + return false; + }; + Statement.prototype.isStatementOrExpression = function () { + return true; + }; + Statement.prototype.isCompoundStatement = function () { + return this.isLoop(); + }; + Statement.prototype.typeCheck = function (typeFlow) { + this.type = typeFlow.voidType; + return this; + }; + return Statement; + })(ModuleElement); + TypeScript.Statement = Statement; + var LabeledStatement = (function (_super) { + __extends(LabeledStatement, _super); + function LabeledStatement(labels, stmt) { + _super.call(this, NodeType.LabeledStatement); + this.labels = labels; + this.stmt = stmt; + } + LabeledStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.labels) { + var labelsLen = this.labels.members.length; + for (var i = 0; i < labelsLen; i++) { + this.labels.members[i].emit(emitter, tokenId, startLine); + } + } + this.stmt.emit(emitter, tokenId, true); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + LabeledStatement.prototype.typeCheck = function (typeFlow) { + typeFlow.typeCheck(this.labels); + this.stmt = this.stmt.typeCheck(typeFlow); + return this; + }; + LabeledStatement.prototype.addToControlFlow = function (context) { + var beforeBB = context.current; + var bb = new BasicBlock(); + context.current = bb; + beforeBB.addSuccessor(bb); + }; + return LabeledStatement; + })(Statement); + TypeScript.LabeledStatement = LabeledStatement; + var Block = (function (_super) { + __extends(Block, _super); + function Block(statements, isStatementBlock) { + _super.call(this, NodeType.Block); + this.statements = statements; + this.isStatementBlock = isStatementBlock; + } + Block.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.isStatementBlock) { + emitter.writeLineToOutput(" {"); + emitter.indenter.increaseIndent(); + } + else { + emitter.setInVarBlock(this.statements.members.length); + } + var temp = emitter.setInObjectLiteral(false); + if (this.statements) { + emitter.emitJavascriptList(this.statements, null, TokenID.Semicolon, true, false, false); + } + if (this.isStatementBlock) { + emitter.indenter.decreaseIndent(); + emitter.emitIndent(); + emitter.writeToOutput("}"); + } + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + Block.prototype.addToControlFlow = function (context) { + var afterIfNeeded = new BasicBlock(); + context.pushStatement(this, context.current, afterIfNeeded); + if (this.statements) { + context.walk(this.statements, this); + } + context.walker.options.goChildren = false; + context.popStatement(); + if (afterIfNeeded.predecessors.length > 0) { + context.current.addSuccessor(afterIfNeeded); + context.current = afterIfNeeded; + } + }; + Block.prototype.typeCheck = function (typeFlow) { + if (!typeFlow.checker.styleSettings.emptyBlocks) { + if ((this.statements === null) || (this.statements.members.length == 0)) { + typeFlow.checker.errorReporter.styleError(this, "empty block"); + } + } + typeFlow.typeCheck(this.statements); + return this; + }; + return Block; + })(Statement); + TypeScript.Block = Block; + var Jump = (function (_super) { + __extends(Jump, _super); + function Jump(nodeType) { + _super.call(this, nodeType); + this.target = null; + this.resolvedTarget = null; + } + Jump.prototype.hasExplicitTarget = function () { + return (this.target); + }; + Jump.prototype.setResolvedTarget = function (parser, stmt) { + if (stmt.isLoop()) { + this.resolvedTarget = stmt; + return true; + } + if (this.nodeType === NodeType.Continue) { + parser.reportParseError("continue statement applies only to loops"); + return false; + } + else { + if ((stmt.nodeType == NodeType.Switch) || this.hasExplicitTarget()) { + this.resolvedTarget = stmt; + return true; + } + else { + parser.reportParseError("break statement with no label can apply only to a loop or switch statement"); + return false; + } + } + }; + Jump.prototype.addToControlFlow = function (context) { + _super.prototype.addToControlFlow.call(this, context); + context.unconditionalBranch(this.resolvedTarget, (this.nodeType == NodeType.Continue)); + }; + Jump.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.nodeType == NodeType.Break) { + emitter.writeToOutput("break"); + } + else { + emitter.writeToOutput("continue"); + } + if (this.hasExplicitTarget()) { + emitter.writeToOutput(" " + this.target); + } + emitter.recordSourceMappingEnd(this); + emitter.writeToOutput(";"); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return Jump; + })(Statement); + TypeScript.Jump = Jump; + var WhileStatement = (function (_super) { + __extends(WhileStatement, _super); + function WhileStatement(cond) { + _super.call(this, NodeType.While); + this.cond = cond; + this.body = null; + } + WhileStatement.prototype.isLoop = function () { + return true; + }; + WhileStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.writeToOutput("while("); + emitter.emitJavascript(this.cond, TokenID.While, false); + emitter.writeToOutput(")"); + emitter.emitJavascriptStatements(this.body, false, false); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + WhileStatement.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckWhile(this); + }; + WhileStatement.prototype.addToControlFlow = function (context) { + var loopHeader = context.current; + var loopStart = new BasicBlock(); + var afterLoop = new BasicBlock(); + loopHeader.addSuccessor(loopStart); + context.current = loopStart; + context.addContent(this.cond); + var condBlock = context.current; + var targetInfo = null; + if (this.body) { + context.current = new BasicBlock(); + condBlock.addSuccessor(context.current); + context.pushStatement(this, loopStart, afterLoop); + context.walk(this.body, this); + targetInfo = context.popStatement(); + } + if (!(context.noContinuation)) { + var loopEnd = context.current; + loopEnd.addSuccessor(loopStart); + } + context.current = afterLoop; + condBlock.addSuccessor(afterLoop); + // TODO: check for while (true) and then only continue if afterLoop has predecessors + context.noContinuation = false; + context.walker.options.goChildren = false; + }; + return WhileStatement; + })(Statement); + TypeScript.WhileStatement = WhileStatement; + var DoWhileStatement = (function (_super) { + __extends(DoWhileStatement, _super); + function DoWhileStatement() { + _super.call(this, NodeType.DoWhile); + this.body = null; + this.whileAST = null; + this.cond = null; + } + DoWhileStatement.prototype.isLoop = function () { + return true; + }; + DoWhileStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.writeToOutput("do"); + emitter.emitJavascriptStatements(this.body, true, false); + emitter.recordSourceMappingStart(this.whileAST); + emitter.writeToOutput("while"); + emitter.recordSourceMappingEnd(this.whileAST); + emitter.writeToOutput('('); + emitter.emitJavascript(this.cond, TokenID.CloseParen, false); + emitter.writeToOutput(")"); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + DoWhileStatement.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckDoWhile(this); + }; + DoWhileStatement.prototype.addToControlFlow = function (context) { + var loopHeader = context.current; + var loopStart = new BasicBlock(); + var afterLoop = new BasicBlock(); + loopHeader.addSuccessor(loopStart); + context.current = loopStart; + var targetInfo = null; + if (this.body) { + context.pushStatement(this, loopStart, afterLoop); + context.walk(this.body, this); + targetInfo = context.popStatement(); + } + if (!(context.noContinuation)) { + var loopEnd = context.current; + loopEnd.addSuccessor(loopStart); + context.addContent(this.cond); + // TODO: check for while (true) + context.current = afterLoop; + loopEnd.addSuccessor(afterLoop); + } + else { + context.addUnreachable(this.cond); + } + context.walker.options.goChildren = false; + }; + return DoWhileStatement; + })(Statement); + TypeScript.DoWhileStatement = DoWhileStatement; + var IfStatement = (function (_super) { + __extends(IfStatement, _super); + function IfStatement(cond) { + _super.call(this, NodeType.If); + this.cond = cond; + this.elseBod = null; + this.statement = new ASTSpan(); + } + IfStatement.prototype.isCompoundStatement = function () { + return true; + }; + IfStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.recordSourceMappingStart(this.statement); + emitter.writeToOutput("if("); + emitter.emitJavascript(this.cond, TokenID.If, false); + emitter.writeToOutput(")"); + emitter.recordSourceMappingEnd(this.statement); + emitter.emitJavascriptStatements(this.thenBod, true, false); + if (this.elseBod) { + emitter.writeToOutput(" else"); + emitter.emitJavascriptStatements(this.elseBod, true, true); + } + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + IfStatement.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckIf(this); + }; + IfStatement.prototype.addToControlFlow = function (context) { + this.cond.addToControlFlow(context); + var afterIf = new BasicBlock(); + var beforeIf = context.current; + context.pushStatement(this, beforeIf, afterIf); + var hasContinuation = false; + context.current = new BasicBlock(); + beforeIf.addSuccessor(context.current); + context.walk(this.thenBod, this); + if (!context.noContinuation) { + hasContinuation = true; + context.current.addSuccessor(afterIf); + } + if (this.elseBod) { + // current block will be thenBod + context.current = new BasicBlock(); + context.noContinuation = false; + beforeIf.addSuccessor(context.current); + context.walk(this.elseBod, this); + if (!context.noContinuation) { + hasContinuation = true; + context.current.addSuccessor(afterIf); + } + else { + // thenBod created continuation for if statement + if (hasContinuation) { + context.noContinuation = false; + } + } + } + else { + beforeIf.addSuccessor(afterIf); + context.noContinuation = false; + hasContinuation = true; + } + var targetInfo = context.popStatement(); + if (afterIf.predecessors.length > 0) { + context.noContinuation = false; + hasContinuation = true; + } + if (hasContinuation) { + context.current = afterIf; + } + context.walker.options.goChildren = false; + }; + return IfStatement; + })(Statement); + TypeScript.IfStatement = IfStatement; + var ReturnStatement = (function (_super) { + __extends(ReturnStatement, _super); + function ReturnStatement() { + _super.call(this, NodeType.Return); + this.returnExpression = null; + } + ReturnStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + if (this.returnExpression) { + emitter.writeToOutput("return "); + emitter.emitJavascript(this.returnExpression, TokenID.Semicolon, false); + } + else { + emitter.writeToOutput("return;"); + } + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + ReturnStatement.prototype.addToControlFlow = function (context) { + _super.prototype.addToControlFlow.call(this, context); + context.returnStmt(); + }; + ReturnStatement.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckReturn(this); + }; + return ReturnStatement; + })(Statement); + TypeScript.ReturnStatement = ReturnStatement; + var EndCode = (function (_super) { + __extends(EndCode, _super); + function EndCode() { + _super.call(this, NodeType.EndCode); + } + return EndCode; + })(AST); + TypeScript.EndCode = EndCode; + var ForInStatement = (function (_super) { + __extends(ForInStatement, _super); + function ForInStatement(lval, obj) { + _super.call(this, NodeType.ForIn); + this.lval = lval; + this.obj = obj; + this.statement = new ASTSpan(); + if (this.lval && (this.lval.nodeType == NodeType.VarDecl)) { + this.lval.varFlags |= VarFlags.AutoInit; + } + } + ForInStatement.prototype.isLoop = function () { + return true; + }; + ForInStatement.prototype.isFiltered = function () { + if (this.body) { + var singleItem = null; + if (this.body.nodeType == NodeType.List) { + var stmts = this.body; + if (stmts.members.length == 1) { + singleItem = stmts.members[0]; + } + } + else { + singleItem = this.body; + } + // match template for filtering 'own' properties from obj + if (singleItem !== null) { + if (singleItem.nodeType == NodeType.Block) { + var block = singleItem; + if ((block.statements !== null) && (block.statements.members.length == 1)) { + singleItem = block.statements.members[0]; + } + } + if (singleItem.nodeType == NodeType.If) { + var cond = singleItem.cond; + if (cond.nodeType == NodeType.Call) { + var target = cond.target; + if (target.nodeType == NodeType.Dot) { + var binex = target; + if ((binex.operand1.nodeType == NodeType.Name) && (this.obj.nodeType == NodeType.Name) && (binex.operand1.actualText == this.obj.actualText)) { + var prop = binex.operand2; + if (prop.actualText == "hasOwnProperty") { + var args = cond.arguments; + if ((args !== null) && (args.members.length == 1)) { + var arg = args.members[0]; + if ((arg.nodeType == NodeType.Name) && (this.lval.nodeType == NodeType.Name)) { + if ((this.lval.actualText) == arg.actualText) { + return true; + } + } + } + } + } + } + } + } + } + } + return false; + }; + ForInStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.recordSourceMappingStart(this.statement); + emitter.writeToOutput("for("); + emitter.emitJavascript(this.lval, TokenID.For, false); + emitter.writeToOutput(" in "); + emitter.emitJavascript(this.obj, TokenID.For, false); + emitter.writeToOutput(")"); + emitter.recordSourceMappingEnd(this.statement); + emitter.emitJavascriptStatements(this.body, true, false); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + ForInStatement.prototype.typeCheck = function (typeFlow) { + if (typeFlow.checker.styleSettings.forin) { + if (!this.isFiltered()) { + typeFlow.checker.errorReporter.styleError(this, "no hasOwnProperty filter"); + } + } + return typeFlow.typeCheckForIn(this); + }; + ForInStatement.prototype.addToControlFlow = function (context) { + if (this.lval) { + context.addContent(this.lval); + } + if (this.obj) { + context.addContent(this.obj); + } + var loopHeader = context.current; + var loopStart = new BasicBlock(); + var afterLoop = new BasicBlock(); + loopHeader.addSuccessor(loopStart); + context.current = loopStart; + if (this.body) { + context.pushStatement(this, loopStart, afterLoop); + context.walk(this.body, this); + context.popStatement(); + } + if (!(context.noContinuation)) { + var loopEnd = context.current; + loopEnd.addSuccessor(loopStart); + } + context.current = afterLoop; + context.noContinuation = false; + loopHeader.addSuccessor(afterLoop); + context.walker.options.goChildren = false; + }; + return ForInStatement; + })(Statement); + TypeScript.ForInStatement = ForInStatement; + var ForStatement = (function (_super) { + __extends(ForStatement, _super); + function ForStatement(init) { + _super.call(this, NodeType.For); + this.init = init; + } + ForStatement.prototype.isLoop = function () { + return true; + }; + ForStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.writeToOutput("for("); + if (this.init) { + if (this.init.nodeType != NodeType.List) { + emitter.emitJavascript(this.init, TokenID.For, false); + } + else { + emitter.setInVarBlock(this.init.members.length); + emitter.emitJavascriptList(this.init, null, TokenID.For, false, false, false); + } + } + emitter.writeToOutput("; "); + emitter.emitJavascript(this.cond, TokenID.For, false); + emitter.writeToOutput("; "); + emitter.emitJavascript(this.incr, TokenID.For, false); + emitter.writeToOutput(")"); + emitter.emitJavascriptStatements(this.body, true, false); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + ForStatement.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckFor(this); + }; + ForStatement.prototype.addToControlFlow = function (context) { + if (this.init) { + context.addContent(this.init); + } + var loopHeader = context.current; + var loopStart = new BasicBlock(); + var afterLoop = new BasicBlock(); + loopHeader.addSuccessor(loopStart); + context.current = loopStart; + var condBlock = null; + var continueTarget = loopStart; + var incrBB = null; + if (this.incr) { + incrBB = new BasicBlock(); + continueTarget = incrBB; + } + if (this.cond) { + condBlock = context.current; + context.addContent(this.cond); + context.current = new BasicBlock(); + condBlock.addSuccessor(context.current); + } + var targetInfo = null; + if (this.body) { + context.pushStatement(this, continueTarget, afterLoop); + context.walk(this.body, this); + targetInfo = context.popStatement(); + } + if (this.incr) { + if (context.noContinuation) { + if (incrBB.predecessors.length == 0) { + context.addUnreachable(this.incr); + } + } + else { + context.current.addSuccessor(incrBB); + context.current = incrBB; + context.addContent(this.incr); + } + } + var loopEnd = context.current; + if (!(context.noContinuation)) { + loopEnd.addSuccessor(loopStart); + } + if (condBlock) { + condBlock.addSuccessor(afterLoop); + context.noContinuation = false; + } + if (afterLoop.predecessors.length > 0) { + context.noContinuation = false; + context.current = afterLoop; + } + context.walker.options.goChildren = false; + }; + return ForStatement; + })(Statement); + TypeScript.ForStatement = ForStatement; + var WithStatement = (function (_super) { + __extends(WithStatement, _super); + function WithStatement(expr) { + _super.call(this, NodeType.With); + this.expr = expr; + this.withSym = null; + } + WithStatement.prototype.isCompoundStatement = function () { + return true; + }; + WithStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("with ("); + if (this.expr) { + emitter.emitJavascript(this.expr, TokenID.With, false); + } + emitter.writeToOutput(")"); + emitter.emitJavascriptStatements(this.body, true, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + WithStatement.prototype.typeCheck = function (typeFlow) { + return typeFlow.typeCheckWith(this); + }; + return WithStatement; + })(Statement); + TypeScript.WithStatement = WithStatement; + var SwitchStatement = (function (_super) { + __extends(SwitchStatement, _super); + function SwitchStatement(val) { + _super.call(this, NodeType.Switch); + this.val = val; + this.defaultCase = null; + this.statement = new ASTSpan(); + } + SwitchStatement.prototype.isCompoundStatement = function () { + return true; + }; + SwitchStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + var temp = emitter.setInObjectLiteral(false); + emitter.recordSourceMappingStart(this.statement); + emitter.writeToOutput("switch("); + emitter.emitJavascript(this.val, TokenID.Identifier, false); + emitter.writeToOutput(")"); + emitter.recordSourceMappingEnd(this.statement); + emitter.writeLineToOutput(" {"); + emitter.indenter.increaseIndent(); + var casesLen = this.caseList.members.length; + for (var i = 0; i < casesLen; i++) { + var caseExpr = this.caseList.members[i]; + emitter.emitJavascript(caseExpr, TokenID.Case, true); + emitter.writeLineToOutput(""); + } + emitter.indenter.decreaseIndent(); + emitter.emitIndent(); + emitter.writeToOutput("}"); + emitter.setInObjectLiteral(temp); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + SwitchStatement.prototype.typeCheck = function (typeFlow) { + var len = this.caseList.members.length; + this.val = typeFlow.typeCheck(this.val); + for (var i = 0; i < len; i++) { + this.caseList.members[i] = typeFlow.typeCheck(this.caseList.members[i]); + } + this.defaultCase = typeFlow.typeCheck(this.defaultCase); + this.type = typeFlow.voidType; + return this; + }; + // if there are break statements that match this switch, then just link cond block with block after switch + SwitchStatement.prototype.addToControlFlow = function (context) { + var condBlock = context.current; + context.addContent(this.val); + var execBlock = new BasicBlock(); + var afterSwitch = new BasicBlock(); + condBlock.addSuccessor(execBlock); + context.pushSwitch(execBlock); + context.current = execBlock; + context.pushStatement(this, execBlock, afterSwitch); + context.walk(this.caseList, this); + context.popSwitch(); + var targetInfo = context.popStatement(); + var hasCondContinuation = (this.defaultCase == null); + if (this.defaultCase == null) { + condBlock.addSuccessor(afterSwitch); + } + if (afterSwitch.predecessors.length > 0) { + context.noContinuation = false; + context.current = afterSwitch; + } + else { + context.noContinuation = true; + } + context.walker.options.goChildren = false; + }; + return SwitchStatement; + })(Statement); + TypeScript.SwitchStatement = SwitchStatement; + var CaseStatement = (function (_super) { + __extends(CaseStatement, _super); + function CaseStatement() { + _super.call(this, NodeType.Case); + this.expr = null; + } + CaseStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + if (this.expr) { + emitter.writeToOutput("case "); + emitter.emitJavascript(this.expr, TokenID.Identifier, false); + } + else { + emitter.writeToOutput("default"); + } + emitter.writeToOutput(":"); + emitter.emitJavascriptStatements(this.body, false, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + CaseStatement.prototype.typeCheck = function (typeFlow) { + this.expr = typeFlow.typeCheck(this.expr); + typeFlow.typeCheck(this.body); + this.type = typeFlow.voidType; + return this; + }; + // TODO: more reasoning about unreachable cases (such as duplicate literals as case expressions) + // for now, assume all cases are reachable, regardless of whether some cases fall through + CaseStatement.prototype.addToControlFlow = function (context) { + var execBlock = new BasicBlock(); + var sw = context.currentSwitch[context.currentSwitch.length - 1]; + // TODO: fall-through from previous (+ to end of switch) + if (this.expr) { + var exprBlock = new BasicBlock(); + context.current = exprBlock; + sw.addSuccessor(exprBlock); + context.addContent(this.expr); + exprBlock.addSuccessor(execBlock); + } + else { + sw.addSuccessor(execBlock); + } + context.current = execBlock; + if (this.body) { + context.walk(this.body, this); + } + context.noContinuation = false; + context.walker.options.goChildren = false; + }; + return CaseStatement; + })(Statement); + TypeScript.CaseStatement = CaseStatement; + var TypeReference = (function (_super) { + __extends(TypeReference, _super); + function TypeReference(term, arrayCount) { + _super.call(this, NodeType.TypeRef); + this.term = term; + this.arrayCount = arrayCount; + } + TypeReference.prototype.emit = function (emitter, tokenId, startLine) { + throw new Error("should not emit a type ref"); + }; + TypeReference.prototype.typeCheck = function (typeFlow) { + var prevInTCTR = typeFlow.inTypeRefTypeCheck; + typeFlow.inTypeRefTypeCheck = true; + var typeLink = getTypeLink(this, typeFlow.checker, true); + typeFlow.checker.resolveTypeLink(typeFlow.scope, typeLink, false); + if (this.term) { + typeFlow.typeCheck(this.term); + } + typeFlow.checkForVoidConstructor(typeLink.type, this); + this.type = typeLink.type; + // in error recovery cases, there may not be a term + if (this.term) { + this.term.type = this.type; + } + typeFlow.inTypeRefTypeCheck = prevInTCTR; + return this; + }; + return TypeReference; + })(AST); + TypeScript.TypeReference = TypeReference; + var TryFinally = (function (_super) { + __extends(TryFinally, _super); + function TryFinally(tryNode, finallyNode) { + _super.call(this, NodeType.TryFinally); + this.tryNode = tryNode; + this.finallyNode = finallyNode; + } + TryFinally.prototype.isCompoundStatement = function () { + return true; + }; + TryFinally.prototype.emit = function (emitter, tokenId, startLine) { + emitter.recordSourceMappingStart(this); + emitter.emitJavascript(this.tryNode, TokenID.Try, false); + emitter.emitJavascript(this.finallyNode, TokenID.Finally, false); + emitter.recordSourceMappingEnd(this); + }; + TryFinally.prototype.typeCheck = function (typeFlow) { + this.tryNode = typeFlow.typeCheck(this.tryNode); + this.finallyNode = typeFlow.typeCheck(this.finallyNode); + this.type = typeFlow.voidType; + return this; + }; + TryFinally.prototype.addToControlFlow = function (context) { + var afterFinally = new BasicBlock(); + context.walk(this.tryNode, this); + var finBlock = new BasicBlock(); + if (context.current) { + context.current.addSuccessor(finBlock); + } + context.current = finBlock; + context.pushStatement(this, null, afterFinally); + context.walk(this.finallyNode, this); + if (!context.noContinuation && context.current) { + context.current.addSuccessor(afterFinally); + } + if (afterFinally.predecessors.length > 0) { + context.current = afterFinally; + } + else { + context.noContinuation = true; + } + context.popStatement(); + context.walker.options.goChildren = false; + }; + return TryFinally; + })(Statement); + TypeScript.TryFinally = TryFinally; + var TryCatch = (function (_super) { + __extends(TryCatch, _super); + function TryCatch(tryNode, catchNode) { + _super.call(this, NodeType.TryCatch); + this.tryNode = tryNode; + this.catchNode = catchNode; + } + TryCatch.prototype.isCompoundStatement = function () { + return true; + }; + TryCatch.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.emitJavascript(this.tryNode, TokenID.Try, false); + emitter.emitJavascript(this.catchNode, TokenID.Catch, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + TryCatch.prototype.addToControlFlow = function (context) { + var beforeTry = context.current; + var tryBlock = new BasicBlock(); + beforeTry.addSuccessor(tryBlock); + context.current = tryBlock; + var afterTryCatch = new BasicBlock(); + context.pushStatement(this, null, afterTryCatch); + context.walk(this.tryNode, this); + if (!context.noContinuation) { + if (context.current) { + context.current.addSuccessor(afterTryCatch); + } + } + context.current = new BasicBlock(); + beforeTry.addSuccessor(context.current); + context.walk(this.catchNode, this); + context.popStatement(); + if (!context.noContinuation) { + if (context.current) { + context.current.addSuccessor(afterTryCatch); + } + } + context.current = afterTryCatch; + context.walker.options.goChildren = false; + }; + TryCatch.prototype.typeCheck = function (typeFlow) { + this.tryNode = typeFlow.typeCheck(this.tryNode); + this.catchNode = typeFlow.typeCheck(this.catchNode); + this.type = typeFlow.voidType; + return this; + }; + return TryCatch; + })(Statement); + TypeScript.TryCatch = TryCatch; + var Try = (function (_super) { + __extends(Try, _super); + function Try(body) { + _super.call(this, NodeType.Try); + this.body = body; + } + Try.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("try "); + emitter.emitJavascript(this.body, TokenID.Try, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + Try.prototype.typeCheck = function (typeFlow) { + this.body = typeFlow.typeCheck(this.body); + return this; + }; + Try.prototype.addToControlFlow = function (context) { + if (this.body) { + context.walk(this.body, this); + } + context.walker.options.goChildren = false; + context.noContinuation = false; + }; + return Try; + })(Statement); + TypeScript.Try = Try; + var Catch = (function (_super) { + __extends(Catch, _super); + function Catch(param, body) { + _super.call(this, NodeType.Catch); + this.param = param; + this.body = body; + this.statement = new ASTSpan(); + this.containedScope = null; + if (this.param) { + this.param.varFlags |= VarFlags.AutoInit; + } + } + Catch.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput(" "); + emitter.recordSourceMappingStart(this.statement); + emitter.writeToOutput("catch ("); + emitter.emitJavascript(this.param, TokenID.OpenParen, false); + emitter.writeToOutput(")"); + emitter.recordSourceMappingEnd(this.statement); + emitter.emitJavascript(this.body, TokenID.Catch, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + Catch.prototype.addToControlFlow = function (context) { + if (this.param) { + context.addContent(this.param); + var bodBlock = new BasicBlock(); + context.current.addSuccessor(bodBlock); + context.current = bodBlock; + } + if (this.body) { + context.walk(this.body, this); + } + context.noContinuation = false; + context.walker.options.goChildren = false; + }; + Catch.prototype.typeCheck = function (typeFlow) { + var prevScope = typeFlow.scope; + typeFlow.scope = this.containedScope; + this.param = typeFlow.typeCheck(this.param); + var exceptVar = new ValueLocation(); + var varSym = new VariableSymbol(this.param.id.text, this.param.minChar, typeFlow.checker.locationInfo.unitIndex, exceptVar); + exceptVar.symbol = varSym; + exceptVar.typeLink = new TypeLink(); + // var type for now (add syntax for type annotation) + exceptVar.typeLink.type = typeFlow.anyType; + var thisFnc = typeFlow.thisFnc; + if (thisFnc && thisFnc.type) { + exceptVar.symbol.container = thisFnc.type.symbol; + } + else { + exceptVar.symbol.container = null; + } + this.param.sym = exceptVar.symbol; + typeFlow.scope.enter(exceptVar.symbol.container, this.param, exceptVar.symbol, typeFlow.checker.errorReporter, false, false, false); + this.body = typeFlow.typeCheck(this.body); + // if we're in provisional typecheck mode, clean up the symbol entry + // REVIEW: This is obviously bad form, since we're counting on the internal + // layout of the symbol table, but this is also the only place where we insert + // symbols during typecheck + if (typeFlow.checker.inProvisionalTypecheckMode()) { + var table = typeFlow.scope.getTable(); + table.secondaryTable.table[exceptVar.symbol.name] = undefined; + } + this.type = typeFlow.voidType; + typeFlow.scope = prevScope; + return this; + }; + return Catch; + })(Statement); + TypeScript.Catch = Catch; + var Finally = (function (_super) { + __extends(Finally, _super); + function Finally(body) { + _super.call(this, NodeType.Finally); + this.body = body; + } + Finally.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeToOutput("finally"); + emitter.emitJavascript(this.body, TokenID.Finally, false); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + Finally.prototype.addToControlFlow = function (context) { + if (this.body) { + context.walk(this.body, this); + } + context.walker.options.goChildren = false; + context.noContinuation = false; + }; + Finally.prototype.typeCheck = function (typeFlow) { + this.body = typeFlow.typeCheck(this.body); + return this; + }; + return Finally; + })(Statement); + TypeScript.Finally = Finally; + var Comment = (function (_super) { + __extends(Comment, _super); + function Comment(content, isBlockComment, endsLine) { + _super.call(this, NodeType.Comment); + this.content = content; + this.isBlockComment = isBlockComment; + this.endsLine = endsLine; + this.text = null; + } + Comment.prototype.getText = function () { + if (this.text == null) { + if (this.isBlockComment) { + this.text = this.content.split("\n"); + for (var i = 0; i < this.text.length; i++) { + this.text[i] = this.text[i].replace(/^\s+|\s+$/g, ''); + } + } + else { + this.text = [(this.content.replace(/^\s+|\s+$/g, ''))]; + } + } + return this.text; + }; + return Comment; + })(AST); + TypeScript.Comment = Comment; + var DebuggerStatement = (function (_super) { + __extends(DebuggerStatement, _super); + function DebuggerStatement() { + _super.call(this, NodeType.Debugger); + } + DebuggerStatement.prototype.emit = function (emitter, tokenId, startLine) { + emitter.emitParensAndCommentsInPlace(this, true); + emitter.recordSourceMappingStart(this); + emitter.writeLineToOutput("debugger;"); + emitter.recordSourceMappingEnd(this); + emitter.emitParensAndCommentsInPlace(this, false); + }; + return DebuggerStatement; + })(Statement); + TypeScript.DebuggerStatement = DebuggerStatement; +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource12.js b/tests/baselines/reference/parserRealSource12.js new file mode 100644 index 00000000000..831c121ab08 --- /dev/null +++ b/tests/baselines/reference/parserRealSource12.js @@ -0,0 +1,1032 @@ +//// [parserRealSource12.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + export interface IAstWalker { + walk(ast: AST, parent: AST): AST; + options: AstWalkOptions; + state: any; // user state object + } + + export class AstWalkOptions { + public goChildren = true; + public goNextSibling = true; + public reverseSiblings = false; // visit siblings in reverse execution order + + public stopWalk(stop:boolean = true) { + this.goChildren = !stop; + this.goNextSibling = !stop; + } + } + + export interface IAstWalkCallback { + (ast: AST, parent: AST, walker: IAstWalker): AST; + } + + export interface IAstWalkChildren { + (preAst: AST, parent: AST, walker: IAstWalker): void; + } + + class AstWalker implements IAstWalker { + constructor ( + private childrenWalkers: IAstWalkChildren[], + private pre: IAstWalkCallback, + private post: IAstWalkCallback, + public options: AstWalkOptions, + public state: any) { + } + + public walk(ast: AST, parent: AST): AST { + var preAst = this.pre(ast, parent, this); + if (preAst === undefined) { + preAst = ast; + } + if (this.options.goChildren) { + var svGoSib = this.options.goNextSibling; + this.options.goNextSibling = true; + // Call the "walkChildren" function corresponding to "nodeType". + this.childrenWalkers[ast.nodeType](ast, parent, this); + this.options.goNextSibling = svGoSib; + } + else { + // no go only applies to children of node issuing it + this.options.goChildren = true; + } + if (this.post) { + var postAst = this.post(preAst, parent, this); + if (postAst === undefined) { + postAst = preAst; + } + return postAst; + } + else { + return preAst; + } + } + } + + export class AstWalkerFactory { + private childrenWalkers: IAstWalkChildren[] = []; + + constructor () { + this.initChildrenWalkers(); + } + + public walk(ast: AST, pre: IAstWalkCallback, post?: IAstWalkCallback, options?: AstWalkOptions, state?: any): AST { + return this.getWalker(pre, post, options, state).walk(ast, null) + } + + public getWalker(pre: IAstWalkCallback, post?: IAstWalkCallback, options?: AstWalkOptions, state?: any): IAstWalker { + return this.getSlowWalker(pre, post, options, state); + } + + private getSlowWalker(pre: IAstWalkCallback, post?: IAstWalkCallback, options?: AstWalkOptions, state?: any): IAstWalker { + if (!options) { + options = new AstWalkOptions(); + } + + return new AstWalker(this.childrenWalkers, pre, post, options, state); + } + + private initChildrenWalkers(): void { + this.childrenWalkers[NodeType.None] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Empty] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.EmptyExpr] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.True] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.False] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.This] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Super] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.QString] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Regex] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Null] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.ArrayLit] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.ObjectLit] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Void] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Comma] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Pos] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Neg] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Delete] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Await] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.In] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Dot] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.From] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Is] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.InstOf] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Typeof] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.NumberLit] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Name] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.TypeRef] = ChildrenWalkers.walkTypeReferenceChildren; + this.childrenWalkers[NodeType.Index] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Call] = ChildrenWalkers.walkCallExpressionChildren; + this.childrenWalkers[NodeType.New] = ChildrenWalkers.walkCallExpressionChildren; + this.childrenWalkers[NodeType.Asg] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgAdd] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgSub] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgDiv] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgMul] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgMod] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgAnd] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgXor] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgOr] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgLsh] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgRsh] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgRs2] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.ConditionalExpression] = ChildrenWalkers.walkTrinaryExpressionChildren; + this.childrenWalkers[NodeType.LogOr] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.LogAnd] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Or] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Xor] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.And] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Eq] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Ne] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Eqv] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.NEqv] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Lt] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Le] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Gt] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Ge] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Add] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Sub] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Mul] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Div] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Mod] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Lsh] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Rsh] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Rs2] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Not] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.LogNot] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.IncPre] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.DecPre] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.IncPost] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.DecPost] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.TypeAssertion] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.FuncDecl] = ChildrenWalkers.walkFuncDeclChildren; + this.childrenWalkers[NodeType.Member] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.VarDecl] = ChildrenWalkers.walkBoundDeclChildren; + this.childrenWalkers[NodeType.ArgDecl] = ChildrenWalkers.walkBoundDeclChildren; + this.childrenWalkers[NodeType.Return] = ChildrenWalkers.walkReturnStatementChildren; + this.childrenWalkers[NodeType.Break] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Continue] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Throw] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.For] = ChildrenWalkers.walkForStatementChildren; + this.childrenWalkers[NodeType.ForIn] = ChildrenWalkers.walkForInStatementChildren; + this.childrenWalkers[NodeType.If] = ChildrenWalkers.walkIfStatementChildren; + this.childrenWalkers[NodeType.While] = ChildrenWalkers.walkWhileStatementChildren; + this.childrenWalkers[NodeType.DoWhile] = ChildrenWalkers.walkDoWhileStatementChildren; + this.childrenWalkers[NodeType.Block] = ChildrenWalkers.walkBlockChildren; + this.childrenWalkers[NodeType.Case] = ChildrenWalkers.walkCaseStatementChildren; + this.childrenWalkers[NodeType.Switch] = ChildrenWalkers.walkSwitchStatementChildren; + this.childrenWalkers[NodeType.Try] = ChildrenWalkers.walkTryChildren; + this.childrenWalkers[NodeType.TryCatch] = ChildrenWalkers.walkTryCatchChildren; + this.childrenWalkers[NodeType.TryFinally] = ChildrenWalkers.walkTryFinallyChildren; + this.childrenWalkers[NodeType.Finally] = ChildrenWalkers.walkFinallyChildren; + this.childrenWalkers[NodeType.Catch] = ChildrenWalkers.walkCatchChildren; + this.childrenWalkers[NodeType.List] = ChildrenWalkers.walkListChildren; + this.childrenWalkers[NodeType.Script] = ChildrenWalkers.walkScriptChildren; + this.childrenWalkers[NodeType.ClassDeclaration] = ChildrenWalkers.walkClassDeclChildren; + this.childrenWalkers[NodeType.InterfaceDeclaration] = ChildrenWalkers.walkTypeDeclChildren; + this.childrenWalkers[NodeType.ModuleDeclaration] = ChildrenWalkers.walkModuleDeclChildren; + this.childrenWalkers[NodeType.ImportDeclaration] = ChildrenWalkers.walkImportDeclChildren; + this.childrenWalkers[NodeType.With] = ChildrenWalkers.walkWithStatementChildren; + this.childrenWalkers[NodeType.Label] = ChildrenWalkers.walkLabelChildren; + this.childrenWalkers[NodeType.LabeledStatement] = ChildrenWalkers.walkLabeledStatementChildren; + this.childrenWalkers[NodeType.EBStart] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.GotoEB] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.EndCode] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Error] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Comment] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Debugger] = ChildrenWalkers.walkNone; + + // Verify the code is up to date with the enum + for (var e in (NodeType)._map) { + if ((this.childrenWalkers)[e] === undefined) { + throw new Error("initWalkers function is not up to date with enum content!"); + } + } + } + } + + var globalAstWalkerFactory: AstWalkerFactory; + + export function getAstWalkerFactory(): AstWalkerFactory { + if (!globalAstWalkerFactory) { + globalAstWalkerFactory = new AstWalkerFactory(); + } + return globalAstWalkerFactory; + } + + module ChildrenWalkers { + export function walkNone(preAst: ASTList, parent: AST, walker: IAstWalker): void { + // Nothing to do + } + + export function walkListChildren(preAst: ASTList, parent: AST, walker: IAstWalker): void { + var len = preAst.members.length; + if (walker.options.reverseSiblings) { + for (var i = len - 1; i >= 0; i--) { + if (walker.options.goNextSibling) { + preAst.members[i] = walker.walk(preAst.members[i], preAst); + } + } + } + else { + for (var i = 0; i < len; i++) { + if (walker.options.goNextSibling) { + preAst.members[i] = walker.walk(preAst.members[i], preAst); + } + } + } + } + + export function walkUnaryExpressionChildren(preAst: UnaryExpression, parent: AST, walker: IAstWalker): void { + if (preAst.castTerm) { + preAst.castTerm = walker.walk(preAst.castTerm, preAst); + } + if (preAst.operand) { + preAst.operand = walker.walk(preAst.operand, preAst); + } + } + + export function walkBinaryExpressionChildren(preAst: BinaryExpression, parent: AST, walker: IAstWalker): void { + if (walker.options.reverseSiblings) { + if (preAst.operand2) { + preAst.operand2 = walker.walk(preAst.operand2, preAst); + } + if ((preAst.operand1) && (walker.options.goNextSibling)) { + preAst.operand1 = walker.walk(preAst.operand1, preAst); + } + } else { + if (preAst.operand1) { + preAst.operand1 = walker.walk(preAst.operand1, preAst); + } + if ((preAst.operand2) && (walker.options.goNextSibling)) { + preAst.operand2 = walker.walk(preAst.operand2, preAst); + } + } + } + + export function walkTypeReferenceChildren(preAst: TypeReference, parent: AST, walker: IAstWalker): void { + if (preAst.term) { + preAst.term = walker.walk(preAst.term, preAst); + } + } + + export function walkCallExpressionChildren(preAst: CallExpression, parent: AST, walker: IAstWalker): void { + if (!walker.options.reverseSiblings) { + preAst.target = walker.walk(preAst.target, preAst); + } + if (preAst.arguments && (walker.options.goNextSibling)) { + preAst.arguments = walker.walk(preAst.arguments, preAst); + } + if ((walker.options.reverseSiblings) && (walker.options.goNextSibling)) { + preAst.target = walker.walk(preAst.target, preAst); + } + } + + export function walkTrinaryExpressionChildren(preAst: ConditionalExpression, parent: AST, walker: IAstWalker): void { + if (preAst.operand1) { + preAst.operand1 = walker.walk(preAst.operand1, preAst); + } + if (preAst.operand2 && (walker.options.goNextSibling)) { + preAst.operand2 = walker.walk(preAst.operand2, preAst); + } + if (preAst.operand3 && (walker.options.goNextSibling)) { + preAst.operand3 = walker.walk(preAst.operand3, preAst); + } + } + + export function walkFuncDeclChildren(preAst: FuncDecl, parent: AST, walker: IAstWalker): void { + if (preAst.name) { + preAst.name = walker.walk(preAst.name, preAst); + } + if (preAst.arguments && (preAst.arguments.members.length > 0) && (walker.options.goNextSibling)) { + preAst.arguments = walker.walk(preAst.arguments, preAst); + } + if (preAst.returnTypeAnnotation && (walker.options.goNextSibling)) { + preAst.returnTypeAnnotation = walker.walk(preAst.returnTypeAnnotation, preAst); + } + if (preAst.bod && (preAst.bod.members.length > 0) && (walker.options.goNextSibling)) { + preAst.bod = walker.walk(preAst.bod, preAst); + } + } + + export function walkBoundDeclChildren(preAst: BoundDecl, parent: AST, walker: IAstWalker): void { + if (preAst.id) { + preAst.id = walker.walk(preAst.id, preAst); + } + if (preAst.init) { + preAst.init = walker.walk(preAst.init, preAst); + } + if ((preAst.typeExpr) && (walker.options.goNextSibling)) { + preAst.typeExpr = walker.walk(preAst.typeExpr, preAst); + } + } + + export function walkReturnStatementChildren(preAst: ReturnStatement, parent: AST, walker: IAstWalker): void { + if (preAst.returnExpression) { + preAst.returnExpression = walker.walk(preAst.returnExpression, preAst); + } + } + + export function walkForStatementChildren(preAst: ForStatement, parent: AST, walker: IAstWalker): void { + if (preAst.init) { + preAst.init = walker.walk(preAst.init, preAst); + } + + if (preAst.cond && walker.options.goNextSibling) { + preAst.cond = walker.walk(preAst.cond, preAst); + } + + if (preAst.incr && walker.options.goNextSibling) { + preAst.incr = walker.walk(preAst.incr, preAst); + } + + if (preAst.body && walker.options.goNextSibling) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkForInStatementChildren(preAst: ForInStatement, parent: AST, walker: IAstWalker): void { + preAst.lval = walker.walk(preAst.lval, preAst); + if (walker.options.goNextSibling) { + preAst.obj = walker.walk(preAst.obj, preAst); + } + if (preAst.body && (walker.options.goNextSibling)) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkIfStatementChildren(preAst: IfStatement, parent: AST, walker: IAstWalker): void { + preAst.cond = walker.walk(preAst.cond, preAst); + if (preAst.thenBod && (walker.options.goNextSibling)) { + preAst.thenBod = walker.walk(preAst.thenBod, preAst); + } + if (preAst.elseBod && (walker.options.goNextSibling)) { + preAst.elseBod = walker.walk(preAst.elseBod, preAst); + } + } + + export function walkWhileStatementChildren(preAst: WhileStatement, parent: AST, walker: IAstWalker): void { + preAst.cond = walker.walk(preAst.cond, preAst); + if (preAst.body && (walker.options.goNextSibling)) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkDoWhileStatementChildren(preAst: DoWhileStatement, parent: AST, walker: IAstWalker): void { + preAst.cond = walker.walk(preAst.cond, preAst); + if (preAst.body && (walker.options.goNextSibling)) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkBlockChildren(preAst: Block, parent: AST, walker: IAstWalker): void { + if (preAst.statements) { + preAst.statements = walker.walk(preAst.statements, preAst); + } + } + + export function walkCaseStatementChildren(preAst: CaseStatement, parent: AST, walker: IAstWalker): void { + if (preAst.expr) { + preAst.expr = walker.walk(preAst.expr, preAst); + } + + if (preAst.body && walker.options.goNextSibling) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkSwitchStatementChildren(preAst: SwitchStatement, parent: AST, walker: IAstWalker): void { + if (preAst.val) { + preAst.val = walker.walk(preAst.val, preAst); + } + + if ((preAst.caseList) && walker.options.goNextSibling) { + preAst.caseList = walker.walk(preAst.caseList, preAst); + } + } + + export function walkTryChildren(preAst: Try, parent: AST, walker: IAstWalker): void { + if (preAst.body) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkTryCatchChildren(preAst: TryCatch, parent: AST, walker: IAstWalker): void { + if (preAst.tryNode) { + preAst.tryNode = walker.walk(preAst.tryNode, preAst); + } + + if ((preAst.catchNode) && walker.options.goNextSibling) { + preAst.catchNode = walker.walk(preAst.catchNode, preAst); + } + } + + export function walkTryFinallyChildren(preAst: TryFinally, parent: AST, walker: IAstWalker): void { + if (preAst.tryNode) { + preAst.tryNode = walker.walk(preAst.tryNode, preAst); + } + + if (preAst.finallyNode && walker.options.goNextSibling) { + preAst.finallyNode = walker.walk(preAst.finallyNode, preAst); + } + } + + export function walkFinallyChildren(preAst: Finally, parent: AST, walker: IAstWalker): void { + if (preAst.body) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkCatchChildren(preAst: Catch, parent: AST, walker: IAstWalker): void { + if (preAst.param) { + preAst.param = walker.walk(preAst.param, preAst); + } + + if ((preAst.body) && walker.options.goNextSibling) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkRecordChildren(preAst: NamedDeclaration, parent: AST, walker: IAstWalker): void { + preAst.name = walker.walk(preAst.name, preAst); + if (walker.options.goNextSibling && preAst.members) { + preAst.members = walker.walk(preAst.members, preAst); + } + + } + + export function walkNamedTypeChildren(preAst: TypeDeclaration, parent: AST, walker: IAstWalker): void { + walkRecordChildren(preAst, parent, walker); + } + + export function walkClassDeclChildren(preAst: ClassDeclaration, parent: AST, walker: IAstWalker): void { + walkNamedTypeChildren(preAst, parent, walker); + + if (walker.options.goNextSibling && preAst.extendsList) { + preAst.extendsList = walker.walk(preAst.extendsList, preAst); + } + + if (walker.options.goNextSibling && preAst.implementsList) { + preAst.implementsList = walker.walk(preAst.implementsList, preAst); + } + } + + export function walkScriptChildren(preAst: Script, parent: AST, walker: IAstWalker): void { + if (preAst.bod) { + preAst.bod = walker.walk(preAst.bod, preAst); + } + } + + export function walkTypeDeclChildren(preAst: InterfaceDeclaration, parent: AST, walker: IAstWalker): void { + walkNamedTypeChildren(preAst, parent, walker); + + // walked arguments as part of members + if (walker.options.goNextSibling && preAst.extendsList) { + preAst.extendsList = walker.walk(preAst.extendsList, preAst); + } + + if (walker.options.goNextSibling && preAst.implementsList) { + preAst.implementsList = walker.walk(preAst.implementsList, preAst); + } + } + + export function walkModuleDeclChildren(preAst: ModuleDeclaration, parent: AST, walker: IAstWalker): void { + walkRecordChildren(preAst, parent, walker); + } + + export function walkImportDeclChildren(preAst: ImportDeclaration, parent: AST, walker: IAstWalker): void { + if (preAst.id) { + preAst.id = walker.walk(preAst.id, preAst); + } + if (preAst.alias) { + preAst.alias = walker.walk(preAst.alias, preAst); + } + } + + export function walkWithStatementChildren(preAst: WithStatement, parent: AST, walker: IAstWalker): void { + if (preAst.expr) { + preAst.expr = walker.walk(preAst.expr, preAst); + } + + if (preAst.body && walker.options.goNextSibling) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + + export function walkLabelChildren(preAst: Label, parent: AST, walker: IAstWalker): void { + //TODO: Walk "id"? + } + + export function walkLabeledStatementChildren(preAst: LabeledStatement, parent: AST, walker: IAstWalker): void { + preAst.labels = walker.walk(preAst.labels, preAst); + if (walker.options.goNextSibling) { + preAst.stmt = walker.walk(preAst.stmt, preAst); + } + } + } +} + +//// [parserRealSource12.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +/// +var TypeScript; +(function (TypeScript) { + var AstWalkOptions = (function () { + function AstWalkOptions() { + this.goChildren = true; + this.goNextSibling = true; + this.reverseSiblings = false; // visit siblings in reverse execution order + } + AstWalkOptions.prototype.stopWalk = function (stop) { + if (stop === void 0) { stop = true; } + this.goChildren = !stop; + this.goNextSibling = !stop; + }; + return AstWalkOptions; + })(); + TypeScript.AstWalkOptions = AstWalkOptions; + var AstWalker = (function () { + function AstWalker(childrenWalkers, pre, post, options, state) { + this.childrenWalkers = childrenWalkers; + this.pre = pre; + this.post = post; + this.options = options; + this.state = state; + } + AstWalker.prototype.walk = function (ast, parent) { + var preAst = this.pre(ast, parent, this); + if (preAst === undefined) { + preAst = ast; + } + if (this.options.goChildren) { + var svGoSib = this.options.goNextSibling; + this.options.goNextSibling = true; + // Call the "walkChildren" function corresponding to "nodeType". + this.childrenWalkers[ast.nodeType](ast, parent, this); + this.options.goNextSibling = svGoSib; + } + else { + // no go only applies to children of node issuing it + this.options.goChildren = true; + } + if (this.post) { + var postAst = this.post(preAst, parent, this); + if (postAst === undefined) { + postAst = preAst; + } + return postAst; + } + else { + return preAst; + } + }; + return AstWalker; + })(); + var AstWalkerFactory = (function () { + function AstWalkerFactory() { + this.childrenWalkers = []; + this.initChildrenWalkers(); + } + AstWalkerFactory.prototype.walk = function (ast, pre, post, options, state) { + return this.getWalker(pre, post, options, state).walk(ast, null); + }; + AstWalkerFactory.prototype.getWalker = function (pre, post, options, state) { + return this.getSlowWalker(pre, post, options, state); + }; + AstWalkerFactory.prototype.getSlowWalker = function (pre, post, options, state) { + if (!options) { + options = new AstWalkOptions(); + } + return new AstWalker(this.childrenWalkers, pre, post, options, state); + }; + AstWalkerFactory.prototype.initChildrenWalkers = function () { + this.childrenWalkers[NodeType.None] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Empty] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.EmptyExpr] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.True] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.False] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.This] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Super] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.QString] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Regex] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Null] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.ArrayLit] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.ObjectLit] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Void] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Comma] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Pos] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Neg] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Delete] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.Await] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.In] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Dot] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.From] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Is] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.InstOf] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Typeof] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.NumberLit] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Name] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.TypeRef] = ChildrenWalkers.walkTypeReferenceChildren; + this.childrenWalkers[NodeType.Index] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Call] = ChildrenWalkers.walkCallExpressionChildren; + this.childrenWalkers[NodeType.New] = ChildrenWalkers.walkCallExpressionChildren; + this.childrenWalkers[NodeType.Asg] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgAdd] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgSub] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgDiv] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgMul] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgMod] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgAnd] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgXor] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgOr] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgLsh] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgRsh] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.AsgRs2] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.ConditionalExpression] = ChildrenWalkers.walkTrinaryExpressionChildren; + this.childrenWalkers[NodeType.LogOr] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.LogAnd] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Or] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Xor] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.And] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Eq] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Ne] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Eqv] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.NEqv] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Lt] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Le] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Gt] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Ge] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Add] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Sub] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Mul] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Div] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Mod] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Lsh] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Rsh] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Rs2] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.Not] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.LogNot] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.IncPre] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.DecPre] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.IncPost] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.DecPost] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.TypeAssertion] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.FuncDecl] = ChildrenWalkers.walkFuncDeclChildren; + this.childrenWalkers[NodeType.Member] = ChildrenWalkers.walkBinaryExpressionChildren; + this.childrenWalkers[NodeType.VarDecl] = ChildrenWalkers.walkBoundDeclChildren; + this.childrenWalkers[NodeType.ArgDecl] = ChildrenWalkers.walkBoundDeclChildren; + this.childrenWalkers[NodeType.Return] = ChildrenWalkers.walkReturnStatementChildren; + this.childrenWalkers[NodeType.Break] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Continue] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Throw] = ChildrenWalkers.walkUnaryExpressionChildren; + this.childrenWalkers[NodeType.For] = ChildrenWalkers.walkForStatementChildren; + this.childrenWalkers[NodeType.ForIn] = ChildrenWalkers.walkForInStatementChildren; + this.childrenWalkers[NodeType.If] = ChildrenWalkers.walkIfStatementChildren; + this.childrenWalkers[NodeType.While] = ChildrenWalkers.walkWhileStatementChildren; + this.childrenWalkers[NodeType.DoWhile] = ChildrenWalkers.walkDoWhileStatementChildren; + this.childrenWalkers[NodeType.Block] = ChildrenWalkers.walkBlockChildren; + this.childrenWalkers[NodeType.Case] = ChildrenWalkers.walkCaseStatementChildren; + this.childrenWalkers[NodeType.Switch] = ChildrenWalkers.walkSwitchStatementChildren; + this.childrenWalkers[NodeType.Try] = ChildrenWalkers.walkTryChildren; + this.childrenWalkers[NodeType.TryCatch] = ChildrenWalkers.walkTryCatchChildren; + this.childrenWalkers[NodeType.TryFinally] = ChildrenWalkers.walkTryFinallyChildren; + this.childrenWalkers[NodeType.Finally] = ChildrenWalkers.walkFinallyChildren; + this.childrenWalkers[NodeType.Catch] = ChildrenWalkers.walkCatchChildren; + this.childrenWalkers[NodeType.List] = ChildrenWalkers.walkListChildren; + this.childrenWalkers[NodeType.Script] = ChildrenWalkers.walkScriptChildren; + this.childrenWalkers[NodeType.ClassDeclaration] = ChildrenWalkers.walkClassDeclChildren; + this.childrenWalkers[NodeType.InterfaceDeclaration] = ChildrenWalkers.walkTypeDeclChildren; + this.childrenWalkers[NodeType.ModuleDeclaration] = ChildrenWalkers.walkModuleDeclChildren; + this.childrenWalkers[NodeType.ImportDeclaration] = ChildrenWalkers.walkImportDeclChildren; + this.childrenWalkers[NodeType.With] = ChildrenWalkers.walkWithStatementChildren; + this.childrenWalkers[NodeType.Label] = ChildrenWalkers.walkLabelChildren; + this.childrenWalkers[NodeType.LabeledStatement] = ChildrenWalkers.walkLabeledStatementChildren; + this.childrenWalkers[NodeType.EBStart] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.GotoEB] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.EndCode] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Error] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Comment] = ChildrenWalkers.walkNone; + this.childrenWalkers[NodeType.Debugger] = ChildrenWalkers.walkNone; + // Verify the code is up to date with the enum + for (var e in NodeType._map) { + if (this.childrenWalkers[e] === undefined) { + throw new Error("initWalkers function is not up to date with enum content!"); + } + } + }; + return AstWalkerFactory; + })(); + TypeScript.AstWalkerFactory = AstWalkerFactory; + var globalAstWalkerFactory; + function getAstWalkerFactory() { + if (!globalAstWalkerFactory) { + globalAstWalkerFactory = new AstWalkerFactory(); + } + return globalAstWalkerFactory; + } + TypeScript.getAstWalkerFactory = getAstWalkerFactory; + var ChildrenWalkers; + (function (ChildrenWalkers) { + function walkNone(preAst, parent, walker) { + // Nothing to do + } + ChildrenWalkers.walkNone = walkNone; + function walkListChildren(preAst, parent, walker) { + var len = preAst.members.length; + if (walker.options.reverseSiblings) { + for (var i = len - 1; i >= 0; i--) { + if (walker.options.goNextSibling) { + preAst.members[i] = walker.walk(preAst.members[i], preAst); + } + } + } + else { + for (var i = 0; i < len; i++) { + if (walker.options.goNextSibling) { + preAst.members[i] = walker.walk(preAst.members[i], preAst); + } + } + } + } + ChildrenWalkers.walkListChildren = walkListChildren; + function walkUnaryExpressionChildren(preAst, parent, walker) { + if (preAst.castTerm) { + preAst.castTerm = walker.walk(preAst.castTerm, preAst); + } + if (preAst.operand) { + preAst.operand = walker.walk(preAst.operand, preAst); + } + } + ChildrenWalkers.walkUnaryExpressionChildren = walkUnaryExpressionChildren; + function walkBinaryExpressionChildren(preAst, parent, walker) { + if (walker.options.reverseSiblings) { + if (preAst.operand2) { + preAst.operand2 = walker.walk(preAst.operand2, preAst); + } + if ((preAst.operand1) && (walker.options.goNextSibling)) { + preAst.operand1 = walker.walk(preAst.operand1, preAst); + } + } + else { + if (preAst.operand1) { + preAst.operand1 = walker.walk(preAst.operand1, preAst); + } + if ((preAst.operand2) && (walker.options.goNextSibling)) { + preAst.operand2 = walker.walk(preAst.operand2, preAst); + } + } + } + ChildrenWalkers.walkBinaryExpressionChildren = walkBinaryExpressionChildren; + function walkTypeReferenceChildren(preAst, parent, walker) { + if (preAst.term) { + preAst.term = walker.walk(preAst.term, preAst); + } + } + ChildrenWalkers.walkTypeReferenceChildren = walkTypeReferenceChildren; + function walkCallExpressionChildren(preAst, parent, walker) { + if (!walker.options.reverseSiblings) { + preAst.target = walker.walk(preAst.target, preAst); + } + if (preAst.arguments && (walker.options.goNextSibling)) { + preAst.arguments = walker.walk(preAst.arguments, preAst); + } + if ((walker.options.reverseSiblings) && (walker.options.goNextSibling)) { + preAst.target = walker.walk(preAst.target, preAst); + } + } + ChildrenWalkers.walkCallExpressionChildren = walkCallExpressionChildren; + function walkTrinaryExpressionChildren(preAst, parent, walker) { + if (preAst.operand1) { + preAst.operand1 = walker.walk(preAst.operand1, preAst); + } + if (preAst.operand2 && (walker.options.goNextSibling)) { + preAst.operand2 = walker.walk(preAst.operand2, preAst); + } + if (preAst.operand3 && (walker.options.goNextSibling)) { + preAst.operand3 = walker.walk(preAst.operand3, preAst); + } + } + ChildrenWalkers.walkTrinaryExpressionChildren = walkTrinaryExpressionChildren; + function walkFuncDeclChildren(preAst, parent, walker) { + if (preAst.name) { + preAst.name = walker.walk(preAst.name, preAst); + } + if (preAst.arguments && (preAst.arguments.members.length > 0) && (walker.options.goNextSibling)) { + preAst.arguments = walker.walk(preAst.arguments, preAst); + } + if (preAst.returnTypeAnnotation && (walker.options.goNextSibling)) { + preAst.returnTypeAnnotation = walker.walk(preAst.returnTypeAnnotation, preAst); + } + if (preAst.bod && (preAst.bod.members.length > 0) && (walker.options.goNextSibling)) { + preAst.bod = walker.walk(preAst.bod, preAst); + } + } + ChildrenWalkers.walkFuncDeclChildren = walkFuncDeclChildren; + function walkBoundDeclChildren(preAst, parent, walker) { + if (preAst.id) { + preAst.id = walker.walk(preAst.id, preAst); + } + if (preAst.init) { + preAst.init = walker.walk(preAst.init, preAst); + } + if ((preAst.typeExpr) && (walker.options.goNextSibling)) { + preAst.typeExpr = walker.walk(preAst.typeExpr, preAst); + } + } + ChildrenWalkers.walkBoundDeclChildren = walkBoundDeclChildren; + function walkReturnStatementChildren(preAst, parent, walker) { + if (preAst.returnExpression) { + preAst.returnExpression = walker.walk(preAst.returnExpression, preAst); + } + } + ChildrenWalkers.walkReturnStatementChildren = walkReturnStatementChildren; + function walkForStatementChildren(preAst, parent, walker) { + if (preAst.init) { + preAst.init = walker.walk(preAst.init, preAst); + } + if (preAst.cond && walker.options.goNextSibling) { + preAst.cond = walker.walk(preAst.cond, preAst); + } + if (preAst.incr && walker.options.goNextSibling) { + preAst.incr = walker.walk(preAst.incr, preAst); + } + if (preAst.body && walker.options.goNextSibling) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkForStatementChildren = walkForStatementChildren; + function walkForInStatementChildren(preAst, parent, walker) { + preAst.lval = walker.walk(preAst.lval, preAst); + if (walker.options.goNextSibling) { + preAst.obj = walker.walk(preAst.obj, preAst); + } + if (preAst.body && (walker.options.goNextSibling)) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkForInStatementChildren = walkForInStatementChildren; + function walkIfStatementChildren(preAst, parent, walker) { + preAst.cond = walker.walk(preAst.cond, preAst); + if (preAst.thenBod && (walker.options.goNextSibling)) { + preAst.thenBod = walker.walk(preAst.thenBod, preAst); + } + if (preAst.elseBod && (walker.options.goNextSibling)) { + preAst.elseBod = walker.walk(preAst.elseBod, preAst); + } + } + ChildrenWalkers.walkIfStatementChildren = walkIfStatementChildren; + function walkWhileStatementChildren(preAst, parent, walker) { + preAst.cond = walker.walk(preAst.cond, preAst); + if (preAst.body && (walker.options.goNextSibling)) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkWhileStatementChildren = walkWhileStatementChildren; + function walkDoWhileStatementChildren(preAst, parent, walker) { + preAst.cond = walker.walk(preAst.cond, preAst); + if (preAst.body && (walker.options.goNextSibling)) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkDoWhileStatementChildren = walkDoWhileStatementChildren; + function walkBlockChildren(preAst, parent, walker) { + if (preAst.statements) { + preAst.statements = walker.walk(preAst.statements, preAst); + } + } + ChildrenWalkers.walkBlockChildren = walkBlockChildren; + function walkCaseStatementChildren(preAst, parent, walker) { + if (preAst.expr) { + preAst.expr = walker.walk(preAst.expr, preAst); + } + if (preAst.body && walker.options.goNextSibling) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkCaseStatementChildren = walkCaseStatementChildren; + function walkSwitchStatementChildren(preAst, parent, walker) { + if (preAst.val) { + preAst.val = walker.walk(preAst.val, preAst); + } + if ((preAst.caseList) && walker.options.goNextSibling) { + preAst.caseList = walker.walk(preAst.caseList, preAst); + } + } + ChildrenWalkers.walkSwitchStatementChildren = walkSwitchStatementChildren; + function walkTryChildren(preAst, parent, walker) { + if (preAst.body) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkTryChildren = walkTryChildren; + function walkTryCatchChildren(preAst, parent, walker) { + if (preAst.tryNode) { + preAst.tryNode = walker.walk(preAst.tryNode, preAst); + } + if ((preAst.catchNode) && walker.options.goNextSibling) { + preAst.catchNode = walker.walk(preAst.catchNode, preAst); + } + } + ChildrenWalkers.walkTryCatchChildren = walkTryCatchChildren; + function walkTryFinallyChildren(preAst, parent, walker) { + if (preAst.tryNode) { + preAst.tryNode = walker.walk(preAst.tryNode, preAst); + } + if (preAst.finallyNode && walker.options.goNextSibling) { + preAst.finallyNode = walker.walk(preAst.finallyNode, preAst); + } + } + ChildrenWalkers.walkTryFinallyChildren = walkTryFinallyChildren; + function walkFinallyChildren(preAst, parent, walker) { + if (preAst.body) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkFinallyChildren = walkFinallyChildren; + function walkCatchChildren(preAst, parent, walker) { + if (preAst.param) { + preAst.param = walker.walk(preAst.param, preAst); + } + if ((preAst.body) && walker.options.goNextSibling) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkCatchChildren = walkCatchChildren; + function walkRecordChildren(preAst, parent, walker) { + preAst.name = walker.walk(preAst.name, preAst); + if (walker.options.goNextSibling && preAst.members) { + preAst.members = walker.walk(preAst.members, preAst); + } + } + ChildrenWalkers.walkRecordChildren = walkRecordChildren; + function walkNamedTypeChildren(preAst, parent, walker) { + walkRecordChildren(preAst, parent, walker); + } + ChildrenWalkers.walkNamedTypeChildren = walkNamedTypeChildren; + function walkClassDeclChildren(preAst, parent, walker) { + walkNamedTypeChildren(preAst, parent, walker); + if (walker.options.goNextSibling && preAst.extendsList) { + preAst.extendsList = walker.walk(preAst.extendsList, preAst); + } + if (walker.options.goNextSibling && preAst.implementsList) { + preAst.implementsList = walker.walk(preAst.implementsList, preAst); + } + } + ChildrenWalkers.walkClassDeclChildren = walkClassDeclChildren; + function walkScriptChildren(preAst, parent, walker) { + if (preAst.bod) { + preAst.bod = walker.walk(preAst.bod, preAst); + } + } + ChildrenWalkers.walkScriptChildren = walkScriptChildren; + function walkTypeDeclChildren(preAst, parent, walker) { + walkNamedTypeChildren(preAst, parent, walker); + // walked arguments as part of members + if (walker.options.goNextSibling && preAst.extendsList) { + preAst.extendsList = walker.walk(preAst.extendsList, preAst); + } + if (walker.options.goNextSibling && preAst.implementsList) { + preAst.implementsList = walker.walk(preAst.implementsList, preAst); + } + } + ChildrenWalkers.walkTypeDeclChildren = walkTypeDeclChildren; + function walkModuleDeclChildren(preAst, parent, walker) { + walkRecordChildren(preAst, parent, walker); + } + ChildrenWalkers.walkModuleDeclChildren = walkModuleDeclChildren; + function walkImportDeclChildren(preAst, parent, walker) { + if (preAst.id) { + preAst.id = walker.walk(preAst.id, preAst); + } + if (preAst.alias) { + preAst.alias = walker.walk(preAst.alias, preAst); + } + } + ChildrenWalkers.walkImportDeclChildren = walkImportDeclChildren; + function walkWithStatementChildren(preAst, parent, walker) { + if (preAst.expr) { + preAst.expr = walker.walk(preAst.expr, preAst); + } + if (preAst.body && walker.options.goNextSibling) { + preAst.body = walker.walk(preAst.body, preAst); + } + } + ChildrenWalkers.walkWithStatementChildren = walkWithStatementChildren; + function walkLabelChildren(preAst, parent, walker) { + //TODO: Walk "id"? + } + ChildrenWalkers.walkLabelChildren = walkLabelChildren; + function walkLabeledStatementChildren(preAst, parent, walker) { + preAst.labels = walker.walk(preAst.labels, preAst); + if (walker.options.goNextSibling) { + preAst.stmt = walker.walk(preAst.stmt, preAst); + } + } + ChildrenWalkers.walkLabeledStatementChildren = walkLabeledStatementChildren; + })(ChildrenWalkers || (ChildrenWalkers = {})); +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource13.js b/tests/baselines/reference/parserRealSource13.js new file mode 100644 index 00000000000..7c1ecdc7372 --- /dev/null +++ b/tests/baselines/reference/parserRealSource13.js @@ -0,0 +1,183 @@ +//// [parserRealSource13.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript.AstWalkerWithDetailCallback { + export interface AstWalkerDetailCallback { + EmptyCallback? (pre, ast: AST): boolean; + EmptyExprCallback? (pre, ast: AST): boolean; + TrueCallback? (pre, ast: AST): boolean; + FalseCallback? (pre, ast: AST): boolean; + ThisCallback? (pre, ast: AST): boolean; + SuperCallback? (pre, ast: AST): boolean; + QStringCallback? (pre, ast: AST): boolean; + RegexCallback? (pre, ast: AST): boolean; + NullCallback? (pre, ast: AST): boolean; + ArrayLitCallback? (pre, ast: AST): boolean; + ObjectLitCallback? (pre, ast: AST): boolean; + VoidCallback? (pre, ast: AST): boolean; + CommaCallback? (pre, ast: AST): boolean; + PosCallback? (pre, ast: AST): boolean; + NegCallback? (pre, ast: AST): boolean; + DeleteCallback? (pre, ast: AST): boolean; + AwaitCallback? (pre, ast: AST): boolean; + InCallback? (pre, ast: AST): boolean; + DotCallback? (pre, ast: AST): boolean; + FromCallback? (pre, ast: AST): boolean; + IsCallback? (pre, ast: AST): boolean; + InstOfCallback? (pre, ast: AST): boolean; + TypeofCallback? (pre, ast: AST): boolean; + NumberLitCallback? (pre, ast: AST): boolean; + NameCallback? (pre, identifierAst: Identifier): boolean; + TypeRefCallback? (pre, ast: AST): boolean; + IndexCallback? (pre, ast: AST): boolean; + CallCallback? (pre, ast: AST): boolean; + NewCallback? (pre, ast: AST): boolean; + AsgCallback? (pre, ast: AST): boolean; + AsgAddCallback? (pre, ast: AST): boolean; + AsgSubCallback? (pre, ast: AST): boolean; + AsgDivCallback? (pre, ast: AST): boolean; + AsgMulCallback? (pre, ast: AST): boolean; + AsgModCallback? (pre, ast: AST): boolean; + AsgAndCallback? (pre, ast: AST): boolean; + AsgXorCallback? (pre, ast: AST): boolean; + AsgOrCallback? (pre, ast: AST): boolean; + AsgLshCallback? (pre, ast: AST): boolean; + AsgRshCallback? (pre, ast: AST): boolean; + AsgRs2Callback? (pre, ast: AST): boolean; + QMarkCallback? (pre, ast: AST): boolean; + LogOrCallback? (pre, ast: AST): boolean; + LogAndCallback? (pre, ast: AST): boolean; + OrCallback? (pre, ast: AST): boolean; + XorCallback? (pre, ast: AST): boolean; + AndCallback? (pre, ast: AST): boolean; + EqCallback? (pre, ast: AST): boolean; + NeCallback? (pre, ast: AST): boolean; + EqvCallback? (pre, ast: AST): boolean; + NEqvCallback? (pre, ast: AST): boolean; + LtCallback? (pre, ast: AST): boolean; + LeCallback? (pre, ast: AST): boolean; + GtCallback? (pre, ast: AST): boolean; + GeCallback? (pre, ast: AST): boolean; + AddCallback? (pre, ast: AST): boolean; + SubCallback? (pre, ast: AST): boolean; + MulCallback? (pre, ast: AST): boolean; + DivCallback? (pre, ast: AST): boolean; + ModCallback? (pre, ast: AST): boolean; + LshCallback? (pre, ast: AST): boolean; + RshCallback? (pre, ast: AST): boolean; + Rs2Callback? (pre, ast: AST): boolean; + NotCallback? (pre, ast: AST): boolean; + LogNotCallback? (pre, ast: AST): boolean; + IncPreCallback? (pre, ast: AST): boolean; + DecPreCallback? (pre, ast: AST): boolean; + IncPostCallback? (pre, ast: AST): boolean; + DecPostCallback? (pre, ast: AST): boolean; + TypeAssertionCallback? (pre, ast: AST): boolean; + FuncDeclCallback? (pre, funcDecl: FuncDecl): boolean; + MemberCallback? (pre, ast: AST): boolean; + VarDeclCallback? (pre, varDecl: VarDecl): boolean; + ArgDeclCallback? (pre, ast: AST): boolean; + ReturnCallback? (pre, ast: AST): boolean; + BreakCallback? (pre, ast: AST): boolean; + ContinueCallback? (pre, ast: AST): boolean; + ThrowCallback? (pre, ast: AST): boolean; + ForCallback? (pre, ast: AST): boolean; + ForInCallback? (pre, ast: AST): boolean; + IfCallback? (pre, ast: AST): boolean; + WhileCallback? (pre, ast: AST): boolean; + DoWhileCallback? (pre, ast: AST): boolean; + BlockCallback? (pre, block: Block): boolean; + CaseCallback? (pre, ast: AST): boolean; + SwitchCallback? (pre, ast: AST): boolean; + TryCallback? (pre, ast: AST): boolean; + TryCatchCallback? (pre, ast: AST): boolean; + TryFinallyCallback? (pre, ast: AST): boolean; + FinallyCallback? (pre, ast: AST): boolean; + CatchCallback? (pre, ast: AST): boolean; + ListCallback? (pre, astList: ASTList): boolean; + ScriptCallback? (pre, script: Script): boolean; + ClassDeclarationCallback? (pre, ast: AST): boolean; + InterfaceDeclarationCallback? (pre, interfaceDecl: InterfaceDeclaration): boolean; + ModuleDeclarationCallback? (pre, moduleDecl: ModuleDeclaration): boolean; + ImportDeclarationCallback? (pre, ast: AST): boolean; + WithCallback? (pre, ast: AST): boolean; + LabelCallback? (pre, labelAST: AST): boolean; + LabeledStatementCallback? (pre, ast: AST): boolean; + EBStartCallback? (pre, ast: AST): boolean; + GotoEBCallback? (pre, ast: AST): boolean; + EndCodeCallback? (pre, ast: AST): boolean; + ErrorCallback? (pre, ast: AST): boolean; + CommentCallback? (pre, ast: AST): boolean; + DebuggerCallback? (pre, ast: AST): boolean; + DefaultCallback? (pre, ast: AST): boolean; + } + + export function walk(script: Script, callback: AstWalkerDetailCallback): void { + var pre = (cur: AST, parent: AST) => { + walker.options.goChildren = AstWalkerCallback(true, cur, callback); + return cur; + } + + var post = (cur: AST, parent: AST) => { + AstWalkerCallback(false, cur, callback); + return cur; + } + + var walker = TypeScript.getAstWalkerFactory().getWalker(pre, post); + walker.walk(script, null); + } + + function AstWalkerCallback(pre: boolean, ast: AST, callback: AstWalkerDetailCallback): boolean { + // See if the Callback needs to be handled using specific one or default one + var nodeType = ast.nodeType; + var callbackString = (NodeType)._map[nodeType] + "Callback"; + if (callback[callbackString]) { + return callback[callbackString](pre, ast); + } + + if (callback.DefaultCallback) { + return callback.DefaultCallback(pre, ast); + } + + return true; + } +} + +//// [parserRealSource13.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +/// +var TypeScript; +(function (TypeScript) { + var AstWalkerWithDetailCallback; + (function (AstWalkerWithDetailCallback) { + function walk(script, callback) { + var pre = function (cur, parent) { + walker.options.goChildren = AstWalkerCallback(true, cur, callback); + return cur; + }; + var post = function (cur, parent) { + AstWalkerCallback(false, cur, callback); + return cur; + }; + var walker = TypeScript.getAstWalkerFactory().getWalker(pre, post); + walker.walk(script, null); + } + AstWalkerWithDetailCallback.walk = walk; + function AstWalkerCallback(pre, ast, callback) { + // See if the Callback needs to be handled using specific one or default one + var nodeType = ast.nodeType; + var callbackString = NodeType._map[nodeType] + "Callback"; + if (callback[callbackString]) { + return callback[callbackString](pre, ast); + } + if (callback.DefaultCallback) { + return callback.DefaultCallback(pre, ast); + } + return true; + } + })(AstWalkerWithDetailCallback = TypeScript.AstWalkerWithDetailCallback || (TypeScript.AstWalkerWithDetailCallback = {})); +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource14.js b/tests/baselines/reference/parserRealSource14.js new file mode 100644 index 00000000000..9b9ee2bcf84 --- /dev/null +++ b/tests/baselines/reference/parserRealSource14.js @@ -0,0 +1,956 @@ +//// [parserRealSource14.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + export function lastOf(items: any[]): any { + return (items === null || items.length === 0) ? null : items[items.length - 1]; + } + + export function max(a: number, b: number): number { + return a >= b ? a : b; + } + + export function min(a: number, b: number): number { + return a <= b ? a : b; + } + + // + // Helper class representing a path from a root ast node to a (grand)child ast node. + // This is helpful as our tree don't have parents. + // + export class AstPath { + public asts: TypeScript.AST[] = []; + public top: number = -1; + + static reverseIndexOf(items: any[], index: number): any { + return (items === null || items.length <= index) ? null : items[items.length - index - 1]; + } + + public clone(): AstPath { + var clone = new AstPath(); + clone.asts = this.asts.map((value) => { return value; }); + clone.top = this.top; + return clone; + } + + public pop(): TypeScript.AST { + var head = this.ast(); + this.up(); + + while (this.asts.length > this.count()) { + this.asts.pop(); + } + return head; + } + + public push(ast: TypeScript.AST) { + while (this.asts.length > this.count()) { + this.asts.pop(); + } + this.top = this.asts.length; + this.asts.push(ast); + } + + public up() { + if (this.top <= -1) + throw new Error("Invalid call to 'up'"); + this.top--; + } + + public down() { + if (this.top == this.ast.length - 1) + throw new Error("Invalid call to 'down'"); + this.top++; + } + + public nodeType(): TypeScript.NodeType { + if (this.ast() == null) + return TypeScript.NodeType.None; + return this.ast().nodeType; + } + + public ast() { + return AstPath.reverseIndexOf(this.asts, this.asts.length - (this.top + 1)); + } + + public parent() { + return AstPath.reverseIndexOf(this.asts, this.asts.length - this.top); + } + + public count() { + return this.top + 1; + } + + public get(index: number): TypeScript.AST { + return this.asts[index]; + } + + public isNameOfClass(): boolean { + if (this.ast() === null || this.parent() === null) + return false; + + return (this.ast().nodeType === TypeScript.NodeType.Name) && + (this.parent().nodeType === TypeScript.NodeType.ClassDeclaration) && + ((this.parent()).name === this.ast()); + } + + public isNameOfInterface(): boolean { + if (this.ast() === null || this.parent() === null) + return false; + + return (this.ast().nodeType === TypeScript.NodeType.Name) && + (this.parent().nodeType === TypeScript.NodeType.InterfaceDeclaration) && + ((this.parent()).name === this.ast()); + } + + public isNameOfArgument(): boolean { + if (this.ast() === null || this.parent() === null) + return false; + + return (this.ast().nodeType === TypeScript.NodeType.Name) && + (this.parent().nodeType === TypeScript.NodeType.ArgDecl) && + ((this.parent()).id === this.ast()); + } + + public isNameOfVariable(): boolean { + if (this.ast() === null || this.parent() === null) + return false; + + return (this.ast().nodeType === TypeScript.NodeType.Name) && + (this.parent().nodeType === TypeScript.NodeType.VarDecl) && + ((this.parent()).id === this.ast()); + } + + public isNameOfModule(): boolean { + if (this.ast() === null || this.parent() === null) + return false; + + return (this.ast().nodeType === TypeScript.NodeType.Name) && + (this.parent().nodeType === TypeScript.NodeType.ModuleDeclaration) && + ((this.parent()).name === this.ast()); + } + + public isNameOfFunction(): boolean { + if (this.ast() === null || this.parent() === null) + return false; + + return (this.ast().nodeType === TypeScript.NodeType.Name) && + (this.parent().nodeType === TypeScript.NodeType.FuncDecl) && + ((this.parent()).name === this.ast()); + } + + public isChildOfScript(): boolean { + var ast = lastOf(this.asts); + return this.count() >= 3 && + this.asts[this.top] === ast && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.Script; + } + + public isChildOfModule(): boolean { + var ast = lastOf(this.asts); + return this.count() >= 3 && + this.asts[this.top] === ast && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.ModuleDeclaration; + } + + public isChildOfClass(): boolean { + var ast = lastOf(this.asts); + return this.count() >= 3 && + this.asts[this.top] === ast && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.ClassDeclaration; + } + + public isArgumentOfClassConstructor(): boolean { + var ast = lastOf(this.asts); + return this.count() >= 5 && + this.asts[this.top] === ast && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.FuncDecl && + this.asts[this.top - 3].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 4].nodeType === TypeScript.NodeType.ClassDeclaration && + ((this.asts[this.top - 2]).isConstructor) && + ((this.asts[this.top - 2]).arguments === this.asts[this.top - 1]) && + ((this.asts[this.top - 4]).constructorDecl === this.asts[this.top - 2]); + } + + public isChildOfInterface(): boolean { + var ast = lastOf(this.asts); + return this.count() >= 3 && + this.asts[this.top] === ast && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.InterfaceDeclaration; + } + + public isTopLevelImplicitModule() { + return this.count() >= 1 && + this.asts[this.top].nodeType === TypeScript.NodeType.ModuleDeclaration && + TypeScript.hasFlag((this.asts[this.top]).modFlags, TypeScript.ModuleFlags.IsWholeFile); + } + + public isBodyOfTopLevelImplicitModule() { + return this.count() >= 2 && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.ModuleDeclaration && + (this.asts[this.top - 1]).members == this.asts[this.top - 0] && + TypeScript.hasFlag((this.asts[this.top - 1]).modFlags, TypeScript.ModuleFlags.IsWholeFile); + } + + public isBodyOfScript(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Script && + (this.asts[this.top - 1]).bod == this.asts[this.top - 0]; + } + + public isBodyOfSwitch(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Switch && + (this.asts[this.top - 1]).caseList == this.asts[this.top - 0]; + } + + public isBodyOfModule(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.ModuleDeclaration && + (this.asts[this.top - 1]).members == this.asts[this.top - 0]; + } + + public isBodyOfClass(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.ClassDeclaration && + (this.asts[this.top - 1]).members == this.asts[this.top - 0]; + } + + public isBodyOfFunction(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.FuncDecl && + (this.asts[this.top - 1]).bod == this.asts[this.top - 0]; + } + + public isBodyOfInterface(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.InterfaceDeclaration && + (this.asts[this.top - 1]).members == this.asts[this.top - 0]; + } + + public isBodyOfBlock(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Block && + (this.asts[this.top - 1]).statements == this.asts[this.top - 0]; + } + + public isBodyOfFor(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.For && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isBodyOfCase(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Case && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isBodyOfTry(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Try && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isBodyOfCatch(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Catch && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isBodyOfDoWhile(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.DoWhile && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isBodyOfWhile(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.While && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isBodyOfForIn(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.ForIn && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isBodyOfWith(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.With && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isBodyOfFinally(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Finally && + (this.asts[this.top - 1]).body == this.asts[this.top - 0]; + } + + public isCaseOfSwitch(): boolean { + return this.count() >= 3 && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.Switch && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + (this.asts[this.top - 2]).caseList == this.asts[this.top - 1]; + } + + public isDefaultCaseOfSwitch(): boolean { + return this.count() >= 3 && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.Switch && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + (this.asts[this.top - 2]).caseList == this.asts[this.top - 1] && + (this.asts[this.top - 2]).defaultCase == this.asts[this.top - 0]; + } + + public isListOfObjectLit(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.ObjectLit && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && + (this.asts[this.top - 1]).operand == this.asts[this.top - 0]; + } + + public isBodyOfObjectLit(): boolean { + return this.isListOfObjectLit(); + } + + public isEmptyListOfObjectLit(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.ObjectLit && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && + (this.asts[this.top - 1]).operand == this.asts[this.top - 0] && + (this.asts[this.top - 0]).members.length == 0; + } + + public isMemberOfObjectLit(): boolean { + return this.count() >= 3 && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.ObjectLit && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.Member && + (this.asts[this.top - 2]).operand == this.asts[this.top - 1]; + } + + public isNameOfMemberOfObjectLit(): boolean { + return this.count() >= 4 && + this.asts[this.top - 3].nodeType === TypeScript.NodeType.ObjectLit && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.Name && + (this.asts[this.top - 3]).operand == this.asts[this.top - 2]; + } + + public isListOfArrayLit(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.ArrayLit && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && + (this.asts[this.top - 1]).operand == this.asts[this.top - 0]; + } + + public isTargetOfMember(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && + (this.asts[this.top - 1]).operand1 === this.asts[this.top - 0]; + } + + public isMemberOfMember(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && + (this.asts[this.top - 1]).operand2 === this.asts[this.top - 0]; + } + + public isItemOfList(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List; + //(this.asts[this.top - 1]).operand2 === this.asts[this.top - 0]; + } + + public isThenOfIf(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.If && + (this.asts[this.top - 1]).thenBod == this.asts[this.top - 0]; + } + + public isElseOfIf(): boolean { + return this.count() >= 2 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.If && + (this.asts[this.top - 1]).elseBod == this.asts[this.top - 0]; + } + + public isBodyOfDefaultCase(): boolean { + return this.isBodyOfCase(); + } + + public isSingleStatementList(): boolean { + return this.count() >= 1 && + this.asts[this.top].nodeType === TypeScript.NodeType.List && + (this.asts[this.top]).members.length === 1; + } + + public isArgumentListOfFunction(): boolean { + return this.count() >= 2 && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.FuncDecl && + (this.asts[this.top - 1]).arguments === this.asts[this.top - 0]; + } + + public isArgumentOfFunction(): boolean { + return this.count() >= 3 && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 2].nodeType === TypeScript.NodeType.FuncDecl && + (this.asts[this.top - 2]).arguments === this.asts[this.top - 1]; + } + + public isArgumentListOfCall(): boolean { + return this.count() >= 2 && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.Call && + (this.asts[this.top - 1]).arguments === this.asts[this.top - 0]; + } + + public isArgumentListOfNew(): boolean { + return this.count() >= 2 && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && + this.asts[this.top - 1].nodeType === TypeScript.NodeType.New && + (this.asts[this.top - 1]).arguments === this.asts[this.top - 0]; + } + + public isSynthesizedBlock(): boolean { + return this.count() >= 1 && + this.asts[this.top - 0].nodeType === TypeScript.NodeType.Block && + (this.asts[this.top - 0]).isStatementBlock === false; + } + } + + export function isValidAstNode(ast: TypeScript.ASTSpan): boolean { + if (ast === null) + return false; + + if (ast.minChar === -1 || ast.limChar === -1) + return false; + + return true; + } + + export class AstPathContext { + public path = new TypeScript.AstPath(); + } + + export enum GetAstPathOptions { + Default = 0, + EdgeInclusive = 1, + //We need this options dealing with an AST coming from an incomplete AST. For example: + // class foo { // r + // If we ask for the AST at the position after the "r" character, we won't see we are + // inside a comment, because the "class" AST node has a limChar corresponding to the position of + // the "{" character, meaning we don't traverse the tree down to the stmt list of the class, meaning + // we don't find the "precomment" attached to the errorneous empty stmt. + //TODO: It would be nice to be able to get rid of this. + DontPruneSearchBasedOnPosition = 1 << 1, + } + + /// + /// Return the stack of AST nodes containing "position" + /// + export function getAstPathToPosition(script: TypeScript.AST, pos: number, options = GetAstPathOptions.Default): TypeScript.AstPath { + var lookInComments = (comments: TypeScript.Comment[]) => { + if (comments && comments.length > 0) { + for (var i = 0; i < comments.length; i++) { + var minChar = comments[i].minChar; + var limChar = comments[i].limChar; + if (!comments[i].isBlockComment) { + limChar++; // For single line comments, include 1 more character (for the newline) + } + if (pos >= minChar && pos < limChar) { + ctx.path.push(comments[i]); + } + } + } + } + + var pre = function (cur: TypeScript.AST, parent: TypeScript.AST, walker: IAstWalker) { + if (isValidAstNode(cur)) { + + // Add "cur" to the stack if it contains our position + // For "identifier" nodes, we need a special case: A position equal to "limChar" is + // valid, since the position corresponds to a caret position (in between characters) + // For example: + // bar + // 0123 + // If "position == 3", the caret is at the "right" of the "r" character, which should be considered valid + var inclusive = + hasFlag(options, GetAstPathOptions.EdgeInclusive) || + cur.nodeType === TypeScript.NodeType.Name || + pos === script.limChar; // Special "EOF" case + + var minChar = cur.minChar; + var limChar = cur.limChar + (inclusive ? 1 : 0) + if (pos >= minChar && pos < limChar) { + + // TODO: Since AST is sometimes not correct wrt to position, only add "cur" if it's better + // than top of the stack. + var previous = ctx.path.ast(); + if (previous == null || (cur.minChar >= previous.minChar && cur.limChar <= previous.limChar)) { + ctx.path.push(cur); + } + else { + //logger.log("TODO: Ignoring node because minChar, limChar not better than previous node in stack"); + } + } + + // The AST walker skips comments, but we might be in one, so check the pre/post comments for this node manually + if (pos < limChar) { + lookInComments(cur.preComments); + } + if (pos >= minChar) { + lookInComments(cur.postComments); + } + + if (!hasFlag(options, GetAstPathOptions.DontPruneSearchBasedOnPosition)) { + // Don't go further down the tree if pos is outside of [minChar, limChar] + walker.options.goChildren = (minChar <= pos && pos <= limChar); + } + } + return cur; + } + + var ctx = new AstPathContext(); + TypeScript.getAstWalkerFactory().walk(script, pre, null, null, ctx); + return ctx.path; + } + + // + // Find a source text offset that is safe for lexing tokens at the given position. + // This is used when "position" might be inside a comment or string, etc. + // + export function getTokenizationOffset(script: TypeScript.Script, position: number): number { + var bestOffset = 0; + var pre = (cur: TypeScript.AST, parent: TypeScript.AST, walker: TypeScript.IAstWalker): TypeScript.AST => { + if (TypeScript.isValidAstNode(cur)) { + // Did we find a closer offset? + if (cur.minChar <= position) { + bestOffset = max(bestOffset, cur.minChar); + } + + // Stop the walk if this node is not related to "minChar" + if (cur.minChar > position || cur.limChar < bestOffset) { + walker.options.goChildren = false; + } + } + + return cur; + } + + TypeScript.getAstWalkerFactory().walk(script, pre); + return bestOffset; + } + + /// + /// Simple function to Walk an AST using a simple callback function. + /// + export function walkAST(ast: TypeScript.AST, callback: (path: AstPath, walker: TypeScript.IAstWalker) => void ): void { + var pre = function (cur: TypeScript.AST, parent: TypeScript.AST, walker: TypeScript.IAstWalker) { + var path: TypeScript.AstPath = walker.state; + path.push(cur); + callback(path, walker); + return cur; + } + var post = function (cur: TypeScript.AST, parent: TypeScript.AST, walker: TypeScript.IAstWalker) { + var path: TypeScript.AstPath = walker.state; + path.pop(); + return cur; + } + + var path = new AstPath(); + TypeScript.getAstWalkerFactory().walk(ast, pre, post, null, path); + } +} + + +//// [parserRealSource14.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +/// +var TypeScript; +(function (TypeScript) { + function lastOf(items) { + return (items === null || items.length === 0) ? null : items[items.length - 1]; + } + TypeScript.lastOf = lastOf; + function max(a, b) { + return a >= b ? a : b; + } + TypeScript.max = max; + function min(a, b) { + return a <= b ? a : b; + } + TypeScript.min = min; + // + // Helper class representing a path from a root ast node to a (grand)child ast node. + // This is helpful as our tree don't have parents. + // + var AstPath = (function () { + function AstPath() { + this.asts = []; + this.top = -1; + } + AstPath.reverseIndexOf = function (items, index) { + return (items === null || items.length <= index) ? null : items[items.length - index - 1]; + }; + AstPath.prototype.clone = function () { + var clone = new AstPath(); + clone.asts = this.asts.map(function (value) { + return value; + }); + clone.top = this.top; + return clone; + }; + AstPath.prototype.pop = function () { + var head = this.ast(); + this.up(); + while (this.asts.length > this.count()) { + this.asts.pop(); + } + return head; + }; + AstPath.prototype.push = function (ast) { + while (this.asts.length > this.count()) { + this.asts.pop(); + } + this.top = this.asts.length; + this.asts.push(ast); + }; + AstPath.prototype.up = function () { + if (this.top <= -1) + throw new Error("Invalid call to 'up'"); + this.top--; + }; + AstPath.prototype.down = function () { + if (this.top == this.ast.length - 1) + throw new Error("Invalid call to 'down'"); + this.top++; + }; + AstPath.prototype.nodeType = function () { + if (this.ast() == null) + return TypeScript.NodeType.None; + return this.ast().nodeType; + }; + AstPath.prototype.ast = function () { + return AstPath.reverseIndexOf(this.asts, this.asts.length - (this.top + 1)); + }; + AstPath.prototype.parent = function () { + return AstPath.reverseIndexOf(this.asts, this.asts.length - this.top); + }; + AstPath.prototype.count = function () { + return this.top + 1; + }; + AstPath.prototype.get = function (index) { + return this.asts[index]; + }; + AstPath.prototype.isNameOfClass = function () { + if (this.ast() === null || this.parent() === null) + return false; + return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.ClassDeclaration) && (this.parent().name === this.ast()); + }; + AstPath.prototype.isNameOfInterface = function () { + if (this.ast() === null || this.parent() === null) + return false; + return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.InterfaceDeclaration) && (this.parent().name === this.ast()); + }; + AstPath.prototype.isNameOfArgument = function () { + if (this.ast() === null || this.parent() === null) + return false; + return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.ArgDecl) && (this.parent().id === this.ast()); + }; + AstPath.prototype.isNameOfVariable = function () { + if (this.ast() === null || this.parent() === null) + return false; + return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.VarDecl) && (this.parent().id === this.ast()); + }; + AstPath.prototype.isNameOfModule = function () { + if (this.ast() === null || this.parent() === null) + return false; + return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.ModuleDeclaration) && (this.parent().name === this.ast()); + }; + AstPath.prototype.isNameOfFunction = function () { + if (this.ast() === null || this.parent() === null) + return false; + return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.FuncDecl) && (this.parent().name === this.ast()); + }; + AstPath.prototype.isChildOfScript = function () { + var ast = lastOf(this.asts); + return this.count() >= 3 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.Script; + }; + AstPath.prototype.isChildOfModule = function () { + var ast = lastOf(this.asts); + return this.count() >= 3 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.ModuleDeclaration; + }; + AstPath.prototype.isChildOfClass = function () { + var ast = lastOf(this.asts); + return this.count() >= 3 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.ClassDeclaration; + }; + AstPath.prototype.isArgumentOfClassConstructor = function () { + var ast = lastOf(this.asts); + return this.count() >= 5 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.FuncDecl && this.asts[this.top - 3].nodeType === TypeScript.NodeType.List && this.asts[this.top - 4].nodeType === TypeScript.NodeType.ClassDeclaration && (this.asts[this.top - 2].isConstructor) && (this.asts[this.top - 2].arguments === this.asts[this.top - 1]) && (this.asts[this.top - 4].constructorDecl === this.asts[this.top - 2]); + }; + AstPath.prototype.isChildOfInterface = function () { + var ast = lastOf(this.asts); + return this.count() >= 3 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.InterfaceDeclaration; + }; + AstPath.prototype.isTopLevelImplicitModule = function () { + return this.count() >= 1 && this.asts[this.top].nodeType === TypeScript.NodeType.ModuleDeclaration && TypeScript.hasFlag(this.asts[this.top].modFlags, TypeScript.ModuleFlags.IsWholeFile); + }; + AstPath.prototype.isBodyOfTopLevelImplicitModule = function () { + return this.count() >= 2 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ModuleDeclaration && this.asts[this.top - 1].members == this.asts[this.top - 0] && TypeScript.hasFlag(this.asts[this.top - 1].modFlags, TypeScript.ModuleFlags.IsWholeFile); + }; + AstPath.prototype.isBodyOfScript = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Script && this.asts[this.top - 1].bod == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfSwitch = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Switch && this.asts[this.top - 1].caseList == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfModule = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ModuleDeclaration && this.asts[this.top - 1].members == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfClass = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ClassDeclaration && this.asts[this.top - 1].members == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfFunction = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.FuncDecl && this.asts[this.top - 1].bod == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfInterface = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.InterfaceDeclaration && this.asts[this.top - 1].members == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfBlock = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Block && this.asts[this.top - 1].statements == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfFor = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.For && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfCase = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Case && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfTry = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Try && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfCatch = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Catch && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfDoWhile = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.DoWhile && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfWhile = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.While && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfForIn = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ForIn && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfWith = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.With && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfFinally = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Finally && this.asts[this.top - 1].body == this.asts[this.top - 0]; + }; + AstPath.prototype.isCaseOfSwitch = function () { + return this.count() >= 3 && this.asts[this.top - 2].nodeType === TypeScript.NodeType.Switch && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].caseList == this.asts[this.top - 1]; + }; + AstPath.prototype.isDefaultCaseOfSwitch = function () { + return this.count() >= 3 && this.asts[this.top - 2].nodeType === TypeScript.NodeType.Switch && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].caseList == this.asts[this.top - 1] && this.asts[this.top - 2].defaultCase == this.asts[this.top - 0]; + }; + AstPath.prototype.isListOfObjectLit = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ObjectLit && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].operand == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfObjectLit = function () { + return this.isListOfObjectLit(); + }; + AstPath.prototype.isEmptyListOfObjectLit = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ObjectLit && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].operand == this.asts[this.top - 0] && this.asts[this.top - 0].members.length == 0; + }; + AstPath.prototype.isMemberOfObjectLit = function () { + return this.count() >= 3 && this.asts[this.top - 2].nodeType === TypeScript.NodeType.ObjectLit && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 0].nodeType === TypeScript.NodeType.Member && this.asts[this.top - 2].operand == this.asts[this.top - 1]; + }; + AstPath.prototype.isNameOfMemberOfObjectLit = function () { + return this.count() >= 4 && this.asts[this.top - 3].nodeType === TypeScript.NodeType.ObjectLit && this.asts[this.top - 2].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && this.asts[this.top - 0].nodeType === TypeScript.NodeType.Name && this.asts[this.top - 3].operand == this.asts[this.top - 2]; + }; + AstPath.prototype.isListOfArrayLit = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ArrayLit && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].operand == this.asts[this.top - 0]; + }; + AstPath.prototype.isTargetOfMember = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && this.asts[this.top - 1].operand1 === this.asts[this.top - 0]; + }; + AstPath.prototype.isMemberOfMember = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && this.asts[this.top - 1].operand2 === this.asts[this.top - 0]; + }; + AstPath.prototype.isItemOfList = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List; + //(this.asts[this.top - 1]).operand2 === this.asts[this.top - 0]; + }; + AstPath.prototype.isThenOfIf = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.If && this.asts[this.top - 1].thenBod == this.asts[this.top - 0]; + }; + AstPath.prototype.isElseOfIf = function () { + return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.If && this.asts[this.top - 1].elseBod == this.asts[this.top - 0]; + }; + AstPath.prototype.isBodyOfDefaultCase = function () { + return this.isBodyOfCase(); + }; + AstPath.prototype.isSingleStatementList = function () { + return this.count() >= 1 && this.asts[this.top].nodeType === TypeScript.NodeType.List && this.asts[this.top].members.length === 1; + }; + AstPath.prototype.isArgumentListOfFunction = function () { + return this.count() >= 2 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.FuncDecl && this.asts[this.top - 1].arguments === this.asts[this.top - 0]; + }; + AstPath.prototype.isArgumentOfFunction = function () { + return this.count() >= 3 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.FuncDecl && this.asts[this.top - 2].arguments === this.asts[this.top - 1]; + }; + AstPath.prototype.isArgumentListOfCall = function () { + return this.count() >= 2 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Call && this.asts[this.top - 1].arguments === this.asts[this.top - 0]; + }; + AstPath.prototype.isArgumentListOfNew = function () { + return this.count() >= 2 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.New && this.asts[this.top - 1].arguments === this.asts[this.top - 0]; + }; + AstPath.prototype.isSynthesizedBlock = function () { + return this.count() >= 1 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.Block && this.asts[this.top - 0].isStatementBlock === false; + }; + return AstPath; + })(); + TypeScript.AstPath = AstPath; + function isValidAstNode(ast) { + if (ast === null) + return false; + if (ast.minChar === -1 || ast.limChar === -1) + return false; + return true; + } + TypeScript.isValidAstNode = isValidAstNode; + var AstPathContext = (function () { + function AstPathContext() { + this.path = new TypeScript.AstPath(); + } + return AstPathContext; + })(); + TypeScript.AstPathContext = AstPathContext; + (function (GetAstPathOptions) { + GetAstPathOptions[GetAstPathOptions["Default"] = 0] = "Default"; + GetAstPathOptions[GetAstPathOptions["EdgeInclusive"] = 1] = "EdgeInclusive"; + //We need this options dealing with an AST coming from an incomplete AST. For example: + // class foo { // r + // If we ask for the AST at the position after the "r" character, we won't see we are + // inside a comment, because the "class" AST node has a limChar corresponding to the position of + // the "{" character, meaning we don't traverse the tree down to the stmt list of the class, meaning + // we don't find the "precomment" attached to the errorneous empty stmt. + //TODO: It would be nice to be able to get rid of this. + GetAstPathOptions[GetAstPathOptions["DontPruneSearchBasedOnPosition"] = 1 << 1] = "DontPruneSearchBasedOnPosition"; + })(TypeScript.GetAstPathOptions || (TypeScript.GetAstPathOptions = {})); + var GetAstPathOptions = TypeScript.GetAstPathOptions; + /// + /// Return the stack of AST nodes containing "position" + /// + function getAstPathToPosition(script, pos, options) { + if (options === void 0) { options = 0 /* Default */; } + var lookInComments = function (comments) { + if (comments && comments.length > 0) { + for (var i = 0; i < comments.length; i++) { + var minChar = comments[i].minChar; + var limChar = comments[i].limChar; + if (!comments[i].isBlockComment) { + limChar++; // For single line comments, include 1 more character (for the newline) + } + if (pos >= minChar && pos < limChar) { + ctx.path.push(comments[i]); + } + } + } + }; + var pre = function (cur, parent, walker) { + if (isValidAstNode(cur)) { + // Add "cur" to the stack if it contains our position + // For "identifier" nodes, we need a special case: A position equal to "limChar" is + // valid, since the position corresponds to a caret position (in between characters) + // For example: + // bar + // 0123 + // If "position == 3", the caret is at the "right" of the "r" character, which should be considered valid + var inclusive = hasFlag(options, 1 /* EdgeInclusive */) || cur.nodeType === TypeScript.NodeType.Name || pos === script.limChar; // Special "EOF" case + var minChar = cur.minChar; + var limChar = cur.limChar + (inclusive ? 1 : 0); + if (pos >= minChar && pos < limChar) { + // TODO: Since AST is sometimes not correct wrt to position, only add "cur" if it's better + // than top of the stack. + var previous = ctx.path.ast(); + if (previous == null || (cur.minChar >= previous.minChar && cur.limChar <= previous.limChar)) { + ctx.path.push(cur); + } + else { + } + } + // The AST walker skips comments, but we might be in one, so check the pre/post comments for this node manually + if (pos < limChar) { + lookInComments(cur.preComments); + } + if (pos >= minChar) { + lookInComments(cur.postComments); + } + if (!hasFlag(options, GetAstPathOptions.DontPruneSearchBasedOnPosition)) { + // Don't go further down the tree if pos is outside of [minChar, limChar] + walker.options.goChildren = (minChar <= pos && pos <= limChar); + } + } + return cur; + }; + var ctx = new AstPathContext(); + TypeScript.getAstWalkerFactory().walk(script, pre, null, null, ctx); + return ctx.path; + } + TypeScript.getAstPathToPosition = getAstPathToPosition; + // + // Find a source text offset that is safe for lexing tokens at the given position. + // This is used when "position" might be inside a comment or string, etc. + // + function getTokenizationOffset(script, position) { + var bestOffset = 0; + var pre = function (cur, parent, walker) { + if (TypeScript.isValidAstNode(cur)) { + // Did we find a closer offset? + if (cur.minChar <= position) { + bestOffset = max(bestOffset, cur.minChar); + } + // Stop the walk if this node is not related to "minChar" + if (cur.minChar > position || cur.limChar < bestOffset) { + walker.options.goChildren = false; + } + } + return cur; + }; + TypeScript.getAstWalkerFactory().walk(script, pre); + return bestOffset; + } + TypeScript.getTokenizationOffset = getTokenizationOffset; + /// + /// Simple function to Walk an AST using a simple callback function. + /// + function walkAST(ast, callback) { + var pre = function (cur, parent, walker) { + var path = walker.state; + path.push(cur); + callback(path, walker); + return cur; + }; + var post = function (cur, parent, walker) { + var path = walker.state; + path.pop(); + return cur; + }; + var path = new AstPath(); + TypeScript.getAstWalkerFactory().walk(ast, pre, post, null, path); + } + TypeScript.walkAST = walkAST; +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource2.js b/tests/baselines/reference/parserRealSource2.js new file mode 100644 index 00000000000..0dbe7dfef40 --- /dev/null +++ b/tests/baselines/reference/parserRealSource2.js @@ -0,0 +1,534 @@ +//// [parserRealSource2.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + + export function hasFlag(val: number, flag: number) { + return (val & flag) != 0; + } + + export enum ErrorRecoverySet { + None = 0, + Comma = 1, // Comma + SColon = 1 << 1, // SColon + Asg = 1 << 2, // Asg + BinOp = 1 << 3, // Lsh, Rsh, Rs2, Le, Ge, INSTANCEOF, EQ, NE, Eqv, NEqv, LogAnd, LogOr, AsgMul, AsgDiv + // AsgMod, AsgAdd, AsgSub, AsgLsh, AsgRsh, AsgRs2, AsgAnd, AsgXor, AsgOr, QMark, Mult, Div, + // Pct, GT, LT, And, Xor, Or + RBrack = 1 << 4, // RBrack + RCurly = 1 << 5, // RCurly + RParen = 1 << 6, // RParen + Dot = 1 << 7, // Dot + Colon = 1 << 8, // Colon + PrimType = 1 << 9, // number, string, boolean + AddOp = 1 << 10, // Add, Sub + LCurly = 1 << 11, // LCurly + PreOp = 1 << 12, // Tilde, Bang, Inc, Dec + RegExp = 1 << 13, // RegExp + LParen = 1 << 14, // LParen + LBrack = 1 << 15, // LBrack + Scope = 1 << 16, // Scope + In = 1 << 17, // IN + SCase = 1 << 18, // CASE, DEFAULT + Else = 1 << 19, // ELSE + Catch = 1 << 20, // CATCH, FINALLY + Var = 1 << 21, // + Stmt = 1 << 22, // BREAK, RETURN, THROW, DEBUGGER, FOR, SWITCH, DO, IF, TRY, WITH + While = 1 << 23, // WHILE + ID = 1 << 24, // ID + Prefix = 1 << 25, // VOID, DELETE, TYPEOF, AWAIT + Literal = 1 << 26, // IntCon, FltCon, StrCon + RLit = 1 << 27, // THIS, TRUE, FALSE, NULL + Func = 1 << 28, // FUNCTION + EOF = 1 << 29, // EOF + + // REVIEW: Name this something clearer. + TypeScriptS = 1 << 30, // PROPERTY, PRIVATE, STATIC, INTERFACE, CLASS, MODULE, EXPORT, IMPORT + ExprStart = SColon | AddOp | LCurly | PreOp | RegExp | LParen | LBrack | ID | Prefix | RLit | Func | Literal, + StmtStart = ExprStart | SColon | Var | Stmt | While | TypeScriptS, + Postfix = Dot | LParen | LBrack, + } + + export enum AllowedElements { + None = 0, + ModuleDeclarations = 1 << 2, + ClassDeclarations = 1 << 3, + InterfaceDeclarations = 1 << 4, + AmbientDeclarations = 1 << 10, + Properties = 1 << 11, + + Global = ModuleDeclarations | ClassDeclarations | InterfaceDeclarations | AmbientDeclarations, + QuickParse = Global | Properties, + } + + export enum Modifiers { + None = 0, + Private = 1, + Public = 1 << 1, + Readonly = 1 << 2, + Ambient = 1 << 3, + Exported = 1 << 4, + Getter = 1 << 5, + Setter = 1 << 6, + Static = 1 << 7, + } + + export enum ASTFlags { + None = 0, + ExplicitSemicolon = 1, // statment terminated by an explicit semicolon + AutomaticSemicolon = 1 << 1, // statment terminated by an automatic semicolon + Writeable = 1 << 2, // node is lhs that can be modified + Error = 1 << 3, // node has an error + DotLHSPartial = 1 << 4, // node is the lhs of an incomplete dot expr at cursor + DotLHS = 1 << 5, // node is the lhs of a dot expr + IsStatement = 1 << 6, // node is a statement + StrictMode = 1 << 7, // node is in the strict mode environment + PossibleOptionalParameter = 1 << 8, + ClassBaseConstructorCall = 1 << 9, + OptionalName = 1 << 10, + // REVIEW: This flag is to mark lambda nodes to note that the LParen of an expression has already been matched in the lambda header. + // The flag is used to communicate this piece of information to the calling parseTerm, which intern will remove it. + // Once we have a better way to associate information with nodes, this flag should not be used. + SkipNextRParen = 1 << 11, + } + + export enum DeclFlags { + None = 0, + Exported = 1, + Private = 1 << 1, + Public = 1 << 2, + Ambient = 1 << 3, + Static = 1 << 4, + LocalStatic = 1 << 5, + GetAccessor = 1 << 6, + SetAccessor = 1 << 7, + } + + export enum ModuleFlags { + None = 0, + Exported = 1, + Private = 1 << 1, + Public = 1 << 2, + Ambient = 1 << 3, + Static = 1 << 4, + LocalStatic = 1 << 5, + GetAccessor = 1 << 6, + SetAccessor = 1 << 7, + IsEnum = 1 << 8, + ShouldEmitModuleDecl = 1 << 9, + IsWholeFile = 1 << 10, + IsDynamic = 1 << 11, + MustCaptureThis = 1 << 12, + } + + export enum SymbolFlags { + None = 0, + Exported = 1, + Private = 1 << 1, + Public = 1 << 2, + Ambient = 1 << 3, + Static = 1 << 4, + LocalStatic = 1 << 5, + GetAccessor = 1 << 6, + SetAccessor = 1 << 7, + Property = 1 << 8, + Readonly = 1 << 9, + ModuleMember = 1 << 10, + InterfaceMember = 1 << 11, + ClassMember = 1 << 12, + BuiltIn = 1 << 13, + TypeSetDuringScopeAssignment = 1 << 14, + Constant = 1 << 15, + Optional = 1 << 16, + RecursivelyReferenced = 1 << 17, + Bound = 1 << 18, + CompilerGenerated = 1 << 19, + } + + export enum VarFlags { + None = 0, + Exported = 1, + Private = 1 << 1, + Public = 1 << 2, + Ambient = 1 << 3, + Static = 1 << 4, + LocalStatic = 1 << 5, + GetAccessor = 1 << 6, + SetAccessor = 1 << 7, + AutoInit = 1 << 8, + Property = 1 << 9, + Readonly = 1 << 10, + Class = 1 << 11, + ClassProperty = 1 << 12, + ClassBodyProperty = 1 << 13, + ClassConstructorProperty = 1 << 14, + ClassSuperMustBeFirstCallInConstructor = 1 << 15, + Constant = 1 << 16, + MustCaptureThis = 1 << 17, + } + + export enum FncFlags { + None = 0, + Exported = 1, + Private = 1 << 1, + Public = 1 << 2, + Ambient = 1 << 3, + Static = 1 << 4, + LocalStatic = 1 << 5, + GetAccessor = 1 << 6, + SetAccessor = 1 << 7, + Definition = 1 << 8, + Signature = 1 << 9, + Method = 1 << 10, + HasReturnExpression = 1 << 11, + CallMember = 1 << 12, + ConstructMember = 1 << 13, + HasSelfReference = 1 << 14, + IsFatArrowFunction = 1 << 15, + IndexerMember = 1 << 16, + IsFunctionExpression = 1 << 17, + ClassMethod = 1 << 18, + ClassPropertyMethodExported = 1 << 19, + } + + export enum SignatureFlags { + None = 0, + IsIndexer = 1, + IsStringIndexer = 1 << 1, + IsNumberIndexer = 1 << 2, + } + + export function ToDeclFlags(fncFlags: FncFlags) : DeclFlags; + export function ToDeclFlags(varFlags: VarFlags) : DeclFlags; + export function ToDeclFlags(symFlags: SymbolFlags): DeclFlags; + export function ToDeclFlags(moduleFlags: ModuleFlags): DeclFlags; + export function ToDeclFlags(fncOrVarOrSymbolOrModuleFlags: any) { + return fncOrVarOrSymbolOrModuleFlags; + } + + export enum TypeFlags { + None = 0, + HasImplementation = 1, + HasSelfReference = 1 << 1, + MergeResult = 1 << 2, + IsEnum = 1 << 3, + BuildingName = 1 << 4, + HasBaseType = 1 << 5, + HasBaseTypeOfObject = 1 << 6, + IsClass = 1 << 7, + } + + export enum TypeRelationshipFlags { + SuccessfulComparison = 0, + SourceIsNullTargetIsVoidOrUndefined = 1, + RequiredPropertyIsMissing = 1 << 1, + IncompatibleSignatures = 1 << 2, + SourceSignatureHasTooManyParameters = 3, + IncompatibleReturnTypes = 1 << 4, + IncompatiblePropertyTypes = 1 << 5, + IncompatibleParameterTypes = 1 << 6, + } + + export enum CodeGenTarget { + ES3 = 0, + ES5 = 1, + } + + export enum ModuleGenTarget { + Synchronous = 0, + Asynchronous = 1, + Local = 1 << 1, + } + + // Compiler defaults to generating ES5-compliant code for + // - getters and setters + export var codeGenTarget: CodeGenTarget = CodeGenTarget.ES3; + + export var moduleGenTarget: ModuleGenTarget = ModuleGenTarget.Synchronous; + + export var optimizeModuleCodeGen = true; + + export function flagsToString(e, flags: number): string { + var builder = ""; + for (var i = 1; i < (1 << 31) ; i = i << 1) { + if ((flags & i) != 0) { + for (var k in e) { + if (e[k] == i) { + if (builder.length > 0) { + builder += "|"; + } + builder += k; + break; + } + } + } + } + return builder; + } + +} + +//// [parserRealSource2.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +/// +var TypeScript; +(function (TypeScript) { + function hasFlag(val, flag) { + return (val & flag) != 0; + } + TypeScript.hasFlag = hasFlag; + (function (ErrorRecoverySet) { + ErrorRecoverySet[ErrorRecoverySet["None"] = 0] = "None"; + ErrorRecoverySet[ErrorRecoverySet["Comma"] = 1] = "Comma"; + ErrorRecoverySet[ErrorRecoverySet["SColon"] = 1 << 1] = "SColon"; + ErrorRecoverySet[ErrorRecoverySet["Asg"] = 1 << 2] = "Asg"; + ErrorRecoverySet[ErrorRecoverySet["BinOp"] = 1 << 3] = "BinOp"; + // AsgMod, AsgAdd, AsgSub, AsgLsh, AsgRsh, AsgRs2, AsgAnd, AsgXor, AsgOr, QMark, Mult, Div, + // Pct, GT, LT, And, Xor, Or + ErrorRecoverySet[ErrorRecoverySet["RBrack"] = 1 << 4] = "RBrack"; + ErrorRecoverySet[ErrorRecoverySet["RCurly"] = 1 << 5] = "RCurly"; + ErrorRecoverySet[ErrorRecoverySet["RParen"] = 1 << 6] = "RParen"; + ErrorRecoverySet[ErrorRecoverySet["Dot"] = 1 << 7] = "Dot"; + ErrorRecoverySet[ErrorRecoverySet["Colon"] = 1 << 8] = "Colon"; + ErrorRecoverySet[ErrorRecoverySet["PrimType"] = 1 << 9] = "PrimType"; + ErrorRecoverySet[ErrorRecoverySet["AddOp"] = 1 << 10] = "AddOp"; + ErrorRecoverySet[ErrorRecoverySet["LCurly"] = 1 << 11] = "LCurly"; + ErrorRecoverySet[ErrorRecoverySet["PreOp"] = 1 << 12] = "PreOp"; + ErrorRecoverySet[ErrorRecoverySet["RegExp"] = 1 << 13] = "RegExp"; + ErrorRecoverySet[ErrorRecoverySet["LParen"] = 1 << 14] = "LParen"; + ErrorRecoverySet[ErrorRecoverySet["LBrack"] = 1 << 15] = "LBrack"; + ErrorRecoverySet[ErrorRecoverySet["Scope"] = 1 << 16] = "Scope"; + ErrorRecoverySet[ErrorRecoverySet["In"] = 1 << 17] = "In"; + ErrorRecoverySet[ErrorRecoverySet["SCase"] = 1 << 18] = "SCase"; + ErrorRecoverySet[ErrorRecoverySet["Else"] = 1 << 19] = "Else"; + ErrorRecoverySet[ErrorRecoverySet["Catch"] = 1 << 20] = "Catch"; + ErrorRecoverySet[ErrorRecoverySet["Var"] = 1 << 21] = "Var"; + ErrorRecoverySet[ErrorRecoverySet["Stmt"] = 1 << 22] = "Stmt"; + ErrorRecoverySet[ErrorRecoverySet["While"] = 1 << 23] = "While"; + ErrorRecoverySet[ErrorRecoverySet["ID"] = 1 << 24] = "ID"; + ErrorRecoverySet[ErrorRecoverySet["Prefix"] = 1 << 25] = "Prefix"; + ErrorRecoverySet[ErrorRecoverySet["Literal"] = 1 << 26] = "Literal"; + ErrorRecoverySet[ErrorRecoverySet["RLit"] = 1 << 27] = "RLit"; + ErrorRecoverySet[ErrorRecoverySet["Func"] = 1 << 28] = "Func"; + ErrorRecoverySet[ErrorRecoverySet["EOF"] = 1 << 29] = "EOF"; + // REVIEW: Name this something clearer. + ErrorRecoverySet[ErrorRecoverySet["TypeScriptS"] = 1 << 30] = "TypeScriptS"; + ErrorRecoverySet[ErrorRecoverySet["ExprStart"] = ErrorRecoverySet.SColon | ErrorRecoverySet.AddOp | ErrorRecoverySet.LCurly | ErrorRecoverySet.PreOp | ErrorRecoverySet.RegExp | ErrorRecoverySet.LParen | ErrorRecoverySet.LBrack | ErrorRecoverySet.ID | ErrorRecoverySet.Prefix | ErrorRecoverySet.RLit | ErrorRecoverySet.Func | ErrorRecoverySet.Literal] = "ExprStart"; + ErrorRecoverySet[ErrorRecoverySet["StmtStart"] = ErrorRecoverySet.ExprStart | ErrorRecoverySet.SColon | ErrorRecoverySet.Var | ErrorRecoverySet.Stmt | ErrorRecoverySet.While | ErrorRecoverySet.TypeScriptS] = "StmtStart"; + ErrorRecoverySet[ErrorRecoverySet["Postfix"] = ErrorRecoverySet.Dot | ErrorRecoverySet.LParen | ErrorRecoverySet.LBrack] = "Postfix"; + })(TypeScript.ErrorRecoverySet || (TypeScript.ErrorRecoverySet = {})); + var ErrorRecoverySet = TypeScript.ErrorRecoverySet; + (function (AllowedElements) { + AllowedElements[AllowedElements["None"] = 0] = "None"; + AllowedElements[AllowedElements["ModuleDeclarations"] = 1 << 2] = "ModuleDeclarations"; + AllowedElements[AllowedElements["ClassDeclarations"] = 1 << 3] = "ClassDeclarations"; + AllowedElements[AllowedElements["InterfaceDeclarations"] = 1 << 4] = "InterfaceDeclarations"; + AllowedElements[AllowedElements["AmbientDeclarations"] = 1 << 10] = "AmbientDeclarations"; + AllowedElements[AllowedElements["Properties"] = 1 << 11] = "Properties"; + AllowedElements[AllowedElements["Global"] = AllowedElements.ModuleDeclarations | AllowedElements.ClassDeclarations | AllowedElements.InterfaceDeclarations | AllowedElements.AmbientDeclarations] = "Global"; + AllowedElements[AllowedElements["QuickParse"] = AllowedElements.Global | AllowedElements.Properties] = "QuickParse"; + })(TypeScript.AllowedElements || (TypeScript.AllowedElements = {})); + var AllowedElements = TypeScript.AllowedElements; + (function (Modifiers) { + Modifiers[Modifiers["None"] = 0] = "None"; + Modifiers[Modifiers["Private"] = 1] = "Private"; + Modifiers[Modifiers["Public"] = 1 << 1] = "Public"; + Modifiers[Modifiers["Readonly"] = 1 << 2] = "Readonly"; + Modifiers[Modifiers["Ambient"] = 1 << 3] = "Ambient"; + Modifiers[Modifiers["Exported"] = 1 << 4] = "Exported"; + Modifiers[Modifiers["Getter"] = 1 << 5] = "Getter"; + Modifiers[Modifiers["Setter"] = 1 << 6] = "Setter"; + Modifiers[Modifiers["Static"] = 1 << 7] = "Static"; + })(TypeScript.Modifiers || (TypeScript.Modifiers = {})); + var Modifiers = TypeScript.Modifiers; + (function (ASTFlags) { + ASTFlags[ASTFlags["None"] = 0] = "None"; + ASTFlags[ASTFlags["ExplicitSemicolon"] = 1] = "ExplicitSemicolon"; + ASTFlags[ASTFlags["AutomaticSemicolon"] = 1 << 1] = "AutomaticSemicolon"; + ASTFlags[ASTFlags["Writeable"] = 1 << 2] = "Writeable"; + ASTFlags[ASTFlags["Error"] = 1 << 3] = "Error"; + ASTFlags[ASTFlags["DotLHSPartial"] = 1 << 4] = "DotLHSPartial"; + ASTFlags[ASTFlags["DotLHS"] = 1 << 5] = "DotLHS"; + ASTFlags[ASTFlags["IsStatement"] = 1 << 6] = "IsStatement"; + ASTFlags[ASTFlags["StrictMode"] = 1 << 7] = "StrictMode"; + ASTFlags[ASTFlags["PossibleOptionalParameter"] = 1 << 8] = "PossibleOptionalParameter"; + ASTFlags[ASTFlags["ClassBaseConstructorCall"] = 1 << 9] = "ClassBaseConstructorCall"; + ASTFlags[ASTFlags["OptionalName"] = 1 << 10] = "OptionalName"; + // REVIEW: This flag is to mark lambda nodes to note that the LParen of an expression has already been matched in the lambda header. + // The flag is used to communicate this piece of information to the calling parseTerm, which intern will remove it. + // Once we have a better way to associate information with nodes, this flag should not be used. + ASTFlags[ASTFlags["SkipNextRParen"] = 1 << 11] = "SkipNextRParen"; + })(TypeScript.ASTFlags || (TypeScript.ASTFlags = {})); + var ASTFlags = TypeScript.ASTFlags; + (function (DeclFlags) { + DeclFlags[DeclFlags["None"] = 0] = "None"; + DeclFlags[DeclFlags["Exported"] = 1] = "Exported"; + DeclFlags[DeclFlags["Private"] = 1 << 1] = "Private"; + DeclFlags[DeclFlags["Public"] = 1 << 2] = "Public"; + DeclFlags[DeclFlags["Ambient"] = 1 << 3] = "Ambient"; + DeclFlags[DeclFlags["Static"] = 1 << 4] = "Static"; + DeclFlags[DeclFlags["LocalStatic"] = 1 << 5] = "LocalStatic"; + DeclFlags[DeclFlags["GetAccessor"] = 1 << 6] = "GetAccessor"; + DeclFlags[DeclFlags["SetAccessor"] = 1 << 7] = "SetAccessor"; + })(TypeScript.DeclFlags || (TypeScript.DeclFlags = {})); + var DeclFlags = TypeScript.DeclFlags; + (function (ModuleFlags) { + ModuleFlags[ModuleFlags["None"] = 0] = "None"; + ModuleFlags[ModuleFlags["Exported"] = 1] = "Exported"; + ModuleFlags[ModuleFlags["Private"] = 1 << 1] = "Private"; + ModuleFlags[ModuleFlags["Public"] = 1 << 2] = "Public"; + ModuleFlags[ModuleFlags["Ambient"] = 1 << 3] = "Ambient"; + ModuleFlags[ModuleFlags["Static"] = 1 << 4] = "Static"; + ModuleFlags[ModuleFlags["LocalStatic"] = 1 << 5] = "LocalStatic"; + ModuleFlags[ModuleFlags["GetAccessor"] = 1 << 6] = "GetAccessor"; + ModuleFlags[ModuleFlags["SetAccessor"] = 1 << 7] = "SetAccessor"; + ModuleFlags[ModuleFlags["IsEnum"] = 1 << 8] = "IsEnum"; + ModuleFlags[ModuleFlags["ShouldEmitModuleDecl"] = 1 << 9] = "ShouldEmitModuleDecl"; + ModuleFlags[ModuleFlags["IsWholeFile"] = 1 << 10] = "IsWholeFile"; + ModuleFlags[ModuleFlags["IsDynamic"] = 1 << 11] = "IsDynamic"; + ModuleFlags[ModuleFlags["MustCaptureThis"] = 1 << 12] = "MustCaptureThis"; + })(TypeScript.ModuleFlags || (TypeScript.ModuleFlags = {})); + var ModuleFlags = TypeScript.ModuleFlags; + (function (SymbolFlags) { + SymbolFlags[SymbolFlags["None"] = 0] = "None"; + SymbolFlags[SymbolFlags["Exported"] = 1] = "Exported"; + SymbolFlags[SymbolFlags["Private"] = 1 << 1] = "Private"; + SymbolFlags[SymbolFlags["Public"] = 1 << 2] = "Public"; + SymbolFlags[SymbolFlags["Ambient"] = 1 << 3] = "Ambient"; + SymbolFlags[SymbolFlags["Static"] = 1 << 4] = "Static"; + SymbolFlags[SymbolFlags["LocalStatic"] = 1 << 5] = "LocalStatic"; + SymbolFlags[SymbolFlags["GetAccessor"] = 1 << 6] = "GetAccessor"; + SymbolFlags[SymbolFlags["SetAccessor"] = 1 << 7] = "SetAccessor"; + SymbolFlags[SymbolFlags["Property"] = 1 << 8] = "Property"; + SymbolFlags[SymbolFlags["Readonly"] = 1 << 9] = "Readonly"; + SymbolFlags[SymbolFlags["ModuleMember"] = 1 << 10] = "ModuleMember"; + SymbolFlags[SymbolFlags["InterfaceMember"] = 1 << 11] = "InterfaceMember"; + SymbolFlags[SymbolFlags["ClassMember"] = 1 << 12] = "ClassMember"; + SymbolFlags[SymbolFlags["BuiltIn"] = 1 << 13] = "BuiltIn"; + SymbolFlags[SymbolFlags["TypeSetDuringScopeAssignment"] = 1 << 14] = "TypeSetDuringScopeAssignment"; + SymbolFlags[SymbolFlags["Constant"] = 1 << 15] = "Constant"; + SymbolFlags[SymbolFlags["Optional"] = 1 << 16] = "Optional"; + SymbolFlags[SymbolFlags["RecursivelyReferenced"] = 1 << 17] = "RecursivelyReferenced"; + SymbolFlags[SymbolFlags["Bound"] = 1 << 18] = "Bound"; + SymbolFlags[SymbolFlags["CompilerGenerated"] = 1 << 19] = "CompilerGenerated"; + })(TypeScript.SymbolFlags || (TypeScript.SymbolFlags = {})); + var SymbolFlags = TypeScript.SymbolFlags; + (function (VarFlags) { + VarFlags[VarFlags["None"] = 0] = "None"; + VarFlags[VarFlags["Exported"] = 1] = "Exported"; + VarFlags[VarFlags["Private"] = 1 << 1] = "Private"; + VarFlags[VarFlags["Public"] = 1 << 2] = "Public"; + VarFlags[VarFlags["Ambient"] = 1 << 3] = "Ambient"; + VarFlags[VarFlags["Static"] = 1 << 4] = "Static"; + VarFlags[VarFlags["LocalStatic"] = 1 << 5] = "LocalStatic"; + VarFlags[VarFlags["GetAccessor"] = 1 << 6] = "GetAccessor"; + VarFlags[VarFlags["SetAccessor"] = 1 << 7] = "SetAccessor"; + VarFlags[VarFlags["AutoInit"] = 1 << 8] = "AutoInit"; + VarFlags[VarFlags["Property"] = 1 << 9] = "Property"; + VarFlags[VarFlags["Readonly"] = 1 << 10] = "Readonly"; + VarFlags[VarFlags["Class"] = 1 << 11] = "Class"; + VarFlags[VarFlags["ClassProperty"] = 1 << 12] = "ClassProperty"; + VarFlags[VarFlags["ClassBodyProperty"] = 1 << 13] = "ClassBodyProperty"; + VarFlags[VarFlags["ClassConstructorProperty"] = 1 << 14] = "ClassConstructorProperty"; + VarFlags[VarFlags["ClassSuperMustBeFirstCallInConstructor"] = 1 << 15] = "ClassSuperMustBeFirstCallInConstructor"; + VarFlags[VarFlags["Constant"] = 1 << 16] = "Constant"; + VarFlags[VarFlags["MustCaptureThis"] = 1 << 17] = "MustCaptureThis"; + })(TypeScript.VarFlags || (TypeScript.VarFlags = {})); + var VarFlags = TypeScript.VarFlags; + (function (FncFlags) { + FncFlags[FncFlags["None"] = 0] = "None"; + FncFlags[FncFlags["Exported"] = 1] = "Exported"; + FncFlags[FncFlags["Private"] = 1 << 1] = "Private"; + FncFlags[FncFlags["Public"] = 1 << 2] = "Public"; + FncFlags[FncFlags["Ambient"] = 1 << 3] = "Ambient"; + FncFlags[FncFlags["Static"] = 1 << 4] = "Static"; + FncFlags[FncFlags["LocalStatic"] = 1 << 5] = "LocalStatic"; + FncFlags[FncFlags["GetAccessor"] = 1 << 6] = "GetAccessor"; + FncFlags[FncFlags["SetAccessor"] = 1 << 7] = "SetAccessor"; + FncFlags[FncFlags["Definition"] = 1 << 8] = "Definition"; + FncFlags[FncFlags["Signature"] = 1 << 9] = "Signature"; + FncFlags[FncFlags["Method"] = 1 << 10] = "Method"; + FncFlags[FncFlags["HasReturnExpression"] = 1 << 11] = "HasReturnExpression"; + FncFlags[FncFlags["CallMember"] = 1 << 12] = "CallMember"; + FncFlags[FncFlags["ConstructMember"] = 1 << 13] = "ConstructMember"; + FncFlags[FncFlags["HasSelfReference"] = 1 << 14] = "HasSelfReference"; + FncFlags[FncFlags["IsFatArrowFunction"] = 1 << 15] = "IsFatArrowFunction"; + FncFlags[FncFlags["IndexerMember"] = 1 << 16] = "IndexerMember"; + FncFlags[FncFlags["IsFunctionExpression"] = 1 << 17] = "IsFunctionExpression"; + FncFlags[FncFlags["ClassMethod"] = 1 << 18] = "ClassMethod"; + FncFlags[FncFlags["ClassPropertyMethodExported"] = 1 << 19] = "ClassPropertyMethodExported"; + })(TypeScript.FncFlags || (TypeScript.FncFlags = {})); + var FncFlags = TypeScript.FncFlags; + (function (SignatureFlags) { + SignatureFlags[SignatureFlags["None"] = 0] = "None"; + SignatureFlags[SignatureFlags["IsIndexer"] = 1] = "IsIndexer"; + SignatureFlags[SignatureFlags["IsStringIndexer"] = 1 << 1] = "IsStringIndexer"; + SignatureFlags[SignatureFlags["IsNumberIndexer"] = 1 << 2] = "IsNumberIndexer"; + })(TypeScript.SignatureFlags || (TypeScript.SignatureFlags = {})); + var SignatureFlags = TypeScript.SignatureFlags; + function ToDeclFlags(fncOrVarOrSymbolOrModuleFlags) { + return fncOrVarOrSymbolOrModuleFlags; + } + TypeScript.ToDeclFlags = ToDeclFlags; + (function (TypeFlags) { + TypeFlags[TypeFlags["None"] = 0] = "None"; + TypeFlags[TypeFlags["HasImplementation"] = 1] = "HasImplementation"; + TypeFlags[TypeFlags["HasSelfReference"] = 1 << 1] = "HasSelfReference"; + TypeFlags[TypeFlags["MergeResult"] = 1 << 2] = "MergeResult"; + TypeFlags[TypeFlags["IsEnum"] = 1 << 3] = "IsEnum"; + TypeFlags[TypeFlags["BuildingName"] = 1 << 4] = "BuildingName"; + TypeFlags[TypeFlags["HasBaseType"] = 1 << 5] = "HasBaseType"; + TypeFlags[TypeFlags["HasBaseTypeOfObject"] = 1 << 6] = "HasBaseTypeOfObject"; + TypeFlags[TypeFlags["IsClass"] = 1 << 7] = "IsClass"; + })(TypeScript.TypeFlags || (TypeScript.TypeFlags = {})); + var TypeFlags = TypeScript.TypeFlags; + (function (TypeRelationshipFlags) { + TypeRelationshipFlags[TypeRelationshipFlags["SuccessfulComparison"] = 0] = "SuccessfulComparison"; + TypeRelationshipFlags[TypeRelationshipFlags["SourceIsNullTargetIsVoidOrUndefined"] = 1] = "SourceIsNullTargetIsVoidOrUndefined"; + TypeRelationshipFlags[TypeRelationshipFlags["RequiredPropertyIsMissing"] = 1 << 1] = "RequiredPropertyIsMissing"; + TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleSignatures"] = 1 << 2] = "IncompatibleSignatures"; + TypeRelationshipFlags[TypeRelationshipFlags["SourceSignatureHasTooManyParameters"] = 3] = "SourceSignatureHasTooManyParameters"; + TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleReturnTypes"] = 1 << 4] = "IncompatibleReturnTypes"; + TypeRelationshipFlags[TypeRelationshipFlags["IncompatiblePropertyTypes"] = 1 << 5] = "IncompatiblePropertyTypes"; + TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleParameterTypes"] = 1 << 6] = "IncompatibleParameterTypes"; + })(TypeScript.TypeRelationshipFlags || (TypeScript.TypeRelationshipFlags = {})); + var TypeRelationshipFlags = TypeScript.TypeRelationshipFlags; + (function (CodeGenTarget) { + CodeGenTarget[CodeGenTarget["ES3"] = 0] = "ES3"; + CodeGenTarget[CodeGenTarget["ES5"] = 1] = "ES5"; + })(TypeScript.CodeGenTarget || (TypeScript.CodeGenTarget = {})); + var CodeGenTarget = TypeScript.CodeGenTarget; + (function (ModuleGenTarget) { + ModuleGenTarget[ModuleGenTarget["Synchronous"] = 0] = "Synchronous"; + ModuleGenTarget[ModuleGenTarget["Asynchronous"] = 1] = "Asynchronous"; + ModuleGenTarget[ModuleGenTarget["Local"] = 1 << 1] = "Local"; + })(TypeScript.ModuleGenTarget || (TypeScript.ModuleGenTarget = {})); + var ModuleGenTarget = TypeScript.ModuleGenTarget; + // Compiler defaults to generating ES5-compliant code for + // - getters and setters + TypeScript.codeGenTarget = 0 /* ES3 */; + TypeScript.moduleGenTarget = 0 /* Synchronous */; + TypeScript.optimizeModuleCodeGen = true; + function flagsToString(e, flags) { + var builder = ""; + for (var i = 1; i < (1 << 31); i = i << 1) { + if ((flags & i) != 0) { + for (var k in e) { + if (e[k] == i) { + if (builder.length > 0) { + builder += "|"; + } + builder += k; + break; + } + } + } + } + return builder; + } + TypeScript.flagsToString = flagsToString; +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource3.js b/tests/baselines/reference/parserRealSource3.js new file mode 100644 index 00000000000..cfe6800fcf5 --- /dev/null +++ b/tests/baselines/reference/parserRealSource3.js @@ -0,0 +1,241 @@ +//// [parserRealSource3.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + // Note: Any addition to the NodeType should also be supported with addition to AstWalkerDetailCallback + export enum NodeType { + None, + Empty, + EmptyExpr, + True, + False, + This, + Super, + QString, + Regex, + Null, + ArrayLit, + ObjectLit, + Void, + Comma, + Pos, + Neg, + Delete, + Await, + In, + Dot, + From, + Is, + InstOf, + Typeof, + NumberLit, + Name, + TypeRef, + Index, + Call, + New, + Asg, + AsgAdd, + AsgSub, + AsgDiv, + AsgMul, + AsgMod, + AsgAnd, + AsgXor, + AsgOr, + AsgLsh, + AsgRsh, + AsgRs2, + ConditionalExpression, + LogOr, + LogAnd, + Or, + Xor, + And, + Eq, + Ne, + Eqv, + NEqv, + Lt, + Le, + Gt, + Ge, + Add, + Sub, + Mul, + Div, + Mod, + Lsh, + Rsh, + Rs2, + Not, + LogNot, + IncPre, + DecPre, + IncPost, + DecPost, + TypeAssertion, + FuncDecl, + Member, + VarDecl, + ArgDecl, + Return, + Break, + Continue, + Throw, + For, + ForIn, + If, + While, + DoWhile, + Block, + Case, + Switch, + Try, + TryCatch, + TryFinally, + Finally, + Catch, + List, + Script, + ClassDeclaration, + InterfaceDeclaration, + ModuleDeclaration, + ImportDeclaration, + With, + Label, + LabeledStatement, + EBStart, + GotoEB, + EndCode, + Error, + Comment, + Debugger, + GeneralNode = FuncDecl, + LastAsg = AsgRs2, + } +} + +//// [parserRealSource3.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +/// +var TypeScript; +(function (TypeScript) { + // Note: Any addition to the NodeType should also be supported with addition to AstWalkerDetailCallback + (function (NodeType) { + NodeType[NodeType["None"] = 0] = "None"; + NodeType[NodeType["Empty"] = 1] = "Empty"; + NodeType[NodeType["EmptyExpr"] = 2] = "EmptyExpr"; + NodeType[NodeType["True"] = 3] = "True"; + NodeType[NodeType["False"] = 4] = "False"; + NodeType[NodeType["This"] = 5] = "This"; + NodeType[NodeType["Super"] = 6] = "Super"; + NodeType[NodeType["QString"] = 7] = "QString"; + NodeType[NodeType["Regex"] = 8] = "Regex"; + NodeType[NodeType["Null"] = 9] = "Null"; + NodeType[NodeType["ArrayLit"] = 10] = "ArrayLit"; + NodeType[NodeType["ObjectLit"] = 11] = "ObjectLit"; + NodeType[NodeType["Void"] = 12] = "Void"; + NodeType[NodeType["Comma"] = 13] = "Comma"; + NodeType[NodeType["Pos"] = 14] = "Pos"; + NodeType[NodeType["Neg"] = 15] = "Neg"; + NodeType[NodeType["Delete"] = 16] = "Delete"; + NodeType[NodeType["Await"] = 17] = "Await"; + NodeType[NodeType["In"] = 18] = "In"; + NodeType[NodeType["Dot"] = 19] = "Dot"; + NodeType[NodeType["From"] = 20] = "From"; + NodeType[NodeType["Is"] = 21] = "Is"; + NodeType[NodeType["InstOf"] = 22] = "InstOf"; + NodeType[NodeType["Typeof"] = 23] = "Typeof"; + NodeType[NodeType["NumberLit"] = 24] = "NumberLit"; + NodeType[NodeType["Name"] = 25] = "Name"; + NodeType[NodeType["TypeRef"] = 26] = "TypeRef"; + NodeType[NodeType["Index"] = 27] = "Index"; + NodeType[NodeType["Call"] = 28] = "Call"; + NodeType[NodeType["New"] = 29] = "New"; + NodeType[NodeType["Asg"] = 30] = "Asg"; + NodeType[NodeType["AsgAdd"] = 31] = "AsgAdd"; + NodeType[NodeType["AsgSub"] = 32] = "AsgSub"; + NodeType[NodeType["AsgDiv"] = 33] = "AsgDiv"; + NodeType[NodeType["AsgMul"] = 34] = "AsgMul"; + NodeType[NodeType["AsgMod"] = 35] = "AsgMod"; + NodeType[NodeType["AsgAnd"] = 36] = "AsgAnd"; + NodeType[NodeType["AsgXor"] = 37] = "AsgXor"; + NodeType[NodeType["AsgOr"] = 38] = "AsgOr"; + NodeType[NodeType["AsgLsh"] = 39] = "AsgLsh"; + NodeType[NodeType["AsgRsh"] = 40] = "AsgRsh"; + NodeType[NodeType["AsgRs2"] = 41] = "AsgRs2"; + NodeType[NodeType["ConditionalExpression"] = 42] = "ConditionalExpression"; + NodeType[NodeType["LogOr"] = 43] = "LogOr"; + NodeType[NodeType["LogAnd"] = 44] = "LogAnd"; + NodeType[NodeType["Or"] = 45] = "Or"; + NodeType[NodeType["Xor"] = 46] = "Xor"; + NodeType[NodeType["And"] = 47] = "And"; + NodeType[NodeType["Eq"] = 48] = "Eq"; + NodeType[NodeType["Ne"] = 49] = "Ne"; + NodeType[NodeType["Eqv"] = 50] = "Eqv"; + NodeType[NodeType["NEqv"] = 51] = "NEqv"; + NodeType[NodeType["Lt"] = 52] = "Lt"; + NodeType[NodeType["Le"] = 53] = "Le"; + NodeType[NodeType["Gt"] = 54] = "Gt"; + NodeType[NodeType["Ge"] = 55] = "Ge"; + NodeType[NodeType["Add"] = 56] = "Add"; + NodeType[NodeType["Sub"] = 57] = "Sub"; + NodeType[NodeType["Mul"] = 58] = "Mul"; + NodeType[NodeType["Div"] = 59] = "Div"; + NodeType[NodeType["Mod"] = 60] = "Mod"; + NodeType[NodeType["Lsh"] = 61] = "Lsh"; + NodeType[NodeType["Rsh"] = 62] = "Rsh"; + NodeType[NodeType["Rs2"] = 63] = "Rs2"; + NodeType[NodeType["Not"] = 64] = "Not"; + NodeType[NodeType["LogNot"] = 65] = "LogNot"; + NodeType[NodeType["IncPre"] = 66] = "IncPre"; + NodeType[NodeType["DecPre"] = 67] = "DecPre"; + NodeType[NodeType["IncPost"] = 68] = "IncPost"; + NodeType[NodeType["DecPost"] = 69] = "DecPost"; + NodeType[NodeType["TypeAssertion"] = 70] = "TypeAssertion"; + NodeType[NodeType["FuncDecl"] = 71] = "FuncDecl"; + NodeType[NodeType["Member"] = 72] = "Member"; + NodeType[NodeType["VarDecl"] = 73] = "VarDecl"; + NodeType[NodeType["ArgDecl"] = 74] = "ArgDecl"; + NodeType[NodeType["Return"] = 75] = "Return"; + NodeType[NodeType["Break"] = 76] = "Break"; + NodeType[NodeType["Continue"] = 77] = "Continue"; + NodeType[NodeType["Throw"] = 78] = "Throw"; + NodeType[NodeType["For"] = 79] = "For"; + NodeType[NodeType["ForIn"] = 80] = "ForIn"; + NodeType[NodeType["If"] = 81] = "If"; + NodeType[NodeType["While"] = 82] = "While"; + NodeType[NodeType["DoWhile"] = 83] = "DoWhile"; + NodeType[NodeType["Block"] = 84] = "Block"; + NodeType[NodeType["Case"] = 85] = "Case"; + NodeType[NodeType["Switch"] = 86] = "Switch"; + NodeType[NodeType["Try"] = 87] = "Try"; + NodeType[NodeType["TryCatch"] = 88] = "TryCatch"; + NodeType[NodeType["TryFinally"] = 89] = "TryFinally"; + NodeType[NodeType["Finally"] = 90] = "Finally"; + NodeType[NodeType["Catch"] = 91] = "Catch"; + NodeType[NodeType["List"] = 92] = "List"; + NodeType[NodeType["Script"] = 93] = "Script"; + NodeType[NodeType["ClassDeclaration"] = 94] = "ClassDeclaration"; + NodeType[NodeType["InterfaceDeclaration"] = 95] = "InterfaceDeclaration"; + NodeType[NodeType["ModuleDeclaration"] = 96] = "ModuleDeclaration"; + NodeType[NodeType["ImportDeclaration"] = 97] = "ImportDeclaration"; + NodeType[NodeType["With"] = 98] = "With"; + NodeType[NodeType["Label"] = 99] = "Label"; + NodeType[NodeType["LabeledStatement"] = 100] = "LabeledStatement"; + NodeType[NodeType["EBStart"] = 101] = "EBStart"; + NodeType[NodeType["GotoEB"] = 102] = "GotoEB"; + NodeType[NodeType["EndCode"] = 103] = "EndCode"; + NodeType[NodeType["Error"] = 104] = "Error"; + NodeType[NodeType["Comment"] = 105] = "Comment"; + NodeType[NodeType["Debugger"] = 106] = "Debugger"; + NodeType[NodeType["GeneralNode"] = NodeType.FuncDecl] = "GeneralNode"; + NodeType[NodeType["LastAsg"] = NodeType.AsgRs2] = "LastAsg"; + })(TypeScript.NodeType || (TypeScript.NodeType = {})); + var NodeType = TypeScript.NodeType; +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource4.js b/tests/baselines/reference/parserRealSource4.js new file mode 100644 index 00000000000..1d6ed0aaf13 --- /dev/null +++ b/tests/baselines/reference/parserRealSource4.js @@ -0,0 +1,568 @@ +//// [parserRealSource4.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + + export class BlockIntrinsics { + public prototype = undefined; + public toString = undefined; + public toLocaleString = undefined; + public valueOf = undefined; + public hasOwnProperty = undefined; + public propertyIsEnumerable = undefined; + public isPrototypeOf = undefined; + + constructor () { + // initialize the 'constructor' field + this["constructor"] = undefined; + } + } + + export interface IHashTable { + getAllKeys(): string[]; + add(key: string, data): boolean; + addOrUpdate(key: string, data): boolean; + map(fn: (k: string, v, c) => void , context): void; + every(fn: (k: string, v, c) => boolean, context): boolean; + some(fn: (k: string, v, c) => boolean, context): boolean; + count(): number; + lookup(key: string): any; + } + + export class StringHashTable implements IHashTable { + public itemCount = 0; + public table = ( new BlockIntrinsics()); + + public getAllKeys(): string[]{ + var result: string[] = []; + for (var k in this.table) { + if (this.table[k] != undefined) { + result[result.length] = k; + } + } + return result; + } + + public add(key: string, data): boolean { + if (this.table[key] != undefined) { + return false; + } + this.table[key] = data; + this.itemCount++; + return true; + } + + public addOrUpdate(key: string, data): boolean { + if (this.table[key] != undefined) { + this.table[key] = data; + return false; + } + this.table[key] = data; + this.itemCount++; + return true; + } + + public map(fn: (k: string, v, c) => void , context) { + for (var k in this.table) { + var data = this.table[k]; + if (data != undefined) { + fn(k, this.table[k], context); + } + } + } + + public every(fn: (k: string, v, c) => boolean, context) { + for (var k in this.table) { + var data = this.table[k]; + if (data != undefined) { + if (!fn(k, this.table[k], context)) { + return false; + } + } + } + return true; + } + + public some(fn: (k: string, v, c) => boolean, context) { + for (var k in this.table) { + var data = this.table[k]; + if (data != undefined) { + if (fn(k, this.table[k], context)) { + return true; + } + } + } + return false; + } + + public count(): number { return this.itemCount; } + + public lookup(key: string) { + var data = this.table[key]; + if (data != undefined) { + return data; + } + else { + return (null); + } + } + } + + // The resident table is expected to reference the same table object, whereas the + // transientTable may reference different objects over time + // REVIEW: WARNING: For performance reasons, neither the primary nor secondary table may be null + export class DualStringHashTable implements IHashTable { + + public insertPrimary = true; + + constructor (public primaryTable: IHashTable, + public secondaryTable: IHashTable) { } + + public getAllKeys(): string[]{ + return this.primaryTable.getAllKeys().concat(this.secondaryTable.getAllKeys()); + } + + public add(key: string, data): boolean { + if (this.insertPrimary) { + return this.primaryTable.add(key, data); + } + else { + return this.secondaryTable.add(key, data); + } + } + + public addOrUpdate(key: string, data): boolean { + if (this.insertPrimary) { + return this.primaryTable.addOrUpdate(key, data); + } + else { + return this.secondaryTable.addOrUpdate(key, data); + } + } + + public map(fn: (k: string, v, c) => void , context) { + this.primaryTable.map(fn, context); + this.secondaryTable.map(fn, context); + } + + public every(fn: (k: string, v, c) => boolean, context) { + return this.primaryTable.every(fn, context) && this.secondaryTable.every(fn, context); + } + + public some(fn: (k: string, v, c) => boolean, context) { + return this.primaryTable.some(fn, context) || this.secondaryTable.some(fn, context); + } + + public count() { + return this.primaryTable.count() + this.secondaryTable.count(); + } + + public lookup(key: string) { + var data = this.primaryTable.lookup(key); + if (data != undefined) { + return data; + } + else { + return this.secondaryTable.lookup(key); + } + } + } + + export function numberHashFn(key: number): number { + var c2 = 0x27d4eb2d; // a prime or an odd constant + key = (key ^ 61) ^ (key >>> 16); + key = key + (key << 3); + key = key ^ (key >>> 4); + key = key * c2; + key = key ^ (key >>> 15); + return key; + } + + export function combineHashes(key1: number, key2: number) { + return key2 ^ ((key1 >> 5) + key1); + } + + export class HashEntry { + public next: HashEntry; + + constructor (public key, public data) { } + } + + export class HashTable { + public itemCount: number = 0; + public table = new HashEntry[]; + + constructor (public size: number, public hashFn: (key) =>number, + public equalsFn: (key1, key2) =>boolean) { + for (var i: number = 0; i < this.size; i++) { + this.table[i] = null; + } + } + + public add(key, data): boolean { + var current: HashEntry; + var entry: HashEntry = new HashEntry(key, data); + var val: number = this.hashFn(key); + val = val % this.size; + + for (current = this.table[val]; current != null ; current = current.next) { + if (this.equalsFn(key, current.key)) { + return false; + } + } + entry.next = this.table[val]; + this.table[val] = entry; + this.itemCount++; + return true; + } + + public remove(key) { + var current: HashEntry; + var val: number = this.hashFn(key); + val = val % this.size; + var result = null; + var prevEntry: HashEntry = null; + + for (current = this.table[val]; current != null ; current = current.next) { + if (this.equalsFn(key, current.key)) { + result = current.data; + this.itemCount--; + if (prevEntry) { + prevEntry.next = current.next; + } + else { + this.table[val] = current.next; + } + break; + } + prevEntry = current; + } + return result; + } + + public count(): number { return this.itemCount; } + + public lookup(key) { + var current: HashEntry; + var val: number = this.hashFn(key); + val = val % this.size; + for (current = this.table[val]; current != null ; current = current.next) { + if (this.equalsFn(key, current.key)) { + return (current.data); + } + } + return (null); + } + } + + // Simple Hash table with list of keys and values matching each other at the given index + export class SimpleHashTable { + private keys = []; + private values = []; + + public lookup(key, findValue?: boolean) { + var searchArray = this.keys; + if (findValue) { + searchArray = this.values; + } + + for (var i = 0; i < searchArray.length; i++) { + if (searchArray[i] == key) { + return { + key: this.keys[i], + data: this.values[i], + }; + } + } + return null; + } + + public add(key, data): boolean { + var lookupData = this.lookup(key); + if (lookupData) { + return false; + } + + this.keys[this.keys.length] = key; + this.values[this.values.length] = data; + + return true; + } + } + +} + +//// [parserRealSource4.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +/// +var TypeScript; +(function (TypeScript) { + var BlockIntrinsics = (function () { + function BlockIntrinsics() { + this.prototype = undefined; + this.toString = undefined; + this.toLocaleString = undefined; + this.valueOf = undefined; + this.hasOwnProperty = undefined; + this.propertyIsEnumerable = undefined; + this.isPrototypeOf = undefined; + // initialize the 'constructor' field + this["constructor"] = undefined; + } + return BlockIntrinsics; + })(); + TypeScript.BlockIntrinsics = BlockIntrinsics; + var StringHashTable = (function () { + function StringHashTable() { + this.itemCount = 0; + this.table = (new BlockIntrinsics()); + } + StringHashTable.prototype.getAllKeys = function () { + var result = []; + for (var k in this.table) { + if (this.table[k] != undefined) { + result[result.length] = k; + } + } + return result; + }; + StringHashTable.prototype.add = function (key, data) { + if (this.table[key] != undefined) { + return false; + } + this.table[key] = data; + this.itemCount++; + return true; + }; + StringHashTable.prototype.addOrUpdate = function (key, data) { + if (this.table[key] != undefined) { + this.table[key] = data; + return false; + } + this.table[key] = data; + this.itemCount++; + return true; + }; + StringHashTable.prototype.map = function (fn, context) { + for (var k in this.table) { + var data = this.table[k]; + if (data != undefined) { + fn(k, this.table[k], context); + } + } + }; + StringHashTable.prototype.every = function (fn, context) { + for (var k in this.table) { + var data = this.table[k]; + if (data != undefined) { + if (!fn(k, this.table[k], context)) { + return false; + } + } + } + return true; + }; + StringHashTable.prototype.some = function (fn, context) { + for (var k in this.table) { + var data = this.table[k]; + if (data != undefined) { + if (fn(k, this.table[k], context)) { + return true; + } + } + } + return false; + }; + StringHashTable.prototype.count = function () { + return this.itemCount; + }; + StringHashTable.prototype.lookup = function (key) { + var data = this.table[key]; + if (data != undefined) { + return data; + } + else { + return (null); + } + }; + return StringHashTable; + })(); + TypeScript.StringHashTable = StringHashTable; + // The resident table is expected to reference the same table object, whereas the + // transientTable may reference different objects over time + // REVIEW: WARNING: For performance reasons, neither the primary nor secondary table may be null + var DualStringHashTable = (function () { + function DualStringHashTable(primaryTable, secondaryTable) { + this.primaryTable = primaryTable; + this.secondaryTable = secondaryTable; + this.insertPrimary = true; + } + DualStringHashTable.prototype.getAllKeys = function () { + return this.primaryTable.getAllKeys().concat(this.secondaryTable.getAllKeys()); + }; + DualStringHashTable.prototype.add = function (key, data) { + if (this.insertPrimary) { + return this.primaryTable.add(key, data); + } + else { + return this.secondaryTable.add(key, data); + } + }; + DualStringHashTable.prototype.addOrUpdate = function (key, data) { + if (this.insertPrimary) { + return this.primaryTable.addOrUpdate(key, data); + } + else { + return this.secondaryTable.addOrUpdate(key, data); + } + }; + DualStringHashTable.prototype.map = function (fn, context) { + this.primaryTable.map(fn, context); + this.secondaryTable.map(fn, context); + }; + DualStringHashTable.prototype.every = function (fn, context) { + return this.primaryTable.every(fn, context) && this.secondaryTable.every(fn, context); + }; + DualStringHashTable.prototype.some = function (fn, context) { + return this.primaryTable.some(fn, context) || this.secondaryTable.some(fn, context); + }; + DualStringHashTable.prototype.count = function () { + return this.primaryTable.count() + this.secondaryTable.count(); + }; + DualStringHashTable.prototype.lookup = function (key) { + var data = this.primaryTable.lookup(key); + if (data != undefined) { + return data; + } + else { + return this.secondaryTable.lookup(key); + } + }; + return DualStringHashTable; + })(); + TypeScript.DualStringHashTable = DualStringHashTable; + function numberHashFn(key) { + var c2 = 0x27d4eb2d; // a prime or an odd constant + key = (key ^ 61) ^ (key >>> 16); + key = key + (key << 3); + key = key ^ (key >>> 4); + key = key * c2; + key = key ^ (key >>> 15); + return key; + } + TypeScript.numberHashFn = numberHashFn; + function combineHashes(key1, key2) { + return key2 ^ ((key1 >> 5) + key1); + } + TypeScript.combineHashes = combineHashes; + var HashEntry = (function () { + function HashEntry(key, data) { + this.key = key; + this.data = data; + } + return HashEntry; + })(); + TypeScript.HashEntry = HashEntry; + var HashTable = (function () { + function HashTable(size, hashFn, equalsFn) { + this.size = size; + this.hashFn = hashFn; + this.equalsFn = equalsFn; + this.itemCount = 0; + this.table = new HashEntry[]; + for (var i = 0; i < this.size; i++) { + this.table[i] = null; + } + } + HashTable.prototype.add = function (key, data) { + var current; + var entry = new HashEntry(key, data); + var val = this.hashFn(key); + val = val % this.size; + for (current = this.table[val]; current != null; current = current.next) { + if (this.equalsFn(key, current.key)) { + return false; + } + } + entry.next = this.table[val]; + this.table[val] = entry; + this.itemCount++; + return true; + }; + HashTable.prototype.remove = function (key) { + var current; + var val = this.hashFn(key); + val = val % this.size; + var result = null; + var prevEntry = null; + for (current = this.table[val]; current != null; current = current.next) { + if (this.equalsFn(key, current.key)) { + result = current.data; + this.itemCount--; + if (prevEntry) { + prevEntry.next = current.next; + } + else { + this.table[val] = current.next; + } + break; + } + prevEntry = current; + } + return result; + }; + HashTable.prototype.count = function () { + return this.itemCount; + }; + HashTable.prototype.lookup = function (key) { + var current; + var val = this.hashFn(key); + val = val % this.size; + for (current = this.table[val]; current != null; current = current.next) { + if (this.equalsFn(key, current.key)) { + return (current.data); + } + } + return (null); + }; + return HashTable; + })(); + TypeScript.HashTable = HashTable; + // Simple Hash table with list of keys and values matching each other at the given index + var SimpleHashTable = (function () { + function SimpleHashTable() { + this.keys = []; + this.values = []; + } + SimpleHashTable.prototype.lookup = function (key, findValue) { + var searchArray = this.keys; + if (findValue) { + searchArray = this.values; + } + for (var i = 0; i < searchArray.length; i++) { + if (searchArray[i] == key) { + return { + key: this.keys[i], + data: this.values[i] + }; + } + } + return null; + }; + SimpleHashTable.prototype.add = function (key, data) { + var lookupData = this.lookup(key); + if (lookupData) { + return false; + } + this.keys[this.keys.length] = key; + this.values[this.values.length] = data; + return true; + }; + return SimpleHashTable; + })(); + TypeScript.SimpleHashTable = SimpleHashTable; +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource5.js b/tests/baselines/reference/parserRealSource5.js new file mode 100644 index 00000000000..9c64899fab7 --- /dev/null +++ b/tests/baselines/reference/parserRealSource5.js @@ -0,0 +1,129 @@ +//// [parserRealSource5.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + // TODO: refactor indent logic for use in emit + export class PrintContext { + public builder = ""; + public indent1 = " "; + public indentStrings: string[] = []; + public indentAmt = 0; + + constructor (public outfile: ITextWriter, public parser: Parser) { + } + + public increaseIndent() { + this.indentAmt++; + } + + public decreaseIndent() { + this.indentAmt--; + } + + public startLine() { + if (this.builder.length > 0) { + CompilerDiagnostics.Alert(this.builder); + } + var indentString = this.indentStrings[this.indentAmt]; + if (indentString === undefined) { + indentString = ""; + for (var i = 0; i < this.indentAmt; i++) { + indentString += this.indent1; + } + this.indentStrings[this.indentAmt] = indentString; + } + this.builder += indentString; + } + + public write(s) { + this.builder += s; + } + + public writeLine(s) { + this.builder += s; + this.outfile.WriteLine(this.builder); + this.builder = ""; + } + + } + + export function prePrintAST(ast: AST, parent: AST, walker: IAstWalker) { + var pc: PrintContext = walker.state; + + ast.print(pc); + pc.increaseIndent(); + return ast; + } + + + export function postPrintAST(ast: AST, parent: AST, walker: IAstWalker) { + var pc: PrintContext = walker.state; + pc.decreaseIndent(); + return ast; + } +} + +//// [parserRealSource5.js] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. +/// +var TypeScript; +(function (TypeScript) { + // TODO: refactor indent logic for use in emit + var PrintContext = (function () { + function PrintContext(outfile, parser) { + this.outfile = outfile; + this.parser = parser; + this.builder = ""; + this.indent1 = " "; + this.indentStrings = []; + this.indentAmt = 0; + } + PrintContext.prototype.increaseIndent = function () { + this.indentAmt++; + }; + PrintContext.prototype.decreaseIndent = function () { + this.indentAmt--; + }; + PrintContext.prototype.startLine = function () { + if (this.builder.length > 0) { + CompilerDiagnostics.Alert(this.builder); + } + var indentString = this.indentStrings[this.indentAmt]; + if (indentString === undefined) { + indentString = ""; + for (var i = 0; i < this.indentAmt; i++) { + indentString += this.indent1; + } + this.indentStrings[this.indentAmt] = indentString; + } + this.builder += indentString; + }; + PrintContext.prototype.write = function (s) { + this.builder += s; + }; + PrintContext.prototype.writeLine = function (s) { + this.builder += s; + this.outfile.WriteLine(this.builder); + this.builder = ""; + }; + return PrintContext; + })(); + TypeScript.PrintContext = PrintContext; + function prePrintAST(ast, parent, walker) { + var pc = walker.state; + ast.print(pc); + pc.increaseIndent(); + return ast; + } + TypeScript.prePrintAST = prePrintAST; + function postPrintAST(ast, parent, walker) { + var pc = walker.state; + pc.decreaseIndent(); + return ast; + } + TypeScript.postPrintAST = postPrintAST; +})(TypeScript || (TypeScript = {})); diff --git a/tests/baselines/reference/parserRealSource6.js b/tests/baselines/reference/parserRealSource6.js new file mode 100644 index 00000000000..e747b95e610 --- /dev/null +++ b/tests/baselines/reference/parserRealSource6.js @@ -0,0 +1,422 @@ +//// [parserRealSource6.ts] +// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. +// See LICENSE.txt in the project root for complete license information. + +/// + +module TypeScript { + export class TypeCollectionContext { + public script: Script = null; + + constructor (public scopeChain: ScopeChain, public checker: TypeChecker) { + } + } + + export class MemberScopeContext { + public type: Type = null; + public ast: AST = null; + public scope: SymbolScope; + public options = new AstWalkOptions(); + + constructor (public flow: TypeFlow, public pos: number, public matchFlag: ASTFlags) { + } + } + + export class EnclosingScopeContext { + + public scopeGetter: () => SymbolScope = null; + public objectLiteralScopeGetter: () => SymbolScope = null; + public scopeStartAST: AST = null; + public skipNextFuncDeclForClass = false; + public deepestModuleDecl: ModuleDeclaration = null; + public enclosingClassDecl: TypeDeclaration = null; + public enclosingObjectLit: UnaryExpression = null; + public publicsOnly = true; + public useFullAst = false; + private scriptFragment: Script; + + constructor (public logger: ILogger, + public script: Script, + public text: ISourceText, + public pos: number, + public isMemberCompletion: boolean) { + } + + public getScope(): SymbolScope { + return this.scopeGetter(); + } + + public getObjectLiteralScope(): SymbolScope { + return this.objectLiteralScopeGetter(); + } + + public getScopeAST() { + return this.scopeStartAST; + } + + public getScopePosition() { + return this.scopeStartAST.minChar; + } + + public getScriptFragmentStartAST(): AST { + return this.scopeStartAST; + } + + public getScriptFragmentPosition(): number { + return this.getScriptFragmentStartAST().minChar; + } + + public getScriptFragment(): Script { + if (this.scriptFragment == null) { + var ast = this.getScriptFragmentStartAST(); + var minChar = ast.minChar; + var limChar = (this.isMemberCompletion ? this.pos : this.pos + 1); + this.scriptFragment = TypeScript.quickParse(this.logger, ast, this.text, minChar, limChar, null/*errorCapture*/).Script; + } + return this.scriptFragment; + } + } + + export function preFindMemberScope(ast: AST, parent: AST, walker: IAstWalker) { + var memScope: MemberScopeContext = walker.state; + if (hasFlag(ast.flags, memScope.matchFlag) && ((memScope.pos < 0) || (memScope.pos == ast.limChar))) { + memScope.ast = ast; + if ((ast.type == null) && (memScope.pos >= 0)) { + memScope.flow.inScopeTypeCheck(ast, memScope.scope); + } + memScope.type = ast.type; + memScope.options.stopWalk(); + } + return ast; + } + + export function pushTypeCollectionScope(container: Symbol, + valueMembers: ScopedMembers, + ambientValueMembers: ScopedMembers, + enclosedTypes: ScopedMembers, + ambientEnclosedTypes: ScopedMembers, + context: TypeCollectionContext, + thisType: Type, + classType: Type, + moduleDecl: ModuleDeclaration) { + var builder = new SymbolScopeBuilder(valueMembers, ambientValueMembers, enclosedTypes, ambientEnclosedTypes, null, container); + var chain: ScopeChain = new ScopeChain(container, context.scopeChain, builder); + chain.thisType = thisType; + chain.classType = classType; + chain.moduleDecl = moduleDecl; + context.scopeChain = chain; + } + + export function popTypeCollectionScope(context: TypeCollectionContext) { + context.scopeChain = context.scopeChain.previous; + } + + export function preFindEnclosingScope(ast: AST, parent: AST, walker: IAstWalker) { + var context: EnclosingScopeContext = walker.state; + var minChar = ast.minChar; + var limChar = ast.limChar; + + // Account for the fact completion list may be called at the end of a file which + // is has not been fully re-parsed yet. + if (ast.nodeType == NodeType.Script && context.pos > limChar) + limChar = context.pos; + + if ((minChar <= context.pos) && + (limChar >= context.pos)) { + switch (ast.nodeType) { + case NodeType.Script: + var script =